From c75d143c72858bf82d566bea0f3759181831ff55 Mon Sep 17 00:00:00 2001 From: Logan Edmonds Date: Tue, 7 Feb 2023 13:29:44 -0600 Subject: [PATCH 1/2] added plugin for zooming images. added versioning --- docusaurus.config.js | 26 ++- package-lock.json | 43 ++++ package.json | 3 + versioned_docs/version-Dion/intro.md | 47 ++++ .../tutorial-basics/_category_.json | 8 + .../tutorial-basics/congratulations.md | 23 ++ .../tutorial-basics/create-a-blog-post.md | 34 +++ .../tutorial-basics/create-a-document.md | 57 +++++ .../tutorial-basics/create-a-page.md | 43 ++++ .../tutorial-basics/deploy-your-site.md | 31 +++ .../tutorial-basics/markdown-features.mdx | 146 +++++++++++++ .../tutorial-extras/_category_.json | 7 + .../img/docsVersionDropdown.png | Bin 0 -> 25427 bytes .../tutorial-extras/img/localeDropdown.png | Bin 0 -> 27841 bytes .../tutorial-extras/manage-docs-versions.md | 55 +++++ .../tutorial-extras/translate-your-site.md | 88 ++++++++ .../v1.10.2/Annulus/main-search-bar.md | 29 +++ .../v1.10.2/Annulus/overview-page.md | 64 ++++++ .../v1.10.2/Annulus/recent-blocks.md | 33 +++ .../Annulus/simplifying-the-blockchain.md | 25 +++ .../v1.10.2/Annulus/transactions-view.md | 63 ++++++ .../BaaS Portal Onboarding/adding-polys.md | 66 ++++++ .../choosing-a-network.md | 36 ++++ .../creating-a-project.md | 83 +++++++ .../creating-an-organization-1.md | 136 ++++++++++++ ...s-blockchain-as-a-service-baas-platform.md | 13 ++ .../BaaS Portal Onboarding/rate-limits.md | 38 ++++ .../registration-and-login.md | 56 +++++ .../BaaS Portal Onboarding/topl-api-keys.md | 51 +++++ .../two-factor-authentication.md | 92 ++++++++ .../BaaS Portal Onboarding/user-settings.md | 19 ++ .../broadcast-transaction.md | 7 + .../broadcasttransaction.md | 8 + .../Digital Asset Modeling Language/faq.md | 8 + .../get-latest-block-in-the-chain.md | 7 + .../getthelatestblockinthechain.md | 8 + .../get-all-transactions-from-mempool.md | 7 + .../getmempool.md | 8 + .../brambl-faqs-and-more-information.md | 19 ++ .../v1.10.2/Getting Started/daml.md | 37 ++++ .../v1.10.2/Getting Started/introduction-2.md | 36 ++++ .../Getting Started/sdks-and-api-libraries.md | 54 +++++ .../sdks-and-api-libraries/docker.md | 58 +++++ .../installing-bifrost.md | 180 ++++++++++++++++ .../sdks-and-api-libraries/overview.md | 27 +++ .../sdks-and-api-libraries/running-bifrost.md | 143 ++++++++++++ .../security-and-authentication.md | 84 ++++++++ .../Getting Started/simple-transfer.md | 204 ++++++++++++++++++ .../using-the-valhalla-test-network.md | 68 ++++++ .../v1.10.2/Introduction/about-topl.md | 22 ++ .../v1.10.2/Introduction/conclusion.md | 10 + .../v1.10.2/Introduction/contributors.md | 103 +++++++++ .../v1.10.2/Introduction/getting-started.md | 18 ++ .../performance-and-scalability.md | 10 + ...lockchain-technology-for-esg-compliance.md | 10 + .../Lookup Balances/lookup-balances.md | 7 + .../lookup-balances/lookupbalances.md | 8 + .../Lookup Block By Id/lookup-block-by-id.md | 7 + .../lookup-block-by-id/lookupblockbyid.md | 8 + .../lookup-block-by-height.md | 7 + .../lookupblockbyheight.md | 8 + .../lookup-transaction-in-mempool.md | 7 + .../lookuptransactioninmempool.md | 8 + .../Lookup Transaction/lookup-transaction.md | 7 + .../lookup-transaction/lookuptransaction.md | 8 + .../v1.10.2/New To Topl/block-rewards.md | 7 + .../v1.10.2/New To Topl/blockchain.md | 22 ++ .../how-topl-addresses-are-generated.md | 168 +++++++++++++++ .../v1.10.2/New To Topl/introduction-1.md | 12 ++ .../v1.10.2/New To Topl/networks.md | 12 ++ .../v1.10.2/New To Topl/signing.md | 33 +++ .../v1.10.2/New To Topl/transactions-1.md | 75 +++++++ .../wallet-cryptography-and-encoding.md | 46 ++++ .../v1.10.2/New To Topl/what-are-polys.md | 21 ++ .../Raw Asset Transfer/raw-asset-transfer.md | 7 + .../createrawassettransfer.md | 8 + .../Raw Poly Transfer/raw-poly-transfer.md | 7 + .../createrawpolytransfer.md | 8 + .../topl-protocol-release-notes.md | 32 +++ .../additional-resources.md | 15 ++ .../Still have questions-/bibliography.md | 10 + .../v1.10.2/Topl Addresses/install.md | 53 +++++ versioned_docs/version-Tetra/intro.md | 47 ++++ .../tutorial-basics/_category_.json | 8 + .../tutorial-basics/congratulations.md | 23 ++ .../tutorial-basics/create-a-blog-post.md | 34 +++ .../tutorial-basics/create-a-document.md | 57 +++++ .../tutorial-basics/create-a-page.md | 43 ++++ .../tutorial-basics/deploy-your-site.md | 31 +++ .../tutorial-basics/markdown-features.mdx | 146 +++++++++++++ .../tutorial-extras/_category_.json | 7 + .../img/docsVersionDropdown.png | Bin 0 -> 25427 bytes .../tutorial-extras/img/localeDropdown.png | Bin 0 -> 27841 bytes .../tutorial-extras/manage-docs-versions.md | 55 +++++ .../tutorial-extras/translate-your-site.md | 88 ++++++++ .../v1.10.2/Annulus/main-search-bar.md | 29 +++ .../v1.10.2/Annulus/overview-page.md | 64 ++++++ .../v1.10.2/Annulus/recent-blocks.md | 33 +++ .../Annulus/simplifying-the-blockchain.md | 25 +++ .../v1.10.2/Annulus/transactions-view.md | 63 ++++++ .../BaaS Portal Onboarding/adding-polys.md | 66 ++++++ .../choosing-a-network.md | 36 ++++ .../creating-a-project.md | 83 +++++++ .../creating-an-organization-1.md | 136 ++++++++++++ ...s-blockchain-as-a-service-baas-platform.md | 13 ++ .../BaaS Portal Onboarding/rate-limits.md | 38 ++++ .../registration-and-login.md | 56 +++++ .../BaaS Portal Onboarding/topl-api-keys.md | 51 +++++ .../two-factor-authentication.md | 92 ++++++++ .../BaaS Portal Onboarding/user-settings.md | 19 ++ .../broadcast-transaction.md | 7 + .../broadcasttransaction.md | 8 + .../Digital Asset Modeling Language/faq.md | 8 + .../get-latest-block-in-the-chain.md | 7 + .../getthelatestblockinthechain.md | 8 + .../get-all-transactions-from-mempool.md | 7 + .../getmempool.md | 8 + .../brambl-faqs-and-more-information.md | 19 ++ .../v1.10.2/Getting Started/daml.md | 37 ++++ .../v1.10.2/Getting Started/introduction-2.md | 36 ++++ .../Getting Started/sdks-and-api-libraries.md | 54 +++++ .../sdks-and-api-libraries/docker.md | 58 +++++ .../installing-bifrost.md | 180 ++++++++++++++++ .../sdks-and-api-libraries/overview.md | 27 +++ .../sdks-and-api-libraries/running-bifrost.md | 143 ++++++++++++ .../security-and-authentication.md | 84 ++++++++ .../Getting Started/simple-transfer.md | 204 ++++++++++++++++++ .../using-the-valhalla-test-network.md | 68 ++++++ .../v1.10.2/Introduction/about-topl.md | 22 ++ .../v1.10.2/Introduction/conclusion.md | 10 + .../v1.10.2/Introduction/contributors.md | 103 +++++++++ .../v1.10.2/Introduction/getting-started.md | 18 ++ .../performance-and-scalability.md | 10 + ...lockchain-technology-for-esg-compliance.md | 10 + .../Lookup Balances/lookup-balances.md | 7 + .../lookup-balances/lookupbalances.md | 8 + .../Lookup Block By Id/lookup-block-by-id.md | 7 + .../lookup-block-by-id/lookupblockbyid.md | 8 + .../lookup-block-by-height.md | 7 + .../lookupblockbyheight.md | 8 + .../lookup-transaction-in-mempool.md | 7 + .../lookuptransactioninmempool.md | 8 + .../Lookup Transaction/lookup-transaction.md | 7 + .../lookup-transaction/lookuptransaction.md | 8 + .../v1.10.2/New To Topl/block-rewards.md | 7 + .../v1.10.2/New To Topl/blockchain.md | 22 ++ .../how-topl-addresses-are-generated.md | 168 +++++++++++++++ .../v1.10.2/New To Topl/introduction-1.md | 12 ++ .../v1.10.2/New To Topl/networks.md | 12 ++ .../v1.10.2/New To Topl/signing.md | 33 +++ .../v1.10.2/New To Topl/transactions-1.md | 75 +++++++ .../wallet-cryptography-and-encoding.md | 46 ++++ .../v1.10.2/New To Topl/what-are-polys.md | 21 ++ .../Raw Asset Transfer/raw-asset-transfer.md | 7 + .../createrawassettransfer.md | 8 + .../Raw Poly Transfer/raw-poly-transfer.md | 7 + .../createrawpolytransfer.md | 8 + .../topl-protocol-release-notes.md | 32 +++ .../additional-resources.md | 15 ++ .../Still have questions-/bibliography.md | 10 + .../v1.10.2/Topl Addresses/install.md | 53 +++++ versioned_sidebars/version-Dion-sidebars.json | 8 + .../version-Tetra-sidebars.json | 8 + versions.json | 4 + 164 files changed, 6267 insertions(+), 5 deletions(-) create mode 100644 versioned_docs/version-Dion/intro.md create mode 100644 versioned_docs/version-Dion/tutorial-basics/_category_.json create mode 100644 versioned_docs/version-Dion/tutorial-basics/congratulations.md create mode 100644 versioned_docs/version-Dion/tutorial-basics/create-a-blog-post.md create mode 100644 versioned_docs/version-Dion/tutorial-basics/create-a-document.md create mode 100644 versioned_docs/version-Dion/tutorial-basics/create-a-page.md create mode 100644 versioned_docs/version-Dion/tutorial-basics/deploy-your-site.md create mode 100644 versioned_docs/version-Dion/tutorial-basics/markdown-features.mdx create mode 100644 versioned_docs/version-Dion/tutorial-extras/_category_.json create mode 100644 versioned_docs/version-Dion/tutorial-extras/img/docsVersionDropdown.png create mode 100644 versioned_docs/version-Dion/tutorial-extras/img/localeDropdown.png create mode 100644 versioned_docs/version-Dion/tutorial-extras/manage-docs-versions.md create mode 100644 versioned_docs/version-Dion/tutorial-extras/translate-your-site.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Annulus/main-search-bar.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Annulus/overview-page.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Annulus/recent-blocks.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Annulus/simplifying-the-blockchain.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Annulus/transactions-view.md create mode 100644 versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/adding-polys.md create mode 100644 versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/choosing-a-network.md create mode 100644 versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/creating-a-project.md create mode 100644 versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/creating-an-organization-1.md create mode 100644 versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/getting-started-with-topls-blockchain-as-a-service-baas-platform.md create mode 100644 versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/rate-limits.md create mode 100644 versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/registration-and-login.md create mode 100644 versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/topl-api-keys.md create mode 100644 versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/two-factor-authentication.md create mode 100644 versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/user-settings.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Broadcast Transaction/broadcast-transaction.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Broadcast Transaction/broadcast-transaction/broadcasttransaction.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Digital Asset Modeling Language/faq.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain/getthelatestblockinthechain.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Get Mempool/get-all-transactions-from-mempool.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Get Mempool/get-all-transactions-from-mempool/getmempool.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/brambl-faqs-and-more-information.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/daml.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/introduction-2.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/docker.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/installing-bifrost.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/overview.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/running-bifrost.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/security-and-authentication.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/simple-transfer.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/using-the-valhalla-test-network.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Introduction/about-topl.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Introduction/conclusion.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Introduction/contributors.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Introduction/getting-started.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Introduction/performance-and-scalability.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Introduction/why-use-blockchain-technology-for-esg-compliance.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Lookup Balances/lookup-balances.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Lookup Balances/lookup-balances/lookupbalances.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Lookup Block By Id/lookup-block-by-id.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Lookup Block By Id/lookup-block-by-id/lookupblockbyid.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Lookup Block by Height/lookup-block-by-height.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Lookup Block by Height/lookup-block-by-height/lookupblockbyheight.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool/lookuptransactioninmempool.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Lookup Transaction/lookup-transaction.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Lookup Transaction/lookup-transaction/lookuptransaction.md create mode 100644 versioned_docs/version-Dion/v1.10.2/New To Topl/block-rewards.md create mode 100644 versioned_docs/version-Dion/v1.10.2/New To Topl/blockchain.md create mode 100644 versioned_docs/version-Dion/v1.10.2/New To Topl/how-topl-addresses-are-generated.md create mode 100644 versioned_docs/version-Dion/v1.10.2/New To Topl/introduction-1.md create mode 100644 versioned_docs/version-Dion/v1.10.2/New To Topl/networks.md create mode 100644 versioned_docs/version-Dion/v1.10.2/New To Topl/signing.md create mode 100644 versioned_docs/version-Dion/v1.10.2/New To Topl/transactions-1.md create mode 100644 versioned_docs/version-Dion/v1.10.2/New To Topl/wallet-cryptography-and-encoding.md create mode 100644 versioned_docs/version-Dion/v1.10.2/New To Topl/what-are-polys.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Raw Asset Transfer/raw-asset-transfer.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Raw Asset Transfer/raw-asset-transfer/createrawassettransfer.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Raw Poly Transfer/raw-poly-transfer.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Raw Poly Transfer/raw-poly-transfer/createrawpolytransfer.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Release Notes/topl-protocol-release-notes.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Still have questions-/additional-resources.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Still have questions-/bibliography.md create mode 100644 versioned_docs/version-Dion/v1.10.2/Topl Addresses/install.md create mode 100644 versioned_docs/version-Tetra/intro.md create mode 100644 versioned_docs/version-Tetra/tutorial-basics/_category_.json create mode 100644 versioned_docs/version-Tetra/tutorial-basics/congratulations.md create mode 100644 versioned_docs/version-Tetra/tutorial-basics/create-a-blog-post.md create mode 100644 versioned_docs/version-Tetra/tutorial-basics/create-a-document.md create mode 100644 versioned_docs/version-Tetra/tutorial-basics/create-a-page.md create mode 100644 versioned_docs/version-Tetra/tutorial-basics/deploy-your-site.md create mode 100644 versioned_docs/version-Tetra/tutorial-basics/markdown-features.mdx create mode 100644 versioned_docs/version-Tetra/tutorial-extras/_category_.json create mode 100644 versioned_docs/version-Tetra/tutorial-extras/img/docsVersionDropdown.png create mode 100644 versioned_docs/version-Tetra/tutorial-extras/img/localeDropdown.png create mode 100644 versioned_docs/version-Tetra/tutorial-extras/manage-docs-versions.md create mode 100644 versioned_docs/version-Tetra/tutorial-extras/translate-your-site.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Annulus/main-search-bar.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Annulus/overview-page.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Annulus/recent-blocks.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Annulus/simplifying-the-blockchain.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Annulus/transactions-view.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/adding-polys.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/choosing-a-network.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/creating-a-project.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/creating-an-organization-1.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/getting-started-with-topls-blockchain-as-a-service-baas-platform.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/rate-limits.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/registration-and-login.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/topl-api-keys.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/two-factor-authentication.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/user-settings.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Broadcast Transaction/broadcast-transaction.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Broadcast Transaction/broadcast-transaction/broadcasttransaction.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Digital Asset Modeling Language/faq.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain/getthelatestblockinthechain.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Get Mempool/get-all-transactions-from-mempool.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Get Mempool/get-all-transactions-from-mempool/getmempool.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/brambl-faqs-and-more-information.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/daml.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/introduction-2.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/docker.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/installing-bifrost.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/overview.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/running-bifrost.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/security-and-authentication.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/simple-transfer.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/using-the-valhalla-test-network.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Introduction/about-topl.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Introduction/conclusion.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Introduction/contributors.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Introduction/getting-started.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Introduction/performance-and-scalability.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Introduction/why-use-blockchain-technology-for-esg-compliance.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Lookup Balances/lookup-balances.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Lookup Balances/lookup-balances/lookupbalances.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Lookup Block By Id/lookup-block-by-id.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Lookup Block By Id/lookup-block-by-id/lookupblockbyid.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Lookup Block by Height/lookup-block-by-height.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Lookup Block by Height/lookup-block-by-height/lookupblockbyheight.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool/lookuptransactioninmempool.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Lookup Transaction/lookup-transaction.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Lookup Transaction/lookup-transaction/lookuptransaction.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/New To Topl/block-rewards.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/New To Topl/blockchain.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/New To Topl/how-topl-addresses-are-generated.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/New To Topl/introduction-1.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/New To Topl/networks.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/New To Topl/signing.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/New To Topl/transactions-1.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/New To Topl/wallet-cryptography-and-encoding.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/New To Topl/what-are-polys.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Raw Asset Transfer/raw-asset-transfer.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Raw Asset Transfer/raw-asset-transfer/createrawassettransfer.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Raw Poly Transfer/raw-poly-transfer.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Raw Poly Transfer/raw-poly-transfer/createrawpolytransfer.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Release Notes/topl-protocol-release-notes.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Still have questions-/additional-resources.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Still have questions-/bibliography.md create mode 100644 versioned_docs/version-Tetra/v1.10.2/Topl Addresses/install.md create mode 100644 versioned_sidebars/version-Dion-sidebars.json create mode 100644 versioned_sidebars/version-Tetra-sidebars.json create mode 100644 versions.json diff --git a/docusaurus.config.js b/docusaurus.config.js index cfbe1a9..7266774 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -28,6 +28,9 @@ const config = { locales: ['en'], }, + plugins: [ + require.resolve('docusaurus-plugin-image-zoom') + ], presets: [ [ 'classic', @@ -57,6 +60,16 @@ const config = { themeConfig: /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ ({ + zoom: { + selector: '.markdown :not(em) > img', + background: { + light: 'rgb(255, 255, 255)', + dark: 'rgb(50, 50, 50)' + }, + config: { + // options you can specify via https://github.com/francoischalifour/medium-zoom#usage + } + }, navbar: { title: 'Topl Developer Portal', logo: { @@ -65,12 +78,15 @@ const config = { }, items: [ { - type: 'doc', - docId: 'intro', - position: 'left', - label: 'Tutorial', + type: 'docsVersionDropdown' }, - {to: '/blog', label: 'Blog', position: 'left'}, + // { + // type: 'doc', + // docId: 'intro', + // position: 'left', + // label: 'Tutorial', + // }, + // {to: '/blog', label: 'Blog', position: 'left'}, { href: 'https://github.com/topl/developer-portal', label: 'GitHub', diff --git a/package-lock.json b/package-lock.json index 77f2f8a..40f2c57 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,9 @@ "@docusaurus/preset-classic": "^2.3.1", "@mdx-js/react": "^1.6.22", "clsx": "^1.2.1", + "docusaurus-plugin-image-zoom": "^0.1.1", + "medium-zoom": "^1.0.8", + "plugin-image-zoom": "github:flexanalytics/plugin-image-zoom", "prism-react-renderer": "^1.3.5", "react": "^17.0.2", "react-dom": "^17.0.2" @@ -5400,6 +5403,14 @@ "node": ">=6" } }, + "node_modules/docusaurus-plugin-image-zoom": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/docusaurus-plugin-image-zoom/-/docusaurus-plugin-image-zoom-0.1.1.tgz", + "integrity": "sha512-cJXo5TKh9OR1gE4B5iS5ovLWYYDFwatqRm00iXFPOaShZG99l5tgkDKgbQPAwSL9wg4I+wz3aMwkOtDhMIpKDQ==", + "dependencies": { + "medium-zoom": "^1.0.6" + } + }, "node_modules/dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -7737,6 +7748,11 @@ "node": ">= 0.6" } }, + "node_modules/medium-zoom": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.0.8.tgz", + "integrity": "sha512-CjFVuFq/IfrdqesAXfg+hzlDKu6A2n80ZIq0Kl9kWjoHh9j1N9Uvk5X0/MmN0hOfm5F9YBswlClhcwnmtwz7gA==" + }, "node_modules/memfs": { "version": "3.4.12", "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz", @@ -8504,6 +8520,13 @@ "node": ">=4" } }, + "node_modules/plugin-image-zoom": { + "version": "0.0.0", + "resolved": "git+ssh://git@github.com/flexanalytics/plugin-image-zoom.git#6edf8e287dc64c8a4e1010fd36478316ac25ffeb", + "dependencies": { + "medium-zoom": "^1.0.4" + } + }, "node_modules/postcss": { "version": "8.4.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", @@ -16339,6 +16362,14 @@ "@leichtgewicht/ip-codec": "^2.0.1" } }, + "docusaurus-plugin-image-zoom": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/docusaurus-plugin-image-zoom/-/docusaurus-plugin-image-zoom-0.1.1.tgz", + "integrity": "sha512-cJXo5TKh9OR1gE4B5iS5ovLWYYDFwatqRm00iXFPOaShZG99l5tgkDKgbQPAwSL9wg4I+wz3aMwkOtDhMIpKDQ==", + "requires": { + "medium-zoom": "^1.0.6" + } + }, "dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -18048,6 +18079,11 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, + "medium-zoom": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.0.8.tgz", + "integrity": "sha512-CjFVuFq/IfrdqesAXfg+hzlDKu6A2n80ZIq0Kl9kWjoHh9j1N9Uvk5X0/MmN0hOfm5F9YBswlClhcwnmtwz7gA==" + }, "memfs": { "version": "3.4.12", "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz", @@ -18590,6 +18626,13 @@ } } }, + "plugin-image-zoom": { + "version": "git+ssh://git@github.com/flexanalytics/plugin-image-zoom.git#6edf8e287dc64c8a4e1010fd36478316ac25ffeb", + "from": "plugin-image-zoom@github:flexanalytics/plugin-image-zoom", + "requires": { + "medium-zoom": "^1.0.4" + } + }, "postcss": { "version": "8.4.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", diff --git a/package.json b/package.json index 928d136..a3d6272 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,9 @@ "@docusaurus/preset-classic": "^2.3.1", "@mdx-js/react": "^1.6.22", "clsx": "^1.2.1", + "docusaurus-plugin-image-zoom": "^0.1.1", + "medium-zoom": "^1.0.8", + "plugin-image-zoom": "github:flexanalytics/plugin-image-zoom", "prism-react-renderer": "^1.3.5", "react": "^17.0.2", "react-dom": "^17.0.2" diff --git a/versioned_docs/version-Dion/intro.md b/versioned_docs/version-Dion/intro.md new file mode 100644 index 0000000..8a2e69d --- /dev/null +++ b/versioned_docs/version-Dion/intro.md @@ -0,0 +1,47 @@ +--- +sidebar_position: 1 +--- + +# Tutorial Intro + +Let's discover **Docusaurus in less than 5 minutes**. + +## Getting Started + +Get started by **creating a new site**. + +Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new)**. + +### What you'll need + +- [Node.js](https://nodejs.org/en/download/) version 16.14 or above: + - When installing Node.js, you are recommended to check all checkboxes related to dependencies. + +## Generate a new site + +Generate a new Docusaurus site using the **classic template**. + +The classic template will automatically be added to your project after you run the command: + +```bash +npm init docusaurus@latest my-website classic +``` + +You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor. + +The command also installs all necessary dependencies you need to run Docusaurus. + +## Start your site + +Run the development server: + +```bash +cd my-website +npm run start +``` + +The `cd` command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there. + +The `npm run start` command builds your website locally and serves it through a development server, ready for you to view at http://localhost:3000/. + +Open `docs/intro.md` (this page) and edit some lines: the site **reloads automatically** and displays your changes. diff --git a/versioned_docs/version-Dion/tutorial-basics/_category_.json b/versioned_docs/version-Dion/tutorial-basics/_category_.json new file mode 100644 index 0000000..2e6db55 --- /dev/null +++ b/versioned_docs/version-Dion/tutorial-basics/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Tutorial - Basics", + "position": 2, + "link": { + "type": "generated-index", + "description": "5 minutes to learn the most important Docusaurus concepts." + } +} diff --git a/versioned_docs/version-Dion/tutorial-basics/congratulations.md b/versioned_docs/version-Dion/tutorial-basics/congratulations.md new file mode 100644 index 0000000..04771a0 --- /dev/null +++ b/versioned_docs/version-Dion/tutorial-basics/congratulations.md @@ -0,0 +1,23 @@ +--- +sidebar_position: 6 +--- + +# Congratulations! + +You have just learned the **basics of Docusaurus** and made some changes to the **initial template**. + +Docusaurus has **much more to offer**! + +Have **5 more minutes**? Take a look at **[versioning](../tutorial-extras/manage-docs-versions.md)** and **[i18n](../tutorial-extras/translate-your-site.md)**. + +Anything **unclear** or **buggy** in this tutorial? [Please report it!](https://github.com/facebook/docusaurus/discussions/4610) + +## What's next? + +- Read the [official documentation](https://docusaurus.io/) +- Modify your site configuration with [`docusaurus.config.js`](https://docusaurus.io/docs/api/docusaurus-config) +- Add navbar and footer items with [`themeConfig`](https://docusaurus.io/docs/api/themes/configuration) +- Add a custom [Design and Layout](https://docusaurus.io/docs/styling-layout) +- Add a [search bar](https://docusaurus.io/docs/search) +- Find inspirations in the [Docusaurus showcase](https://docusaurus.io/showcase) +- Get involved in the [Docusaurus Community](https://docusaurus.io/community/support) diff --git a/versioned_docs/version-Dion/tutorial-basics/create-a-blog-post.md b/versioned_docs/version-Dion/tutorial-basics/create-a-blog-post.md new file mode 100644 index 0000000..ea472bb --- /dev/null +++ b/versioned_docs/version-Dion/tutorial-basics/create-a-blog-post.md @@ -0,0 +1,34 @@ +--- +sidebar_position: 3 +--- + +# Create a Blog Post + +Docusaurus creates a **page for each blog post**, but also a **blog index page**, a **tag system**, an **RSS** feed... + +## Create your first Post + +Create a file at `blog/2021-02-28-greetings.md`: + +```md title="blog/2021-02-28-greetings.md" +--- +slug: greetings +title: Greetings! +authors: + - name: Joel Marcey + title: Co-creator of Docusaurus 1 + url: https://github.com/JoelMarcey + image_url: https://github.com/JoelMarcey.png + - name: Sébastien Lorber + title: Docusaurus maintainer + url: https://sebastienlorber.com + image_url: https://github.com/slorber.png +tags: [greetings] +--- + +Congratulations, you have made your first post! + +Feel free to play around and edit this post as much you like. +``` + +A new blog post is now available at [http://localhost:3000/blog/greetings](http://localhost:3000/blog/greetings). diff --git a/versioned_docs/version-Dion/tutorial-basics/create-a-document.md b/versioned_docs/version-Dion/tutorial-basics/create-a-document.md new file mode 100644 index 0000000..ffddfa8 --- /dev/null +++ b/versioned_docs/version-Dion/tutorial-basics/create-a-document.md @@ -0,0 +1,57 @@ +--- +sidebar_position: 2 +--- + +# Create a Document + +Documents are **groups of pages** connected through: + +- a **sidebar** +- **previous/next navigation** +- **versioning** + +## Create your first Doc + +Create a Markdown file at `docs/hello.md`: + +```md title="docs/hello.md" +# Hello + +This is my **first Docusaurus document**! +``` + +A new document is now available at [http://localhost:3000/docs/hello](http://localhost:3000/docs/hello). + +## Configure the Sidebar + +Docusaurus automatically **creates a sidebar** from the `docs` folder. + +Add metadata to customize the sidebar label and position: + +```md title="docs/hello.md" {1-4} +--- +sidebar_label: 'Hi!' +sidebar_position: 3 +--- + +# Hello + +This is my **first Docusaurus document**! +``` + +It is also possible to create your sidebar explicitly in `sidebars.js`: + +```js title="sidebars.js" +module.exports = { + tutorialSidebar: [ + 'intro', + // highlight-next-line + 'hello', + { + type: 'category', + label: 'Tutorial', + items: ['tutorial-basics/create-a-document'], + }, + ], +}; +``` diff --git a/versioned_docs/version-Dion/tutorial-basics/create-a-page.md b/versioned_docs/version-Dion/tutorial-basics/create-a-page.md new file mode 100644 index 0000000..20e2ac3 --- /dev/null +++ b/versioned_docs/version-Dion/tutorial-basics/create-a-page.md @@ -0,0 +1,43 @@ +--- +sidebar_position: 1 +--- + +# Create a Page + +Add **Markdown or React** files to `src/pages` to create a **standalone page**: + +- `src/pages/index.js` → `localhost:3000/` +- `src/pages/foo.md` → `localhost:3000/foo` +- `src/pages/foo/bar.js` → `localhost:3000/foo/bar` + +## Create your first React Page + +Create a file at `src/pages/my-react-page.js`: + +```jsx title="src/pages/my-react-page.js" +import React from 'react'; +import Layout from '@theme/Layout'; + +export default function MyReactPage() { + return ( + +

My React page

+

This is a React page

+
+ ); +} +``` + +A new page is now available at [http://localhost:3000/my-react-page](http://localhost:3000/my-react-page). + +## Create your first Markdown Page + +Create a file at `src/pages/my-markdown-page.md`: + +```mdx title="src/pages/my-markdown-page.md" +# My Markdown page + +This is a Markdown page +``` + +A new page is now available at [http://localhost:3000/my-markdown-page](http://localhost:3000/my-markdown-page). diff --git a/versioned_docs/version-Dion/tutorial-basics/deploy-your-site.md b/versioned_docs/version-Dion/tutorial-basics/deploy-your-site.md new file mode 100644 index 0000000..1c50ee0 --- /dev/null +++ b/versioned_docs/version-Dion/tutorial-basics/deploy-your-site.md @@ -0,0 +1,31 @@ +--- +sidebar_position: 5 +--- + +# Deploy your site + +Docusaurus is a **static-site-generator** (also called **[Jamstack](https://jamstack.org/)**). + +It builds your site as simple **static HTML, JavaScript and CSS files**. + +## Build your site + +Build your site **for production**: + +```bash +npm run build +``` + +The static files are generated in the `build` folder. + +## Deploy your site + +Test your production build locally: + +```bash +npm run serve +``` + +The `build` folder is now served at [http://localhost:3000/](http://localhost:3000/). + +You can now deploy the `build` folder **almost anywhere** easily, **for free** or very small cost (read the **[Deployment Guide](https://docusaurus.io/docs/deployment)**). diff --git a/versioned_docs/version-Dion/tutorial-basics/markdown-features.mdx b/versioned_docs/version-Dion/tutorial-basics/markdown-features.mdx new file mode 100644 index 0000000..6b3aaaa --- /dev/null +++ b/versioned_docs/version-Dion/tutorial-basics/markdown-features.mdx @@ -0,0 +1,146 @@ +--- +sidebar_position: 4 +--- + +# Markdown Features + +Docusaurus supports **[Markdown](https://daringfireball.net/projects/markdown/syntax)** and a few **additional features**. + +## Front Matter + +Markdown documents have metadata at the top called [Front Matter](https://jekyllrb.com/docs/front-matter/): + +```text title="my-doc.md" +// highlight-start +--- +id: my-doc-id +title: My document title +description: My document description +slug: /my-custom-url +--- +// highlight-end + +## Markdown heading + +Markdown text with [links](./hello.md) +``` + +## Links + +Regular Markdown links are supported, using url paths or relative file paths. + +```md +Let's see how to [Create a page](/create-a-page). +``` + +```md +Let's see how to [Create a page](./create-a-page.md). +``` + +**Result:** Let's see how to [Create a page](./create-a-page.md). + +## Images + +Regular Markdown images are supported. + +You can use absolute paths to reference images in the static directory (`static/img/docusaurus.png`): + +```md +![Docusaurus logo](/img/docusaurus.png) +``` + +![Docusaurus logo](/img/docusaurus.png) + +You can reference images relative to the current file as well, as shown in [the extra guides](../tutorial-extras/manage-docs-versions.md). + +## Code Blocks + +Markdown code blocks are supported with Syntax highlighting. + + ```jsx title="src/components/HelloDocusaurus.js" + function HelloDocusaurus() { + return ( +

Hello, Docusaurus!

+ ) + } + ``` + +```jsx title="src/components/HelloDocusaurus.js" +function HelloDocusaurus() { + return

Hello, Docusaurus!

; +} +``` + +## Admonitions + +Docusaurus has a special syntax to create admonitions and callouts: + + :::tip My tip + + Use this awesome feature option + + ::: + + :::danger Take care + + This action is dangerous + + ::: + +:::tip My tip + +Use this awesome feature option + +::: + +:::danger Take care + +This action is dangerous + +::: + +## MDX and React Components + +[MDX](https://mdxjs.com/) can make your documentation more **interactive** and allows using any **React components inside Markdown**: + +```jsx +export const Highlight = ({children, color}) => ( + { + alert(`You clicked the color ${color} with label ${children}`) + }}> + {children} + +); + +This is Docusaurus green ! + +This is Facebook blue ! +``` + +export const Highlight = ({children, color}) => ( + { + alert(`You clicked the color ${color} with label ${children}`); + }}> + {children} + +); + +This is Docusaurus green ! + +This is Facebook blue ! diff --git a/versioned_docs/version-Dion/tutorial-extras/_category_.json b/versioned_docs/version-Dion/tutorial-extras/_category_.json new file mode 100644 index 0000000..a8ffcc1 --- /dev/null +++ b/versioned_docs/version-Dion/tutorial-extras/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "Tutorial - Extras", + "position": 3, + "link": { + "type": "generated-index" + } +} diff --git a/versioned_docs/version-Dion/tutorial-extras/img/docsVersionDropdown.png b/versioned_docs/version-Dion/tutorial-extras/img/docsVersionDropdown.png new file mode 100644 index 0000000000000000000000000000000000000000..97e4164618b5f8beda34cfa699720aba0ad2e342 GIT binary patch literal 25427 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 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-Dion/tutorial-extras/img/localeDropdown.png b/versioned_docs/version-Dion/tutorial-extras/img/localeDropdown.png new file mode 100644 index 0000000000000000000000000000000000000000..e257edc1f932985396bf59584c7ccfaddf955779 GIT binary patch literal 27841 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 JrC|B>e*nH7H{}2T literal 0 HcmV?d00001 diff --git a/versioned_docs/version-Dion/tutorial-extras/manage-docs-versions.md b/versioned_docs/version-Dion/tutorial-extras/manage-docs-versions.md new file mode 100644 index 0000000..e12c3f3 --- /dev/null +++ b/versioned_docs/version-Dion/tutorial-extras/manage-docs-versions.md @@ -0,0 +1,55 @@ +--- +sidebar_position: 1 +--- + +# Manage Docs Versions + +Docusaurus can manage multiple versions of your docs. + +## Create a docs version + +Release a version 1.0 of your project: + +```bash +npm run docusaurus docs:version 1.0 +``` + +The `docs` folder is copied into `versioned_docs/version-1.0` and `versions.json` is created. + +Your docs now have 2 versions: + +- `1.0` at `http://localhost:3000/docs/` for the version 1.0 docs +- `current` at `http://localhost:3000/docs/next/` for the **upcoming, unreleased docs** + +## Add a Version Dropdown + +To navigate seamlessly across versions, add a version dropdown. + +Modify the `docusaurus.config.js` file: + +```js title="docusaurus.config.js" +module.exports = { + themeConfig: { + navbar: { + items: [ + // highlight-start + { + type: 'docsVersionDropdown', + }, + // highlight-end + ], + }, + }, +}; +``` + +The docs version dropdown appears in your navbar: + +![Docs Version Dropdown](./img/docsVersionDropdown.png) + +## Update an existing version + +It is possible to edit versioned docs in their respective folder: + +- `versioned_docs/version-1.0/hello.md` updates `http://localhost:3000/docs/hello` +- `docs/hello.md` updates `http://localhost:3000/docs/next/hello` diff --git a/versioned_docs/version-Dion/tutorial-extras/translate-your-site.md b/versioned_docs/version-Dion/tutorial-extras/translate-your-site.md new file mode 100644 index 0000000..caeaffb --- /dev/null +++ b/versioned_docs/version-Dion/tutorial-extras/translate-your-site.md @@ -0,0 +1,88 @@ +--- +sidebar_position: 2 +--- + +# Translate your site + +Let's translate `docs/intro.md` to French. + +## Configure i18n + +Modify `docusaurus.config.js` to add support for the `fr` locale: + +```js title="docusaurus.config.js" +module.exports = { + i18n: { + defaultLocale: 'en', + locales: ['en', 'fr'], + }, +}; +``` + +## Translate a doc + +Copy the `docs/intro.md` file to the `i18n/fr` folder: + +```bash +mkdir -p i18n/fr/docusaurus-plugin-content-docs/current/ + +cp docs/intro.md i18n/fr/docusaurus-plugin-content-docs/current/intro.md +``` + +Translate `i18n/fr/docusaurus-plugin-content-docs/current/intro.md` in French. + +## Start your localized site + +Start your site on the French locale: + +```bash +npm run start -- --locale fr +``` + +Your localized site is accessible at [http://localhost:3000/fr/](http://localhost:3000/fr/) and the `Getting Started` page is translated. + +:::caution + +In development, you can only use one locale at a same time. + +::: + +## Add a Locale Dropdown + +To navigate seamlessly across languages, add a locale dropdown. + +Modify the `docusaurus.config.js` file: + +```js title="docusaurus.config.js" +module.exports = { + themeConfig: { + navbar: { + items: [ + // highlight-start + { + type: 'localeDropdown', + }, + // highlight-end + ], + }, + }, +}; +``` + +The locale dropdown now appears in your navbar: + +![Locale Dropdown](./img/localeDropdown.png) + +## Build your localized site + +Build your site for a specific locale: + +```bash +npm run build -- --locale fr +``` + +Or build your site to include all the locales at once: + +```bash +npm run build +``` diff --git a/versioned_docs/version-Dion/v1.10.2/Annulus/main-search-bar.md b/versioned_docs/version-Dion/v1.10.2/Annulus/main-search-bar.md new file mode 100644 index 0000000..f9531bd --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Annulus/main-search-bar.md @@ -0,0 +1,29 @@ +--- +title: "Main Search Bar" +slug: "main-search-bar" +hidden: false +createdAt: "2021-08-23T17:46:57.382Z" +updatedAt: "2021-08-23T20:11:42.664Z" +--- +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/4057ab9-Screen_Shot_2021-08-23_at_1.47.14_PM.png", + "Screen Shot 2021-08-23 at 1.47.14 PM.png", + 3360, + 746, + "#8fd9cd" + ] + } + ] +} +[/block] +#Main Search Bar + +The main search bar is where you can look up something specific right away. As a block explorer user, you can perform a search for either a block (by height or by block hash) or a transaction (by ID or transaction hash). + +One common use case that you can try on the block explorer is checking on the status of a transaction. (We always recommend the copy and paste method to prevent typing errors!) + +Within a block, there can be hundreds of approved transactions, so we do not recommend searching for a specific transaction by scrolling through the pages (of course, unless you want to!). \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Annulus/overview-page.md b/versioned_docs/version-Dion/v1.10.2/Annulus/overview-page.md new file mode 100644 index 0000000..dea238a --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Annulus/overview-page.md @@ -0,0 +1,64 @@ +--- +title: "Overview Page" +slug: "overview-page" +hidden: false +createdAt: "2021-08-23T17:41:05.303Z" +updatedAt: "2021-11-10T19:03:43.293Z" +--- +#Overview Page +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/9ff1fab-Screen_Shot_2021-08-23_at_1.41.54_PM.png", + "Screen Shot 2021-08-23 at 1.41.54 PM.png", + 3356, + 2094, + "#c2e5df" + ] + } + ] +} +[/block] +Upon landing on the Annulus site, you'll be greeted by the overview and a few important elements. On the left side of the header, you'll see the Topl logo which takes you back to this overview screen at any time! + +The **average block time** refers to the average time to forge a new block over a 24-hour period. This number changes depending on difficulty parameters of a given network. + +**Unconfirmed Transactions** are transactions that have been broadcast but are yet to be confirmed by forgers. Since transactions are confirmed in blocks (batches), every transaction will at first be unconfirmed. However, if a transaction remains unconfirmed for more than a few minutes, it may mean that the transaction fee paid with the transaction was too low. Transaction fees act as an incentive for forgers to process a transaction, so a fee below the network minimum would result in the transaction never being confirmed into a block. + +Beginning with the first column in the Blocks section, "Block Height" refers to the index of a given block, which number block is it in the chain. The next column provides the number of transaction present in each block. The last column records the date and time it was completed (in YYYY/MM/DD hh:mm:ss format). + +Should you want to view more details on a specific block, clicking on the block height will take you to all the transactions contained in that specific block. +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/d1a983b-Screen_Shot_2021-08-23_at_1.42.48_PM.png", + "Screen Shot 2021-08-23 at 1.42.48 PM.png", + 3356, + 172, + "#fcfdfc" + ] + } + ] +} +[/block] + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/e0459c0-Screen_Shot_2021-08-23_at_2.28.00_PM.png", + "Screen Shot 2021-08-23 at 2.28.00 PM.png", + 2392, + 1722, + "#f7f8f8" + ] + } + ] +} +[/block] +As an example, we have clicked on block [62855](https://toplnet.annulus.topl.services/#/block/234AsNJz29kQzRpemokJi6ANDHbCxcS4Nv6iDC16B9TTt) to gain more information. The first part shows the block header and its summary, In the "Transactions" subheader below, alphanumeric transaction IDs will be listed. The first two transactions in a Topl block are the block reward sent to the forger or set of forgers who generated the block. This is why you will see that those transactions have 0 in fees. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Annulus/recent-blocks.md b/versioned_docs/version-Dion/v1.10.2/Annulus/recent-blocks.md new file mode 100644 index 0000000..003821f --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Annulus/recent-blocks.md @@ -0,0 +1,33 @@ +--- +title: "Recent Blocks" +slug: "recent-blocks" +hidden: false +createdAt: "2021-08-23T18:13:52.046Z" +updatedAt: "2021-08-23T20:13:25.986Z" +--- +# Recent Blocks + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/48a834d-Screen_Shot_2021-08-23_at_1.54.30_PM.png", + "Screen Shot 2021-08-23 at 1.54.30 PM.png", + 2388, + 1660, + "#f0f2f0" + ] + } + ] +} +[/block] +To the right of the overview screen on the header, there is a button from which you can search recent blocks. Blocks are chained to each other in the order that they are created and always contain the unique hash number of the previous block. + +This view of the blocks is constantly updated with newer blocks entering at the top and pushing older blocks down the list. The blocks are sized (in KB) proportionally to the number of transactions executed, so the larger the size, the more transactions that were included in the block. This size depends on how many people have been trying to transact during a certain period, and how many of those transactions have been validated. + +A transaction becomes more "final" as new blocks are added onto the existing chain since the deeper a block is buried, the more likely that everyone on the network will have heard about it. + +The table also contains the <>, block ID, timestamp when the block was forged, and the generator that was used to forge the block. + +Once blocks are created, the records that they contain are permanent and can't be altered or deleted. This is what makes blockchain technology tamper-proof as only new data can be added on the block. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Annulus/simplifying-the-blockchain.md b/versioned_docs/version-Dion/v1.10.2/Annulus/simplifying-the-blockchain.md new file mode 100644 index 0000000..a5674e7 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Annulus/simplifying-the-blockchain.md @@ -0,0 +1,25 @@ +--- +title: "Simplifying the Blockchain" +slug: "simplifying-the-blockchain" +hidden: false +createdAt: "2021-08-23T17:39:03.391Z" +updatedAt: "2021-11-10T19:03:07.106Z" +--- +# Simplifying the Blockchain + +If you'd like to become confident in using a Topl block explorer and fully understand its functionality, we're here to guide you through Annulus. To start off, you can open up [Annulus](https://toplnet.annulus.topl.services/) in your web browser and follow along using the guide. + +First, what's a block explorer? To provide some basic terms, a <> is a blockchain search engine that allows you to search for a particular piece of information on the blockchain. The activities carried out on blockchains are known as <>s, which occur when crypto-tokens are sent to and from wallet addresses. Blocks on the blockchain are collections of transactions that were processed and approved by special nodes known as forgers. + +To recap, a <> is an online tool to view all transactions that have taken place on the blockchain, the current network hash rate, and transactions between blockchain addresses, amongst other useful information. You can think of it as a window into the blockchain world, giving you the opportunity to observe what's happening there. + +Our block explorer visually displays block activity as it is confirmed in real-time, which allows users to take a more engaged approach to the data. Users can look up a particular block height, and inspect it at another level by viewing the transaction details that make up a block. + +# Who uses a Block Explorer? +For one, developers and users, who often exchange polys and assets will utilize the block explorer to check on the status of their transactions. Once users initiate transactions, they will receive an automatically generated transaction hash and can use it to look up details of the transaction and whether it was successful. + +Forgers will use the block explorer to confirm significant block activity, especially to check if they have been successful in generating a particular block, which means they will receive the block reward. + +Have fun on your blockchain journey! Our aim for the block explorer is a no-frills, user-friendly tool that gives users easy access to data from multiple search vantages and provides a more intuitive understanding of the data. + +On the next page, let's take a deeper look at the <> \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Annulus/transactions-view.md b/versioned_docs/version-Dion/v1.10.2/Annulus/transactions-view.md new file mode 100644 index 0000000..6d0c7ca --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Annulus/transactions-view.md @@ -0,0 +1,63 @@ +--- +title: "Transactions View" +slug: "transactions-view" +hidden: false +createdAt: "2021-08-23T18:32:25.766Z" +updatedAt: "2021-08-23T20:17:20.313Z" +--- +#Transactions View +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/ef637eb-Screen_Shot_2021-08-23_at_2.32.39_PM.png", + "Screen Shot 2021-08-23 at 2.32.39 PM.png", + 2566, + 1652, + "#edf2f2" + ] + } + ] +} +[/block] +To take a closer look at data on the Topl Blockchain, select the "Transactions" tab to see the individual transactions within their associated block. <>s refer to the act of sending or receiving crypto-tokens. Each transaction ID (also known as TxHash or TxId) is generated by a hashing algorithm according to the information contained in that particular transaction. This transaction ID can be used as a digital proof of payment/transfer. Altering that info in any way causes the transaction ID to change and alerts users that the data has been tampered with. Recipients of a Topl transaction may also look up the transaction by its transaction ID to see its status and confirm whether tokens have arrived in their addresses. + +Sending tokens requires a transaction fee in the same way that it costs money to make a bank transfer. The key difference is that crypto fees are very minimal compared to traditional bank fees. In fact, whether you send 6 million polys or 6 polys, the fee remains constant. +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/cac392c-Screen_Shot_2021-08-23_at_2.42.23_PM.png", + "Screen Shot 2021-08-23 at 2.42.23 PM.png", + 3358, + 2090, + "#fbfbfb" + ] + } + ] +} +[/block] +Clicking on any TxId on the Transactions page brings you to a dedicated page for that specific transaction. On this transaction page, you will be able to see whether the transaction has been successfully confirmed or is still pending (under Status). + +As a general rule, a secure transaction requires 30 blocks to be confirmed above the block in which the transaction was included, which takes about 7.5 minutes on the Topl Blockchain (one block is generated every 15 seconds or so). + +#Topl Transactions: UTXO's + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/f2f8128-Screen_Shot_2021-08-23_at_2.51.11_PM.png", + "Screen Shot 2021-08-23 at 2.51.11 PM.png", + 2308, + 770, + "#f8f9f9" + ] + } + ] +} +[/block] +In this Topl transaction, you'll notice two outputs that contain two different amounts under the "Outputs" sections. A Topl address does not only contain one balance per token, but is rather made up of multiple, smaller balances known as unspent transaction outputs, or UTXO's which create a lump sum that makes up an overall balance. These UTXO's remain intact until a transaction is initiated and then are randomly selected one by one until it meets or exceeds the transaction amount for the given token. At this moment, unspent transaction outputs are broken up so that the correct amount, including fees, are distributed while the remaining value of the tokens are returned to the sender as change or consolidation. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/adding-polys.md b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/adding-polys.md new file mode 100644 index 0000000..e4a1628 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/adding-polys.md @@ -0,0 +1,66 @@ +--- +title: "Adding Polys" +slug: "adding-polys" +hidden: false +createdAt: "2021-03-23T17:52:21.694Z" +updatedAt: "2021-07-06T19:09:37.056Z" +--- +As discussed previously, polys are required in order to submit transactions to the Topl blockchain. + + +[block:callout] +{ + "type": "danger", + "title": "Note:", + "body": "You must have an address in order to add polys to your address. You can follow our documentation to generate an address using one of our Brambl libraries (see the Topl Blockchain Address page)" +} +[/block] +# How can I get Polys? +It's actually pretty easy, follow these steps: + +#First Step + After logging into the BaaS Portal, go to Settings and find the Purchase Polys section on the page. From there, you can transfer funds to the address directly through the UI! + + + + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/3a0e7a6-Topl_-_API_Console.gif", + "Topl - API Console.gif", + 640, + 400, + "#e1ecea" + ] + } + ] +} +[/block] +You will need to wait until the funds are confirmed to use them. The confirmation status will look something like this: +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/885bf20-Screen_Shot_2021-07-06_at_12.55.27_PM.png", + "Screen Shot 2021-07-06 at 12.55.27 PM.png", + 2296, + 354, + "#fafafa" + ] + } + ] +} +[/block] + +[block:callout] +{ + "type": "info", + "title": "Note:", + "body": "Polys used on our testing network our free, however, you will have to pay to acquire polys on our main network. In addition, you can only request one faucet transaction on the testnet for every 6 hours. This ensures that there will be enough test polys for all of our users." +} +[/block] +If you are wanting to add polys to an account on our mainnet (toplnet), please follow the steps above but use the mainnet dropdown instead of the valhalla dropdown. You should be redirected to stripe where you can purchase polys on the main network. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/choosing-a-network.md b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/choosing-a-network.md new file mode 100644 index 0000000..6acf8ab --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/choosing-a-network.md @@ -0,0 +1,36 @@ +--- +title: "Choosing a Network" +slug: "choosing-a-network" +hidden: false +createdAt: "2021-11-11T19:42:32.238Z" +updatedAt: "2021-11-11T19:47:04.058Z" +--- +#Choosing a network +Use one of the following endpoints as url to which you will connect with a Brambl library or directly via cURL + + +[block:callout] +{ + "type": "info", + "title": "Note", + "body": "Be sure to replace `YOUR-PROJECT-ID` with a Project ID from your [BaaS Dashboard](https://topl.services)" +} +[/block] + +[block:parameters] +{ + "data": { + "h-0": "Network", + "h-1": "Connection Supported", + "h-2": "URL", + "0-0": "Mainnet", + "0-1": "JSON_RPC over HTTPS", + "0-2": "https://vertx.topl.services/mainnet/YOUR-PROJECT-ID", + "1-0": "Valhalla", + "1-1": "JSON_RPC over HTTPS", + "1-2": "https://vertx.topl.services/valhalla/YOUR-PROJECT-ID" + }, + "cols": 3, + "rows": 2 +} +[/block] \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/creating-a-project.md b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/creating-a-project.md new file mode 100644 index 0000000..3f0a331 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/creating-a-project.md @@ -0,0 +1,83 @@ +--- +title: "Creating a Project" +slug: "creating-a-project" +hidden: false +createdAt: "2021-03-22T21:00:33.504Z" +updatedAt: "2022-03-29T14:36:04.395Z" +--- +There are so many different use cases that can be explored using Topl's blockchain, however, the first step will always be creating a project. + +## Creating a new project for an organization + +To begin interfacing with the Topl blockchain, you'll once again go to the menu on the left-hand side of the screen and click on your Organization Name. From the Organization Page, navigate to projects from where you should find a "Create New Project" button on the right hand side. + + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/22cb408-organization_project_2.gif", + "organization_project_2.gif", + 640, + 344, + "#f6f8f6" + ] + } + ] +} +[/block] +Once you have clicked on the create new project button, you will be shown a screen where you can enter the project name in addition to being able to select which Topl BaaS Offerings you want to add to the project (Torus or Genus). +[block:callout] +{ + "type": "info", + "title": "Torus and Genus", + "body": "Torus enables you to send information to the Topl network while Genus allows you to listen for a response, useful as blockchains are asynchronous. Genus is still under development and should be released later on this year." +} +[/block] +## Projects Page + +From here, you will have access to your projects dashboard. You will be able to view the services for which your projects have been created (Torus/Genus), monitor request activity statistics and the ability to manage your projects for your organization. + +If you are running out of project space within your organization, you can always choose to update your subscription plan at the bottom of this page! + +## Individual Project Page + +You can view any project that is a part of your organization through the view button on the right hand side of the box containing the project. +From here, you'll notice a few main features that are provided for you +- You can see data for your project and filter by network in addition to date. You also have the option to download this data. +- You have the ability to view the API key for both the mainnet and the testnet in addition to your number of daily requests remaining. +- Finally, you can regenerate the API-keys using the button at the bottom. + +If you need to, there is the option to delete your project as well and start over from the individual project page in the bottom right hand corner. + +There are some use cases that fall outside of the scope of an organization. You can also interact with +<> by creating a personal project. + +## Creating a personal project + +To begin a personal project, navigate to the left side bar and click on the Personal Tab then Create New Project. +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/45cb081-personal_project_2.gif", + "personal_project_2.gif", + 640, + 344, + "#f4f8f5" + ] + } + ] +} +[/block] +From here you will see the project settings page appear with the following information: + +1.) The project ID +2.) The traffic for that project (can modify the specific date range for the data) +3.) The API keys for each blockchain network + - These are used to access the blockchain via the API. + - These API keys can be regenerated using the "Re-generate Torus Keys" button. + +Finally, if the project is no longer needed, it can be deleted by pressing the delete project button in the bottom right hand corner to free up space for more personal projects. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/creating-an-organization-1.md b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/creating-an-organization-1.md new file mode 100644 index 0000000..2cc9fd7 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/creating-an-organization-1.md @@ -0,0 +1,136 @@ +--- +title: "Creating an Organization" +slug: "creating-an-organization-1" +hidden: false +createdAt: "2021-03-22T18:26:47.395Z" +updatedAt: "2021-07-20T14:24:04.570Z" +--- +## Organization Creation + +Organizations are useful to store and manage project details for your company or organization. To create a new organization, your may simply open your side-menu on the right and click the "Create New Organization" button. + + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/29b4b16-remove_enrique_1.gif", + "remove_enrique_1.gif", + 640, + 358, + "#f7f8f6" + ] + } + ] +} +[/block] +## Organization Basics + +After creating the organization, you can then add the name for the organization as well as the email linked to the organization. This email will only be used for information purposes to inform the organization about updates to our services and will not be sold to any third parties. +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/9a11f17-organization_basics_2.gif", + "organization_basics_2.gif", + 640, + 344, + "#f7f8f6" + ] + } + ] +} +[/block] +## Organization Real-World Address Onboarding + +The admin can then add the real world-address to the organization +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/064bd51-mailing_address_2.gif", + "mailing_address_2.gif", + 640, + 344, + "#f7f9f7" + ] + } + ] +} +[/block] + +[block:callout] +{ + "type": "warning", + "body": "Please note that the real-world address has no correlation to the address that is used to make transactions on the Topl Blockchain.", + "title": "Real-world address vs blockchain address" +} +[/block] +## Choose a subscription option + +The next step will be to choose a subscription option out of the following three options depending on your organization's needs and capability for growth. + +* Startup + - For small-scale initiatives and startups with a high growth potential +* Professional + - Mid-market challengers and clients with existing platforms +* Enterprise + - Market leaders and enterprise clients with existing platforms + +### Billing Information + - Our billing is handled by Stripe, so an admin that chooses one of our paid options should go to Stripe to enter the payment information + +## Polys +- Polys are the cryptocurrency that is used to pay for transactions on the Topl Blockchain network. +- Each transaction on the Topl Blockchain takes a certain number of nanopolys (10^-9 polys) in order to make a transaction. +- Please reach out to Chris Georgen at for special deals on polys. +- Please look at the tutorial for [Adding Polys](doc:adding-polys) for more detailed instructions +[block:callout] +{ + "type": "info", + "body": "You may see language referring to \"Transaction Credits\". Note that this is a synonym for polys and that we are working to deprecate this term." +} +[/block] + +[block:callout] +{ + "type": "info", + "body": "Why do transaction fees exist? \n- Forgers on the Topl Network stake arbits to validate transactions. These transactions are bundled in blocks by forgers and get appended to the Blockchain\n- Once a transaction is part of a block on the Topl Blockchain it is considered confirmed, and the more blocks that are forged on top of the block that contains the transaction, the lower the likelihood of the transaction being modified. \n- In return for their service, forgers receive a block reward for each block as well as the sum of all transaction fees users attached to their transactions \n-The transaction fee is currently configured at 1 poly, but once decentralization commences, the transaction fee will be based on the market value of a transaction.", + "title": "Transaction Fees" +} +[/block] +## User Creation + +Owners for organizations that have a Professional subscription can create new users to be associated with an organization. + +## Editing an Organization + +Once you have created your organization, any admin can return to view its information or update the information at any time. + +To begin, simply open your list of organizations and choose the Organization that you wish to view or edit. +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/17e5c3b-edit_organization_2.gif", + "edit_organization_2.gif", + 640, + 344, + "#f6faf7" + ] + } + ] +} +[/block] +From your organization's settings page, (shown in the snippet above), you'll be able to do any of the following: + +1.) Update your Organization's Basic Information +2.) Update your Organization's Mailing Address +3.) Change Subscription +4.) Load Polys into an Address +5.) Add Team Members (Professional Subscription Required) +6.) Manage Projects \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/getting-started-with-topls-blockchain-as-a-service-baas-platform.md b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/getting-started-with-topls-blockchain-as-a-service-baas-platform.md new file mode 100644 index 0000000..ecb9d2b --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/getting-started-with-topls-blockchain-as-a-service-baas-platform.md @@ -0,0 +1,13 @@ +--- +title: "Getting Started With Topl's BaaS" +slug: "getting-started-with-topls-blockchain-as-a-service-baas-platform" +excerpt: "Step by step tutorial to get your application running using Topl's state of the art BaaS offerings!" +hidden: false +createdAt: "2021-03-22T15:59:58.983Z" +updatedAt: "2021-04-15T14:00:41.776Z" +--- +Welcome to the Topl <> platform documentation :owlbert-reading: + +In this brief guide, we'll walk you through how to leverage our managed node solution for connecting to the Topl blockchain so that you can access information about specific products at any point in the supply chain and provide others not only reports of <> claims but tangible proof of them. + +This documentation will follow the flow of a developer that will be onboarding an organization and creating projects that will interface with Topl's network through <>. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/rate-limits.md b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/rate-limits.md new file mode 100644 index 0000000..4e209ad --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/rate-limits.md @@ -0,0 +1,38 @@ +--- +title: "Rate and Quota Limits" +slug: "rate-limits" +excerpt: "You can call the Topl API as much as you need to make, sign, and verify transactions. However, there are limits to the number of calls that you can make." +hidden: false +createdAt: "2021-03-25T20:08:20.466Z" +updatedAt: "2021-03-29T14:48:01.326Z" +--- +All of Topl's blockchain [API endpoints](https://documenter.getpostman.com/view/2571679/Tz5p5HfD) require [authentication](https://topl.readme.io/v1.3.0/docs/security-and-authentication). Topl BaaS API allows performing requests according to your [subscription](https://www.topl.co/solutions) + +#Rate Limiting + +Rate limiting of the API is based on the client basis and apply to any API call. The rate limit is currently set at 25 requests per five second interval. + +The Topl BaaS API quota limit window is one day. See below how each of our three plans offers different rate limiting per day window + +# Rate Limiting Overview + +[block:parameters] +{ + "data": { + "h-0": "Plan Name", + "h-1": "API Quota Limit", + "0-0": "Startup", + "0-1": "20000 Requests per Day per Project per Network", + "1-0": "Professional", + "1-1": "100000 Requests per Day Per Project Per Network", + "2-0": "Enterprise", + "2-1": "1000000 Requests per Day Per Project Per Network" + }, + "cols": 2, + "rows": 3 +} +[/block] +# How to avoid being quota limited +If you're reaching the quota limit, options to improve performance include restructuring the architecture of the integration, and/or upgrading to Professional or Enterprise Tier. + +Clients that exceed the aforementioned rates will cause the API to return a HTTP 429 response. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/registration-and-login.md b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/registration-and-login.md new file mode 100644 index 0000000..f367568 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/registration-and-login.md @@ -0,0 +1,56 @@ +--- +title: "Registration and Login" +slug: "registration-and-login" +hidden: false +createdAt: "2021-03-22T16:32:04.887Z" +updatedAt: "2021-10-12T20:02:53.528Z" +--- +[block:callout] +{ + "type": "info", + "title": "Note:", + "body": "For this tutorial, please visit our BaaS portal website at [BaaS](https://beta.topl.services)." +} +[/block] +## <> Portal Registration + +In order to access <> functionality, a user must first register with Topl. + + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/986178a-registration_2.gif", + "registration_2.gif", + 640, + 344, + "#f7f8f6" + ] + } + ] +} +[/block] +After the completion of the registration flow, an email will be sent to you to verify your information + + + +# Login + +Once you have received your verification email from us, you can go ahead and begin using your account. Go to the [<> Portal](https://beta.topl.services/) and enter your email and password. +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/e2ccaf4-login_2.gif", + "login_2.gif", + 640, + 344, + "#f4f7f5" + ] + } + ] +} +[/block] \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/topl-api-keys.md b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/topl-api-keys.md new file mode 100644 index 0000000..c440634 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/topl-api-keys.md @@ -0,0 +1,51 @@ +--- +title: "Topl API Keys" +slug: "topl-api-keys" +hidden: false +createdAt: "2021-04-01T21:43:27.915Z" +updatedAt: "2022-03-29T14:33:28.295Z" +--- +All requests submitted through BaaS require an API key. This allows our service to authenticate your account to enforce API quotas. + +It is mandatory that you sign up for a free API key which allows for many advantages: +* a **high request rate** and concurrent request limit +* **fast** responses with few retries and timeouts +* useful **metric tracking** for performance tuning and to analyze your customer behavior +* Access to our Genus offerings including the ability to query archived data and advanced logging capabilities (not yet released) +[block:callout] +{ + "type": "warning", + "title": "How to sign up for API Keys", + "body": "You can sign up for API keys by creating a project detailed in the guide below." +} +[/block] +#Authenticating using a Project Id + +BaaS Vertx API requires a valid `Project Id` to be included with your request traffic. This identifier should be appended to the request URL. + + +[block:code] +{ + "codes": [ + { + "code": "https://vertx.topl.services/${network}/YOUR-PROJECT-ID", + "language": "curl" + } + ] +} +[/block] +#Authenticating using a ProjectId and API Key + +As additional protection for your request traffic, an API key is required to access our API. Please ensure that you keep your `API KEY` a secret! + + +[block:code] +{ + "codes": [ + { + "code": "curl --header `x-api-key:YOUR-API-KEY` \\\nhttps://vertx.topl.services/${network}/YOUR-PROJECT-ID", + "language": "curl" + } + ] +} +[/block] \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/two-factor-authentication.md b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/two-factor-authentication.md new file mode 100644 index 0000000..a0a7f5f --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/two-factor-authentication.md @@ -0,0 +1,92 @@ +--- +title: "Two Factor Authentication" +slug: "two-factor-authentication" +hidden: false +createdAt: "2021-08-13T17:42:26.363Z" +updatedAt: "2021-08-13T20:45:38.933Z" +--- +# Two Factor Authentication for BaaS Users + +##*Two-factor authentication is an extra layer of security for your BaaS user account designed to ensure that you're the only person that can access your account, even if someone knows your password.* + + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/295c98d-Screen_Shot_2021-08-13_at_1.55.38_PM.png", + "Screen Shot 2021-08-13 at 1.55.38 PM.png", + 3360, + 2096, + "#fafbfb" + ] + } + ] +} +[/block] +# How it works + +With two-factor authentication, only you can access your account. When you want to sign into your BaaS account, you'll need to provide two pieces of information -- your password and the six-digit verification code that's automatically displayed on your authenticator application. By entering the code, you're verifying that it is you that is logging in. + +Because your password alone is no longer enough to access your account, two-factor authentication dramatically improves the security of your BaaS user account and all of the information that you store with Topl. + +## Verification Codes +A verification code is a temporary code generated by an authenticator application and is requested when you sign into BaaS. + +Note that a verification code is different than your password. + +# Set up two-factor authentication for your BaaS account + You can follow these steps to turn on two-factor authentication for your account +1.) Go to Settings. +2.) Click on "Enable two factor authentication" +3.) Download one of our supported authenticator apps + - Authy + - 1Password + - Microsoft Authenticator + - Google Authenticator + and use it to scan the QR code. +4.) Use the 6 digit code generated by the application to verify your application and turn on two factor authentication. +5.) Save the recovery codes somewhere safe. + +This is a list of 20 codes generated during the configuration of 2FA. These codes are a single time use only. New recovery codes can be generated if needed, however previous recovery codes would not work after this step. + +# What to remember when you use two-factor authentication +Two-factor authentication significantly improves the security of your BaaS account. After you turn it on, signing into your account will require both your password and access to your verified authenticator application. To keep your account as secure as possible and help ensure you never lose access, there are a few simple guidelines you should follow: +- Remember your BaaS password. +- Download the authenticator app on all of your devices and verify with all devices. +- Keep your trusted device physically secure. + +# Manage your account +You can manage your 2FA settings and other account information from your BaaS Account page. + +# Frequently asked questions +Need help? You might find the answer to your question below. + +## What if I forget my password? +You can reset of change your password when you follow these steps. + +### If logged into BaaS +1.) Go to Settings +2.) Click on Change Password +3.) Type new password into the New Password and Confirm New Password fields + +### From the login page +1.) Click on "forgot your password" +2.) Type in the email for your account +3.) Click on the reset my password link that should be sent to your email. + +## What if I can't access my authenticator application? +If you're signing in and don't have your authenticator application handy that can display verification codes, you can then use the recovery codes that were generated when you enabled two-factor authentication. +Simply click on "Enter recovery code" on the two-factor authentication screen, and enter one of your recovery codes. + +## If I can't sign in, how do I regain access to my account? +If you can't sign in, receive verification codes, or access your recovery codes, you can request account recovery to regain access to your account. Account recovery is our process designed to get you back into your account as quickly as possible while denying access to anyone who might be pretending to be you. It might take a few days, or longer, depending on what specific account information you can provide to verify your identity. + +You can begin the account recovery process by emailing support@topl.me with your BaaS username and a description of the issue. We will then reach out to you in the next couple of days to begin the manual recovery process. + +## Do I need to remember any security questions? +No. With two-factor authentication, you don't need to remember any security questions. We verify your identity exclusively using your password and verification codes. + +## Can I turn off two-factor authentication after I've turned it on? +If you already use two-factor authentication, you can turn it off. Just open your settings and click the disable button. Keep in mind, this makes your account less secure and means that you are potentially putting your information at higher risk. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/user-settings.md b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/user-settings.md new file mode 100644 index 0000000..6872bdb --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/user-settings.md @@ -0,0 +1,19 @@ +--- +title: "User Settings" +slug: "user-settings" +hidden: true +createdAt: "2021-03-23T17:13:06.763Z" +updatedAt: "2021-04-06T17:34:21.829Z" +--- +## User Settings + +Once users have finished the registration process, they can update their details in the settings. This will ensure that users will have the highest level of support and guidance possible during the initial phases of the Topl launch. + +Users can find the settings by clicking on Settings in the left-hand navigation bar. + + +From here, the user will see a menu which will allow you to update your information so that Topl will be able to provide the highest quality service for our users. + +## Change Password + +From the user settings menu, you can also change your password. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Broadcast Transaction/broadcast-transaction.md b/versioned_docs/version-Dion/v1.10.2/Broadcast Transaction/broadcast-transaction.md new file mode 100644 index 0000000..d3e5c34 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Broadcast Transaction/broadcast-transaction.md @@ -0,0 +1,7 @@ +--- +title: "Broadcast Transaction" +slug: "broadcast-transaction" +hidden: false +createdAt: "2021-04-06T16:55:04.744Z" +updatedAt: "2021-04-06T16:55:04.744Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/Broadcast Transaction/broadcast-transaction/broadcasttransaction.md b/versioned_docs/version-Dion/v1.10.2/Broadcast Transaction/broadcast-transaction/broadcasttransaction.md new file mode 100644 index 0000000..fdbc1e7 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Broadcast Transaction/broadcast-transaction/broadcasttransaction.md @@ -0,0 +1,8 @@ +--- +title: "Broadcast Transaction" +slug: "broadcasttransaction" +excerpt: "#### Summary\nBroadcast transaction\n\n#### Type\nRemote -- Route must be used in conjunction with an external key manager service.\n\n#### Description\nPlace specified signed transaction into the mempool and broadcast to other nodes\n\n#### Notes\n- Currently only enabled for `AssetCreation` and `AssetTransfer` transactions\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|--------|-----------|---------------------|-------------------------------------------------------------------------------|\n| tx | object | Required | A full formatted transaction JSON object (prototype transaction + signatures) |" +hidden: false +createdAt: "2021-04-06T16:55:04.857Z" +updatedAt: "2021-04-06T16:55:04.857Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/Digital Asset Modeling Language/faq.md b/versioned_docs/version-Dion/v1.10.2/Digital Asset Modeling Language/faq.md new file mode 100644 index 0000000..50dfc50 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Digital Asset Modeling Language/faq.md @@ -0,0 +1,8 @@ +--- +title: "FAQ" +slug: "faq" +excerpt: "Frequently Asked Questions about Topl's integration with the DAML smart contract language" +hidden: false +createdAt: "2022-11-28T19:30:11.348Z" +updatedAt: "2022-11-30T15:53:47.535Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain.md b/versioned_docs/version-Dion/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain.md new file mode 100644 index 0000000..355b364 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain.md @@ -0,0 +1,7 @@ +--- +title: "Get Latest Block in the Chain" +slug: "get-latest-block-in-the-chain" +hidden: false +createdAt: "2021-04-06T16:57:51.857Z" +updatedAt: "2021-04-06T16:57:51.857Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain/getthelatestblockinthechain.md b/versioned_docs/version-Dion/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain/getthelatestblockinthechain.md new file mode 100644 index 0000000..09a5c73 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain/getthelatestblockinthechain.md @@ -0,0 +1,8 @@ +--- +title: "Get the latest block in the chain" +slug: "getthelatestblockinthechain" +excerpt: "#### Summary\nRetrieve the best block\n\n#### Description\nFind information about the current state of the chain including height, score, bestBlockId, etc\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|--------------------|-----------|---------------------|-------------|\n| --None specified-- | | | |" +hidden: false +createdAt: "2021-04-06T16:57:51.967Z" +updatedAt: "2021-04-06T16:57:51.967Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/Get Mempool/get-all-transactions-from-mempool.md b/versioned_docs/version-Dion/v1.10.2/Get Mempool/get-all-transactions-from-mempool.md new file mode 100644 index 0000000..aa1e03d --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Get Mempool/get-all-transactions-from-mempool.md @@ -0,0 +1,7 @@ +--- +title: "Get all Transactions from Mempool" +slug: "get-all-transactions-from-mempool" +hidden: false +createdAt: "2021-04-06T17:05:11.525Z" +updatedAt: "2021-04-06T17:05:11.525Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/Get Mempool/get-all-transactions-from-mempool/getmempool.md b/versioned_docs/version-Dion/v1.10.2/Get Mempool/get-all-transactions-from-mempool/getmempool.md new file mode 100644 index 0000000..74b8bdd --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Get Mempool/get-all-transactions-from-mempool/getmempool.md @@ -0,0 +1,8 @@ +--- +title: "Get Mempool" +slug: "getmempool" +excerpt: "#### Summary\nGet the first 100 transactions in the mempool (sorted by fee amount)\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|--------------------|-----------|---------------------|-------------|\n| --None specified-- | | | |" +hidden: false +createdAt: "2021-04-06T17:05:11.640Z" +updatedAt: "2021-04-06T17:05:11.640Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/brambl-faqs-and-more-information.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/brambl-faqs-and-more-information.md new file mode 100644 index 0000000..583529c --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Getting Started/brambl-faqs-and-more-information.md @@ -0,0 +1,19 @@ +--- +title: "Brambl FAQs and Future Developments" +slug: "brambl-faqs-and-more-information" +hidden: false +createdAt: "2021-03-25T17:54:51.584Z" +updatedAt: "2021-11-10T19:11:27.590Z" +--- +# BramblPy + +Python 3 implementation of Topl's API library. Currently in pre-alpha release, and slated for public availability by late Q4 2021. Please contact us for early access. + +# Key Generation and Transaction Signing + +While Topl provides full access to its blockchain network through our Blockchain-as-a-Service (BaaS) hosted API, there is certain functionality that must be executed off chain as part of your application itself. + +Therefore, in addition to being able to call all routes comprising the BaaS API, Brambl enables you to both generate and manage your key files as well as sign transactions. + +#Smart Contracts +Topl plans on providing functionality for smart contracts off the chain by the end of Q2 2021 and smart contracts on chain by the end of Q3 2021. Please contact us if you are interested in learning more! \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/daml.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/daml.md new file mode 100644 index 0000000..18a131f --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Getting Started/daml.md @@ -0,0 +1,37 @@ +--- +title: "DAML Smart Contracts" +slug: "daml" +excerpt: "Interacting with the Topl blockchain using DAML smart contracts" +hidden: false +createdAt: "2022-09-20T12:25:10.499Z" +updatedAt: "2022-09-20T14:16:02.510Z" +--- +[block:api-header] +{ + "title": "Smart Contracts on the Topl Blockchain" +} +[/block] +Topl has integrated the [Digital Asset modeling Language (DAML)](https://docs.daml.com/) as its first smart contract platform for creating and using native assets on the blockchain. As a public and permissionless blockchain, we are utilized the open-source implementation of DAML to bring a secure way to create and deploy off-chain smart contracts that still maintain the same level of cryptographic proofs and asset management that you would find in on-chain smart contracts like Solidity and Rust. + +[block:api-header] +{ + "title": "First Steps" +} +[/block] +### Setting up DAML + +  **[Install](https://docs.daml.com/getting-started/installation.html)** the DAML SDK and VSCode editor integration. + +After successfully installing the DAML SDK, the Participant Node built for facilitating transactions needs to be installed to interact with the Topl Blockchain nodes. + +### Setting up a Participant Node + +  The **[Daml Bifrost Module](https://github.com/Topl/daml-bifrost-module)** installs a Bifrost Participant Node and example deployable smart contract. + +After installation, the participant node and example smart contract need to be compiled in order to run an instance of the off-chain contract. + +### Deploying a smart contract + +  **[Deploy](https://github.com/Topl/daml-bifrost-module#2-compile)** by compiling and starting the participant node. + +Compiling and starting the DAML sandbox will deploy the smart contract to the participant node and allow users to interact with the smart contract. Using the DAML Navigator tool provides an easy-to-use interface for interacting with deployed contracts. diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/introduction-2.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/introduction-2.md new file mode 100644 index 0000000..6c43b40 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Getting Started/introduction-2.md @@ -0,0 +1,36 @@ +--- +title: "Introduction" +slug: "introduction-2" +hidden: false +createdAt: "2021-03-30T14:36:47.065Z" +updatedAt: "2022-09-20T14:18:07.496Z" +--- +# What you need to bring +To get the most out of the Topl Developer Portal, you should have programming experience and a basic understanding of blockchain concepts of Topl such as UTxO, transactions, addresses, key derivation, and networking. + +If you are unfamiliar with these terms, start with technical concepts, and you can complete the getting started course afterward. + +# Topl is different +If you have experience with other blockchain platforms and want to start building on Topl, it is vital to know its differences: + +* It makes sense to get your head around the concept of an UTxO +* Assets on Topl are not built with smart contracts. Instead, assets are native and live on the ledger. The protocol treats them as first-class citizens, similar to our cryptocurrency <>s. It is quite different from our peers that don’t have native assets and need to use a smart contract to send assets. + +#What you can do on Topl today +You can mint, send, and receive native assets, in addition to polys. + +#Why build on Topl? +* Topl offers a better infrastructure to build products because it is faster, more secure, and cost-effective. +* Topl offers accurate cost predictability when it comes to transactions. There are no auctions for transaction fees. +* Topl has an energetic community. If you stick to specific standards, we are keen to try out and engage with new products. Participating now makes you a first mover. +* Topl is a proof-of-stake blockchain. By design, it consumes much less energy and computational power. +* Topl is built with the rigor of high-assurance formal development methods. The consensus mechanism Ouroboros (currently under development) was delivered with several peer-reviewed papers presented in top-tier conferences and publications in cybersecurity and cryptography. If you build on Topl, you build on this foundation. + +#What you can build on Topl today +* You can integrate Topl into existing websites and services. +* You can issue native assets and mint unique assets to be used as NFTs. +* You can add metadata to transactions to give transactions a story, a background or even an identity. +* You can prove the existence of a file, text or any other data at a specific point in time with asset metadata. You can even use asset metadata to validate and verify external physical products and genuine articles. + +# Where to Start +* Begin by deploying your first [DAML](doc:daml) smart contract and interacting with native assets directly on the chain! \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries.md new file mode 100644 index 0000000..53e03f9 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries.md @@ -0,0 +1,54 @@ +--- +title: "SDKs and API Libraries" +slug: "sdks-and-api-libraries" +hidden: false +createdAt: "2021-08-31T18:33:22.917Z" +updatedAt: "2022-09-20T14:23:10.107Z" +--- +[block:callout] +{ + "type": "danger", + "body": "Warning: The Topl SDK libraries for the Dion mainnet and testnet, Toplnet and Valhalla respectively, are currently deprecated in order to focus new development on the new version of the Topl blockchain, Tetra. The Dion SDK libraries are usable, but it is highly recommended to focus new development through the [DAML](doc:daml) smart contract integration.", + "title": "# Deprecated" +} +[/block] +#Overview + +Topl has a collection of tools which makes it easier to integrate with the Topl blockchain. Depending on the use-cases you have, you may use any of the components below. + +#Getting Started +To get started, checkout the [📘 Topl User Guide](doc:introduction-2) + +#Components + +## SDKs/ Open Source Libraries + +[block:parameters] +{ + "data": { + "h-0": "name/link", + "h-1": "description", + "0-0": "[BramblJs](https://www.npmjs.com/package/brambljs)", + "0-1": "Contains everything that you need for addresses and creating transactions in Javascript.", + "1-0": "[BramblSc](https://github.com/Topl/Bifrost/tree/main/brambl)", + "1-1": "Contains everything that you need for addresses and creating transactions in Scala.", + "2-0": "[BramblPy](https://github.com/Topl/BramblPy)", + "2-1": "Contains everything that you need for addresses and creating transactions in Python. Currently in pre-release (is not recommended for production environments)", + "3-0": "[BramblDart](https://github.com/Topl/BramblDart)", + "3-1": "Contains everything that you need to manage addresses and create transactions in Dart. Currently in pre-release (it is not recommended for production environments)" + }, + "cols": 2, + "rows": 4 +} +[/block] +# Recipes + +Please see [Recipes](https://topl.readme.io/recipes) for examples on how to use the above resources. + +# API Reference + +If you are interested in seeing the low level JSON-RPC API to directly interact with the Topl Blockchain, please see the documentation located [here](https://topl.readme.io/reference). + +# Contributing + +See [Contributors](doc:contributors) \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/docker.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/docker.md new file mode 100644 index 0000000..02679fe --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/docker.md @@ -0,0 +1,58 @@ +--- +title: "Docker" +slug: "docker" +hidden: false +createdAt: "2021-10-08T19:20:42.368Z" +updatedAt: "2021-10-08T20:04:06.351Z" +--- +Docker builds of `bifrost` are available on [DockerHub](https://hub.docker.com/r/toplprotocol/bifrost/tags) + +## Downloading the docker image + +To get the latest release of `bifrost`, run: + ``` docker pull toplprotocol/bifrost:{{versionId}} ``` + +## Running the Docker container for `bifrost` +To get a list of the basic CLI arguments, use +``` +docker run --rm toplprotocol/bifrost:{{versionId}} java -jar bifrost-1.8.0.jar --help +``` +See [Running Bifrost](doc:running-bifrost) for full documentation of the CLI arguments. + +Running a `bifrost` node requires a config file (you can either use one of the default configurations or provide your own). + +1. Create your network config or use one of the default network configs provided + - If you choose to create your own network config, remember to add your network config onto the Docker host + ``` +mkdir $HOME/state-docker +``` + - After creating this directory, create your config file within it (optional) + 2.) Run the `bifrost` server : +``` +docker run \ +-p 9084:9084 -p 9085:9085 \ +--volume $HOME/state-docker:/data \ +--rm \ +toplprotocol/bifrost \ + java -jar bifrost-1.8.0.jar \ +-- config /data/my-config.conf \ +-- seed "test" +-- apiKeyHash "e4d2a343f3dcf9330ad9035b3e8d168e6728904262f2c434a4f8f934ec7b676" +``` + +Explanation of the arguments: +* `-p 9084:9084 -p 9085:9085` - exposes the API server port from the container to the docker host as well as the JSON-RPC server port. + +* `--volume $HOME/state-docker:/data` - mounts the + `~/state-docker` directory on the Docker host to `/data` inside + the container. + +* ```--config /data/my-config.conf``` - use the config within the data volume for your custom network configuration + +3.) Wait for the message `Listening on 0.0.0.0:9085` to be shown (it may take some small amount of time for Bifrost to create the necessary genesis blocks) + +## Inspecting the contents of the Docker image +If you need to run a shell inside the Docker image, use the bash shell as the entrypoint: +``` +docker run --rm -it --entrypoint bash toplprotocol/bifrost:{{latest-version-id}} +``` \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/installing-bifrost.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/installing-bifrost.md new file mode 100644 index 0000000..eeb5a15 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/installing-bifrost.md @@ -0,0 +1,180 @@ +--- +title: "Installing Bifrost" +slug: "installing-bifrost" +hidden: false +createdAt: "2021-10-04T20:22:18.615Z" +updatedAt: "2021-10-05T14:17:33.658Z" +--- +### Overview + +This guide will show you how to compile and install `bifrost` into your operating system of choice, directly from the source code. It will enable you to interact with the **Topl** blockchain, including but not limited to sending/receiving **transactions**, minting/burning customizable **assets**, posting verifiable **metadata** into the blockchain, and so much more! + + +[block:callout] +{ + "type": "info", + "title": "Note", + "body": "If you want to avoid compiling the binaries yourself, you can download the latest version of Bifrost from the links below:\n- [Bifrost](https://github.com/Topl/Bifrost/releases/download/v1.8.0/bifrost-1.8.0.jar)\n\nThere are newer source code available: \n* [latest release](https://github.com/Topl/Bifrost/releases/tag/v1.8.4)\n\nBifrost can be built and run on **Windows** and **MacOS**, but we recommend that node operators use **Linux** to take advantage of associated performance advantages." +} +[/block] +### Prerequisites + +To set up the components, you will need: +* **Windows**, **MacOS**, or **Linux** for your operating system +* A **CPU** with at least **2** cores (recommended **4**) +* **4GB** of RAM (recommended RAM: **8GB**) and at least **20GB** of free disk space (Recommended **80GB** of free disk space + +### Choose your Platform + +* [Linux | MacOS](#linux) +* [Windows](#windows) + +## Linux & MacOS + +In this section, we will walk you through the process of downloading, compiling, and installing `bifrost` into your **Linux-based** or **Mac-OS** operating system. + +#### Installing Operating System Dependencies + +To download the source code and build it, you need the following packages and tools on your Linux system: + + * the version control system `git` +* curl +* unzip +* zip +* GraalVM compatible Java SDK (GraalVM 21+) +* the SBT Scala Compiler (version `1.5.5` or above) +* Java 11 + +In Redhat, Fedora, and Centos: +```bash +sudo yum update -y +sudo yum install git curl unzip zip -y +``` + +For Debian/Ubuntu, use the following instead: +```bash +sudo apt-get update -y +sudo apt-get install git curl unzip zip -y +``` + +For MacOS, all necessary tools should be installed with the following packages and tools for your MacOS system: +* [Xcode](https://developer.apple.com/xcode) - The Apple Development IDE and SDK/Tools +* [Xcode Command Line Tools](https://developer.apple.com/xcode/features/), you can install it by typing `xcode-select --install` in the terminal. +* [Homebrew](https://brew.sh) - The Missing Package Manager for MacOS (or Linux) + +#### Installing GraalVM and SBT + +The fastest way to install **SBT** and **GraalVM** is to use [SDKMAN](https://sdkman.io/) + +Use the following command to install `SDKMAN` +```bash +curl -s "https://get.sdkman.io" | bash +source "$HOME/.sdkman/bin/sdkman-init.sh" +``` +Please follow the instructions and provide the necessary input to the installer if required. Once complete, you should have `SDKMAN` installed to your system. + + + +[block:callout] +{ + "type": "info", + "title": "Note", + "body": "`SDKMAN` will try to detect your shell and add itself to the environment variables. Please restart your shell/terminal after installing `SDKMAN`" +} +[/block] + You can check if `SDKMAN` has been installed correctly by typing `sdk version` into the terminal. You should see something similar to the following: +``` +sdkman 5.0.0+51 +``` + +#### Install GraalVM' +- Install Graalvm using SDKMAN +```sdk install java 21.1.0.r11-gr1``` + +#### Install SBT +- `sbt` is required to build Bifrost from source and may be installed by running the following commands +```sdk install sbt``` + +Note that any version of sbt < `1.5.5` should be able to install and switch to the required version. + +Finally, we check if we have the correct `sbt` and `java` versions installed. + +Check `sbt` version: +```bash +sbt sbtVersion +``` +You should see something like this +``` +$ sbt 'inspect sbtVersion' +[info] Set current project to my_user (in build file:/Users/my_user/) +[info] Setting: java.lang.String = 0.11.1 +[info] Description: +[info] Provides the version of sbt. This setting should be not be modified. +[info] Provided by: +[info] */*:sbtVersion +[info] Defined at: +[info] (sbt.Defaults) Defaults.scala:68 +[info] Delegates: +[info] *:sbtVersion +[info] {.}/*:sbtVersion +[info] */*:sbtVersion +[info] Related: +[info] */*:sbtVersion +``` +Check `java` version: +```bash +java --version +``` + +You should see something like this +``` +java version "1.11.0_55" +Java(TM) SE Runtime Environment (build 1.7.0_55-b13) +Java HotSpot(TM) 64-Bit Server VM (build 24.55-b03, mixed mode) +``` + + +[block:callout] +{ + "type": "warning", + "title": "Important", + "body": "Please confirm that the versions you have installed match the recommended versions above. If not, check if you have missed any of the previous steps." +} +[/block] +#### Downloading and Compiling + +First, download Bifrost from Github +```bash +git clone git@github.com:Topl/Bifrost.git +cd Bifrost +git fetch --all --recurse-submodules --tags +``` + +Switch the repository to the latest tagged commit: +```bash +git checkout tags/1.8.0 +``` + +[block:callout] +{ + "type": "warning", + "title": "Important", + "body": "You can check the latest available version/tag by visiting the `bifrost` [Github-Release](https://github.com/Topl/Bifrost/releases) page. At the time of writing this, the current version is `1.8.0`." +} +[/block] +#### Compiling the node +We can now build the `Scala-based` `bifrost-node` to produce executables. +```bash +sbt compile +``` +Congratulations, you have successfully installed Topl `bifrost` into your Linux or MacOS system! 🎉🎉🎉 + +## Windows + +[block:callout] +{ + "type": "warning", + "title": "Important", + "body": "Currently, the **Windows** installation guide is still in progress. In the meantime, we recommend using [WSL (Windows Subsystem for Linux)](https://docs.microsoft.com/en-us/windows/wsl/) to get a Linux environment on top of Windows. Once installed, you can use the [Linux](#linux) guide to install and run `bifrost` within **WSL**." +} +[/block] \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/overview.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/overview.md new file mode 100644 index 0000000..afdf31e --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/overview.md @@ -0,0 +1,27 @@ +--- +title: "Overview" +slug: "overview" +hidden: false +createdAt: "2021-10-04T19:10:50.318Z" +updatedAt: "2021-10-12T19:10:07.138Z" +--- +## Developer Ecosystem ## +Here is an outline of the developer ecosystem and relevant resources to help you learn how to build on Topl. + +### Programming Languages ### + +#### Scala #### +- [Scala](https://www.scala-lang.org/) +- [Scala Guides (created by Baeldung)](https://github.com/Baeldung/scala-tutorials) +- [Scala Exercises] (https://github.com/scala-exercises/scala-exercises) + +#### Dart #### +- [Dart](https://dart.dev/) +- [Dart official documentation](https://dart.dev/guides) + +### Developer Resources ### + +[Using the Valhalla Test Network](doc:using-the-valhalla-test-network) +[BramblSC](doc:bramblsc) +[BramblJS](doc:setting-up-brambljs) +[BramblDart](doc:brambldart) \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/running-bifrost.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/running-bifrost.md new file mode 100644 index 0000000..9c41325 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/running-bifrost.md @@ -0,0 +1,143 @@ +--- +title: "Running Bifrost" +slug: "running-bifrost" +excerpt: "How to run a Bifrost node" +hidden: false +createdAt: "2021-10-04T20:51:56.618Z" +updatedAt: "2021-10-06T20:47:40.015Z" +--- +### Overview + +This guide will show you how to run a `bifrost node` on your system and some simple examples of how you can interact with the **Topl** blockchain. + + +[block:callout] +{ + "type": "info", + "title": "Note", + "body": "This guide assumes that you have installed `bifrost` onto your system. If not, you can refer to [Installing Bifrost](https://docs.topl.co/v1.4.0/docs/installing-bifrost) guide for instructions on how to do that." +} +[/block] +### Network Configuration + +The `bifrost` application has 3 network configurations to run as of writing this article. +- **Mainnet**: The settings that are used on the main Topl network. +- **Valhalla**: The settings that are used on the main public Topl testnet. +- **Private**: The settings that are used by Bifrost developers while working on improving Bifrost functionality + +You might be asking what the difference is between `mainnet` and `valhalla` and why there are two networks? To put it simply, **Topl** is an open-source blockchain and anyone is free to spin up a network based on **Topl's** software components. The `mainnet` network was the first one and currently contains all of the real value of **Topl**. + +Testing the network's features and capabilities can be expensive and will consume real value. So we have spun up a sandbox or testnet version of the network. Instead of using real `poly` tokens for transactions, you use test polys. Alternatively, you can spin up your own custom **Topl** network, but that is outside the scope of this guide. + +To run `bifrost` you enter something like this into the terminal (given that you are in the directory containing the bifrost jar file): +```bash +java -jar bifrost-1.x.x.jar \ + --config path/to/config.json \ + --seed "test" \ + --forge \ + --disableAuth +``` + +To get the complete list of available options, use `java -jar bifrost-1.x.x.jar --help + +```Bifrost (v1.8.4) command line arguements + -c --config file path to a user defined config file + -d --debug Turn on debugging information + -n --network specify preset network by name + -s --seed string to deterministically generate keys on private and local networks + -f --forge enable forging as soon as the node starts + --disableAuth Allow the node to receive API requests without an API key + --apiKeyHash hash of API key + --help prints this command list +``` + +## Bifrost node parameters + +[block:callout] +{ + "type": "info", + "title": "Note:", + "body": "In this section, we will use the path `/home/user/topl` to store all the `bifrost` related configuration files as an example, and please replace it with the directory you have chosen to store the files." +} +[/block] +We will focus on the 7 key command-line parameters for running a node: +** `--config` **: This requires the path of the `.conf` file. + +> For example, if you have created a `.conf` file to the path `/home/user/topl/custom.conf`, then the argument would look like this +``` +--config /home/user/topl/custom.conf +``` + +**`--debug`**: This command line parameter turns on the debugging information for the Bifrost node. + +**`--network`**: This expects one of the predefined config networks as an argument. +> Here is an example `--network` argument: +``` +--network valhalla +``` +This will begin the Bifrost node running with the Valhalla parameters. + +**`--seed` **: This expects a string to deterministically generate the keys for the genesis addresses on private and local networks. This is used primarily so that the user will have access to the polys and arbits that are attributed upon the genesis of the network. + +**`--forge`** : This does not expect an argument and will start the node forging immediately after it starts. + +**`--disableAuth`** : This command line argument disables the api_key authentication allowing you to connect with your node over HTTP without configuring an API key + +**`--apiKeyHash`** : With this command you can provide a Base58 encoded hash of the value that you want to use for the apiKey. This allows for you to construct a more secure node that will require the apiKey for successful HTTP connections. + +In addition, let's look at some of the more important parameters that you can modify using a custom configuration file: + +**`bifrost.application.dataDir`**: This expects the path to the directory where we will store the actual blockchain data like **blocks**, **transactions**, and other datatypes that can be stored on the **Topl** blockchain. + +> For example, if we decided that all of the files required by the `bifrost` node will be in the path `/home/user/topl/`. Then we could create a database directory like this `mkdir -p /home/user/topl/db`. +> The directory structure would then be something like this: +``` +/home/user/topl/ +├── db +├── config.conf +1 directory, 2 files +``` + +**`bifrost.application.rpcApi.bindAddress`**: In this case, this expects the `local address` of the machine to which to bind to. +> Here is an example `bifrost.application.rpcApi.bindAddress` argument: +``` +bindAddress = "0.0.0.0:9085" +``` +> In this case, we expect http clients in your network to connect via `0.0.0.0:9085`. In conjunction with providing the `local address` this command also sets the port that your `bifrost` node will use to listen to any incoming connections. + +Here is a realistic example for running `bifrost` node: +```bash +java -jar bifrost-1.3.3.jar \ + --config /home/user/topl/customtestnet.conf \ + --debug \ + -- seed "test" \ + -- forge \ + -- disableAuth +``` + +If you have everything set correctly, you should see something similar to the following +``` +20:44:17.131| INFO co.topl.settings.AppSettings$ - No network specified, running as private testnet. +20:44:17.748| INFO co.topl.network.NetworkController - Declared address: None +20:44:17.805| INFO co.topl.network.NetworkController - Registered Actor[akka://bifrost/user/peerSynchronizer#341653336] as the handler for List((2,Peers message), (1,GetPeers message)) +20:44:17.975| INFO co.topl.db.LDBFactory$ - Loaded org.fusesource.leveldbjni.JniDBFactory with leveldbjni version 1.8 +20:44:18.154| INFO co.topl.nodeView.CleanupWorker - Cleanup worker started +20:44:18.161| INFO co.topl.network.NetworkController - Registered Actor[akka://bifrost/user/nodeViewSynchronizer#-403724455] as the handler for List((65,Sync), (55,Inv), (22,RequestModifier), (33,Modifier)) +20:44:18.371| INFO co.topl.nodeView.history.History - Block 28XxAtDYfdCkEr8UyzT9f2fDWdn3Uqdu29V58qCiT8y5g appended to parent tksQdfioySWXrLbm7prosYBKze9Augu71ZXde9KuJC4Y at height 1 with score Some(100000000). +20:44:18.392| INFO co.topl.nodeView.state.State$ - Initializing state to watch for all public keys +20:44:18.393| INFO c.t.n.state.ProgramBoxRegistry$ - Initializing state with Program Box Registry +20:44:18.404| INFO c.t.nodeView.state.TokenBoxRegistry$ - Initializing state with Token Box Registry +20:44:18.449| INFO co.topl.nodeView.NodeViewHolder - NodeViewHolder publishing ready signal +20:44:18.450| INFO co.topl.consensus.Forger - Forger transitioning to the operational state +20:44:18.450| INFO co.topl.nodeView.MempoolAuditor - MemPool Auditor transitioning to the operational state +20:44:18.450| INFO co.topl.network.NodeViewSynchronizer - NodeViewSynchronizer transitioning to the operational state +20:44:18.450| INFO co.topl.network.PeerSynchronizer - PeerSynchronizer transitioning to the operational state +20:44:18.450| INFO co.topl.network.PeerManager - PeerManager transitioning to the operational state +20:44:18.453| INFO co.topl.consensus.Forger - Received a START signal, forging will commence shortly. +java.vm.version = 11.0.11+8-jvmci-21.1-b05 +jvmci.Compiler = null +20:44:18.593| INFO co.topl.network.NetworkController - No declared address was provided. Skipping address validation. +20:44:18.600| INFO co.topl.network.NetworkController - Network Controller transitioning to the operational state +20:44:18.619| INFO co.topl.BifrostApp - P2P protocol bound to /0.0.0.0:9084 +20:44:19.273| INFO co.topl.BifrostApp - HTTP server bound to /0.0.0.0:9085 +``` \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/security-and-authentication.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/security-and-authentication.md new file mode 100644 index 0000000..0561440 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Getting Started/security-and-authentication.md @@ -0,0 +1,84 @@ +--- +title: "Security and Authentication" +slug: "security-and-authentication" +hidden: false +createdAt: "2021-03-24T16:43:22.629Z" +updatedAt: "2021-11-04T17:06:52.342Z" +--- +The Topl endpoints use API keys to allow access. You can obtain your API key through creating a project in the <> developer portal (please view the guide for <> Developer Portal Onboarding for the details on how to setup your first project). + + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/a314980-Screen_Shot_2021-03-24_at_9.46.56_AM.png", + "Screen Shot 2021-03-24 at 9.46.56 AM.png", + 2560, + 1378, + "#fafafa" + ] + } + ] +} +[/block] +To access the APIs, include the API key in the HTTP Header of your HTTP request: + +`x-api-key:yourapisecret` + +Alternatively, you can add the API key into the Requests module object of a BramblJS instance (using our BramblJS library). + +## Examples + + +[block:callout] +{ + "type": "info", + "title": "Please note!!", + "body": "You must replace `yourapisecret` or YOUR_API_KEY in the examples with your actual API key provided by Topl\n\nIn addition, you must replace {{myProjectId}} with the actual projectId provided by Topl" +} +[/block] + +[block:callout] +{ + "type": "info", + "title": "Network Prefix", + "body": "There are two BaaS network prefixes. If you want to use the main net, set networkPrefix = toplnet otherwise set networkPrefix = valhalla for using the test net" +} +[/block] + +[block:code] +{ + "codes": [ + { + "code": "const BramblJS = require('brambljs');\nconst brambl = new BramblJS({\n networkPrefix: \"valhalla\", // applies to Requests and KeyManager\n password: \"topl_the_world!\",\n Requests: {\n url: \"https://valhalla.torus.topl.network/{{myProjectId}}\", // make sure that the project ID from the BaaS portal is included. \n apiKey: \"YOUR_API_KEY\" // set api key for network\n }\n });", + "language": "javascript" + } + ] +} +[/block] +Additionally, you must provide a project ID for each request made. Your Project ID can also be found in the BaaS Portal. +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/668d997-Screen_Shot_2021-03-25_at_3.27.33_PM.png", + "Screen Shot 2021-03-25 at 3.27.33 PM.png", + 3360, + 1876, + "#fafafa" + ] + } + ] +} +[/block] + +[block:callout] +{ + "type": "danger", + "title": "Important", + "body": "Note that our BaaS offering has a rate limit defined at 5 requests per second. Please contact us if that is not sufficient for your use case!" +} +[/block] \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/simple-transfer.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/simple-transfer.md new file mode 100644 index 0000000..d8b2416 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Getting Started/simple-transfer.md @@ -0,0 +1,204 @@ +--- +title: "Assets" +slug: "simple-transfer" +hidden: false +createdAt: "2021-03-30T15:10:50.375Z" +updatedAt: "2022-10-28T14:20:04.707Z" +--- +Assets are a critical part of our blockchain technology. Assets are homogeneous tokens that can be transferred to other users and spent as currency (e.g. ERC-20 on Ethereum). In addition, users can store meta-data as part of the process of creating an asset, allowing users to store arbitrary information on the Topl Blockchain. + +Usually, a central ledger keeps track of a user's token balances. Topl implements Assets in a way that avoids having a centralized account ledger. + +We're going to take you through these steps to get comfortable with Assets: +* Mint an Asset and store it in your address +* Mint a collection of assets and store the collection of assets in your address +* Setup a second account using the previous steps +* Transfer an asset from one account to another +* Write a script to see what assets are stored in each account's collection. + +The concepts involved in creating an Asset can be hard to grasp at first. For an in-depth explanation of the functionality and code, continue reading the next section. + +Or if you'd like to go immediately into creating an asset and using it, you can skip to the **Interacting with Assets** section of this tutorial. + +Assets have some of the following properties: +* Ownership is decentralized and does not rely on a central ledger +* Bugs and exploits present less risk for users and less opportunity for attackers +* Assets can not be double spent and it is very hard for them to be lost, stolen, or destroyed + +# Intuiting Ownership with Asset Codes + +An important concept in Topl are <>s. An asset code is composed of the version, issuer address, and user provided name. Instead of representing asset ownership in a centralized ledger or db, each account owns a series of asset codes which represents the number of assets that they own and the type of each asset. This way, when users want to transact with each other, they can do so peer-to-peer without having to interact with any managed Topl resources. To transfer assets to one another, they call a `transfer` function on their own Brambl Request instance rather than having to go through Topl as an intermediary. + +This simplifies access control because instead of having Topl check the sender of the function call, most function calls happen on Brambl Request instances referencing asset codes stored in the user's address, and the user controls who is able to call the functions for the asset codes in their addresses. + +This approach also helps protect against potential bugs. If all of the logic was handled by Topl, an exploit is likely to affect all users. Now, if there is a bug in the Brambl logic, an attacker would have to exploit the bug for each asset code holder's account individually, which is much more complicated and time consuming than it is in a centralized ledger system. + +# Ensuring Security in Public: Capability Security +Another important feature of Topl's blockchain is its utilization of Capability Security. This feature ensures that, while API used to transfer Assets is public, no one except the intended user and those they approve of can transfer assets from their account. + +Topl's security model ensures that objects stored in an address can only be accessed by the user that owns them. If the user wants to give another user access to their assets, they would have to give that user the keyfile for that address. + +# Create and send an Asset **MINTING** transaction + +Now that you have read about how Assets work, we can mint an asset and add it to your address and also transact using the asset that you have minted. + +[block:callout] +{ + "type": "info", + "body": "A helpful resource is the recipe at the bottom of the page which you can use to follow along interactively.\n\nIn addition, you must have an address that has Polys in order to form a valid transaction. Please look at the Adding Polys guide under the BaaS portal onboarding for more information about how to obtain Polys for your addresses.", + "title": "Note:" +} +[/block] + +[block:code] +{ + "codes": [ + { + "code": "const BramblJS = require('brambljs');\n\nconst myKeyPath = \"myKeyPath\"\n\nconst keyManager = BramblJS.KeyManager({\n networkPrefix: \"valhalla\", // network prefix is required\n password: \"my_key_password\",\n keyPath: myKeyPath\n});\n\nconst brambl = new BramblJS({\n networkPrefix: \"valhalla\",\n KeyManager: keyManager, //applies to Requests and KeyManager\n Requests: {\n url: \"https://vertx.topl.services/valhalla/{{myProjectId}}\", // set url\n apiKey: \"{{myApiKey}}\"\n }\n})\n\nconst assetCode = brambl.createAssetCode(\"name1234\")\n\nconst rawAssetParams = {\n \"propositionType\": \"PublicKeyCurve25519\",\n \"recipients\": [\n // basic: [address, quantity]\n [brambl.keyManager.address, 4]\n ],\n \"assetCode\": assetCode,\n \"sender\": [brambl.keyManager.address],\n \"changeAddress\": brambl.keyManager.address,\n \"consolidationAddress\": brambl.keyManager.address,\n \"minting\": true,\n \"fee\": 100\n};\n\nconst pollParams = {\n \"timeout\": 90,\n \"interval\": 3,\n \"maxFailedQueries\": 10\n}\n\nbrambl.transaction('createRawAssetTransfer', rawAssetParams)\n.then(res => { console.log('Unconfirmed transaction'); console.log(res); return res })\n.then(res => brambl.pollTx(res.result.txHash, pollParams))\n.then(res => { console.log('\\nConfirmed transaction'); console.log(res) })\n.catch(console.log)\n", + "language": "javascript" + }, + { + "code": "object CreateAnDSendRawAssetMintingTransfer {\n\n import exampleState._\n import provider._\n\n val params: RawAssetTransfer.Params = ToplRpc.Transaction.RawAssetTransfer.Params(\n propositionType = PublicKeyPropositionCurve25519.typeString,\n sender = NonEmptyChain(externalAddress.head),\n recipients = NonEmptyChain((externalAddress.head, AssetValue(4, assetCode))),\n fee = 0,\n changeAddress = externalAddress.head,\n consolidationAddress = externalAddress.head,\n minting = true,\n data = None\n )\n\n val response: RpcErrorOr[BroadcastTx.Response] = for {\n rawTx <- ToplRpc.Transaction.RawAssetTransfer.rpc(params).map(_.rawTx)\n signTx <- EitherT.right {\n clearKeyRing()\n genKeys()\n val msg2Sign = rawTx.messageToSign\n val signFunc = (addr: Address) => keyRing.generateAttestation(addr)(msg2Sign)\n val signatures = keyRing.addresses.map(signFunc).reduce(_ ++ _)\n Future(rawTx.copy(attestation = signatures))\n }\n broadcastTx <- ToplRpc.Transaction.BroadcastTx.rpc(ToplRpc.Transaction.BroadcastTx.Params(signTx))\n } yield broadcastTx\n\n def main(args: Array[String]): Unit =\n response.value.foreach {\n case Left(value) => println(s\"Got some error: $value\")\n case Right(value) => println(s\"Got a success response: $value\")\n }\n}", + "language": "scala" + } + ] +} +[/block] +This script stores the assetCode for the asset in your address so that you can use them in future transactions. In this example, the script mints 4 assets and stores them in your address. You can use the unique assetCode to mint more assets of the same type. + +On line 31 in the JS code and line 13 in the SC code, we set minting to true to tell the Topl network that we are creating a new asset. If the value was set to false, then the network would attempt to transfer an existing asset. + +Addresses are like pointers. They are a link to a collection of boxes and can be used to retrieve balances, or transfer tokens to/from the boxes they reference. Addresses do not move, or modify the boxes directly. +[block:callout] +{ + "type": "info", + "title": "Note:", + "body": "During our beta offering, asset minting and transfers have a min-fee of 100 nano-polys on Valhalla (1 poly = 10^9 nano-polys). Please see [this page](https://topl.readme.io/v1.3.0/docs/adding-polys) for loading your address with polys" +} +[/block] +You are now ready to run transactions that use Assets! + +# Transfer Assets to another User + +Now we are going to run a transaction that sends 10 Assets to another address. We will do this by using the transfer function and turning minting off. That will deposit tokens into the second address. +[block:callout] +{ + "type": "info", + "body": "In a previous section, we have walked through how to create a [Topl Blockchain Address](https://topl.readme.io/v1.3.0/docs/how-topl-addresses-are-generated). \n\nPlease create a second address now." +} +[/block] +Now the second account is ready to start building its fortune! We can check that that our account is currently empty by calling the `lookupBalancesByAddresses` method in Brambl function. +[block:code] +{ + "codes": [ + { + "code": "brambl.requests.lookupBalancesByAddresses({addresses: [address]})", + "language": "javascript" + }, + { + "code": "object LookupBalance {\n\n import exampleState._\n import provider._\n\n val params: Balances.Params = ToplRpc.NodeView.Balances.Params(externalAddress.toList)\n val response: RpcErrorOr[Balances.Response] = ToplRpc.NodeView.Balances.rpc(params)\n\n def main(args: Array[String]): Unit =\n response.value.foreach {\n case Left(value) => println(s\"Got some error: $value\")\n case Right(value) => println(s\"Got a success response: $value\")\n }\n\n}", + "language": "scala" + } + ] +} +[/block] +Asset creation (for the asset that we minted in the last step) is restricted to the address which originally minted the asset, so the asset code ensures that nobody is able to create a duplicate of that asset out of thin air. + +As part of the initial minting process for an Asset, the first address created an <>. By using this code, the address that owns it can mint new assets. Right now, the first address owns it, so it has the sole power to mint new Assets. + +As we have explained before, the resource model plus capability security handles this access control for us as a built-in property of the block-chain. + +In the next transaction, address 1 will mint 10 new assets and deposit them into the second account. + +[block:callout] +{ + "type": "warning", + "title": "Note:", + "body": "The variables will refer to your own addresses so you may have to replace the stand-in variables in the example with the values of your address details." +} +[/block] + +[block:callout] +{ + "type": "warning", + "title": "Note:", + "body": "The Change Address (for the left-over polys) and Consolidation Address (for left-over assets) are required as of Bifrost Version 1.4.3." +} +[/block] + +[block:code] +{ + "codes": [ + { + "code": "const myKeyPath1 = \"valhalla_.json\";\nconst myKeyPath2 = \"valhalla_key_file.json\";\n\nconst keyManager1 = BramblJS.KeyManager({\n password: \"{{myFirstPassword}}\",\n keyPath: myKeyPath1\n});\n\nconst keyManager2 = BramblJS.KeyManager({\n password: \"{{myPassword}}\",\n keyPath: myKeyPath2\n})\n\nconst brambl1 = new BramblJS({\n networkPrefix: \"valhalla\",\n KeyManager: keyManager1,\n Requests: {\n url: \"https://vertx.topl.services/valhalla/{{yourProjectIdHere}}\",\n apiKey: \"{{yourApiKeyHere}}\"\n }\n})\n\n const brambl2 = new BramblJS({\n networkPrefix: \"valhalla\",\n KeyManager: keyManager2,\n Requests: {\n url: \"https://vertx.topl.services/valhalla/{{yourProjectIdHere}}\", // set url\n apiKey: \"{{yourApiKeyHere}}\"\n }\n })\n \n// Create an new AssetCode to be used in Create Raw Asset Transactions \n \nconst assetCode1 = brambl1.createAssetCode(\"asset1\");\n \nconst address1 = brambl1.keyManager.address;\nconst address2 = brambl2.keyManager.address;\n\n const rawAssetParams1 = {\n \"propositionType\": \"PublicKeyCurve25519\",\n \"recipients\": [\n // basic: [address, quantity]\n // advance: [address, quantity, securityRoot, metadata]\n [address2, 10]\n ],\n \"assetCode\": assetCode1,\n \"sender\": [address1],\n \"changeAddress\": address1,\n \"consolidationAddress\" : address1\n \"minting\": true,\n \"fee\": 1000000001\n };\n\nconst pollParams = {\n \"timeout\": 90,\n \"interval\": 3,\n \"maxFailedQueries\": 10\n };\n\nbrambl1.transaction('createRawAssetTransfer', rawAssetParams1)\n .catch((e) => console.error(e))\n .then(res => { console.log('Unconfirmed transaction'); console.log(res); return res })\n .then(res => brambl1.pollTx(res.result.txId, pollParams))\n .then(res => console.log(res))\n .catch((e) => console.error(e))\n", + "language": "javascript" + }, + { + "code": "object CreateAndSendRawAssetMintingTransfer {\n\n import exampleState._\n import provider._\n\n val params: RawAssetTransfer.Params = ToplRpc.Transaction.RawAssetTransfer.Params(\n propositionType = PublicKeyPropositionCurve25519.typeString,\n sender = NonEmptyChain(externalAddress.head),\n recipients = NonEmptyChain((externalAddress(1), AssetValue(10, assetCode))),\n fee = 0,\n changeAddress = externalAddress.head,\n consolidationAddress = externalAddress(1),\n minting = true,\n data = None\n )\n\n val response: RpcErrorOr[BroadcastTx.Response] = for {\n rawTx <- ToplRpc.Transaction.RawAssetTransfer.rpc(params).map(_.rawTx)\n signTx <- EitherT.right {\n clearKeyRing()\n genKeys()\n val msg2Sign = rawTx.messageToSign\n val signFunc = (addr: Address) => keyRing.generateAttestation(addr)(msg2Sign)\n val signatures = keyRing.addresses.map(signFunc).reduce(_ ++ _)\n Future(rawTx.copy(attestation = signatures))\n }\n broadcastTx <- ToplRpc.Transaction.BroadcastTx.rpc(ToplRpc.Transaction.BroadcastTx.Params(signTx))\n } yield broadcastTx\n\n def main(args: Array[String]): Unit =\n response.value.foreach {\n case Left(value) => println(s\"Got some error: $value\")\n case Right(value) => println(s\"Got a success response: $value\")\n }\n}", + "language": "scala" + } + ] +} +[/block] +#Checking account balances + +Now address 2 should have an asset box with 10 assets while address 1 has no assets. + +In this example, we will query the balance of each address's assets. The following will print out the balance of each account. +[block:code] +{ + "codes": [ + { + "code": "brambl1.requests.lookupBalancesByAddresses({addresses: [address1, address2]}\n .then(res => {console.log(res.result[address1].Boxes.AssetBox); return res;})\n .then(res => console.log(res.result[address2].Boxes.AssetBox))\n .catch((e) => console.error(e))", + "language": "javascript" + }, + { + "code": "object LookupBalance {\n\n import exampleState._\n import provider._\n\n val params: Balances.Params = ToplRpc.NodeView.Balances.Params(externalAddress.toList)\n val response: RpcErrorOr[Balances.Response] = ToplRpc.NodeView.Balances.rpc(params)\n\n def main(args: Array[String]): Unit =\n response.value.foreach {\n case Left(value) => println(s\"Got some error: $value\")\n case Right(value) => println(s\"Got a success response: $value\")\n }\n\n}", + "language": "scala" + } + ] +} +[/block] +After running this script, it should ensure the following: +Address 1's asset balance is 0 +Address 2's asset balance is 10 + +If correct, you should see something similar to the following lines for address 2 +[block:code] +{ + "codes": [ + { + "code": "\n {\n \"nonce\": \"-8730299170071731040\",\n \"id\": \"CJNEBJEUjbuz8xt4YFgJt5bUAFUDnTw2tmUt4ah5BFxZ\",\n \"evidence\": \"LQ9nmM1uiThbsgEU4bVk95SKwkxpffW4E3kdGT8hY5oE\",\n \"type\": \"AssetBox\",\n \"value\": {\n \"quantity\": \"10\",\n \"assetCode\": \"5onZ9zqoVAtqQju5i8apy9v7WsDZ6fMqc31P9Qnbwv3z2gERL31eZnoTcj\",\n \"metadata\": null,\n \"type\": \"Asset\",\n \"securityRoot\": \"11111111111111111111111111111111\"\n }\n }\n ", + "language": "json" + } + ] +} +[/block] +Now that we have two addresses each loaded with their own assets, we can see how they transfer tokens to each other! + +In this example, the signer withdraws assets from their address. Then the transaction moves those resources to another user's address. +[block:callout] +{ + "type": "info", + "body": "After completing the first tutorial with a value > 10, complete the second tutorial, this time turning minting to \"false\" so that assets are not created, but rather pulled from the first address' balance." +} +[/block] +If correct, you should see that the 10 assets that were minted in step one have been added to the asset balance for address 2! + +You now know how a basic Asset is used in Topl's Blockchain! + +From here, you can try to extend the functionality of assets by making +* a faucet for these assets +* an <> that can be deposited to +* Of course, minting new Assets! +[block:tutorial-tile] +{ + "title": "Transfer Assets between Addresses in Valhalla", + "emoji": "🐳", + "backgroundColor": "#018FF4", + "slug": "transfer-assets-between-addresses-in-valhalla", + "_id": "62e99eede9a6470167b86ed6", + "id": "62e99eede9a6470167b86ed6", + "link": "https://topl.readme.io/v1.3.0/recipes/transfer-assets-between-addresses-in-valhalla" +} +[/block] \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/using-the-valhalla-test-network.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/using-the-valhalla-test-network.md new file mode 100644 index 0000000..5842eaa --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Getting Started/using-the-valhalla-test-network.md @@ -0,0 +1,68 @@ +--- +title: "Using the Valhalla Test Network" +slug: "using-the-valhalla-test-network" +hidden: false +createdAt: "2021-03-29T20:54:31.580Z" +updatedAt: "2021-11-10T19:13:42.177Z" +--- +#Before you begin + +Before you can interact with the test network, you need to install Brambl +[block:callout] +{ + "type": "warning", + "title": "Important", + "body": "This tutorial is compatible with BramblJS 1.3.x. After you have installed the [prerequisites](https://topl.readme.io/v1.3.0/docs/prerequisites), ** you must install [BramblJS](https://topl.readme.io/v1.3.0/docs/brambljs-installation-guide)**\n\nThis tutorial is also compatible with BramblSC. The steps to installing and importing are also above." +} +[/block] +# <> +When imported with no arguments, BramblJS defaults to point at a private node running on your localhost. While this is an option, it is easier to use Topl's test network (<>) where <>s have no real-world value. + +Using BramblSc, the quickest and easiest way to experiment and begin developing on Topl is to use the ValhallaTestNet provider found [here](doc:providers) +[block:callout] +{ + "type": "info", + "title": "Note", + "body": "The Topl development team pushes new updates and features to Valhalla before they are pushed to the main Toplnet. This may cause some behavior differences for a short period between the two networks." +} +[/block] +## Interacting with the network + +You can use Brambl to interact with the Valhalla network. BramblJS allows you to make transactions, view blocks on the chain, and other functionality! + +At the bottom of this page, you can view this tutorial as a recipe, with an interactive flow to help you to visualize how to get connected. + +### Step 1. Importing the Brambl Module + +To create a minimal instance of Brambl in your application, include the following lines in your application +[block:code] +{ + "codes": [ + { + "code": "const BramblJS = require('brambljs');", + "language": "javascript" + }, + { + "code": "val brambl: Brambl = Brambl.standalone(\"my_key_file_directory\", Some(ValhallaTestNet(apiKey = \"myApiKey\", , uri = \"https://staging.vertx.topl.services/valhalla/{{myProjectId}}\")))", + "language": "scala" + } + ] +} +[/block] + +To use Valhalla, use the network prefix `valhalla` when creating a new instance of BramblJS or use the ValhallaTestNet provider when using BramblSC +[block:code] +{ + "codes": [ + { + "code": "const brambl = new BramblJS({\n networkPrefix : \"valhalla\"\n\t}\n)", + "language": "javascript" + }, + { + "code": "val provider: Provider = ValhallaTestNet(apiKey = \"myApiKey\")\nval brambl: Brambl = Brambl.standalone(\"myKeyFileDirectory\", provider)", + "language": "scala" + } + ] +} +[/block] +To get free polys for testing, please follow the instructions [here](https://topl.readme.io/v1.3.0/docs/adding-polys) to get polys using our faucet available in the BaaS portal \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Introduction/about-topl.md b/versioned_docs/version-Dion/v1.10.2/Introduction/about-topl.md new file mode 100644 index 0000000..0bdff13 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Introduction/about-topl.md @@ -0,0 +1,22 @@ +--- +title: "About Topl" +slug: "about-topl" +excerpt: "The Platform and its History" +hidden: false +createdAt: "2021-03-25T17:37:46.969Z" +updatedAt: "2021-10-12T19:57:13.249Z" +--- +# Brief Overview + +Built as the only blockchain designed from the ground up for social impact and sustainability, Topl sits at the unique intersection of cutting-edge technology and positive change. Founded in 2017, Topl's mission is to support and nurture an ecosystem of blockchain-powered applications solving problems ranging from carbon reduction and capture to financial inclusion and supply chain transparency. + +We've committed our resources and ourselves to the development of the blockchain that you're currently exploring. Our team has purpose-built every aspect of our technology, from our blockchain's underlying consensus to its integration tooling, with our users' unique needs and a strong focus on bringing transparency and verifiability to the positive changes you're all effecting. + +You're changing the world; we're just here to support you and help you prove it. + +# Network Offerings +Topl's blockchain network has been active since late 2018, and everyday we are working to improve its functionality and deliver new and exciting features. We've recently released Blockchain-as-a-Service (BaaS) to provide a simple and streamlined way for developers to integrate their applications onto the Topl blockchain. + +As we work to improve this service for our users please don't hesitate to reach out with feedback or questions. We value your thoughts immensely. + +See below to review our documentation structure, check out examples of use-cases and solutions, and dive right into the documentation! \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Introduction/conclusion.md b/versioned_docs/version-Dion/v1.10.2/Introduction/conclusion.md new file mode 100644 index 0000000..9ceb50f --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Introduction/conclusion.md @@ -0,0 +1,10 @@ +--- +title: "Conclusion" +slug: "conclusion" +hidden: false +createdAt: "2021-03-29T18:19:08.069Z" +updatedAt: "2021-03-29T18:21:58.880Z" +--- +If you are a serious developer looking to create rock-solid transparency for your company or organization, Topl BaaS should be in your short list of solutions. + +The many capabilities of Topl BaaS makes it a highly scalable system supporting flexible trust assumptions that enable our platform to support a wide range of industry use cases ranging from food and fashion to precious gems and metals, to alternative finance, to carbon and impact credits, and so much more! \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Introduction/contributors.md b/versioned_docs/version-Dion/v1.10.2/Introduction/contributors.md new file mode 100644 index 0000000..8f6fea9 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Introduction/contributors.md @@ -0,0 +1,103 @@ +--- +title: "Contributors" +slug: "contributors" +hidden: false +createdAt: "2021-03-25T17:51:42.285Z" +updatedAt: "2022-03-28T14:43:24.380Z" +--- +# Contributing to the Brambl libraries + +You want to contribute to Brambl libraries? Awesome. Please take a few moments to +review the following guidelines to get you started. Cheers. + +* [Communication channels](#communication) +* [Team members](#team) +* [Documentation](#documentation) +* [Issue tracker](#issues) +* [Bug reports](#bugs) +* [Pull requests](#pull-requests) +* [Versioning](#versioning) +* [License](#license) + + +## Communication channels + +Before you get lost in the repository, here are a few starting points +for you to check out. You might find that others have had similar +questions or that your question rather belongs in one place than another. + +* Chat: https://discord.gg/CHaG8utU +* Website: https://www.topl.co/ +* Twitter: https://twitter.com/topl_protocol + + + +## Team members + +The Brambl libraries are developed as an open source project by [Topl](https://www.topl.co/) +headquartered in Houston, TX. The core maintainers you will encounter in this project +are all part of Topl. + +## Documentation + +The Brambl documentation is primarily auto-generated. +Any pull requests to improve the documentation are highly appreciated. + + +## Using the issue tracker + +The issue tracker is the preferred channel for [bug reports](#bugs), +[features requests](#features) and [submitting pull +requests](#pull-requests), but please respect the following restriction: + +Please **do not** use the issue tracker for personal support requests (use [Discord chat](https://discord.gg/CHaG8utU)). + + +## Bug reports + +A bug is a _demonstrable problem_ that is caused by the code in the repository. +Good bug reports are extremely helpful - thank you! + +A good bug report shouldn't leave others needing to chase you up for more +information. Please try to be as detailed as possible in your report. What is +your environment? What steps will reproduce the issue? What would you expect to +be the outcome? All these details will help people to fix any potential bugs. + + +## Pull requests + +Good pull requests - patches, improvements, new features - are a fantastic +help. Thanks for taking the time to contribute. + +**Please ask first** before embarking on any significant pull request, +otherwise you risk spending a lot of time working on something that the +project's developers might not want to merge into the project. + +Brambl libraries follows the [GitFlow branching model](http://nvie.com/posts/a-successful-git-branching-model). The ```main``` branch always reflects a production-ready state while the latest development is taking place in the ```dev``` branch. + +Each time you want to work on a fix or a new feature, create a new branch based on the ```dev``` branch: ```git checkout -b BRANCH_NAME dev```. Only pull requests to the ```dev``` branch will be merged. + + +## Commit Message Convention + +Brambl libraries adapt the [Vue's commit convention](https://github.com/vuejs/vue/blob/dev/.github/COMMIT_CONVENTION.md). Commit messages can have the following types: + +- `build:` Changes that affect the build system or external dependencies +- `chore:` Changes to readme, etc +- `ci:` Changes to our CI configuration files and scripts +- `docs:` Documentation only changes +- `feat:` A new feature +- `fix:` A bug fix +- `perf:` A code change that improves performance +- `refactor:` A code change that neither fixes a bug nor adds a feature +- `style:` Changes that do not affect the meaning of the code (white-space, formatting, etc) +- `test:` Adding missing tests or correcting existing tests + +## Versioning + +Brambl is maintained by using the [Semantic Versioning Specification (SemVer)](http://semver.org). + + +## License + +By contributing your code, you agree to license your contribution under the [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/) \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Introduction/getting-started.md b/versioned_docs/version-Dion/v1.10.2/Introduction/getting-started.md new file mode 100644 index 0000000..8dbedf0 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Introduction/getting-started.md @@ -0,0 +1,18 @@ +--- +title: "About This Guide" +slug: "getting-started" +hidden: false +createdAt: "2021-01-10T18:12:33.532Z" +updatedAt: "2021-04-15T13:51:22.771Z" +--- +#Topl <> Core Developer Guide + +Documentation and guides for interacting with Topl <> Platform programmatically through one of our Brambl API libraries or via Curl/Postman Requests. + +#Structure of our Readme + +Our documentation is structured to support the solutions that we offer. We begin with the onboarding process onto our <> platform, then continue to explore how to setup a sample application to interface with the Topl blockchain itself. + +If there are any improvements, please feel free to `Suggest Edits` using the button in the top right of each document. + +This resource is updated and improved regularly. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Introduction/performance-and-scalability.md b/versioned_docs/version-Dion/v1.10.2/Introduction/performance-and-scalability.md new file mode 100644 index 0000000..94ab1da --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Introduction/performance-and-scalability.md @@ -0,0 +1,10 @@ +--- +title: "Performance and Scalability" +slug: "performance-and-scalability" +hidden: true +createdAt: "2021-03-29T18:13:41.673Z" +updatedAt: "2021-04-12T09:43:27.887Z" +--- +Performance of the Topl BaaS can be affected by many variables such as the transaction size, block size, and the existing state of the network. + +For <> and <> transfer transactions, the size is standardized and quantity will not affect performance. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Introduction/why-use-blockchain-technology-for-esg-compliance.md b/versioned_docs/version-Dion/v1.10.2/Introduction/why-use-blockchain-technology-for-esg-compliance.md new file mode 100644 index 0000000..1e7ab7f --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Introduction/why-use-blockchain-technology-for-esg-compliance.md @@ -0,0 +1,10 @@ +--- +title: "Topl BaaS" +slug: "why-use-blockchain-technology-for-esg-compliance" +hidden: false +createdAt: "2021-03-29T16:03:10.251Z" +updatedAt: "2021-10-12T19:57:29.478Z" +--- +Topl's Blockchain-as-a-Service (<>) offering provides frictionless access to Topl's underlying distributed ledger network. Designed to suit everyone from startups to large enterprises, Topl's blockchain delivers state of the art capabilities for verifying <> compliance. + +By leveraging BaaS, you will be able to build a unique blockchain-powered application without the need to actually deploy or operate your own node or blockchain infrastructure. Topl's API-accessible hosted blockchain nodes together with Brambl API libraries are intended to enable a fast and easy development process. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Lookup Balances/lookup-balances.md b/versioned_docs/version-Dion/v1.10.2/Lookup Balances/lookup-balances.md new file mode 100644 index 0000000..4000b15 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Lookup Balances/lookup-balances.md @@ -0,0 +1,7 @@ +--- +title: "Lookup Balances" +slug: "lookup-balances" +hidden: false +createdAt: "2021-04-06T17:01:51.812Z" +updatedAt: "2021-04-06T17:01:51.812Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/Lookup Balances/lookup-balances/lookupbalances.md b/versioned_docs/version-Dion/v1.10.2/Lookup Balances/lookup-balances/lookupbalances.md new file mode 100644 index 0000000..b94a5ea --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Lookup Balances/lookup-balances/lookupbalances.md @@ -0,0 +1,8 @@ +--- +title: "Lookup Balances" +slug: "lookupbalances" +excerpt: "#### Summary\nLookup balances\n\n#### Type\nRemote -- Transaction must be used in conjunction with an external key manager service.\n\n#### Description\nCheck balances of specified addresses.\n\n#### Notes\n- Requires the Token Box Registry to be active\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|-----------|-----------|---------------------|----------------------------------------------|\n| addresses | [String] | Required | Addresses whose balances are to be retrieved |" +hidden: false +createdAt: "2021-04-06T17:01:51.937Z" +updatedAt: "2021-04-15T14:38:26.364Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/Lookup Block By Id/lookup-block-by-id.md b/versioned_docs/version-Dion/v1.10.2/Lookup Block By Id/lookup-block-by-id.md new file mode 100644 index 0000000..e7860ef --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Lookup Block By Id/lookup-block-by-id.md @@ -0,0 +1,7 @@ +--- +title: "Lookup Block by Id" +slug: "lookup-block-by-id" +hidden: false +createdAt: "2021-04-06T17:12:49.980Z" +updatedAt: "2021-04-06T17:12:49.980Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/Lookup Block By Id/lookup-block-by-id/lookupblockbyid.md b/versioned_docs/version-Dion/v1.10.2/Lookup Block By Id/lookup-block-by-id/lookupblockbyid.md new file mode 100644 index 0000000..f00435c --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Lookup Block By Id/lookup-block-by-id/lookupblockbyid.md @@ -0,0 +1,8 @@ +--- +title: "Lookup Block by id" +slug: "lookupblockbyid" +excerpt: "#### Summary\nLookup a block by its id\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|---------|-----------|---------------------|---------------------------------|\n| blockId | String | Required | Base58 encoded transaction hash |" +hidden: false +createdAt: "2021-04-06T17:12:50.159Z" +updatedAt: "2021-04-06T17:12:50.159Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/Lookup Block by Height/lookup-block-by-height.md b/versioned_docs/version-Dion/v1.10.2/Lookup Block by Height/lookup-block-by-height.md new file mode 100644 index 0000000..7749cfd --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Lookup Block by Height/lookup-block-by-height.md @@ -0,0 +1,7 @@ +--- +title: "Lookup Block by Height" +slug: "lookup-block-by-height" +hidden: false +createdAt: "2021-04-06T17:15:57.542Z" +updatedAt: "2021-04-06T17:15:57.542Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/Lookup Block by Height/lookup-block-by-height/lookupblockbyheight.md b/versioned_docs/version-Dion/v1.10.2/Lookup Block by Height/lookup-block-by-height/lookupblockbyheight.md new file mode 100644 index 0000000..5608fc2 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Lookup Block by Height/lookup-block-by-height/lookupblockbyheight.md @@ -0,0 +1,8 @@ +--- +title: "Lookup Block by Height" +slug: "lookupblockbyheight" +excerpt: "#### Summary\nLookup a block by its height\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|--------|-----------|---------------------|-------------------------------------------|\n| height | Number | Required | Height to retrieve on the canonical chain |" +hidden: false +createdAt: "2021-04-06T17:15:57.665Z" +updatedAt: "2021-04-06T17:15:57.665Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool.md b/versioned_docs/version-Dion/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool.md new file mode 100644 index 0000000..aaba21b --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool.md @@ -0,0 +1,7 @@ +--- +title: "Lookup Transaction in Mempool" +slug: "lookup-transaction-in-mempool" +hidden: false +createdAt: "2021-04-06T17:10:27.370Z" +updatedAt: "2021-04-06T17:10:27.370Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool/lookuptransactioninmempool.md b/versioned_docs/version-Dion/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool/lookuptransactioninmempool.md new file mode 100644 index 0000000..863f775 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool/lookuptransactioninmempool.md @@ -0,0 +1,8 @@ +--- +title: "Lookup Transaction in Mempool" +slug: "lookuptransactioninmempool" +excerpt: "#### Summary\nLookup a transaction in the mempool by its id\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|---------------|-----------|---------------------|---------------------------------|\n| transactionId | String | Required | Base58 encoded transaction hash |" +hidden: false +createdAt: "2021-04-06T17:10:27.493Z" +updatedAt: "2021-04-06T17:10:27.493Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/Lookup Transaction/lookup-transaction.md b/versioned_docs/version-Dion/v1.10.2/Lookup Transaction/lookup-transaction.md new file mode 100644 index 0000000..263716f --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Lookup Transaction/lookup-transaction.md @@ -0,0 +1,7 @@ +--- +title: "Lookup Transaction" +slug: "lookup-transaction" +hidden: false +createdAt: "2021-04-06T17:07:37.229Z" +updatedAt: "2021-04-06T17:07:37.229Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/Lookup Transaction/lookup-transaction/lookuptransaction.md b/versioned_docs/version-Dion/v1.10.2/Lookup Transaction/lookup-transaction/lookuptransaction.md new file mode 100644 index 0000000..c92113c --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Lookup Transaction/lookup-transaction/lookuptransaction.md @@ -0,0 +1,8 @@ +--- +title: "Lookup Transaction" +slug: "lookuptransaction" +excerpt: "#### Summary\nLookup a transaction by its id\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|---------------|-----------|---------------------|---------------------------------|\n| transactionId | String | Required | Base58 encoded transaction hash |" +hidden: false +createdAt: "2021-04-06T17:07:37.348Z" +updatedAt: "2021-04-06T17:07:37.348Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/New To Topl/block-rewards.md b/versioned_docs/version-Dion/v1.10.2/New To Topl/block-rewards.md new file mode 100644 index 0000000..78ffd8a --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/New To Topl/block-rewards.md @@ -0,0 +1,7 @@ +--- +title: "Block Rewards" +slug: "block-rewards" +hidden: true +createdAt: "2021-08-23T18:39:06.224Z" +updatedAt: "2021-08-23T18:39:06.224Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/New To Topl/blockchain.md b/versioned_docs/version-Dion/v1.10.2/New To Topl/blockchain.md new file mode 100644 index 0000000..d5d7d99 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/New To Topl/blockchain.md @@ -0,0 +1,22 @@ +--- +title: "Blockchain and Commitments" +slug: "blockchain" +hidden: false +createdAt: "2021-03-30T14:40:21.822Z" +updatedAt: "2021-05-10T17:55:56.196Z" +--- +A broad view of Topl might divide the world into two major parts: the blockchain and commitments + +A <> is best described as an append only public ledger or database that is distributed across many computers in a network. The blockchain logs the network's state at specific times after transactions have altered the state. + +The term "block" refers to the fact that data and state are stored in sequential batches or "blocks". "Chain" refers to the fact that each block cryptographically references its parent through a (hashed) linked-list. Each block does not store all the data in the blockchain network (it would be far too large). + +The state data is stored in an abstraction called a Box. User Address data and <> data are stored within these Boxes. + +Each new block must be agreed upon by every node in the network. This is so everyone has the same data. For this to work, <> s need a consensus mechanism. + +Topl uses a proof-of-stake <> , which unlike proof-of-work <> does not require large amounts of energy consumption to remain secure. + +New blocks are broadcast to the nodes on the network, checked and verified, updating the state for everyone. The blockchain is Topl's public ledger, an ordered and timestamped record of transactions. This system is designed to protect against double spending and modification of previous transaction records. + +Topl can handle proof of a wide range of different types of data using <>s. Commitments are hashed versions of the data which act as one part of a proof of data integrity since the owner must provide the original data in order to get the hashed value. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/New To Topl/how-topl-addresses-are-generated.md b/versioned_docs/version-Dion/v1.10.2/New To Topl/how-topl-addresses-are-generated.md new file mode 100644 index 0000000..b06b6e0 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/New To Topl/how-topl-addresses-are-generated.md @@ -0,0 +1,168 @@ +--- +title: "Topl Blockchain Address" +slug: "how-topl-addresses-are-generated" +hidden: false +createdAt: "2021-03-25T20:26:06.337Z" +updatedAt: "2021-04-15T14:27:00.123Z" +--- +The Topl blockchain address is a unique sequence of numbers and letters that functions similarly to an email address. In particular, the numbers and letters are [Base58](https://tools.ietf.org/id/draft-msporny-base58-01.html) encoded. The Topl blockchain address refers to a specific destination on the network to which assets can. For example, imagine that you want to make a transaction on the Topl network with your friend Bob. Bob will share his address with you and you will be able to transact with him via this address. + +# Generate an Address + +Our public and private keys are generated using the <> algorithm. You get a reference for your address in the following way: + +### Step 1: Add the network prefix + - The network prefix allows nodes on the Topl network to verify which network the address is on +[block:parameters] +{ + "data": { + "h-0": "Network Prefix", + "h-1": "Network", + "h-2": "Notes", + "0-0": "0x01", + "0-1": "Topl Public Mainnet", + "0-2": "Not yet available in Beta", + "1-0": "0x10", + "1-1": "Valhalla public testnet", + "1-2": "Live in Beta", + "2-0": "0x30", + "2-1": "Local Developer Network", + "2-2": "Used for <> Developers" + }, + "cols": 3, + "rows": 3 +} +[/block] + ### Step 2: Append the propositionType prefix +- Topl supports addresses with public/private key pairs that are generated using two different algorithms. +[block:parameters] +{ + "data": { + "h-0": "Prefix", + "h-1": "propositionType", + "0-0": "0x01", + "0-1": "Curve25519 Public Key Hash", + "h-2": "Notes", + "0-2": "Default Implementation by Brambl KeyManager", + "1-0": "0x02", + "1-1": "Curve25519 Threshold Hash", + "1-2": "Another implementation accepted by the Topl Network" + }, + "cols": 3, + "rows": 2 +} +[/block] +### Step 3: Append the evidence content + +The evident content is a 32 byte commitment to the proposition that must be supplied and satisfied by the transaction issuer. +[block:parameters] +{ + "data": { + "h-0": "propositionType", + "0-0": "0x01", + "h-1": "Generation Method", + "h-2": "Notes", + "0-1": "Blake2b-256 Hash of the Public Key", + "0-2": "For Curve25519 Public Key Hash", + "1-0": "0x02", + "1-1": "Blake2b-256 Hash of all public keys in the threshold proposition", + "1-2": "For Threshold Hash" + }, + "cols": 3, + "rows": 2 +} +[/block] +### Step 4: Append the address checksum + +Finally, add the first 4 bytes of the Blake2b-256 hash of the preceding 34 bytes. + +### Step 5: Convert into Base58 +The last step is to convert the address that you get after appending the four pieces of information into Base58. + + +# Generate an address using the BramblJS KeyManager module + +The easiest way to generate an address is using the Brambl KeyManager Module. An example of this is shown in the **recipe **below. + +The KeyManager module is compliant with Bifrost's Gjallarhorn Key Manager service and provides an straightforward interface for creating new keyfiles as well as creating and verifying signatures on transactions. New encrypted keyfiles are generated using Curve25519 key pairs and are encrypted using an AES-256 cipher with a user-specified password. All data within the keyfile is encoded using Base58. +[block:tutorial-tile] +{ + "title": "Create Topl Address using BramblJS", + "emoji": "💐", + "backgroundColor": "#2c5572", + "slug": "create-topl-address-using-brambljs", + "_id": "62e99eede9a6470167b86ece", + "id": "62e99eede9a6470167b86ece", + "link": "https://topl.readme.io/v1.3.0/recipes/create-topl-address-using-brambljs" +} +[/block] +#Generate an address using the BramblSc KeyRing + +If you are using BramblSc, it is also simple to generate and address. An example is shown below + +[block:code] +{ + "codes": [ + { + "code": "val address = brambl.keyRing.DiskOps.generateKeyFile(\"password\").get", + "language": "scala" + } + ] +} +[/block] +# Generate multiple addresses using the BramblSC KeyRing + +First, let's initialize our BramblSC instance, then create 3 addresses using the KeyRing. +[block:callout] +{ + "type": "info", + "title": "Note:", + "body": "The password to encrypt the keyfile used must be encoded in Latin-1. In addition, please replace {{myProjectId}} with your projectID." +} +[/block] + +[block:code] +{ + "codes": [ + { + "code": "val provider: Provider = ValhallaTestNet(apiKey = \"myApiKey\", uri = \"https://staging.vertx.topl.services/valhalla/{{myProjectId}}\")\nval brambl: Brambl = Brambl.standalone(\"./my_key_directory\",Some( provider))\n \nval addrs: Set[Address] = brambl.keyRing.generateNewKeyPairs(3) match {\n case Failure(exception) => throw exception\n case Success(value) => value.map(_.publicImage.address(brambl.networkPrefix))\n }", + "language": "scala" + } + ] +} +[/block] +# Import Bifrost Keyfile + +If you are a Bifrost Developer, you can also import keys generated by Bifrost's Gjallarhorn KeyManager. An example is shown in the recipe below. +[block:tutorial-tile] +{ + "title": "Create Topl Address from Curve25519 KeyFile", + "emoji": "🍥", + "backgroundColor": "#331f51", + "slug": "create-topl-address-from-curve25519-keyfile", + "_id": "62e99eede9a6470167b86ecf", + "id": "62e99eede9a6470167b86ecf", + "link": "https://topl.readme.io/v1.3.0/recipes/create-topl-address-from-curve25519-keyfile" +} +[/block] +# Import Keyfile BramblSC + +In addition, you can also import keys generated by BramblSC's KeyRing. An example is shown below. +[block:code] +{ + "codes": [ + { + "code": "val provider: Provider = ValhallaTestNet(apiKey = \"myApiKey\", uri = \"https://staging.vertx.topl.services/valhalla/{{myProjectId}}\")\nval brambl: Brambl = Brambl.standalone(\"./my_key_directory\",Some( provider))\n \n val address1 = brambl.keyRing.DiskOps.unlockKeyFile(\"base58_encoded_address\", \"password\") match {\n case Failure(exception) => throw exception\n case Success(value) => value\n }", + "language": "scala" + } + ] +} +[/block] + +[block:callout] +{ + "type": "warning", + "title": "Note", + "body": "The string for the address has to be the same as the address generated by BramblSC and the naming convention for the keyfile has to include \\.json. \n\nIn addition, BramblSC checks the whole directory for valid keyfiles so if there are other files in your key file directory that are not valid keys, or that are from different networks, then BramblSC will throw a validation error." +} +[/block] \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/New To Topl/introduction-1.md b/versioned_docs/version-Dion/v1.10.2/New To Topl/introduction-1.md new file mode 100644 index 0000000..2904149 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/New To Topl/introduction-1.md @@ -0,0 +1,12 @@ +--- +title: "Introduction" +slug: "introduction-1" +hidden: false +createdAt: "2021-03-29T18:37:47.745Z" +updatedAt: "2021-04-15T13:55:02.440Z" +--- +If you're new to blockchain, we recommend you first begin with the remainder of this Key Concepts section in order to gain familiarity with the design patterns of blockchain networks. + +This section is may also be useful for getting to know the specifics of Topl's blockchain design as there are a few unique aspects to be aware of if you are migrating from a different blockchain network. + +Once you're comfortable with all the key concepts, you can move on to either the BaaS Portal Onboarding or Getting started sections to explore the demos, technical specifications, and APIs. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/New To Topl/networks.md b/versioned_docs/version-Dion/v1.10.2/New To Topl/networks.md new file mode 100644 index 0000000..f59c964 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/New To Topl/networks.md @@ -0,0 +1,12 @@ +--- +title: "Networks" +slug: "networks" +hidden: false +createdAt: "2021-04-05T14:23:06.302Z" +updatedAt: "2021-04-15T14:27:53.067Z" +--- +# Networks + +There are two Topl networks as well as custom networks and developer networks. + +Our Brambl API library accepts the following networkPrefixes `toplnet, valhalla, local, private" where Toplnet is the main network, Valhalla is the testing network, local and private designate developer networks running in your local environment. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/New To Topl/signing.md b/versioned_docs/version-Dion/v1.10.2/New To Topl/signing.md new file mode 100644 index 0000000..e26df7b --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/New To Topl/signing.md @@ -0,0 +1,33 @@ +--- +title: "Signing" +slug: "signing" +hidden: false +createdAt: "2021-04-01T19:19:32.850Z" +updatedAt: "2021-04-01T19:30:53.035Z" +--- +# What is Signing? + +Signing is the act of user A "signing" data that anyone can validate came from user A. This is used in transactions to check if they are real. + +A common question is "how can you validate transactions are real?". The short answer is public-key cryptography. It's an algorithm with 3 parts. + +1.) Key Creation +2.) Encryption/Signing +3.) Decryption/Validation + +Encryption is generally used to hide data in other data. If you encrypt a string like "hello world" you get something like "dqE3gJz/+5CQHfSJwMP2nQ". It's purpose is to hide the message "hello world". Signing is used to create a different output string, but you also publicize the original message. + +The key creation will output two strings, a public and private key. It links them through an algorithm that has the signing and validation properties. A signature will take in a public key, private key, and a message. The output will be another string that is the signature. + +1.) Signature = F(public key, private key, message) +2.) Validation = F(signature, message) +3.) Is Valid if: Validation = public key + +Notice how validation does not require knowledge of the private key. This is what allows 3rd parties to validate information. If the output of the validation function (at Topl, we use the parlance <>) is equal to the public key then the signature is real, otherwise, it is fake. + +The signature is made up of 3 variables. Topl employs <> and those variables are simply part of the underlying math. + +# Why Sign? +Signing is a nice way to know something is being done by the correct person. This means we can trust that someone is actually doing what they say they are. + +Instead of real world signatures, which can be faked, the digital ones can not. If you want to know user A did something, make them sign it before moving forward. Then if a dispute arises, check the signature. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/New To Topl/transactions-1.md b/versioned_docs/version-Dion/v1.10.2/New To Topl/transactions-1.md new file mode 100644 index 0000000..4f685fc --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/New To Topl/transactions-1.md @@ -0,0 +1,75 @@ +--- +title: "Transactions" +slug: "transactions-1" +hidden: false +createdAt: "2021-08-11T21:05:58.590Z" +updatedAt: "2021-08-11T21:05:58.590Z" +--- +# Introduction + +Transactions are the most important part of the Topl protocol. Everything else in Topl is designed to ensure that transactions can be created, propagated on the network, validated, and finally added to the global ledger of transactions (the blockchain). Transactions are data structures that encode the transfer of tokens between participants in the Topl system. Each transaction is a public entry in Topl's blockchain, the global bookkeeping ledger. + +In this section, we will examine all the various forms of transactions, what they contain, how to create them, how they are verified, and how they become a permanent record of all transactions. + +# Transaction Lifecycle +A transaction's lifecycle begins with the transaction's creation, also known as *origination.* The transaction is then signed with one or more signatures indicating the authorization to spend the UTXOs referenced by the transaction. The transaction is then *broadcast* on the Topl network, where each Bifrost node (participant) validates and propagates the transaction until it reaches every node in the network. Finally, the transaction is verified by a forging node, and included in a block of transactions that is recorded on the blockchain. + + + +Once recorded on the blockchain and confirmed by sufficient subsequent blocks (confirmed), the transaction is a permanent part of the Topl ledger, and is accepted as valid by all participants. The UTXOs allocated to a new owner by the transaction can then be spent in a new transaction, extending the chain of ownership and beginning the lifecycle of a transaction again. + +# Creating Transactions + +In some ways, it helps to think of a transaction in the same way as a paper check. Like a check, a transaction is an instrument that expresses the intent to transfer ownership of an asset and is not visible to the financial system until it is submitted for execution. Like a check, the originator of a transaction does not have to be the one signing the transaction. + +Currently, transactions must be created online. But transactions can be created by anyone, they do not have to have the credentials for a particular address. For example, an accounts payable clerk might process payable checks for signature by the CEO. Similarly, an accounts payable clerk can create Topl transactions and then have the CEO apply digital signatures to make them valid. Whereas a check references a specific account as the source of the funds, a Topl transaction references specific boxes that have been generated by a prior transaction as its source, rather than a particular account. + + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/b36ed30-Screen_Shot_2021-08-11_at_4.36.56_PM.png", + "Screen Shot 2021-08-11 at 4.36.56 PM.png", + 1770, + 918, + "#fcf6f3" + ] + } + ] +} +[/block] +Once a transaction has been created, it is signed by the owner (or owners) of the source of the funds. If it is properly formed and signed, the signed transaction is now valid and contains all the information needed to execute the transfer of tokens. Finally, the valid transaction has to reach the Topl network so that it can be propagated until it reaches a forger for inclusion in the public ledger (the blockchain) + +# Broadcasting Transactions to the Topl Network + +First, a transaction needs to be delivered to the Topl network so that it can be propagated and included in the blockchain. In essence, a Topl transaction is just a few bytes of data and has to reach any one of many Bifrost nodes. The senders do not need to trust the nodes they use to broadcast the transaction, as long as they use more than one to ensure that it propagates. The nodes don't need to trust the sender or establish the sender's "identity". Because the transaction is signed and contains no confidential information, private keys, or credentials, it can be publicly broadcast using the JSON-RPC routes. Unlike credit card transactions, for example, which contain sensitive information and can only be transmitted on an encrypted network, a Topl transaction can be sent over any network. As long as the transaction can reach a Topl node that will propagate it into the Topl network, it doesn't matter how it is transported to the first node. + +Topl transactions can therefore be transmitted to the Topl network over insecure networks like WiFi. As an extreme example, a Topl transaction could even be encoded in smileys (emoticons) and posted in a public forum or sent as a text message or Skype chat message. + +# Polling for Transactions on the Topl Network +Once a Topl transaction is sent to any node connected to the Topl network, the transaction will be validated by that node. If valid, that node will propagate it to the other nodes to which it is connected. If the transaction is invalid, the node will reject it and remove the transaction from the queue of transactions (mempool). + +The Topl network is a peer-to-peer network, meaning that each Bifrost node is connected to a few other Bifrost nodes that it discovers during startup through the peer-to-peer protocol. The entire network forms a loosely connected mesh without a fixed topology or any other structure, making all nodes equal peers. Messages, including transactions and blocks, are propagated from each node to the peers to which it is connected. A new validated transaction injected into any node on the network will be sent to three or four of the neighboring nodes, each of which will send it to three to four more nodes, and so on. In this way, within a few seconds a valid transaction will propagate in an exponentially expanding ripple across the network until all connected nodes have received it. + +The Topl network is designed to propagate transactions and blocks to all nodes in an efficient and resilient manner that is resistant to attacks. To prevent spamming, denial of service attacks, or other nuisance attacks against the Topl network, every node independently validates every transaction before propagating it further. A malformed transaction will not get beyond one node. + +Due to this setup, the originator should poll the mempool periodically. Once a transaction has left the mempool, it could either be because it was incorporated into a new block, or because it was malformed. Thus, after getting an unsuccessful hit from the mempool, the originator should then query the blockchain itself to see if the transaction was incorporated into a block. Only after getting a successful response from the blockchain should they proceed to using any UTXOs that were generated as a result of the transaction. This can be seen in the flow diagram below: + + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/3b69254-Screen_Shot_2021-08-11_at_5.02.53_PM.png", + "Screen Shot 2021-08-11 at 5.02.53 PM.png", + 1218, + 558, + "#fbf6f3" + ] + } + ] +} +[/block] \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/New To Topl/wallet-cryptography-and-encoding.md b/versioned_docs/version-Dion/v1.10.2/New To Topl/wallet-cryptography-and-encoding.md new file mode 100644 index 0000000..b4d43ba --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/New To Topl/wallet-cryptography-and-encoding.md @@ -0,0 +1,46 @@ +--- +title: "Recovery Phrases" +slug: "wallet-cryptography-and-encoding" +hidden: false +createdAt: "2021-10-08T21:20:21.210Z" +updatedAt: "2021-10-08T21:35:29.141Z" +--- +## Recovery Phrases + +### Motivation + +We define a way for easily entering and writing down arbitrary binary seeds using +a simple dictionary of known words (available in many different languages). + +The motivation here is to have sentence of words easy to read and write for humans, +which map uniquely back and forth to a sized binary data (harder to remember). + +### Encoding + +The process describing how to encode recovery phrases is described in [BIP-0039](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki) +section "Generating the mnemonic". Below is a reformulation of this specification. + +We call _Entropy_ an arbitrary sequence of bytes that has been generated through high +quality randomness methods. The allowed size of _Entropy_ is 96-256 bits and is +necessarily a multiple of 32 bits (4 bytes). + +A checksum is appended to the initial entropy by taking the first `ENT / 32` bits +of the SHA256 hash of it, where `ENT` designates the _Entropy_ size in bits. + +Then, the concatenated result is split into groups of 11 bits, each encoding a number +from 0 to 2047 serving as an index into a known dictionary (see below). + +| Sentence Length | Entropy Size | Checksum Size | +| ------------ | ------------------- | ------ | +| 9 words | 96 bits (12 bytes) | 3 bits | +| 12 words | 128 bits (16 bytes) | 4 bits | +| 15 words | 160 bits (20 bytes) | 5 bits | +| 18 words | 192 bits (24 bytes) | 6 bits | +| 21 words | 224 bits (28 bytes) | 7 bits | +| 24 words | 256 bits (32 bytes) | 8 bits | + +### Dictionaries + +Topl uses the same dictionaries as defined in [BIP-0039](https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md). + +--- \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/New To Topl/what-are-polys.md b/versioned_docs/version-Dion/v1.10.2/New To Topl/what-are-polys.md new file mode 100644 index 0000000..775e72d --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/New To Topl/what-are-polys.md @@ -0,0 +1,21 @@ +--- +title: "What are Polys?" +slug: "what-are-polys" +hidden: false +createdAt: "2021-03-31T20:20:07.140Z" +updatedAt: "2022-04-12T15:13:17.746Z" +--- +Polys represent the currency unit used to pay fees on the Topl blockchain. Any user who attempts to broadcast a transaction must include a set number of Polys to ensure that their transaction is included in a new block and thus added to the ledger. + +This fee acts as an incentive to the nodes running the blockchain code to continue to relay messages and keep the network available and secure. The amount of Polys required for a successful transaction is currently fixed by the network. + +1 nanopoly (10^-9 polys) is the smallest unit to which a poly can be divided. The denomination must be used when interacting with the Topl blockchain. + +So instead of entering a value of 1 poly to pay a transaction fee, you would enter a fee 10^9 nanopolys. +[block:callout] +{ + "type": "info", + "title": "Current Fees", + "body": "Currently, the transaction fee for the Valhalla testnet is set to 100 nanopoly.\n\nOn the production mainnet, transaction fees will be set to 1 poly or 10^9 nanopolys." +} +[/block] \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Raw Asset Transfer/raw-asset-transfer.md b/versioned_docs/version-Dion/v1.10.2/Raw Asset Transfer/raw-asset-transfer.md new file mode 100644 index 0000000..ddf06b2 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Raw Asset Transfer/raw-asset-transfer.md @@ -0,0 +1,7 @@ +--- +title: "Raw Asset Transfer" +slug: "raw-asset-transfer" +hidden: false +createdAt: "2021-07-09T20:54:07.327Z" +updatedAt: "2021-07-09T20:54:07.327Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/Raw Asset Transfer/raw-asset-transfer/createrawassettransfer.md b/versioned_docs/version-Dion/v1.10.2/Raw Asset Transfer/raw-asset-transfer/createrawassettransfer.md new file mode 100644 index 0000000..ce49246 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Raw Asset Transfer/raw-asset-transfer/createrawassettransfer.md @@ -0,0 +1,8 @@ +--- +title: "Create raw asset transfer" +slug: "createrawassettransfer" +excerpt: "#### Summary\nTransfer Assets from an account to a specified recipient\n\n#### Type\nRemote -- Transaction must be used in conjunction with an external key manager service.\n\n#### Description\nDefault behavior of the wallet is to find the first unlocked address which hold the targetted Asset.\nThe protocols default behavior is to combine multiple UTXOs of the same type into a single UTXO when it can.\n\n#### Notes\n- `AssetCode` in `AssetValue` can be generated using `util_generateAssetCode`\n- `fee` and `quantity` in `AssetValue` need to be strings, they will be converted into Int128 which can go up \nto 178 undecillion(2^127-1)\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|----------------------|------------------------|---------------------|-----------------------------------------------------------------------------------|\n| propositionType | String | Required | Type of proposition, eg., PublicKeyCurve25519, ThresholdCurve25519 |\n| recipients | [[String, AssetValue]] | Required | Array of addresses and assetValues for the transfer recipients(check table below) |\n| sender | [String] | Required | Array of addresses from which Assets should be sent |\n| changeAddress | String | Required | Address for recipient of unspent Polys |\n| consolidationAddress | String | Optional | Address for recipient of unspent Assets |\n| fee | String | Required | Fee for the transfer. Minting AssetTransfer requires fee to be greater than 0 |\n| minting | Boolean | Required | If this is a minting AssetTransfer or not |\n| data | String | Optional | Data string which can be associated with this transaction(may be empty). Data has a maximum value of 127 characters. |\n\n###### AssetValue\n| Fields | Data type | Required / Optional | Description |\n|--------------|-----------|---------------------|-------------------------------------------------------------------------------------------------|\n| type | String | Required | Type of transfer, should be \"Asset\" for AssetTransfer |\n| quantity | String | Required | Number of tokens in String |\n| assetCode | String | Required | Unique identifier for user issued Assets, generated from version, issuer address, and shortName |\n| securityRoot | String | Optional | Optional 32 byte commitment to instance of the AssetBox |\n| metadata | String | Optional | Metadata has a maximum value of 127 characters |" +hidden: false +createdAt: "2021-04-06T16:50:34.984Z" +updatedAt: "2021-07-09T20:54:07.470Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/Raw Poly Transfer/raw-poly-transfer.md b/versioned_docs/version-Dion/v1.10.2/Raw Poly Transfer/raw-poly-transfer.md new file mode 100644 index 0000000..7def37b --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Raw Poly Transfer/raw-poly-transfer.md @@ -0,0 +1,7 @@ +--- +title: "Raw Poly Transfer" +slug: "raw-poly-transfer" +hidden: false +createdAt: "2021-07-09T20:50:41.410Z" +updatedAt: "2021-07-09T20:50:41.410Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/Raw Poly Transfer/raw-poly-transfer/createrawpolytransfer.md b/versioned_docs/version-Dion/v1.10.2/Raw Poly Transfer/raw-poly-transfer/createrawpolytransfer.md new file mode 100644 index 0000000..3486a4a --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Raw Poly Transfer/raw-poly-transfer/createrawpolytransfer.md @@ -0,0 +1,8 @@ +--- +title: "Create raw poly transfer" +slug: "createrawpolytransfer" +excerpt: "#### Summary\nTransfer Polys from an account to a specified recipient.\n\n#### Type\nRemote -- Transaction must be used in conjunction with an external key manager service.\n\n#### Description\nDefault behavior of the wallet is to find the first unlocked address which hold Polys.\nThe protocols default behavior is to combine multiple UTXOs of the same type into a single UTXO when it can.\n\n#### Notes\n- `fee` and Poly amounts in `recipients` need to be strings, they will be converted into Int128 which can go up\nto 178 undecillion(2^127-1)\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|-----------------|--------------------|---------------------|--------------------------------------------------------------------------|\n| propositionType | String | Required | Type of proposition, eg., PublicKeyCurve25519, ThresholdCurve25519 |\n| recipients | [[String, String]] | Required | Array of addresses and Poly amounts for the corresponding recipients |\n| sender | [String] | Required | Array of addresses from which Poly should be sent |\n| changeAddress | String | Required | Address for recipient of unspent Polys |\n| fee | String | Required | Fee for the transfer |\n| data | String | Optional | Data string which can be associated with this transaction (may be empty). Data has a maximum value of 127 Latin-1 encoded characters |" +hidden: false +createdAt: "2021-07-09T20:50:41.563Z" +updatedAt: "2021-07-09T20:50:41.563Z" +--- diff --git a/versioned_docs/version-Dion/v1.10.2/Release Notes/topl-protocol-release-notes.md b/versioned_docs/version-Dion/v1.10.2/Release Notes/topl-protocol-release-notes.md new file mode 100644 index 0000000..0dd5eaf --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Release Notes/topl-protocol-release-notes.md @@ -0,0 +1,32 @@ +--- +title: "Topl Protocol Release Notes" +slug: "topl-protocol-release-notes" +hidden: false +createdAt: "2021-03-29T18:35:07.099Z" +updatedAt: "2021-11-10T19:10:33.647Z" +--- +The release notes provide more details for users who are planning on using the BaaS + +# Topl Protocol Release Notes +* [Bifrost v1.8.0](https://github.com/Topl/Bifrost/releases/tag/v1.8.0) +* [Bifrost v.1.6.3](https://github.com/Topl/Bifrost/releases/tag/v1.6.3) +* [Bifrost v1.4.3] (https://github.com/Topl/Bifrost/releases/tag/v1.4.3) +* [Bifrost v1.3.4 jar](https://repo.topl.network/bifrost-1.3.4.jar) +* [Bifrost v1.3.3 release notes](https://github.com/Topl/Bifrost/releases/tag/v1.3.3) +* [Bifrost v1.0.0 release notes](https://github.com/Topl/Bifrost/releases/tag/v1.0.0) + +# BramblSC +* [BramblSC v1.8.0](https://github.com/Topl/Bifrost/releases/tag/v1.8.0) +* [BramblSC v1.6.3](https://github.com/Topl/Bifrost/releases/tag/v1.6.3) +* [BramblSC v0.1.0](https://github.com/Topl/BramblSc) + +# BramblJS +* [BramblJS 1.3.0](https://github.com/Topl/BramblJS/releases/tag/1.3.0) +* [BramblJS v1.2.3](https://www.npmjs.com/package/brambljs) +* BramblJS v1.2.2 (Notes to be completed soon) +* [BramblJS v1.2.1](https://github.com/Topl/BramblJS/releases/tag/v1.2.1) +* [BramblJS v1.1.1](https://github.com/Topl/BramblJS/releases/tag/v1.1.1) +*[BramblJS v1.0.1](https://github.com/Topl/BramblJS/releases/tag/v1.0.1) + +#BramblDart +* [BramblDart 0.0.1](https://github.com/Topl/BramblDart/releases/tag/v0.0.1) \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Still have questions-/additional-resources.md b/versioned_docs/version-Dion/v1.10.2/Still have questions-/additional-resources.md new file mode 100644 index 0000000..725c5ab --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Still have questions-/additional-resources.md @@ -0,0 +1,15 @@ +--- +title: "Additional Resources" +slug: "additional-resources" +hidden: false +createdAt: "2021-03-29T18:55:31.034Z" +updatedAt: "2021-11-10T19:09:07.464Z" +--- +We try to maintain a comprehensive set of documentation for various audiences. However, we realize that often there are questions that remain unanswered. + +### Community +- [Discord][discord-url] +- [StackExchange][stackexchange-url] + +[discord-url]: https://discord.gg/mre2Dazqsy +[stackexchange-url]: https://bitcoin.stackexchange.com/questions/tagged/topl \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Still have questions-/bibliography.md b/versioned_docs/version-Dion/v1.10.2/Still have questions-/bibliography.md new file mode 100644 index 0000000..73899e4 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Still have questions-/bibliography.md @@ -0,0 +1,10 @@ +--- +title: "Bibliography" +slug: "bibliography" +hidden: false +createdAt: "2021-08-23T17:39:51.187Z" +updatedAt: "2021-10-08T18:59:33.146Z" +--- +Blockchain Explorer overview can be found in more detail here: https://coinmarketcap.com/guides/blockexplorer + +Big thanks to Cardano for their open source work on the Bip-44 HD wallet derivation schemes as well as their robust documentation. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Topl Addresses/install.md b/versioned_docs/version-Dion/v1.10.2/Topl Addresses/install.md new file mode 100644 index 0000000..fb20513 --- /dev/null +++ b/versioned_docs/version-Dion/v1.10.2/Topl Addresses/install.md @@ -0,0 +1,53 @@ +--- +title: "Install" +slug: "install" +hidden: false +createdAt: "2021-08-27T19:57:21.680Z" +updatedAt: "2021-10-18T20:07:14.034Z" +--- +# Command Line +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/16d2ea9-keyboard-4d5a3e1a.svg", + "keyboard-4d5a3e1a.svg", + 320, + 320, + "#998099" + ] + } + ] +} +[/block] +## Install Anywhere (npm) +If you use Node.js, you can install Topl Addresses using [npm](https://www.npmjs.com/) by running `npm install -g bip_topl` + +However, please note that this will install the pure JavaScript implementation of Topl Addresses, which runs somewhat slower than the other options listed here. But it has the same interface, so it'll be easy to swap in another implementation later if you need a bit more speed! + +Once you have run the above command, don't forget to `require()` it as a library! + +When install via npm, Topl Addresses supports a Javascript API that aims to be compatible with Node. Full compatibility is a work in progress. + +## Dart Library +You can also use Dart Bip for Topl to get the speed of the Dart VM plus the ability to extend functions. To add it to an existing project: + +1.) [Install the Dart SDK](https://dart.dev/get-dart#automated-installation-and-updates). Make sure that its bin directory is [on your path](https://katiek2.github.io/path-doc/). +2.) Create a pubspec.yaml file like this: + + + +[block:code] +{ + "codes": [ + { + "code": "name: my_project\ndev_dependencies:\n\tbip_topl: ^x.y.z", + "language": "yaml" + } + ] +} +[/block] +3.) Run dart pub get + +5.) Learn more about [writing Dart code](https://dart.dev/guides/language/language-tour) (it's easy!) \ No newline at end of file diff --git a/versioned_docs/version-Tetra/intro.md b/versioned_docs/version-Tetra/intro.md new file mode 100644 index 0000000..8a2e69d --- /dev/null +++ b/versioned_docs/version-Tetra/intro.md @@ -0,0 +1,47 @@ +--- +sidebar_position: 1 +--- + +# Tutorial Intro + +Let's discover **Docusaurus in less than 5 minutes**. + +## Getting Started + +Get started by **creating a new site**. + +Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new)**. + +### What you'll need + +- [Node.js](https://nodejs.org/en/download/) version 16.14 or above: + - When installing Node.js, you are recommended to check all checkboxes related to dependencies. + +## Generate a new site + +Generate a new Docusaurus site using the **classic template**. + +The classic template will automatically be added to your project after you run the command: + +```bash +npm init docusaurus@latest my-website classic +``` + +You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor. + +The command also installs all necessary dependencies you need to run Docusaurus. + +## Start your site + +Run the development server: + +```bash +cd my-website +npm run start +``` + +The `cd` command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there. + +The `npm run start` command builds your website locally and serves it through a development server, ready for you to view at http://localhost:3000/. + +Open `docs/intro.md` (this page) and edit some lines: the site **reloads automatically** and displays your changes. diff --git a/versioned_docs/version-Tetra/tutorial-basics/_category_.json b/versioned_docs/version-Tetra/tutorial-basics/_category_.json new file mode 100644 index 0000000..2e6db55 --- /dev/null +++ b/versioned_docs/version-Tetra/tutorial-basics/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Tutorial - Basics", + "position": 2, + "link": { + "type": "generated-index", + "description": "5 minutes to learn the most important Docusaurus concepts." + } +} diff --git a/versioned_docs/version-Tetra/tutorial-basics/congratulations.md b/versioned_docs/version-Tetra/tutorial-basics/congratulations.md new file mode 100644 index 0000000..04771a0 --- /dev/null +++ b/versioned_docs/version-Tetra/tutorial-basics/congratulations.md @@ -0,0 +1,23 @@ +--- +sidebar_position: 6 +--- + +# Congratulations! + +You have just learned the **basics of Docusaurus** and made some changes to the **initial template**. + +Docusaurus has **much more to offer**! + +Have **5 more minutes**? Take a look at **[versioning](../tutorial-extras/manage-docs-versions.md)** and **[i18n](../tutorial-extras/translate-your-site.md)**. + +Anything **unclear** or **buggy** in this tutorial? [Please report it!](https://github.com/facebook/docusaurus/discussions/4610) + +## What's next? + +- Read the [official documentation](https://docusaurus.io/) +- Modify your site configuration with [`docusaurus.config.js`](https://docusaurus.io/docs/api/docusaurus-config) +- Add navbar and footer items with [`themeConfig`](https://docusaurus.io/docs/api/themes/configuration) +- Add a custom [Design and Layout](https://docusaurus.io/docs/styling-layout) +- Add a [search bar](https://docusaurus.io/docs/search) +- Find inspirations in the [Docusaurus showcase](https://docusaurus.io/showcase) +- Get involved in the [Docusaurus Community](https://docusaurus.io/community/support) diff --git a/versioned_docs/version-Tetra/tutorial-basics/create-a-blog-post.md b/versioned_docs/version-Tetra/tutorial-basics/create-a-blog-post.md new file mode 100644 index 0000000..ea472bb --- /dev/null +++ b/versioned_docs/version-Tetra/tutorial-basics/create-a-blog-post.md @@ -0,0 +1,34 @@ +--- +sidebar_position: 3 +--- + +# Create a Blog Post + +Docusaurus creates a **page for each blog post**, but also a **blog index page**, a **tag system**, an **RSS** feed... + +## Create your first Post + +Create a file at `blog/2021-02-28-greetings.md`: + +```md title="blog/2021-02-28-greetings.md" +--- +slug: greetings +title: Greetings! +authors: + - name: Joel Marcey + title: Co-creator of Docusaurus 1 + url: https://github.com/JoelMarcey + image_url: https://github.com/JoelMarcey.png + - name: Sébastien Lorber + title: Docusaurus maintainer + url: https://sebastienlorber.com + image_url: https://github.com/slorber.png +tags: [greetings] +--- + +Congratulations, you have made your first post! + +Feel free to play around and edit this post as much you like. +``` + +A new blog post is now available at [http://localhost:3000/blog/greetings](http://localhost:3000/blog/greetings). diff --git a/versioned_docs/version-Tetra/tutorial-basics/create-a-document.md b/versioned_docs/version-Tetra/tutorial-basics/create-a-document.md new file mode 100644 index 0000000..ffddfa8 --- /dev/null +++ b/versioned_docs/version-Tetra/tutorial-basics/create-a-document.md @@ -0,0 +1,57 @@ +--- +sidebar_position: 2 +--- + +# Create a Document + +Documents are **groups of pages** connected through: + +- a **sidebar** +- **previous/next navigation** +- **versioning** + +## Create your first Doc + +Create a Markdown file at `docs/hello.md`: + +```md title="docs/hello.md" +# Hello + +This is my **first Docusaurus document**! +``` + +A new document is now available at [http://localhost:3000/docs/hello](http://localhost:3000/docs/hello). + +## Configure the Sidebar + +Docusaurus automatically **creates a sidebar** from the `docs` folder. + +Add metadata to customize the sidebar label and position: + +```md title="docs/hello.md" {1-4} +--- +sidebar_label: 'Hi!' +sidebar_position: 3 +--- + +# Hello + +This is my **first Docusaurus document**! +``` + +It is also possible to create your sidebar explicitly in `sidebars.js`: + +```js title="sidebars.js" +module.exports = { + tutorialSidebar: [ + 'intro', + // highlight-next-line + 'hello', + { + type: 'category', + label: 'Tutorial', + items: ['tutorial-basics/create-a-document'], + }, + ], +}; +``` diff --git a/versioned_docs/version-Tetra/tutorial-basics/create-a-page.md b/versioned_docs/version-Tetra/tutorial-basics/create-a-page.md new file mode 100644 index 0000000..20e2ac3 --- /dev/null +++ b/versioned_docs/version-Tetra/tutorial-basics/create-a-page.md @@ -0,0 +1,43 @@ +--- +sidebar_position: 1 +--- + +# Create a Page + +Add **Markdown or React** files to `src/pages` to create a **standalone page**: + +- `src/pages/index.js` → `localhost:3000/` +- `src/pages/foo.md` → `localhost:3000/foo` +- `src/pages/foo/bar.js` → `localhost:3000/foo/bar` + +## Create your first React Page + +Create a file at `src/pages/my-react-page.js`: + +```jsx title="src/pages/my-react-page.js" +import React from 'react'; +import Layout from '@theme/Layout'; + +export default function MyReactPage() { + return ( + +

My React page

+

This is a React page

+
+ ); +} +``` + +A new page is now available at [http://localhost:3000/my-react-page](http://localhost:3000/my-react-page). + +## Create your first Markdown Page + +Create a file at `src/pages/my-markdown-page.md`: + +```mdx title="src/pages/my-markdown-page.md" +# My Markdown page + +This is a Markdown page +``` + +A new page is now available at [http://localhost:3000/my-markdown-page](http://localhost:3000/my-markdown-page). diff --git a/versioned_docs/version-Tetra/tutorial-basics/deploy-your-site.md b/versioned_docs/version-Tetra/tutorial-basics/deploy-your-site.md new file mode 100644 index 0000000..1c50ee0 --- /dev/null +++ b/versioned_docs/version-Tetra/tutorial-basics/deploy-your-site.md @@ -0,0 +1,31 @@ +--- +sidebar_position: 5 +--- + +# Deploy your site + +Docusaurus is a **static-site-generator** (also called **[Jamstack](https://jamstack.org/)**). + +It builds your site as simple **static HTML, JavaScript and CSS files**. + +## Build your site + +Build your site **for production**: + +```bash +npm run build +``` + +The static files are generated in the `build` folder. + +## Deploy your site + +Test your production build locally: + +```bash +npm run serve +``` + +The `build` folder is now served at [http://localhost:3000/](http://localhost:3000/). + +You can now deploy the `build` folder **almost anywhere** easily, **for free** or very small cost (read the **[Deployment Guide](https://docusaurus.io/docs/deployment)**). diff --git a/versioned_docs/version-Tetra/tutorial-basics/markdown-features.mdx b/versioned_docs/version-Tetra/tutorial-basics/markdown-features.mdx new file mode 100644 index 0000000..6b3aaaa --- /dev/null +++ b/versioned_docs/version-Tetra/tutorial-basics/markdown-features.mdx @@ -0,0 +1,146 @@ +--- +sidebar_position: 4 +--- + +# Markdown Features + +Docusaurus supports **[Markdown](https://daringfireball.net/projects/markdown/syntax)** and a few **additional features**. + +## Front Matter + +Markdown documents have metadata at the top called [Front Matter](https://jekyllrb.com/docs/front-matter/): + +```text title="my-doc.md" +// highlight-start +--- +id: my-doc-id +title: My document title +description: My document description +slug: /my-custom-url +--- +// highlight-end + +## Markdown heading + +Markdown text with [links](./hello.md) +``` + +## Links + +Regular Markdown links are supported, using url paths or relative file paths. + +```md +Let's see how to [Create a page](/create-a-page). +``` + +```md +Let's see how to [Create a page](./create-a-page.md). +``` + +**Result:** Let's see how to [Create a page](./create-a-page.md). + +## Images + +Regular Markdown images are supported. + +You can use absolute paths to reference images in the static directory (`static/img/docusaurus.png`): + +```md +![Docusaurus logo](/img/docusaurus.png) +``` + +![Docusaurus logo](/img/docusaurus.png) + +You can reference images relative to the current file as well, as shown in [the extra guides](../tutorial-extras/manage-docs-versions.md). + +## Code Blocks + +Markdown code blocks are supported with Syntax highlighting. + + ```jsx title="src/components/HelloDocusaurus.js" + function HelloDocusaurus() { + return ( +

Hello, Docusaurus!

+ ) + } + ``` + +```jsx title="src/components/HelloDocusaurus.js" +function HelloDocusaurus() { + return

Hello, Docusaurus!

; +} +``` + +## Admonitions + +Docusaurus has a special syntax to create admonitions and callouts: + + :::tip My tip + + Use this awesome feature option + + ::: + + :::danger Take care + + This action is dangerous + + ::: + +:::tip My tip + +Use this awesome feature option + +::: + +:::danger Take care + +This action is dangerous + +::: + +## MDX and React Components + +[MDX](https://mdxjs.com/) can make your documentation more **interactive** and allows using any **React components inside Markdown**: + +```jsx +export const Highlight = ({children, color}) => ( + { + alert(`You clicked the color ${color} with label ${children}`) + }}> + {children} + +); + +This is Docusaurus green ! + +This is Facebook blue ! +``` + +export const Highlight = ({children, color}) => ( + { + alert(`You clicked the color ${color} with label ${children}`); + }}> + {children} + +); + +This is Docusaurus green ! + +This is Facebook blue ! diff --git a/versioned_docs/version-Tetra/tutorial-extras/_category_.json b/versioned_docs/version-Tetra/tutorial-extras/_category_.json new file mode 100644 index 0000000..a8ffcc1 --- /dev/null +++ b/versioned_docs/version-Tetra/tutorial-extras/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "Tutorial - Extras", + "position": 3, + "link": { + "type": "generated-index" + } +} diff --git a/versioned_docs/version-Tetra/tutorial-extras/img/docsVersionDropdown.png b/versioned_docs/version-Tetra/tutorial-extras/img/docsVersionDropdown.png new file mode 100644 index 0000000000000000000000000000000000000000..97e4164618b5f8beda34cfa699720aba0ad2e342 GIT binary patch literal 25427 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 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-Tetra/tutorial-extras/img/localeDropdown.png b/versioned_docs/version-Tetra/tutorial-extras/img/localeDropdown.png new file mode 100644 index 0000000000000000000000000000000000000000..e257edc1f932985396bf59584c7ccfaddf955779 GIT binary patch literal 27841 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 JrC|B>e*nH7H{}2T literal 0 HcmV?d00001 diff --git a/versioned_docs/version-Tetra/tutorial-extras/manage-docs-versions.md b/versioned_docs/version-Tetra/tutorial-extras/manage-docs-versions.md new file mode 100644 index 0000000..e12c3f3 --- /dev/null +++ b/versioned_docs/version-Tetra/tutorial-extras/manage-docs-versions.md @@ -0,0 +1,55 @@ +--- +sidebar_position: 1 +--- + +# Manage Docs Versions + +Docusaurus can manage multiple versions of your docs. + +## Create a docs version + +Release a version 1.0 of your project: + +```bash +npm run docusaurus docs:version 1.0 +``` + +The `docs` folder is copied into `versioned_docs/version-1.0` and `versions.json` is created. + +Your docs now have 2 versions: + +- `1.0` at `http://localhost:3000/docs/` for the version 1.0 docs +- `current` at `http://localhost:3000/docs/next/` for the **upcoming, unreleased docs** + +## Add a Version Dropdown + +To navigate seamlessly across versions, add a version dropdown. + +Modify the `docusaurus.config.js` file: + +```js title="docusaurus.config.js" +module.exports = { + themeConfig: { + navbar: { + items: [ + // highlight-start + { + type: 'docsVersionDropdown', + }, + // highlight-end + ], + }, + }, +}; +``` + +The docs version dropdown appears in your navbar: + +![Docs Version Dropdown](./img/docsVersionDropdown.png) + +## Update an existing version + +It is possible to edit versioned docs in their respective folder: + +- `versioned_docs/version-1.0/hello.md` updates `http://localhost:3000/docs/hello` +- `docs/hello.md` updates `http://localhost:3000/docs/next/hello` diff --git a/versioned_docs/version-Tetra/tutorial-extras/translate-your-site.md b/versioned_docs/version-Tetra/tutorial-extras/translate-your-site.md new file mode 100644 index 0000000..caeaffb --- /dev/null +++ b/versioned_docs/version-Tetra/tutorial-extras/translate-your-site.md @@ -0,0 +1,88 @@ +--- +sidebar_position: 2 +--- + +# Translate your site + +Let's translate `docs/intro.md` to French. + +## Configure i18n + +Modify `docusaurus.config.js` to add support for the `fr` locale: + +```js title="docusaurus.config.js" +module.exports = { + i18n: { + defaultLocale: 'en', + locales: ['en', 'fr'], + }, +}; +``` + +## Translate a doc + +Copy the `docs/intro.md` file to the `i18n/fr` folder: + +```bash +mkdir -p i18n/fr/docusaurus-plugin-content-docs/current/ + +cp docs/intro.md i18n/fr/docusaurus-plugin-content-docs/current/intro.md +``` + +Translate `i18n/fr/docusaurus-plugin-content-docs/current/intro.md` in French. + +## Start your localized site + +Start your site on the French locale: + +```bash +npm run start -- --locale fr +``` + +Your localized site is accessible at [http://localhost:3000/fr/](http://localhost:3000/fr/) and the `Getting Started` page is translated. + +:::caution + +In development, you can only use one locale at a same time. + +::: + +## Add a Locale Dropdown + +To navigate seamlessly across languages, add a locale dropdown. + +Modify the `docusaurus.config.js` file: + +```js title="docusaurus.config.js" +module.exports = { + themeConfig: { + navbar: { + items: [ + // highlight-start + { + type: 'localeDropdown', + }, + // highlight-end + ], + }, + }, +}; +``` + +The locale dropdown now appears in your navbar: + +![Locale Dropdown](./img/localeDropdown.png) + +## Build your localized site + +Build your site for a specific locale: + +```bash +npm run build -- --locale fr +``` + +Or build your site to include all the locales at once: + +```bash +npm run build +``` diff --git a/versioned_docs/version-Tetra/v1.10.2/Annulus/main-search-bar.md b/versioned_docs/version-Tetra/v1.10.2/Annulus/main-search-bar.md new file mode 100644 index 0000000..f9531bd --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Annulus/main-search-bar.md @@ -0,0 +1,29 @@ +--- +title: "Main Search Bar" +slug: "main-search-bar" +hidden: false +createdAt: "2021-08-23T17:46:57.382Z" +updatedAt: "2021-08-23T20:11:42.664Z" +--- +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/4057ab9-Screen_Shot_2021-08-23_at_1.47.14_PM.png", + "Screen Shot 2021-08-23 at 1.47.14 PM.png", + 3360, + 746, + "#8fd9cd" + ] + } + ] +} +[/block] +#Main Search Bar + +The main search bar is where you can look up something specific right away. As a block explorer user, you can perform a search for either a block (by height or by block hash) or a transaction (by ID or transaction hash). + +One common use case that you can try on the block explorer is checking on the status of a transaction. (We always recommend the copy and paste method to prevent typing errors!) + +Within a block, there can be hundreds of approved transactions, so we do not recommend searching for a specific transaction by scrolling through the pages (of course, unless you want to!). \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Annulus/overview-page.md b/versioned_docs/version-Tetra/v1.10.2/Annulus/overview-page.md new file mode 100644 index 0000000..dea238a --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Annulus/overview-page.md @@ -0,0 +1,64 @@ +--- +title: "Overview Page" +slug: "overview-page" +hidden: false +createdAt: "2021-08-23T17:41:05.303Z" +updatedAt: "2021-11-10T19:03:43.293Z" +--- +#Overview Page +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/9ff1fab-Screen_Shot_2021-08-23_at_1.41.54_PM.png", + "Screen Shot 2021-08-23 at 1.41.54 PM.png", + 3356, + 2094, + "#c2e5df" + ] + } + ] +} +[/block] +Upon landing on the Annulus site, you'll be greeted by the overview and a few important elements. On the left side of the header, you'll see the Topl logo which takes you back to this overview screen at any time! + +The **average block time** refers to the average time to forge a new block over a 24-hour period. This number changes depending on difficulty parameters of a given network. + +**Unconfirmed Transactions** are transactions that have been broadcast but are yet to be confirmed by forgers. Since transactions are confirmed in blocks (batches), every transaction will at first be unconfirmed. However, if a transaction remains unconfirmed for more than a few minutes, it may mean that the transaction fee paid with the transaction was too low. Transaction fees act as an incentive for forgers to process a transaction, so a fee below the network minimum would result in the transaction never being confirmed into a block. + +Beginning with the first column in the Blocks section, "Block Height" refers to the index of a given block, which number block is it in the chain. The next column provides the number of transaction present in each block. The last column records the date and time it was completed (in YYYY/MM/DD hh:mm:ss format). + +Should you want to view more details on a specific block, clicking on the block height will take you to all the transactions contained in that specific block. +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/d1a983b-Screen_Shot_2021-08-23_at_1.42.48_PM.png", + "Screen Shot 2021-08-23 at 1.42.48 PM.png", + 3356, + 172, + "#fcfdfc" + ] + } + ] +} +[/block] + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/e0459c0-Screen_Shot_2021-08-23_at_2.28.00_PM.png", + "Screen Shot 2021-08-23 at 2.28.00 PM.png", + 2392, + 1722, + "#f7f8f8" + ] + } + ] +} +[/block] +As an example, we have clicked on block [62855](https://toplnet.annulus.topl.services/#/block/234AsNJz29kQzRpemokJi6ANDHbCxcS4Nv6iDC16B9TTt) to gain more information. The first part shows the block header and its summary, In the "Transactions" subheader below, alphanumeric transaction IDs will be listed. The first two transactions in a Topl block are the block reward sent to the forger or set of forgers who generated the block. This is why you will see that those transactions have 0 in fees. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Annulus/recent-blocks.md b/versioned_docs/version-Tetra/v1.10.2/Annulus/recent-blocks.md new file mode 100644 index 0000000..003821f --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Annulus/recent-blocks.md @@ -0,0 +1,33 @@ +--- +title: "Recent Blocks" +slug: "recent-blocks" +hidden: false +createdAt: "2021-08-23T18:13:52.046Z" +updatedAt: "2021-08-23T20:13:25.986Z" +--- +# Recent Blocks + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/48a834d-Screen_Shot_2021-08-23_at_1.54.30_PM.png", + "Screen Shot 2021-08-23 at 1.54.30 PM.png", + 2388, + 1660, + "#f0f2f0" + ] + } + ] +} +[/block] +To the right of the overview screen on the header, there is a button from which you can search recent blocks. Blocks are chained to each other in the order that they are created and always contain the unique hash number of the previous block. + +This view of the blocks is constantly updated with newer blocks entering at the top and pushing older blocks down the list. The blocks are sized (in KB) proportionally to the number of transactions executed, so the larger the size, the more transactions that were included in the block. This size depends on how many people have been trying to transact during a certain period, and how many of those transactions have been validated. + +A transaction becomes more "final" as new blocks are added onto the existing chain since the deeper a block is buried, the more likely that everyone on the network will have heard about it. + +The table also contains the <>, block ID, timestamp when the block was forged, and the generator that was used to forge the block. + +Once blocks are created, the records that they contain are permanent and can't be altered or deleted. This is what makes blockchain technology tamper-proof as only new data can be added on the block. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Annulus/simplifying-the-blockchain.md b/versioned_docs/version-Tetra/v1.10.2/Annulus/simplifying-the-blockchain.md new file mode 100644 index 0000000..a5674e7 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Annulus/simplifying-the-blockchain.md @@ -0,0 +1,25 @@ +--- +title: "Simplifying the Blockchain" +slug: "simplifying-the-blockchain" +hidden: false +createdAt: "2021-08-23T17:39:03.391Z" +updatedAt: "2021-11-10T19:03:07.106Z" +--- +# Simplifying the Blockchain + +If you'd like to become confident in using a Topl block explorer and fully understand its functionality, we're here to guide you through Annulus. To start off, you can open up [Annulus](https://toplnet.annulus.topl.services/) in your web browser and follow along using the guide. + +First, what's a block explorer? To provide some basic terms, a <> is a blockchain search engine that allows you to search for a particular piece of information on the blockchain. The activities carried out on blockchains are known as <>s, which occur when crypto-tokens are sent to and from wallet addresses. Blocks on the blockchain are collections of transactions that were processed and approved by special nodes known as forgers. + +To recap, a <> is an online tool to view all transactions that have taken place on the blockchain, the current network hash rate, and transactions between blockchain addresses, amongst other useful information. You can think of it as a window into the blockchain world, giving you the opportunity to observe what's happening there. + +Our block explorer visually displays block activity as it is confirmed in real-time, which allows users to take a more engaged approach to the data. Users can look up a particular block height, and inspect it at another level by viewing the transaction details that make up a block. + +# Who uses a Block Explorer? +For one, developers and users, who often exchange polys and assets will utilize the block explorer to check on the status of their transactions. Once users initiate transactions, they will receive an automatically generated transaction hash and can use it to look up details of the transaction and whether it was successful. + +Forgers will use the block explorer to confirm significant block activity, especially to check if they have been successful in generating a particular block, which means they will receive the block reward. + +Have fun on your blockchain journey! Our aim for the block explorer is a no-frills, user-friendly tool that gives users easy access to data from multiple search vantages and provides a more intuitive understanding of the data. + +On the next page, let's take a deeper look at the <> \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Annulus/transactions-view.md b/versioned_docs/version-Tetra/v1.10.2/Annulus/transactions-view.md new file mode 100644 index 0000000..6d0c7ca --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Annulus/transactions-view.md @@ -0,0 +1,63 @@ +--- +title: "Transactions View" +slug: "transactions-view" +hidden: false +createdAt: "2021-08-23T18:32:25.766Z" +updatedAt: "2021-08-23T20:17:20.313Z" +--- +#Transactions View +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/ef637eb-Screen_Shot_2021-08-23_at_2.32.39_PM.png", + "Screen Shot 2021-08-23 at 2.32.39 PM.png", + 2566, + 1652, + "#edf2f2" + ] + } + ] +} +[/block] +To take a closer look at data on the Topl Blockchain, select the "Transactions" tab to see the individual transactions within their associated block. <>s refer to the act of sending or receiving crypto-tokens. Each transaction ID (also known as TxHash or TxId) is generated by a hashing algorithm according to the information contained in that particular transaction. This transaction ID can be used as a digital proof of payment/transfer. Altering that info in any way causes the transaction ID to change and alerts users that the data has been tampered with. Recipients of a Topl transaction may also look up the transaction by its transaction ID to see its status and confirm whether tokens have arrived in their addresses. + +Sending tokens requires a transaction fee in the same way that it costs money to make a bank transfer. The key difference is that crypto fees are very minimal compared to traditional bank fees. In fact, whether you send 6 million polys or 6 polys, the fee remains constant. +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/cac392c-Screen_Shot_2021-08-23_at_2.42.23_PM.png", + "Screen Shot 2021-08-23 at 2.42.23 PM.png", + 3358, + 2090, + "#fbfbfb" + ] + } + ] +} +[/block] +Clicking on any TxId on the Transactions page brings you to a dedicated page for that specific transaction. On this transaction page, you will be able to see whether the transaction has been successfully confirmed or is still pending (under Status). + +As a general rule, a secure transaction requires 30 blocks to be confirmed above the block in which the transaction was included, which takes about 7.5 minutes on the Topl Blockchain (one block is generated every 15 seconds or so). + +#Topl Transactions: UTXO's + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/f2f8128-Screen_Shot_2021-08-23_at_2.51.11_PM.png", + "Screen Shot 2021-08-23 at 2.51.11 PM.png", + 2308, + 770, + "#f8f9f9" + ] + } + ] +} +[/block] +In this Topl transaction, you'll notice two outputs that contain two different amounts under the "Outputs" sections. A Topl address does not only contain one balance per token, but is rather made up of multiple, smaller balances known as unspent transaction outputs, or UTXO's which create a lump sum that makes up an overall balance. These UTXO's remain intact until a transaction is initiated and then are randomly selected one by one until it meets or exceeds the transaction amount for the given token. At this moment, unspent transaction outputs are broken up so that the correct amount, including fees, are distributed while the remaining value of the tokens are returned to the sender as change or consolidation. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/adding-polys.md b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/adding-polys.md new file mode 100644 index 0000000..e4a1628 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/adding-polys.md @@ -0,0 +1,66 @@ +--- +title: "Adding Polys" +slug: "adding-polys" +hidden: false +createdAt: "2021-03-23T17:52:21.694Z" +updatedAt: "2021-07-06T19:09:37.056Z" +--- +As discussed previously, polys are required in order to submit transactions to the Topl blockchain. + + +[block:callout] +{ + "type": "danger", + "title": "Note:", + "body": "You must have an address in order to add polys to your address. You can follow our documentation to generate an address using one of our Brambl libraries (see the Topl Blockchain Address page)" +} +[/block] +# How can I get Polys? +It's actually pretty easy, follow these steps: + +#First Step + After logging into the BaaS Portal, go to Settings and find the Purchase Polys section on the page. From there, you can transfer funds to the address directly through the UI! + + + + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/3a0e7a6-Topl_-_API_Console.gif", + "Topl - API Console.gif", + 640, + 400, + "#e1ecea" + ] + } + ] +} +[/block] +You will need to wait until the funds are confirmed to use them. The confirmation status will look something like this: +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/885bf20-Screen_Shot_2021-07-06_at_12.55.27_PM.png", + "Screen Shot 2021-07-06 at 12.55.27 PM.png", + 2296, + 354, + "#fafafa" + ] + } + ] +} +[/block] + +[block:callout] +{ + "type": "info", + "title": "Note:", + "body": "Polys used on our testing network our free, however, you will have to pay to acquire polys on our main network. In addition, you can only request one faucet transaction on the testnet for every 6 hours. This ensures that there will be enough test polys for all of our users." +} +[/block] +If you are wanting to add polys to an account on our mainnet (toplnet), please follow the steps above but use the mainnet dropdown instead of the valhalla dropdown. You should be redirected to stripe where you can purchase polys on the main network. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/choosing-a-network.md b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/choosing-a-network.md new file mode 100644 index 0000000..6acf8ab --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/choosing-a-network.md @@ -0,0 +1,36 @@ +--- +title: "Choosing a Network" +slug: "choosing-a-network" +hidden: false +createdAt: "2021-11-11T19:42:32.238Z" +updatedAt: "2021-11-11T19:47:04.058Z" +--- +#Choosing a network +Use one of the following endpoints as url to which you will connect with a Brambl library or directly via cURL + + +[block:callout] +{ + "type": "info", + "title": "Note", + "body": "Be sure to replace `YOUR-PROJECT-ID` with a Project ID from your [BaaS Dashboard](https://topl.services)" +} +[/block] + +[block:parameters] +{ + "data": { + "h-0": "Network", + "h-1": "Connection Supported", + "h-2": "URL", + "0-0": "Mainnet", + "0-1": "JSON_RPC over HTTPS", + "0-2": "https://vertx.topl.services/mainnet/YOUR-PROJECT-ID", + "1-0": "Valhalla", + "1-1": "JSON_RPC over HTTPS", + "1-2": "https://vertx.topl.services/valhalla/YOUR-PROJECT-ID" + }, + "cols": 3, + "rows": 2 +} +[/block] \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/creating-a-project.md b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/creating-a-project.md new file mode 100644 index 0000000..3f0a331 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/creating-a-project.md @@ -0,0 +1,83 @@ +--- +title: "Creating a Project" +slug: "creating-a-project" +hidden: false +createdAt: "2021-03-22T21:00:33.504Z" +updatedAt: "2022-03-29T14:36:04.395Z" +--- +There are so many different use cases that can be explored using Topl's blockchain, however, the first step will always be creating a project. + +## Creating a new project for an organization + +To begin interfacing with the Topl blockchain, you'll once again go to the menu on the left-hand side of the screen and click on your Organization Name. From the Organization Page, navigate to projects from where you should find a "Create New Project" button on the right hand side. + + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/22cb408-organization_project_2.gif", + "organization_project_2.gif", + 640, + 344, + "#f6f8f6" + ] + } + ] +} +[/block] +Once you have clicked on the create new project button, you will be shown a screen where you can enter the project name in addition to being able to select which Topl BaaS Offerings you want to add to the project (Torus or Genus). +[block:callout] +{ + "type": "info", + "title": "Torus and Genus", + "body": "Torus enables you to send information to the Topl network while Genus allows you to listen for a response, useful as blockchains are asynchronous. Genus is still under development and should be released later on this year." +} +[/block] +## Projects Page + +From here, you will have access to your projects dashboard. You will be able to view the services for which your projects have been created (Torus/Genus), monitor request activity statistics and the ability to manage your projects for your organization. + +If you are running out of project space within your organization, you can always choose to update your subscription plan at the bottom of this page! + +## Individual Project Page + +You can view any project that is a part of your organization through the view button on the right hand side of the box containing the project. +From here, you'll notice a few main features that are provided for you +- You can see data for your project and filter by network in addition to date. You also have the option to download this data. +- You have the ability to view the API key for both the mainnet and the testnet in addition to your number of daily requests remaining. +- Finally, you can regenerate the API-keys using the button at the bottom. + +If you need to, there is the option to delete your project as well and start over from the individual project page in the bottom right hand corner. + +There are some use cases that fall outside of the scope of an organization. You can also interact with +<> by creating a personal project. + +## Creating a personal project + +To begin a personal project, navigate to the left side bar and click on the Personal Tab then Create New Project. +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/45cb081-personal_project_2.gif", + "personal_project_2.gif", + 640, + 344, + "#f4f8f5" + ] + } + ] +} +[/block] +From here you will see the project settings page appear with the following information: + +1.) The project ID +2.) The traffic for that project (can modify the specific date range for the data) +3.) The API keys for each blockchain network + - These are used to access the blockchain via the API. + - These API keys can be regenerated using the "Re-generate Torus Keys" button. + +Finally, if the project is no longer needed, it can be deleted by pressing the delete project button in the bottom right hand corner to free up space for more personal projects. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/creating-an-organization-1.md b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/creating-an-organization-1.md new file mode 100644 index 0000000..2cc9fd7 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/creating-an-organization-1.md @@ -0,0 +1,136 @@ +--- +title: "Creating an Organization" +slug: "creating-an-organization-1" +hidden: false +createdAt: "2021-03-22T18:26:47.395Z" +updatedAt: "2021-07-20T14:24:04.570Z" +--- +## Organization Creation + +Organizations are useful to store and manage project details for your company or organization. To create a new organization, your may simply open your side-menu on the right and click the "Create New Organization" button. + + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/29b4b16-remove_enrique_1.gif", + "remove_enrique_1.gif", + 640, + 358, + "#f7f8f6" + ] + } + ] +} +[/block] +## Organization Basics + +After creating the organization, you can then add the name for the organization as well as the email linked to the organization. This email will only be used for information purposes to inform the organization about updates to our services and will not be sold to any third parties. +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/9a11f17-organization_basics_2.gif", + "organization_basics_2.gif", + 640, + 344, + "#f7f8f6" + ] + } + ] +} +[/block] +## Organization Real-World Address Onboarding + +The admin can then add the real world-address to the organization +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/064bd51-mailing_address_2.gif", + "mailing_address_2.gif", + 640, + 344, + "#f7f9f7" + ] + } + ] +} +[/block] + +[block:callout] +{ + "type": "warning", + "body": "Please note that the real-world address has no correlation to the address that is used to make transactions on the Topl Blockchain.", + "title": "Real-world address vs blockchain address" +} +[/block] +## Choose a subscription option + +The next step will be to choose a subscription option out of the following three options depending on your organization's needs and capability for growth. + +* Startup + - For small-scale initiatives and startups with a high growth potential +* Professional + - Mid-market challengers and clients with existing platforms +* Enterprise + - Market leaders and enterprise clients with existing platforms + +### Billing Information + - Our billing is handled by Stripe, so an admin that chooses one of our paid options should go to Stripe to enter the payment information + +## Polys +- Polys are the cryptocurrency that is used to pay for transactions on the Topl Blockchain network. +- Each transaction on the Topl Blockchain takes a certain number of nanopolys (10^-9 polys) in order to make a transaction. +- Please reach out to Chris Georgen at for special deals on polys. +- Please look at the tutorial for [Adding Polys](doc:adding-polys) for more detailed instructions +[block:callout] +{ + "type": "info", + "body": "You may see language referring to \"Transaction Credits\". Note that this is a synonym for polys and that we are working to deprecate this term." +} +[/block] + +[block:callout] +{ + "type": "info", + "body": "Why do transaction fees exist? \n- Forgers on the Topl Network stake arbits to validate transactions. These transactions are bundled in blocks by forgers and get appended to the Blockchain\n- Once a transaction is part of a block on the Topl Blockchain it is considered confirmed, and the more blocks that are forged on top of the block that contains the transaction, the lower the likelihood of the transaction being modified. \n- In return for their service, forgers receive a block reward for each block as well as the sum of all transaction fees users attached to their transactions \n-The transaction fee is currently configured at 1 poly, but once decentralization commences, the transaction fee will be based on the market value of a transaction.", + "title": "Transaction Fees" +} +[/block] +## User Creation + +Owners for organizations that have a Professional subscription can create new users to be associated with an organization. + +## Editing an Organization + +Once you have created your organization, any admin can return to view its information or update the information at any time. + +To begin, simply open your list of organizations and choose the Organization that you wish to view or edit. +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/17e5c3b-edit_organization_2.gif", + "edit_organization_2.gif", + 640, + 344, + "#f6faf7" + ] + } + ] +} +[/block] +From your organization's settings page, (shown in the snippet above), you'll be able to do any of the following: + +1.) Update your Organization's Basic Information +2.) Update your Organization's Mailing Address +3.) Change Subscription +4.) Load Polys into an Address +5.) Add Team Members (Professional Subscription Required) +6.) Manage Projects \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/getting-started-with-topls-blockchain-as-a-service-baas-platform.md b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/getting-started-with-topls-blockchain-as-a-service-baas-platform.md new file mode 100644 index 0000000..ecb9d2b --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/getting-started-with-topls-blockchain-as-a-service-baas-platform.md @@ -0,0 +1,13 @@ +--- +title: "Getting Started With Topl's BaaS" +slug: "getting-started-with-topls-blockchain-as-a-service-baas-platform" +excerpt: "Step by step tutorial to get your application running using Topl's state of the art BaaS offerings!" +hidden: false +createdAt: "2021-03-22T15:59:58.983Z" +updatedAt: "2021-04-15T14:00:41.776Z" +--- +Welcome to the Topl <> platform documentation :owlbert-reading: + +In this brief guide, we'll walk you through how to leverage our managed node solution for connecting to the Topl blockchain so that you can access information about specific products at any point in the supply chain and provide others not only reports of <> claims but tangible proof of them. + +This documentation will follow the flow of a developer that will be onboarding an organization and creating projects that will interface with Topl's network through <>. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/rate-limits.md b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/rate-limits.md new file mode 100644 index 0000000..4e209ad --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/rate-limits.md @@ -0,0 +1,38 @@ +--- +title: "Rate and Quota Limits" +slug: "rate-limits" +excerpt: "You can call the Topl API as much as you need to make, sign, and verify transactions. However, there are limits to the number of calls that you can make." +hidden: false +createdAt: "2021-03-25T20:08:20.466Z" +updatedAt: "2021-03-29T14:48:01.326Z" +--- +All of Topl's blockchain [API endpoints](https://documenter.getpostman.com/view/2571679/Tz5p5HfD) require [authentication](https://topl.readme.io/v1.3.0/docs/security-and-authentication). Topl BaaS API allows performing requests according to your [subscription](https://www.topl.co/solutions) + +#Rate Limiting + +Rate limiting of the API is based on the client basis and apply to any API call. The rate limit is currently set at 25 requests per five second interval. + +The Topl BaaS API quota limit window is one day. See below how each of our three plans offers different rate limiting per day window + +# Rate Limiting Overview + +[block:parameters] +{ + "data": { + "h-0": "Plan Name", + "h-1": "API Quota Limit", + "0-0": "Startup", + "0-1": "20000 Requests per Day per Project per Network", + "1-0": "Professional", + "1-1": "100000 Requests per Day Per Project Per Network", + "2-0": "Enterprise", + "2-1": "1000000 Requests per Day Per Project Per Network" + }, + "cols": 2, + "rows": 3 +} +[/block] +# How to avoid being quota limited +If you're reaching the quota limit, options to improve performance include restructuring the architecture of the integration, and/or upgrading to Professional or Enterprise Tier. + +Clients that exceed the aforementioned rates will cause the API to return a HTTP 429 response. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/registration-and-login.md b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/registration-and-login.md new file mode 100644 index 0000000..f367568 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/registration-and-login.md @@ -0,0 +1,56 @@ +--- +title: "Registration and Login" +slug: "registration-and-login" +hidden: false +createdAt: "2021-03-22T16:32:04.887Z" +updatedAt: "2021-10-12T20:02:53.528Z" +--- +[block:callout] +{ + "type": "info", + "title": "Note:", + "body": "For this tutorial, please visit our BaaS portal website at [BaaS](https://beta.topl.services)." +} +[/block] +## <> Portal Registration + +In order to access <> functionality, a user must first register with Topl. + + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/986178a-registration_2.gif", + "registration_2.gif", + 640, + 344, + "#f7f8f6" + ] + } + ] +} +[/block] +After the completion of the registration flow, an email will be sent to you to verify your information + + + +# Login + +Once you have received your verification email from us, you can go ahead and begin using your account. Go to the [<> Portal](https://beta.topl.services/) and enter your email and password. +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/e2ccaf4-login_2.gif", + "login_2.gif", + 640, + 344, + "#f4f7f5" + ] + } + ] +} +[/block] \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/topl-api-keys.md b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/topl-api-keys.md new file mode 100644 index 0000000..c440634 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/topl-api-keys.md @@ -0,0 +1,51 @@ +--- +title: "Topl API Keys" +slug: "topl-api-keys" +hidden: false +createdAt: "2021-04-01T21:43:27.915Z" +updatedAt: "2022-03-29T14:33:28.295Z" +--- +All requests submitted through BaaS require an API key. This allows our service to authenticate your account to enforce API quotas. + +It is mandatory that you sign up for a free API key which allows for many advantages: +* a **high request rate** and concurrent request limit +* **fast** responses with few retries and timeouts +* useful **metric tracking** for performance tuning and to analyze your customer behavior +* Access to our Genus offerings including the ability to query archived data and advanced logging capabilities (not yet released) +[block:callout] +{ + "type": "warning", + "title": "How to sign up for API Keys", + "body": "You can sign up for API keys by creating a project detailed in the guide below." +} +[/block] +#Authenticating using a Project Id + +BaaS Vertx API requires a valid `Project Id` to be included with your request traffic. This identifier should be appended to the request URL. + + +[block:code] +{ + "codes": [ + { + "code": "https://vertx.topl.services/${network}/YOUR-PROJECT-ID", + "language": "curl" + } + ] +} +[/block] +#Authenticating using a ProjectId and API Key + +As additional protection for your request traffic, an API key is required to access our API. Please ensure that you keep your `API KEY` a secret! + + +[block:code] +{ + "codes": [ + { + "code": "curl --header `x-api-key:YOUR-API-KEY` \\\nhttps://vertx.topl.services/${network}/YOUR-PROJECT-ID", + "language": "curl" + } + ] +} +[/block] \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/two-factor-authentication.md b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/two-factor-authentication.md new file mode 100644 index 0000000..a0a7f5f --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/two-factor-authentication.md @@ -0,0 +1,92 @@ +--- +title: "Two Factor Authentication" +slug: "two-factor-authentication" +hidden: false +createdAt: "2021-08-13T17:42:26.363Z" +updatedAt: "2021-08-13T20:45:38.933Z" +--- +# Two Factor Authentication for BaaS Users + +##*Two-factor authentication is an extra layer of security for your BaaS user account designed to ensure that you're the only person that can access your account, even if someone knows your password.* + + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/295c98d-Screen_Shot_2021-08-13_at_1.55.38_PM.png", + "Screen Shot 2021-08-13 at 1.55.38 PM.png", + 3360, + 2096, + "#fafbfb" + ] + } + ] +} +[/block] +# How it works + +With two-factor authentication, only you can access your account. When you want to sign into your BaaS account, you'll need to provide two pieces of information -- your password and the six-digit verification code that's automatically displayed on your authenticator application. By entering the code, you're verifying that it is you that is logging in. + +Because your password alone is no longer enough to access your account, two-factor authentication dramatically improves the security of your BaaS user account and all of the information that you store with Topl. + +## Verification Codes +A verification code is a temporary code generated by an authenticator application and is requested when you sign into BaaS. + +Note that a verification code is different than your password. + +# Set up two-factor authentication for your BaaS account + You can follow these steps to turn on two-factor authentication for your account +1.) Go to Settings. +2.) Click on "Enable two factor authentication" +3.) Download one of our supported authenticator apps + - Authy + - 1Password + - Microsoft Authenticator + - Google Authenticator + and use it to scan the QR code. +4.) Use the 6 digit code generated by the application to verify your application and turn on two factor authentication. +5.) Save the recovery codes somewhere safe. + +This is a list of 20 codes generated during the configuration of 2FA. These codes are a single time use only. New recovery codes can be generated if needed, however previous recovery codes would not work after this step. + +# What to remember when you use two-factor authentication +Two-factor authentication significantly improves the security of your BaaS account. After you turn it on, signing into your account will require both your password and access to your verified authenticator application. To keep your account as secure as possible and help ensure you never lose access, there are a few simple guidelines you should follow: +- Remember your BaaS password. +- Download the authenticator app on all of your devices and verify with all devices. +- Keep your trusted device physically secure. + +# Manage your account +You can manage your 2FA settings and other account information from your BaaS Account page. + +# Frequently asked questions +Need help? You might find the answer to your question below. + +## What if I forget my password? +You can reset of change your password when you follow these steps. + +### If logged into BaaS +1.) Go to Settings +2.) Click on Change Password +3.) Type new password into the New Password and Confirm New Password fields + +### From the login page +1.) Click on "forgot your password" +2.) Type in the email for your account +3.) Click on the reset my password link that should be sent to your email. + +## What if I can't access my authenticator application? +If you're signing in and don't have your authenticator application handy that can display verification codes, you can then use the recovery codes that were generated when you enabled two-factor authentication. +Simply click on "Enter recovery code" on the two-factor authentication screen, and enter one of your recovery codes. + +## If I can't sign in, how do I regain access to my account? +If you can't sign in, receive verification codes, or access your recovery codes, you can request account recovery to regain access to your account. Account recovery is our process designed to get you back into your account as quickly as possible while denying access to anyone who might be pretending to be you. It might take a few days, or longer, depending on what specific account information you can provide to verify your identity. + +You can begin the account recovery process by emailing support@topl.me with your BaaS username and a description of the issue. We will then reach out to you in the next couple of days to begin the manual recovery process. + +## Do I need to remember any security questions? +No. With two-factor authentication, you don't need to remember any security questions. We verify your identity exclusively using your password and verification codes. + +## Can I turn off two-factor authentication after I've turned it on? +If you already use two-factor authentication, you can turn it off. Just open your settings and click the disable button. Keep in mind, this makes your account less secure and means that you are potentially putting your information at higher risk. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/user-settings.md b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/user-settings.md new file mode 100644 index 0000000..6872bdb --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/user-settings.md @@ -0,0 +1,19 @@ +--- +title: "User Settings" +slug: "user-settings" +hidden: true +createdAt: "2021-03-23T17:13:06.763Z" +updatedAt: "2021-04-06T17:34:21.829Z" +--- +## User Settings + +Once users have finished the registration process, they can update their details in the settings. This will ensure that users will have the highest level of support and guidance possible during the initial phases of the Topl launch. + +Users can find the settings by clicking on Settings in the left-hand navigation bar. + + +From here, the user will see a menu which will allow you to update your information so that Topl will be able to provide the highest quality service for our users. + +## Change Password + +From the user settings menu, you can also change your password. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Broadcast Transaction/broadcast-transaction.md b/versioned_docs/version-Tetra/v1.10.2/Broadcast Transaction/broadcast-transaction.md new file mode 100644 index 0000000..d3e5c34 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Broadcast Transaction/broadcast-transaction.md @@ -0,0 +1,7 @@ +--- +title: "Broadcast Transaction" +slug: "broadcast-transaction" +hidden: false +createdAt: "2021-04-06T16:55:04.744Z" +updatedAt: "2021-04-06T16:55:04.744Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/Broadcast Transaction/broadcast-transaction/broadcasttransaction.md b/versioned_docs/version-Tetra/v1.10.2/Broadcast Transaction/broadcast-transaction/broadcasttransaction.md new file mode 100644 index 0000000..fdbc1e7 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Broadcast Transaction/broadcast-transaction/broadcasttransaction.md @@ -0,0 +1,8 @@ +--- +title: "Broadcast Transaction" +slug: "broadcasttransaction" +excerpt: "#### Summary\nBroadcast transaction\n\n#### Type\nRemote -- Route must be used in conjunction with an external key manager service.\n\n#### Description\nPlace specified signed transaction into the mempool and broadcast to other nodes\n\n#### Notes\n- Currently only enabled for `AssetCreation` and `AssetTransfer` transactions\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|--------|-----------|---------------------|-------------------------------------------------------------------------------|\n| tx | object | Required | A full formatted transaction JSON object (prototype transaction + signatures) |" +hidden: false +createdAt: "2021-04-06T16:55:04.857Z" +updatedAt: "2021-04-06T16:55:04.857Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/Digital Asset Modeling Language/faq.md b/versioned_docs/version-Tetra/v1.10.2/Digital Asset Modeling Language/faq.md new file mode 100644 index 0000000..50dfc50 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Digital Asset Modeling Language/faq.md @@ -0,0 +1,8 @@ +--- +title: "FAQ" +slug: "faq" +excerpt: "Frequently Asked Questions about Topl's integration with the DAML smart contract language" +hidden: false +createdAt: "2022-11-28T19:30:11.348Z" +updatedAt: "2022-11-30T15:53:47.535Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain.md b/versioned_docs/version-Tetra/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain.md new file mode 100644 index 0000000..355b364 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain.md @@ -0,0 +1,7 @@ +--- +title: "Get Latest Block in the Chain" +slug: "get-latest-block-in-the-chain" +hidden: false +createdAt: "2021-04-06T16:57:51.857Z" +updatedAt: "2021-04-06T16:57:51.857Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain/getthelatestblockinthechain.md b/versioned_docs/version-Tetra/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain/getthelatestblockinthechain.md new file mode 100644 index 0000000..09a5c73 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain/getthelatestblockinthechain.md @@ -0,0 +1,8 @@ +--- +title: "Get the latest block in the chain" +slug: "getthelatestblockinthechain" +excerpt: "#### Summary\nRetrieve the best block\n\n#### Description\nFind information about the current state of the chain including height, score, bestBlockId, etc\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|--------------------|-----------|---------------------|-------------|\n| --None specified-- | | | |" +hidden: false +createdAt: "2021-04-06T16:57:51.967Z" +updatedAt: "2021-04-06T16:57:51.967Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/Get Mempool/get-all-transactions-from-mempool.md b/versioned_docs/version-Tetra/v1.10.2/Get Mempool/get-all-transactions-from-mempool.md new file mode 100644 index 0000000..aa1e03d --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Get Mempool/get-all-transactions-from-mempool.md @@ -0,0 +1,7 @@ +--- +title: "Get all Transactions from Mempool" +slug: "get-all-transactions-from-mempool" +hidden: false +createdAt: "2021-04-06T17:05:11.525Z" +updatedAt: "2021-04-06T17:05:11.525Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/Get Mempool/get-all-transactions-from-mempool/getmempool.md b/versioned_docs/version-Tetra/v1.10.2/Get Mempool/get-all-transactions-from-mempool/getmempool.md new file mode 100644 index 0000000..74b8bdd --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Get Mempool/get-all-transactions-from-mempool/getmempool.md @@ -0,0 +1,8 @@ +--- +title: "Get Mempool" +slug: "getmempool" +excerpt: "#### Summary\nGet the first 100 transactions in the mempool (sorted by fee amount)\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|--------------------|-----------|---------------------|-------------|\n| --None specified-- | | | |" +hidden: false +createdAt: "2021-04-06T17:05:11.640Z" +updatedAt: "2021-04-06T17:05:11.640Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/brambl-faqs-and-more-information.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/brambl-faqs-and-more-information.md new file mode 100644 index 0000000..583529c --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Getting Started/brambl-faqs-and-more-information.md @@ -0,0 +1,19 @@ +--- +title: "Brambl FAQs and Future Developments" +slug: "brambl-faqs-and-more-information" +hidden: false +createdAt: "2021-03-25T17:54:51.584Z" +updatedAt: "2021-11-10T19:11:27.590Z" +--- +# BramblPy + +Python 3 implementation of Topl's API library. Currently in pre-alpha release, and slated for public availability by late Q4 2021. Please contact us for early access. + +# Key Generation and Transaction Signing + +While Topl provides full access to its blockchain network through our Blockchain-as-a-Service (BaaS) hosted API, there is certain functionality that must be executed off chain as part of your application itself. + +Therefore, in addition to being able to call all routes comprising the BaaS API, Brambl enables you to both generate and manage your key files as well as sign transactions. + +#Smart Contracts +Topl plans on providing functionality for smart contracts off the chain by the end of Q2 2021 and smart contracts on chain by the end of Q3 2021. Please contact us if you are interested in learning more! \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/daml.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/daml.md new file mode 100644 index 0000000..18a131f --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Getting Started/daml.md @@ -0,0 +1,37 @@ +--- +title: "DAML Smart Contracts" +slug: "daml" +excerpt: "Interacting with the Topl blockchain using DAML smart contracts" +hidden: false +createdAt: "2022-09-20T12:25:10.499Z" +updatedAt: "2022-09-20T14:16:02.510Z" +--- +[block:api-header] +{ + "title": "Smart Contracts on the Topl Blockchain" +} +[/block] +Topl has integrated the [Digital Asset modeling Language (DAML)](https://docs.daml.com/) as its first smart contract platform for creating and using native assets on the blockchain. As a public and permissionless blockchain, we are utilized the open-source implementation of DAML to bring a secure way to create and deploy off-chain smart contracts that still maintain the same level of cryptographic proofs and asset management that you would find in on-chain smart contracts like Solidity and Rust. + +[block:api-header] +{ + "title": "First Steps" +} +[/block] +### Setting up DAML + +  **[Install](https://docs.daml.com/getting-started/installation.html)** the DAML SDK and VSCode editor integration. + +After successfully installing the DAML SDK, the Participant Node built for facilitating transactions needs to be installed to interact with the Topl Blockchain nodes. + +### Setting up a Participant Node + +  The **[Daml Bifrost Module](https://github.com/Topl/daml-bifrost-module)** installs a Bifrost Participant Node and example deployable smart contract. + +After installation, the participant node and example smart contract need to be compiled in order to run an instance of the off-chain contract. + +### Deploying a smart contract + +  **[Deploy](https://github.com/Topl/daml-bifrost-module#2-compile)** by compiling and starting the participant node. + +Compiling and starting the DAML sandbox will deploy the smart contract to the participant node and allow users to interact with the smart contract. Using the DAML Navigator tool provides an easy-to-use interface for interacting with deployed contracts. diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/introduction-2.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/introduction-2.md new file mode 100644 index 0000000..6c43b40 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Getting Started/introduction-2.md @@ -0,0 +1,36 @@ +--- +title: "Introduction" +slug: "introduction-2" +hidden: false +createdAt: "2021-03-30T14:36:47.065Z" +updatedAt: "2022-09-20T14:18:07.496Z" +--- +# What you need to bring +To get the most out of the Topl Developer Portal, you should have programming experience and a basic understanding of blockchain concepts of Topl such as UTxO, transactions, addresses, key derivation, and networking. + +If you are unfamiliar with these terms, start with technical concepts, and you can complete the getting started course afterward. + +# Topl is different +If you have experience with other blockchain platforms and want to start building on Topl, it is vital to know its differences: + +* It makes sense to get your head around the concept of an UTxO +* Assets on Topl are not built with smart contracts. Instead, assets are native and live on the ledger. The protocol treats them as first-class citizens, similar to our cryptocurrency <>s. It is quite different from our peers that don’t have native assets and need to use a smart contract to send assets. + +#What you can do on Topl today +You can mint, send, and receive native assets, in addition to polys. + +#Why build on Topl? +* Topl offers a better infrastructure to build products because it is faster, more secure, and cost-effective. +* Topl offers accurate cost predictability when it comes to transactions. There are no auctions for transaction fees. +* Topl has an energetic community. If you stick to specific standards, we are keen to try out and engage with new products. Participating now makes you a first mover. +* Topl is a proof-of-stake blockchain. By design, it consumes much less energy and computational power. +* Topl is built with the rigor of high-assurance formal development methods. The consensus mechanism Ouroboros (currently under development) was delivered with several peer-reviewed papers presented in top-tier conferences and publications in cybersecurity and cryptography. If you build on Topl, you build on this foundation. + +#What you can build on Topl today +* You can integrate Topl into existing websites and services. +* You can issue native assets and mint unique assets to be used as NFTs. +* You can add metadata to transactions to give transactions a story, a background or even an identity. +* You can prove the existence of a file, text or any other data at a specific point in time with asset metadata. You can even use asset metadata to validate and verify external physical products and genuine articles. + +# Where to Start +* Begin by deploying your first [DAML](doc:daml) smart contract and interacting with native assets directly on the chain! \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries.md new file mode 100644 index 0000000..53e03f9 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries.md @@ -0,0 +1,54 @@ +--- +title: "SDKs and API Libraries" +slug: "sdks-and-api-libraries" +hidden: false +createdAt: "2021-08-31T18:33:22.917Z" +updatedAt: "2022-09-20T14:23:10.107Z" +--- +[block:callout] +{ + "type": "danger", + "body": "Warning: The Topl SDK libraries for the Dion mainnet and testnet, Toplnet and Valhalla respectively, are currently deprecated in order to focus new development on the new version of the Topl blockchain, Tetra. The Dion SDK libraries are usable, but it is highly recommended to focus new development through the [DAML](doc:daml) smart contract integration.", + "title": "# Deprecated" +} +[/block] +#Overview + +Topl has a collection of tools which makes it easier to integrate with the Topl blockchain. Depending on the use-cases you have, you may use any of the components below. + +#Getting Started +To get started, checkout the [📘 Topl User Guide](doc:introduction-2) + +#Components + +## SDKs/ Open Source Libraries + +[block:parameters] +{ + "data": { + "h-0": "name/link", + "h-1": "description", + "0-0": "[BramblJs](https://www.npmjs.com/package/brambljs)", + "0-1": "Contains everything that you need for addresses and creating transactions in Javascript.", + "1-0": "[BramblSc](https://github.com/Topl/Bifrost/tree/main/brambl)", + "1-1": "Contains everything that you need for addresses and creating transactions in Scala.", + "2-0": "[BramblPy](https://github.com/Topl/BramblPy)", + "2-1": "Contains everything that you need for addresses and creating transactions in Python. Currently in pre-release (is not recommended for production environments)", + "3-0": "[BramblDart](https://github.com/Topl/BramblDart)", + "3-1": "Contains everything that you need to manage addresses and create transactions in Dart. Currently in pre-release (it is not recommended for production environments)" + }, + "cols": 2, + "rows": 4 +} +[/block] +# Recipes + +Please see [Recipes](https://topl.readme.io/recipes) for examples on how to use the above resources. + +# API Reference + +If you are interested in seeing the low level JSON-RPC API to directly interact with the Topl Blockchain, please see the documentation located [here](https://topl.readme.io/reference). + +# Contributing + +See [Contributors](doc:contributors) \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/docker.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/docker.md new file mode 100644 index 0000000..02679fe --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/docker.md @@ -0,0 +1,58 @@ +--- +title: "Docker" +slug: "docker" +hidden: false +createdAt: "2021-10-08T19:20:42.368Z" +updatedAt: "2021-10-08T20:04:06.351Z" +--- +Docker builds of `bifrost` are available on [DockerHub](https://hub.docker.com/r/toplprotocol/bifrost/tags) + +## Downloading the docker image + +To get the latest release of `bifrost`, run: + ``` docker pull toplprotocol/bifrost:{{versionId}} ``` + +## Running the Docker container for `bifrost` +To get a list of the basic CLI arguments, use +``` +docker run --rm toplprotocol/bifrost:{{versionId}} java -jar bifrost-1.8.0.jar --help +``` +See [Running Bifrost](doc:running-bifrost) for full documentation of the CLI arguments. + +Running a `bifrost` node requires a config file (you can either use one of the default configurations or provide your own). + +1. Create your network config or use one of the default network configs provided + - If you choose to create your own network config, remember to add your network config onto the Docker host + ``` +mkdir $HOME/state-docker +``` + - After creating this directory, create your config file within it (optional) + 2.) Run the `bifrost` server : +``` +docker run \ +-p 9084:9084 -p 9085:9085 \ +--volume $HOME/state-docker:/data \ +--rm \ +toplprotocol/bifrost \ + java -jar bifrost-1.8.0.jar \ +-- config /data/my-config.conf \ +-- seed "test" +-- apiKeyHash "e4d2a343f3dcf9330ad9035b3e8d168e6728904262f2c434a4f8f934ec7b676" +``` + +Explanation of the arguments: +* `-p 9084:9084 -p 9085:9085` - exposes the API server port from the container to the docker host as well as the JSON-RPC server port. + +* `--volume $HOME/state-docker:/data` - mounts the + `~/state-docker` directory on the Docker host to `/data` inside + the container. + +* ```--config /data/my-config.conf``` - use the config within the data volume for your custom network configuration + +3.) Wait for the message `Listening on 0.0.0.0:9085` to be shown (it may take some small amount of time for Bifrost to create the necessary genesis blocks) + +## Inspecting the contents of the Docker image +If you need to run a shell inside the Docker image, use the bash shell as the entrypoint: +``` +docker run --rm -it --entrypoint bash toplprotocol/bifrost:{{latest-version-id}} +``` \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/installing-bifrost.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/installing-bifrost.md new file mode 100644 index 0000000..eeb5a15 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/installing-bifrost.md @@ -0,0 +1,180 @@ +--- +title: "Installing Bifrost" +slug: "installing-bifrost" +hidden: false +createdAt: "2021-10-04T20:22:18.615Z" +updatedAt: "2021-10-05T14:17:33.658Z" +--- +### Overview + +This guide will show you how to compile and install `bifrost` into your operating system of choice, directly from the source code. It will enable you to interact with the **Topl** blockchain, including but not limited to sending/receiving **transactions**, minting/burning customizable **assets**, posting verifiable **metadata** into the blockchain, and so much more! + + +[block:callout] +{ + "type": "info", + "title": "Note", + "body": "If you want to avoid compiling the binaries yourself, you can download the latest version of Bifrost from the links below:\n- [Bifrost](https://github.com/Topl/Bifrost/releases/download/v1.8.0/bifrost-1.8.0.jar)\n\nThere are newer source code available: \n* [latest release](https://github.com/Topl/Bifrost/releases/tag/v1.8.4)\n\nBifrost can be built and run on **Windows** and **MacOS**, but we recommend that node operators use **Linux** to take advantage of associated performance advantages." +} +[/block] +### Prerequisites + +To set up the components, you will need: +* **Windows**, **MacOS**, or **Linux** for your operating system +* A **CPU** with at least **2** cores (recommended **4**) +* **4GB** of RAM (recommended RAM: **8GB**) and at least **20GB** of free disk space (Recommended **80GB** of free disk space + +### Choose your Platform + +* [Linux | MacOS](#linux) +* [Windows](#windows) + +## Linux & MacOS + +In this section, we will walk you through the process of downloading, compiling, and installing `bifrost` into your **Linux-based** or **Mac-OS** operating system. + +#### Installing Operating System Dependencies + +To download the source code and build it, you need the following packages and tools on your Linux system: + + * the version control system `git` +* curl +* unzip +* zip +* GraalVM compatible Java SDK (GraalVM 21+) +* the SBT Scala Compiler (version `1.5.5` or above) +* Java 11 + +In Redhat, Fedora, and Centos: +```bash +sudo yum update -y +sudo yum install git curl unzip zip -y +``` + +For Debian/Ubuntu, use the following instead: +```bash +sudo apt-get update -y +sudo apt-get install git curl unzip zip -y +``` + +For MacOS, all necessary tools should be installed with the following packages and tools for your MacOS system: +* [Xcode](https://developer.apple.com/xcode) - The Apple Development IDE and SDK/Tools +* [Xcode Command Line Tools](https://developer.apple.com/xcode/features/), you can install it by typing `xcode-select --install` in the terminal. +* [Homebrew](https://brew.sh) - The Missing Package Manager for MacOS (or Linux) + +#### Installing GraalVM and SBT + +The fastest way to install **SBT** and **GraalVM** is to use [SDKMAN](https://sdkman.io/) + +Use the following command to install `SDKMAN` +```bash +curl -s "https://get.sdkman.io" | bash +source "$HOME/.sdkman/bin/sdkman-init.sh" +``` +Please follow the instructions and provide the necessary input to the installer if required. Once complete, you should have `SDKMAN` installed to your system. + + + +[block:callout] +{ + "type": "info", + "title": "Note", + "body": "`SDKMAN` will try to detect your shell and add itself to the environment variables. Please restart your shell/terminal after installing `SDKMAN`" +} +[/block] + You can check if `SDKMAN` has been installed correctly by typing `sdk version` into the terminal. You should see something similar to the following: +``` +sdkman 5.0.0+51 +``` + +#### Install GraalVM' +- Install Graalvm using SDKMAN +```sdk install java 21.1.0.r11-gr1``` + +#### Install SBT +- `sbt` is required to build Bifrost from source and may be installed by running the following commands +```sdk install sbt``` + +Note that any version of sbt < `1.5.5` should be able to install and switch to the required version. + +Finally, we check if we have the correct `sbt` and `java` versions installed. + +Check `sbt` version: +```bash +sbt sbtVersion +``` +You should see something like this +``` +$ sbt 'inspect sbtVersion' +[info] Set current project to my_user (in build file:/Users/my_user/) +[info] Setting: java.lang.String = 0.11.1 +[info] Description: +[info] Provides the version of sbt. This setting should be not be modified. +[info] Provided by: +[info] */*:sbtVersion +[info] Defined at: +[info] (sbt.Defaults) Defaults.scala:68 +[info] Delegates: +[info] *:sbtVersion +[info] {.}/*:sbtVersion +[info] */*:sbtVersion +[info] Related: +[info] */*:sbtVersion +``` +Check `java` version: +```bash +java --version +``` + +You should see something like this +``` +java version "1.11.0_55" +Java(TM) SE Runtime Environment (build 1.7.0_55-b13) +Java HotSpot(TM) 64-Bit Server VM (build 24.55-b03, mixed mode) +``` + + +[block:callout] +{ + "type": "warning", + "title": "Important", + "body": "Please confirm that the versions you have installed match the recommended versions above. If not, check if you have missed any of the previous steps." +} +[/block] +#### Downloading and Compiling + +First, download Bifrost from Github +```bash +git clone git@github.com:Topl/Bifrost.git +cd Bifrost +git fetch --all --recurse-submodules --tags +``` + +Switch the repository to the latest tagged commit: +```bash +git checkout tags/1.8.0 +``` + +[block:callout] +{ + "type": "warning", + "title": "Important", + "body": "You can check the latest available version/tag by visiting the `bifrost` [Github-Release](https://github.com/Topl/Bifrost/releases) page. At the time of writing this, the current version is `1.8.0`." +} +[/block] +#### Compiling the node +We can now build the `Scala-based` `bifrost-node` to produce executables. +```bash +sbt compile +``` +Congratulations, you have successfully installed Topl `bifrost` into your Linux or MacOS system! 🎉🎉🎉 + +## Windows + +[block:callout] +{ + "type": "warning", + "title": "Important", + "body": "Currently, the **Windows** installation guide is still in progress. In the meantime, we recommend using [WSL (Windows Subsystem for Linux)](https://docs.microsoft.com/en-us/windows/wsl/) to get a Linux environment on top of Windows. Once installed, you can use the [Linux](#linux) guide to install and run `bifrost` within **WSL**." +} +[/block] \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/overview.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/overview.md new file mode 100644 index 0000000..afdf31e --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/overview.md @@ -0,0 +1,27 @@ +--- +title: "Overview" +slug: "overview" +hidden: false +createdAt: "2021-10-04T19:10:50.318Z" +updatedAt: "2021-10-12T19:10:07.138Z" +--- +## Developer Ecosystem ## +Here is an outline of the developer ecosystem and relevant resources to help you learn how to build on Topl. + +### Programming Languages ### + +#### Scala #### +- [Scala](https://www.scala-lang.org/) +- [Scala Guides (created by Baeldung)](https://github.com/Baeldung/scala-tutorials) +- [Scala Exercises] (https://github.com/scala-exercises/scala-exercises) + +#### Dart #### +- [Dart](https://dart.dev/) +- [Dart official documentation](https://dart.dev/guides) + +### Developer Resources ### + +[Using the Valhalla Test Network](doc:using-the-valhalla-test-network) +[BramblSC](doc:bramblsc) +[BramblJS](doc:setting-up-brambljs) +[BramblDart](doc:brambldart) \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/running-bifrost.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/running-bifrost.md new file mode 100644 index 0000000..9c41325 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/running-bifrost.md @@ -0,0 +1,143 @@ +--- +title: "Running Bifrost" +slug: "running-bifrost" +excerpt: "How to run a Bifrost node" +hidden: false +createdAt: "2021-10-04T20:51:56.618Z" +updatedAt: "2021-10-06T20:47:40.015Z" +--- +### Overview + +This guide will show you how to run a `bifrost node` on your system and some simple examples of how you can interact with the **Topl** blockchain. + + +[block:callout] +{ + "type": "info", + "title": "Note", + "body": "This guide assumes that you have installed `bifrost` onto your system. If not, you can refer to [Installing Bifrost](https://docs.topl.co/v1.4.0/docs/installing-bifrost) guide for instructions on how to do that." +} +[/block] +### Network Configuration + +The `bifrost` application has 3 network configurations to run as of writing this article. +- **Mainnet**: The settings that are used on the main Topl network. +- **Valhalla**: The settings that are used on the main public Topl testnet. +- **Private**: The settings that are used by Bifrost developers while working on improving Bifrost functionality + +You might be asking what the difference is between `mainnet` and `valhalla` and why there are two networks? To put it simply, **Topl** is an open-source blockchain and anyone is free to spin up a network based on **Topl's** software components. The `mainnet` network was the first one and currently contains all of the real value of **Topl**. + +Testing the network's features and capabilities can be expensive and will consume real value. So we have spun up a sandbox or testnet version of the network. Instead of using real `poly` tokens for transactions, you use test polys. Alternatively, you can spin up your own custom **Topl** network, but that is outside the scope of this guide. + +To run `bifrost` you enter something like this into the terminal (given that you are in the directory containing the bifrost jar file): +```bash +java -jar bifrost-1.x.x.jar \ + --config path/to/config.json \ + --seed "test" \ + --forge \ + --disableAuth +``` + +To get the complete list of available options, use `java -jar bifrost-1.x.x.jar --help + +```Bifrost (v1.8.4) command line arguements + -c --config file path to a user defined config file + -d --debug Turn on debugging information + -n --network specify preset network by name + -s --seed string to deterministically generate keys on private and local networks + -f --forge enable forging as soon as the node starts + --disableAuth Allow the node to receive API requests without an API key + --apiKeyHash hash of API key + --help prints this command list +``` + +## Bifrost node parameters + +[block:callout] +{ + "type": "info", + "title": "Note:", + "body": "In this section, we will use the path `/home/user/topl` to store all the `bifrost` related configuration files as an example, and please replace it with the directory you have chosen to store the files." +} +[/block] +We will focus on the 7 key command-line parameters for running a node: +** `--config` **: This requires the path of the `.conf` file. + +> For example, if you have created a `.conf` file to the path `/home/user/topl/custom.conf`, then the argument would look like this +``` +--config /home/user/topl/custom.conf +``` + +**`--debug`**: This command line parameter turns on the debugging information for the Bifrost node. + +**`--network`**: This expects one of the predefined config networks as an argument. +> Here is an example `--network` argument: +``` +--network valhalla +``` +This will begin the Bifrost node running with the Valhalla parameters. + +**`--seed` **: This expects a string to deterministically generate the keys for the genesis addresses on private and local networks. This is used primarily so that the user will have access to the polys and arbits that are attributed upon the genesis of the network. + +**`--forge`** : This does not expect an argument and will start the node forging immediately after it starts. + +**`--disableAuth`** : This command line argument disables the api_key authentication allowing you to connect with your node over HTTP without configuring an API key + +**`--apiKeyHash`** : With this command you can provide a Base58 encoded hash of the value that you want to use for the apiKey. This allows for you to construct a more secure node that will require the apiKey for successful HTTP connections. + +In addition, let's look at some of the more important parameters that you can modify using a custom configuration file: + +**`bifrost.application.dataDir`**: This expects the path to the directory where we will store the actual blockchain data like **blocks**, **transactions**, and other datatypes that can be stored on the **Topl** blockchain. + +> For example, if we decided that all of the files required by the `bifrost` node will be in the path `/home/user/topl/`. Then we could create a database directory like this `mkdir -p /home/user/topl/db`. +> The directory structure would then be something like this: +``` +/home/user/topl/ +├── db +├── config.conf +1 directory, 2 files +``` + +**`bifrost.application.rpcApi.bindAddress`**: In this case, this expects the `local address` of the machine to which to bind to. +> Here is an example `bifrost.application.rpcApi.bindAddress` argument: +``` +bindAddress = "0.0.0.0:9085" +``` +> In this case, we expect http clients in your network to connect via `0.0.0.0:9085`. In conjunction with providing the `local address` this command also sets the port that your `bifrost` node will use to listen to any incoming connections. + +Here is a realistic example for running `bifrost` node: +```bash +java -jar bifrost-1.3.3.jar \ + --config /home/user/topl/customtestnet.conf \ + --debug \ + -- seed "test" \ + -- forge \ + -- disableAuth +``` + +If you have everything set correctly, you should see something similar to the following +``` +20:44:17.131| INFO co.topl.settings.AppSettings$ - No network specified, running as private testnet. +20:44:17.748| INFO co.topl.network.NetworkController - Declared address: None +20:44:17.805| INFO co.topl.network.NetworkController - Registered Actor[akka://bifrost/user/peerSynchronizer#341653336] as the handler for List((2,Peers message), (1,GetPeers message)) +20:44:17.975| INFO co.topl.db.LDBFactory$ - Loaded org.fusesource.leveldbjni.JniDBFactory with leveldbjni version 1.8 +20:44:18.154| INFO co.topl.nodeView.CleanupWorker - Cleanup worker started +20:44:18.161| INFO co.topl.network.NetworkController - Registered Actor[akka://bifrost/user/nodeViewSynchronizer#-403724455] as the handler for List((65,Sync), (55,Inv), (22,RequestModifier), (33,Modifier)) +20:44:18.371| INFO co.topl.nodeView.history.History - Block 28XxAtDYfdCkEr8UyzT9f2fDWdn3Uqdu29V58qCiT8y5g appended to parent tksQdfioySWXrLbm7prosYBKze9Augu71ZXde9KuJC4Y at height 1 with score Some(100000000). +20:44:18.392| INFO co.topl.nodeView.state.State$ - Initializing state to watch for all public keys +20:44:18.393| INFO c.t.n.state.ProgramBoxRegistry$ - Initializing state with Program Box Registry +20:44:18.404| INFO c.t.nodeView.state.TokenBoxRegistry$ - Initializing state with Token Box Registry +20:44:18.449| INFO co.topl.nodeView.NodeViewHolder - NodeViewHolder publishing ready signal +20:44:18.450| INFO co.topl.consensus.Forger - Forger transitioning to the operational state +20:44:18.450| INFO co.topl.nodeView.MempoolAuditor - MemPool Auditor transitioning to the operational state +20:44:18.450| INFO co.topl.network.NodeViewSynchronizer - NodeViewSynchronizer transitioning to the operational state +20:44:18.450| INFO co.topl.network.PeerSynchronizer - PeerSynchronizer transitioning to the operational state +20:44:18.450| INFO co.topl.network.PeerManager - PeerManager transitioning to the operational state +20:44:18.453| INFO co.topl.consensus.Forger - Received a START signal, forging will commence shortly. +java.vm.version = 11.0.11+8-jvmci-21.1-b05 +jvmci.Compiler = null +20:44:18.593| INFO co.topl.network.NetworkController - No declared address was provided. Skipping address validation. +20:44:18.600| INFO co.topl.network.NetworkController - Network Controller transitioning to the operational state +20:44:18.619| INFO co.topl.BifrostApp - P2P protocol bound to /0.0.0.0:9084 +20:44:19.273| INFO co.topl.BifrostApp - HTTP server bound to /0.0.0.0:9085 +``` \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/security-and-authentication.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/security-and-authentication.md new file mode 100644 index 0000000..0561440 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Getting Started/security-and-authentication.md @@ -0,0 +1,84 @@ +--- +title: "Security and Authentication" +slug: "security-and-authentication" +hidden: false +createdAt: "2021-03-24T16:43:22.629Z" +updatedAt: "2021-11-04T17:06:52.342Z" +--- +The Topl endpoints use API keys to allow access. You can obtain your API key through creating a project in the <> developer portal (please view the guide for <> Developer Portal Onboarding for the details on how to setup your first project). + + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/a314980-Screen_Shot_2021-03-24_at_9.46.56_AM.png", + "Screen Shot 2021-03-24 at 9.46.56 AM.png", + 2560, + 1378, + "#fafafa" + ] + } + ] +} +[/block] +To access the APIs, include the API key in the HTTP Header of your HTTP request: + +`x-api-key:yourapisecret` + +Alternatively, you can add the API key into the Requests module object of a BramblJS instance (using our BramblJS library). + +## Examples + + +[block:callout] +{ + "type": "info", + "title": "Please note!!", + "body": "You must replace `yourapisecret` or YOUR_API_KEY in the examples with your actual API key provided by Topl\n\nIn addition, you must replace {{myProjectId}} with the actual projectId provided by Topl" +} +[/block] + +[block:callout] +{ + "type": "info", + "title": "Network Prefix", + "body": "There are two BaaS network prefixes. If you want to use the main net, set networkPrefix = toplnet otherwise set networkPrefix = valhalla for using the test net" +} +[/block] + +[block:code] +{ + "codes": [ + { + "code": "const BramblJS = require('brambljs');\nconst brambl = new BramblJS({\n networkPrefix: \"valhalla\", // applies to Requests and KeyManager\n password: \"topl_the_world!\",\n Requests: {\n url: \"https://valhalla.torus.topl.network/{{myProjectId}}\", // make sure that the project ID from the BaaS portal is included. \n apiKey: \"YOUR_API_KEY\" // set api key for network\n }\n });", + "language": "javascript" + } + ] +} +[/block] +Additionally, you must provide a project ID for each request made. Your Project ID can also be found in the BaaS Portal. +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/668d997-Screen_Shot_2021-03-25_at_3.27.33_PM.png", + "Screen Shot 2021-03-25 at 3.27.33 PM.png", + 3360, + 1876, + "#fafafa" + ] + } + ] +} +[/block] + +[block:callout] +{ + "type": "danger", + "title": "Important", + "body": "Note that our BaaS offering has a rate limit defined at 5 requests per second. Please contact us if that is not sufficient for your use case!" +} +[/block] \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/simple-transfer.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/simple-transfer.md new file mode 100644 index 0000000..d8b2416 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Getting Started/simple-transfer.md @@ -0,0 +1,204 @@ +--- +title: "Assets" +slug: "simple-transfer" +hidden: false +createdAt: "2021-03-30T15:10:50.375Z" +updatedAt: "2022-10-28T14:20:04.707Z" +--- +Assets are a critical part of our blockchain technology. Assets are homogeneous tokens that can be transferred to other users and spent as currency (e.g. ERC-20 on Ethereum). In addition, users can store meta-data as part of the process of creating an asset, allowing users to store arbitrary information on the Topl Blockchain. + +Usually, a central ledger keeps track of a user's token balances. Topl implements Assets in a way that avoids having a centralized account ledger. + +We're going to take you through these steps to get comfortable with Assets: +* Mint an Asset and store it in your address +* Mint a collection of assets and store the collection of assets in your address +* Setup a second account using the previous steps +* Transfer an asset from one account to another +* Write a script to see what assets are stored in each account's collection. + +The concepts involved in creating an Asset can be hard to grasp at first. For an in-depth explanation of the functionality and code, continue reading the next section. + +Or if you'd like to go immediately into creating an asset and using it, you can skip to the **Interacting with Assets** section of this tutorial. + +Assets have some of the following properties: +* Ownership is decentralized and does not rely on a central ledger +* Bugs and exploits present less risk for users and less opportunity for attackers +* Assets can not be double spent and it is very hard for them to be lost, stolen, or destroyed + +# Intuiting Ownership with Asset Codes + +An important concept in Topl are <>s. An asset code is composed of the version, issuer address, and user provided name. Instead of representing asset ownership in a centralized ledger or db, each account owns a series of asset codes which represents the number of assets that they own and the type of each asset. This way, when users want to transact with each other, they can do so peer-to-peer without having to interact with any managed Topl resources. To transfer assets to one another, they call a `transfer` function on their own Brambl Request instance rather than having to go through Topl as an intermediary. + +This simplifies access control because instead of having Topl check the sender of the function call, most function calls happen on Brambl Request instances referencing asset codes stored in the user's address, and the user controls who is able to call the functions for the asset codes in their addresses. + +This approach also helps protect against potential bugs. If all of the logic was handled by Topl, an exploit is likely to affect all users. Now, if there is a bug in the Brambl logic, an attacker would have to exploit the bug for each asset code holder's account individually, which is much more complicated and time consuming than it is in a centralized ledger system. + +# Ensuring Security in Public: Capability Security +Another important feature of Topl's blockchain is its utilization of Capability Security. This feature ensures that, while API used to transfer Assets is public, no one except the intended user and those they approve of can transfer assets from their account. + +Topl's security model ensures that objects stored in an address can only be accessed by the user that owns them. If the user wants to give another user access to their assets, they would have to give that user the keyfile for that address. + +# Create and send an Asset **MINTING** transaction + +Now that you have read about how Assets work, we can mint an asset and add it to your address and also transact using the asset that you have minted. + +[block:callout] +{ + "type": "info", + "body": "A helpful resource is the recipe at the bottom of the page which you can use to follow along interactively.\n\nIn addition, you must have an address that has Polys in order to form a valid transaction. Please look at the Adding Polys guide under the BaaS portal onboarding for more information about how to obtain Polys for your addresses.", + "title": "Note:" +} +[/block] + +[block:code] +{ + "codes": [ + { + "code": "const BramblJS = require('brambljs');\n\nconst myKeyPath = \"myKeyPath\"\n\nconst keyManager = BramblJS.KeyManager({\n networkPrefix: \"valhalla\", // network prefix is required\n password: \"my_key_password\",\n keyPath: myKeyPath\n});\n\nconst brambl = new BramblJS({\n networkPrefix: \"valhalla\",\n KeyManager: keyManager, //applies to Requests and KeyManager\n Requests: {\n url: \"https://vertx.topl.services/valhalla/{{myProjectId}}\", // set url\n apiKey: \"{{myApiKey}}\"\n }\n})\n\nconst assetCode = brambl.createAssetCode(\"name1234\")\n\nconst rawAssetParams = {\n \"propositionType\": \"PublicKeyCurve25519\",\n \"recipients\": [\n // basic: [address, quantity]\n [brambl.keyManager.address, 4]\n ],\n \"assetCode\": assetCode,\n \"sender\": [brambl.keyManager.address],\n \"changeAddress\": brambl.keyManager.address,\n \"consolidationAddress\": brambl.keyManager.address,\n \"minting\": true,\n \"fee\": 100\n};\n\nconst pollParams = {\n \"timeout\": 90,\n \"interval\": 3,\n \"maxFailedQueries\": 10\n}\n\nbrambl.transaction('createRawAssetTransfer', rawAssetParams)\n.then(res => { console.log('Unconfirmed transaction'); console.log(res); return res })\n.then(res => brambl.pollTx(res.result.txHash, pollParams))\n.then(res => { console.log('\\nConfirmed transaction'); console.log(res) })\n.catch(console.log)\n", + "language": "javascript" + }, + { + "code": "object CreateAnDSendRawAssetMintingTransfer {\n\n import exampleState._\n import provider._\n\n val params: RawAssetTransfer.Params = ToplRpc.Transaction.RawAssetTransfer.Params(\n propositionType = PublicKeyPropositionCurve25519.typeString,\n sender = NonEmptyChain(externalAddress.head),\n recipients = NonEmptyChain((externalAddress.head, AssetValue(4, assetCode))),\n fee = 0,\n changeAddress = externalAddress.head,\n consolidationAddress = externalAddress.head,\n minting = true,\n data = None\n )\n\n val response: RpcErrorOr[BroadcastTx.Response] = for {\n rawTx <- ToplRpc.Transaction.RawAssetTransfer.rpc(params).map(_.rawTx)\n signTx <- EitherT.right {\n clearKeyRing()\n genKeys()\n val msg2Sign = rawTx.messageToSign\n val signFunc = (addr: Address) => keyRing.generateAttestation(addr)(msg2Sign)\n val signatures = keyRing.addresses.map(signFunc).reduce(_ ++ _)\n Future(rawTx.copy(attestation = signatures))\n }\n broadcastTx <- ToplRpc.Transaction.BroadcastTx.rpc(ToplRpc.Transaction.BroadcastTx.Params(signTx))\n } yield broadcastTx\n\n def main(args: Array[String]): Unit =\n response.value.foreach {\n case Left(value) => println(s\"Got some error: $value\")\n case Right(value) => println(s\"Got a success response: $value\")\n }\n}", + "language": "scala" + } + ] +} +[/block] +This script stores the assetCode for the asset in your address so that you can use them in future transactions. In this example, the script mints 4 assets and stores them in your address. You can use the unique assetCode to mint more assets of the same type. + +On line 31 in the JS code and line 13 in the SC code, we set minting to true to tell the Topl network that we are creating a new asset. If the value was set to false, then the network would attempt to transfer an existing asset. + +Addresses are like pointers. They are a link to a collection of boxes and can be used to retrieve balances, or transfer tokens to/from the boxes they reference. Addresses do not move, or modify the boxes directly. +[block:callout] +{ + "type": "info", + "title": "Note:", + "body": "During our beta offering, asset minting and transfers have a min-fee of 100 nano-polys on Valhalla (1 poly = 10^9 nano-polys). Please see [this page](https://topl.readme.io/v1.3.0/docs/adding-polys) for loading your address with polys" +} +[/block] +You are now ready to run transactions that use Assets! + +# Transfer Assets to another User + +Now we are going to run a transaction that sends 10 Assets to another address. We will do this by using the transfer function and turning minting off. That will deposit tokens into the second address. +[block:callout] +{ + "type": "info", + "body": "In a previous section, we have walked through how to create a [Topl Blockchain Address](https://topl.readme.io/v1.3.0/docs/how-topl-addresses-are-generated). \n\nPlease create a second address now." +} +[/block] +Now the second account is ready to start building its fortune! We can check that that our account is currently empty by calling the `lookupBalancesByAddresses` method in Brambl function. +[block:code] +{ + "codes": [ + { + "code": "brambl.requests.lookupBalancesByAddresses({addresses: [address]})", + "language": "javascript" + }, + { + "code": "object LookupBalance {\n\n import exampleState._\n import provider._\n\n val params: Balances.Params = ToplRpc.NodeView.Balances.Params(externalAddress.toList)\n val response: RpcErrorOr[Balances.Response] = ToplRpc.NodeView.Balances.rpc(params)\n\n def main(args: Array[String]): Unit =\n response.value.foreach {\n case Left(value) => println(s\"Got some error: $value\")\n case Right(value) => println(s\"Got a success response: $value\")\n }\n\n}", + "language": "scala" + } + ] +} +[/block] +Asset creation (for the asset that we minted in the last step) is restricted to the address which originally minted the asset, so the asset code ensures that nobody is able to create a duplicate of that asset out of thin air. + +As part of the initial minting process for an Asset, the first address created an <>. By using this code, the address that owns it can mint new assets. Right now, the first address owns it, so it has the sole power to mint new Assets. + +As we have explained before, the resource model plus capability security handles this access control for us as a built-in property of the block-chain. + +In the next transaction, address 1 will mint 10 new assets and deposit them into the second account. + +[block:callout] +{ + "type": "warning", + "title": "Note:", + "body": "The variables will refer to your own addresses so you may have to replace the stand-in variables in the example with the values of your address details." +} +[/block] + +[block:callout] +{ + "type": "warning", + "title": "Note:", + "body": "The Change Address (for the left-over polys) and Consolidation Address (for left-over assets) are required as of Bifrost Version 1.4.3." +} +[/block] + +[block:code] +{ + "codes": [ + { + "code": "const myKeyPath1 = \"valhalla_.json\";\nconst myKeyPath2 = \"valhalla_key_file.json\";\n\nconst keyManager1 = BramblJS.KeyManager({\n password: \"{{myFirstPassword}}\",\n keyPath: myKeyPath1\n});\n\nconst keyManager2 = BramblJS.KeyManager({\n password: \"{{myPassword}}\",\n keyPath: myKeyPath2\n})\n\nconst brambl1 = new BramblJS({\n networkPrefix: \"valhalla\",\n KeyManager: keyManager1,\n Requests: {\n url: \"https://vertx.topl.services/valhalla/{{yourProjectIdHere}}\",\n apiKey: \"{{yourApiKeyHere}}\"\n }\n})\n\n const brambl2 = new BramblJS({\n networkPrefix: \"valhalla\",\n KeyManager: keyManager2,\n Requests: {\n url: \"https://vertx.topl.services/valhalla/{{yourProjectIdHere}}\", // set url\n apiKey: \"{{yourApiKeyHere}}\"\n }\n })\n \n// Create an new AssetCode to be used in Create Raw Asset Transactions \n \nconst assetCode1 = brambl1.createAssetCode(\"asset1\");\n \nconst address1 = brambl1.keyManager.address;\nconst address2 = brambl2.keyManager.address;\n\n const rawAssetParams1 = {\n \"propositionType\": \"PublicKeyCurve25519\",\n \"recipients\": [\n // basic: [address, quantity]\n // advance: [address, quantity, securityRoot, metadata]\n [address2, 10]\n ],\n \"assetCode\": assetCode1,\n \"sender\": [address1],\n \"changeAddress\": address1,\n \"consolidationAddress\" : address1\n \"minting\": true,\n \"fee\": 1000000001\n };\n\nconst pollParams = {\n \"timeout\": 90,\n \"interval\": 3,\n \"maxFailedQueries\": 10\n };\n\nbrambl1.transaction('createRawAssetTransfer', rawAssetParams1)\n .catch((e) => console.error(e))\n .then(res => { console.log('Unconfirmed transaction'); console.log(res); return res })\n .then(res => brambl1.pollTx(res.result.txId, pollParams))\n .then(res => console.log(res))\n .catch((e) => console.error(e))\n", + "language": "javascript" + }, + { + "code": "object CreateAndSendRawAssetMintingTransfer {\n\n import exampleState._\n import provider._\n\n val params: RawAssetTransfer.Params = ToplRpc.Transaction.RawAssetTransfer.Params(\n propositionType = PublicKeyPropositionCurve25519.typeString,\n sender = NonEmptyChain(externalAddress.head),\n recipients = NonEmptyChain((externalAddress(1), AssetValue(10, assetCode))),\n fee = 0,\n changeAddress = externalAddress.head,\n consolidationAddress = externalAddress(1),\n minting = true,\n data = None\n )\n\n val response: RpcErrorOr[BroadcastTx.Response] = for {\n rawTx <- ToplRpc.Transaction.RawAssetTransfer.rpc(params).map(_.rawTx)\n signTx <- EitherT.right {\n clearKeyRing()\n genKeys()\n val msg2Sign = rawTx.messageToSign\n val signFunc = (addr: Address) => keyRing.generateAttestation(addr)(msg2Sign)\n val signatures = keyRing.addresses.map(signFunc).reduce(_ ++ _)\n Future(rawTx.copy(attestation = signatures))\n }\n broadcastTx <- ToplRpc.Transaction.BroadcastTx.rpc(ToplRpc.Transaction.BroadcastTx.Params(signTx))\n } yield broadcastTx\n\n def main(args: Array[String]): Unit =\n response.value.foreach {\n case Left(value) => println(s\"Got some error: $value\")\n case Right(value) => println(s\"Got a success response: $value\")\n }\n}", + "language": "scala" + } + ] +} +[/block] +#Checking account balances + +Now address 2 should have an asset box with 10 assets while address 1 has no assets. + +In this example, we will query the balance of each address's assets. The following will print out the balance of each account. +[block:code] +{ + "codes": [ + { + "code": "brambl1.requests.lookupBalancesByAddresses({addresses: [address1, address2]}\n .then(res => {console.log(res.result[address1].Boxes.AssetBox); return res;})\n .then(res => console.log(res.result[address2].Boxes.AssetBox))\n .catch((e) => console.error(e))", + "language": "javascript" + }, + { + "code": "object LookupBalance {\n\n import exampleState._\n import provider._\n\n val params: Balances.Params = ToplRpc.NodeView.Balances.Params(externalAddress.toList)\n val response: RpcErrorOr[Balances.Response] = ToplRpc.NodeView.Balances.rpc(params)\n\n def main(args: Array[String]): Unit =\n response.value.foreach {\n case Left(value) => println(s\"Got some error: $value\")\n case Right(value) => println(s\"Got a success response: $value\")\n }\n\n}", + "language": "scala" + } + ] +} +[/block] +After running this script, it should ensure the following: +Address 1's asset balance is 0 +Address 2's asset balance is 10 + +If correct, you should see something similar to the following lines for address 2 +[block:code] +{ + "codes": [ + { + "code": "\n {\n \"nonce\": \"-8730299170071731040\",\n \"id\": \"CJNEBJEUjbuz8xt4YFgJt5bUAFUDnTw2tmUt4ah5BFxZ\",\n \"evidence\": \"LQ9nmM1uiThbsgEU4bVk95SKwkxpffW4E3kdGT8hY5oE\",\n \"type\": \"AssetBox\",\n \"value\": {\n \"quantity\": \"10\",\n \"assetCode\": \"5onZ9zqoVAtqQju5i8apy9v7WsDZ6fMqc31P9Qnbwv3z2gERL31eZnoTcj\",\n \"metadata\": null,\n \"type\": \"Asset\",\n \"securityRoot\": \"11111111111111111111111111111111\"\n }\n }\n ", + "language": "json" + } + ] +} +[/block] +Now that we have two addresses each loaded with their own assets, we can see how they transfer tokens to each other! + +In this example, the signer withdraws assets from their address. Then the transaction moves those resources to another user's address. +[block:callout] +{ + "type": "info", + "body": "After completing the first tutorial with a value > 10, complete the second tutorial, this time turning minting to \"false\" so that assets are not created, but rather pulled from the first address' balance." +} +[/block] +If correct, you should see that the 10 assets that were minted in step one have been added to the asset balance for address 2! + +You now know how a basic Asset is used in Topl's Blockchain! + +From here, you can try to extend the functionality of assets by making +* a faucet for these assets +* an <> that can be deposited to +* Of course, minting new Assets! +[block:tutorial-tile] +{ + "title": "Transfer Assets between Addresses in Valhalla", + "emoji": "🐳", + "backgroundColor": "#018FF4", + "slug": "transfer-assets-between-addresses-in-valhalla", + "_id": "62e99eede9a6470167b86ed6", + "id": "62e99eede9a6470167b86ed6", + "link": "https://topl.readme.io/v1.3.0/recipes/transfer-assets-between-addresses-in-valhalla" +} +[/block] \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/using-the-valhalla-test-network.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/using-the-valhalla-test-network.md new file mode 100644 index 0000000..5842eaa --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Getting Started/using-the-valhalla-test-network.md @@ -0,0 +1,68 @@ +--- +title: "Using the Valhalla Test Network" +slug: "using-the-valhalla-test-network" +hidden: false +createdAt: "2021-03-29T20:54:31.580Z" +updatedAt: "2021-11-10T19:13:42.177Z" +--- +#Before you begin + +Before you can interact with the test network, you need to install Brambl +[block:callout] +{ + "type": "warning", + "title": "Important", + "body": "This tutorial is compatible with BramblJS 1.3.x. After you have installed the [prerequisites](https://topl.readme.io/v1.3.0/docs/prerequisites), ** you must install [BramblJS](https://topl.readme.io/v1.3.0/docs/brambljs-installation-guide)**\n\nThis tutorial is also compatible with BramblSC. The steps to installing and importing are also above." +} +[/block] +# <> +When imported with no arguments, BramblJS defaults to point at a private node running on your localhost. While this is an option, it is easier to use Topl's test network (<>) where <>s have no real-world value. + +Using BramblSc, the quickest and easiest way to experiment and begin developing on Topl is to use the ValhallaTestNet provider found [here](doc:providers) +[block:callout] +{ + "type": "info", + "title": "Note", + "body": "The Topl development team pushes new updates and features to Valhalla before they are pushed to the main Toplnet. This may cause some behavior differences for a short period between the two networks." +} +[/block] +## Interacting with the network + +You can use Brambl to interact with the Valhalla network. BramblJS allows you to make transactions, view blocks on the chain, and other functionality! + +At the bottom of this page, you can view this tutorial as a recipe, with an interactive flow to help you to visualize how to get connected. + +### Step 1. Importing the Brambl Module + +To create a minimal instance of Brambl in your application, include the following lines in your application +[block:code] +{ + "codes": [ + { + "code": "const BramblJS = require('brambljs');", + "language": "javascript" + }, + { + "code": "val brambl: Brambl = Brambl.standalone(\"my_key_file_directory\", Some(ValhallaTestNet(apiKey = \"myApiKey\", , uri = \"https://staging.vertx.topl.services/valhalla/{{myProjectId}}\")))", + "language": "scala" + } + ] +} +[/block] + +To use Valhalla, use the network prefix `valhalla` when creating a new instance of BramblJS or use the ValhallaTestNet provider when using BramblSC +[block:code] +{ + "codes": [ + { + "code": "const brambl = new BramblJS({\n networkPrefix : \"valhalla\"\n\t}\n)", + "language": "javascript" + }, + { + "code": "val provider: Provider = ValhallaTestNet(apiKey = \"myApiKey\")\nval brambl: Brambl = Brambl.standalone(\"myKeyFileDirectory\", provider)", + "language": "scala" + } + ] +} +[/block] +To get free polys for testing, please follow the instructions [here](https://topl.readme.io/v1.3.0/docs/adding-polys) to get polys using our faucet available in the BaaS portal \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Introduction/about-topl.md b/versioned_docs/version-Tetra/v1.10.2/Introduction/about-topl.md new file mode 100644 index 0000000..0bdff13 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Introduction/about-topl.md @@ -0,0 +1,22 @@ +--- +title: "About Topl" +slug: "about-topl" +excerpt: "The Platform and its History" +hidden: false +createdAt: "2021-03-25T17:37:46.969Z" +updatedAt: "2021-10-12T19:57:13.249Z" +--- +# Brief Overview + +Built as the only blockchain designed from the ground up for social impact and sustainability, Topl sits at the unique intersection of cutting-edge technology and positive change. Founded in 2017, Topl's mission is to support and nurture an ecosystem of blockchain-powered applications solving problems ranging from carbon reduction and capture to financial inclusion and supply chain transparency. + +We've committed our resources and ourselves to the development of the blockchain that you're currently exploring. Our team has purpose-built every aspect of our technology, from our blockchain's underlying consensus to its integration tooling, with our users' unique needs and a strong focus on bringing transparency and verifiability to the positive changes you're all effecting. + +You're changing the world; we're just here to support you and help you prove it. + +# Network Offerings +Topl's blockchain network has been active since late 2018, and everyday we are working to improve its functionality and deliver new and exciting features. We've recently released Blockchain-as-a-Service (BaaS) to provide a simple and streamlined way for developers to integrate their applications onto the Topl blockchain. + +As we work to improve this service for our users please don't hesitate to reach out with feedback or questions. We value your thoughts immensely. + +See below to review our documentation structure, check out examples of use-cases and solutions, and dive right into the documentation! \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Introduction/conclusion.md b/versioned_docs/version-Tetra/v1.10.2/Introduction/conclusion.md new file mode 100644 index 0000000..9ceb50f --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Introduction/conclusion.md @@ -0,0 +1,10 @@ +--- +title: "Conclusion" +slug: "conclusion" +hidden: false +createdAt: "2021-03-29T18:19:08.069Z" +updatedAt: "2021-03-29T18:21:58.880Z" +--- +If you are a serious developer looking to create rock-solid transparency for your company or organization, Topl BaaS should be in your short list of solutions. + +The many capabilities of Topl BaaS makes it a highly scalable system supporting flexible trust assumptions that enable our platform to support a wide range of industry use cases ranging from food and fashion to precious gems and metals, to alternative finance, to carbon and impact credits, and so much more! \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Introduction/contributors.md b/versioned_docs/version-Tetra/v1.10.2/Introduction/contributors.md new file mode 100644 index 0000000..8f6fea9 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Introduction/contributors.md @@ -0,0 +1,103 @@ +--- +title: "Contributors" +slug: "contributors" +hidden: false +createdAt: "2021-03-25T17:51:42.285Z" +updatedAt: "2022-03-28T14:43:24.380Z" +--- +# Contributing to the Brambl libraries + +You want to contribute to Brambl libraries? Awesome. Please take a few moments to +review the following guidelines to get you started. Cheers. + +* [Communication channels](#communication) +* [Team members](#team) +* [Documentation](#documentation) +* [Issue tracker](#issues) +* [Bug reports](#bugs) +* [Pull requests](#pull-requests) +* [Versioning](#versioning) +* [License](#license) + + +## Communication channels + +Before you get lost in the repository, here are a few starting points +for you to check out. You might find that others have had similar +questions or that your question rather belongs in one place than another. + +* Chat: https://discord.gg/CHaG8utU +* Website: https://www.topl.co/ +* Twitter: https://twitter.com/topl_protocol + + + +## Team members + +The Brambl libraries are developed as an open source project by [Topl](https://www.topl.co/) +headquartered in Houston, TX. The core maintainers you will encounter in this project +are all part of Topl. + +## Documentation + +The Brambl documentation is primarily auto-generated. +Any pull requests to improve the documentation are highly appreciated. + + +## Using the issue tracker + +The issue tracker is the preferred channel for [bug reports](#bugs), +[features requests](#features) and [submitting pull +requests](#pull-requests), but please respect the following restriction: + +Please **do not** use the issue tracker for personal support requests (use [Discord chat](https://discord.gg/CHaG8utU)). + + +## Bug reports + +A bug is a _demonstrable problem_ that is caused by the code in the repository. +Good bug reports are extremely helpful - thank you! + +A good bug report shouldn't leave others needing to chase you up for more +information. Please try to be as detailed as possible in your report. What is +your environment? What steps will reproduce the issue? What would you expect to +be the outcome? All these details will help people to fix any potential bugs. + + +## Pull requests + +Good pull requests - patches, improvements, new features - are a fantastic +help. Thanks for taking the time to contribute. + +**Please ask first** before embarking on any significant pull request, +otherwise you risk spending a lot of time working on something that the +project's developers might not want to merge into the project. + +Brambl libraries follows the [GitFlow branching model](http://nvie.com/posts/a-successful-git-branching-model). The ```main``` branch always reflects a production-ready state while the latest development is taking place in the ```dev``` branch. + +Each time you want to work on a fix or a new feature, create a new branch based on the ```dev``` branch: ```git checkout -b BRANCH_NAME dev```. Only pull requests to the ```dev``` branch will be merged. + + +## Commit Message Convention + +Brambl libraries adapt the [Vue's commit convention](https://github.com/vuejs/vue/blob/dev/.github/COMMIT_CONVENTION.md). Commit messages can have the following types: + +- `build:` Changes that affect the build system or external dependencies +- `chore:` Changes to readme, etc +- `ci:` Changes to our CI configuration files and scripts +- `docs:` Documentation only changes +- `feat:` A new feature +- `fix:` A bug fix +- `perf:` A code change that improves performance +- `refactor:` A code change that neither fixes a bug nor adds a feature +- `style:` Changes that do not affect the meaning of the code (white-space, formatting, etc) +- `test:` Adding missing tests or correcting existing tests + +## Versioning + +Brambl is maintained by using the [Semantic Versioning Specification (SemVer)](http://semver.org). + + +## License + +By contributing your code, you agree to license your contribution under the [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/) \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Introduction/getting-started.md b/versioned_docs/version-Tetra/v1.10.2/Introduction/getting-started.md new file mode 100644 index 0000000..8dbedf0 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Introduction/getting-started.md @@ -0,0 +1,18 @@ +--- +title: "About This Guide" +slug: "getting-started" +hidden: false +createdAt: "2021-01-10T18:12:33.532Z" +updatedAt: "2021-04-15T13:51:22.771Z" +--- +#Topl <> Core Developer Guide + +Documentation and guides for interacting with Topl <> Platform programmatically through one of our Brambl API libraries or via Curl/Postman Requests. + +#Structure of our Readme + +Our documentation is structured to support the solutions that we offer. We begin with the onboarding process onto our <> platform, then continue to explore how to setup a sample application to interface with the Topl blockchain itself. + +If there are any improvements, please feel free to `Suggest Edits` using the button in the top right of each document. + +This resource is updated and improved regularly. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Introduction/performance-and-scalability.md b/versioned_docs/version-Tetra/v1.10.2/Introduction/performance-and-scalability.md new file mode 100644 index 0000000..94ab1da --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Introduction/performance-and-scalability.md @@ -0,0 +1,10 @@ +--- +title: "Performance and Scalability" +slug: "performance-and-scalability" +hidden: true +createdAt: "2021-03-29T18:13:41.673Z" +updatedAt: "2021-04-12T09:43:27.887Z" +--- +Performance of the Topl BaaS can be affected by many variables such as the transaction size, block size, and the existing state of the network. + +For <> and <> transfer transactions, the size is standardized and quantity will not affect performance. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Introduction/why-use-blockchain-technology-for-esg-compliance.md b/versioned_docs/version-Tetra/v1.10.2/Introduction/why-use-blockchain-technology-for-esg-compliance.md new file mode 100644 index 0000000..1e7ab7f --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Introduction/why-use-blockchain-technology-for-esg-compliance.md @@ -0,0 +1,10 @@ +--- +title: "Topl BaaS" +slug: "why-use-blockchain-technology-for-esg-compliance" +hidden: false +createdAt: "2021-03-29T16:03:10.251Z" +updatedAt: "2021-10-12T19:57:29.478Z" +--- +Topl's Blockchain-as-a-Service (<>) offering provides frictionless access to Topl's underlying distributed ledger network. Designed to suit everyone from startups to large enterprises, Topl's blockchain delivers state of the art capabilities for verifying <> compliance. + +By leveraging BaaS, you will be able to build a unique blockchain-powered application without the need to actually deploy or operate your own node or blockchain infrastructure. Topl's API-accessible hosted blockchain nodes together with Brambl API libraries are intended to enable a fast and easy development process. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Lookup Balances/lookup-balances.md b/versioned_docs/version-Tetra/v1.10.2/Lookup Balances/lookup-balances.md new file mode 100644 index 0000000..4000b15 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Lookup Balances/lookup-balances.md @@ -0,0 +1,7 @@ +--- +title: "Lookup Balances" +slug: "lookup-balances" +hidden: false +createdAt: "2021-04-06T17:01:51.812Z" +updatedAt: "2021-04-06T17:01:51.812Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/Lookup Balances/lookup-balances/lookupbalances.md b/versioned_docs/version-Tetra/v1.10.2/Lookup Balances/lookup-balances/lookupbalances.md new file mode 100644 index 0000000..b94a5ea --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Lookup Balances/lookup-balances/lookupbalances.md @@ -0,0 +1,8 @@ +--- +title: "Lookup Balances" +slug: "lookupbalances" +excerpt: "#### Summary\nLookup balances\n\n#### Type\nRemote -- Transaction must be used in conjunction with an external key manager service.\n\n#### Description\nCheck balances of specified addresses.\n\n#### Notes\n- Requires the Token Box Registry to be active\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|-----------|-----------|---------------------|----------------------------------------------|\n| addresses | [String] | Required | Addresses whose balances are to be retrieved |" +hidden: false +createdAt: "2021-04-06T17:01:51.937Z" +updatedAt: "2021-04-15T14:38:26.364Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/Lookup Block By Id/lookup-block-by-id.md b/versioned_docs/version-Tetra/v1.10.2/Lookup Block By Id/lookup-block-by-id.md new file mode 100644 index 0000000..e7860ef --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Lookup Block By Id/lookup-block-by-id.md @@ -0,0 +1,7 @@ +--- +title: "Lookup Block by Id" +slug: "lookup-block-by-id" +hidden: false +createdAt: "2021-04-06T17:12:49.980Z" +updatedAt: "2021-04-06T17:12:49.980Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/Lookup Block By Id/lookup-block-by-id/lookupblockbyid.md b/versioned_docs/version-Tetra/v1.10.2/Lookup Block By Id/lookup-block-by-id/lookupblockbyid.md new file mode 100644 index 0000000..f00435c --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Lookup Block By Id/lookup-block-by-id/lookupblockbyid.md @@ -0,0 +1,8 @@ +--- +title: "Lookup Block by id" +slug: "lookupblockbyid" +excerpt: "#### Summary\nLookup a block by its id\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|---------|-----------|---------------------|---------------------------------|\n| blockId | String | Required | Base58 encoded transaction hash |" +hidden: false +createdAt: "2021-04-06T17:12:50.159Z" +updatedAt: "2021-04-06T17:12:50.159Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/Lookup Block by Height/lookup-block-by-height.md b/versioned_docs/version-Tetra/v1.10.2/Lookup Block by Height/lookup-block-by-height.md new file mode 100644 index 0000000..7749cfd --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Lookup Block by Height/lookup-block-by-height.md @@ -0,0 +1,7 @@ +--- +title: "Lookup Block by Height" +slug: "lookup-block-by-height" +hidden: false +createdAt: "2021-04-06T17:15:57.542Z" +updatedAt: "2021-04-06T17:15:57.542Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/Lookup Block by Height/lookup-block-by-height/lookupblockbyheight.md b/versioned_docs/version-Tetra/v1.10.2/Lookup Block by Height/lookup-block-by-height/lookupblockbyheight.md new file mode 100644 index 0000000..5608fc2 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Lookup Block by Height/lookup-block-by-height/lookupblockbyheight.md @@ -0,0 +1,8 @@ +--- +title: "Lookup Block by Height" +slug: "lookupblockbyheight" +excerpt: "#### Summary\nLookup a block by its height\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|--------|-----------|---------------------|-------------------------------------------|\n| height | Number | Required | Height to retrieve on the canonical chain |" +hidden: false +createdAt: "2021-04-06T17:15:57.665Z" +updatedAt: "2021-04-06T17:15:57.665Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool.md b/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool.md new file mode 100644 index 0000000..aaba21b --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool.md @@ -0,0 +1,7 @@ +--- +title: "Lookup Transaction in Mempool" +slug: "lookup-transaction-in-mempool" +hidden: false +createdAt: "2021-04-06T17:10:27.370Z" +updatedAt: "2021-04-06T17:10:27.370Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool/lookuptransactioninmempool.md b/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool/lookuptransactioninmempool.md new file mode 100644 index 0000000..863f775 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool/lookuptransactioninmempool.md @@ -0,0 +1,8 @@ +--- +title: "Lookup Transaction in Mempool" +slug: "lookuptransactioninmempool" +excerpt: "#### Summary\nLookup a transaction in the mempool by its id\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|---------------|-----------|---------------------|---------------------------------|\n| transactionId | String | Required | Base58 encoded transaction hash |" +hidden: false +createdAt: "2021-04-06T17:10:27.493Z" +updatedAt: "2021-04-06T17:10:27.493Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction/lookup-transaction.md b/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction/lookup-transaction.md new file mode 100644 index 0000000..263716f --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction/lookup-transaction.md @@ -0,0 +1,7 @@ +--- +title: "Lookup Transaction" +slug: "lookup-transaction" +hidden: false +createdAt: "2021-04-06T17:07:37.229Z" +updatedAt: "2021-04-06T17:07:37.229Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction/lookup-transaction/lookuptransaction.md b/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction/lookup-transaction/lookuptransaction.md new file mode 100644 index 0000000..c92113c --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction/lookup-transaction/lookuptransaction.md @@ -0,0 +1,8 @@ +--- +title: "Lookup Transaction" +slug: "lookuptransaction" +excerpt: "#### Summary\nLookup a transaction by its id\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|---------------|-----------|---------------------|---------------------------------|\n| transactionId | String | Required | Base58 encoded transaction hash |" +hidden: false +createdAt: "2021-04-06T17:07:37.348Z" +updatedAt: "2021-04-06T17:07:37.348Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/New To Topl/block-rewards.md b/versioned_docs/version-Tetra/v1.10.2/New To Topl/block-rewards.md new file mode 100644 index 0000000..78ffd8a --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/New To Topl/block-rewards.md @@ -0,0 +1,7 @@ +--- +title: "Block Rewards" +slug: "block-rewards" +hidden: true +createdAt: "2021-08-23T18:39:06.224Z" +updatedAt: "2021-08-23T18:39:06.224Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/New To Topl/blockchain.md b/versioned_docs/version-Tetra/v1.10.2/New To Topl/blockchain.md new file mode 100644 index 0000000..d5d7d99 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/New To Topl/blockchain.md @@ -0,0 +1,22 @@ +--- +title: "Blockchain and Commitments" +slug: "blockchain" +hidden: false +createdAt: "2021-03-30T14:40:21.822Z" +updatedAt: "2021-05-10T17:55:56.196Z" +--- +A broad view of Topl might divide the world into two major parts: the blockchain and commitments + +A <> is best described as an append only public ledger or database that is distributed across many computers in a network. The blockchain logs the network's state at specific times after transactions have altered the state. + +The term "block" refers to the fact that data and state are stored in sequential batches or "blocks". "Chain" refers to the fact that each block cryptographically references its parent through a (hashed) linked-list. Each block does not store all the data in the blockchain network (it would be far too large). + +The state data is stored in an abstraction called a Box. User Address data and <> data are stored within these Boxes. + +Each new block must be agreed upon by every node in the network. This is so everyone has the same data. For this to work, <> s need a consensus mechanism. + +Topl uses a proof-of-stake <> , which unlike proof-of-work <> does not require large amounts of energy consumption to remain secure. + +New blocks are broadcast to the nodes on the network, checked and verified, updating the state for everyone. The blockchain is Topl's public ledger, an ordered and timestamped record of transactions. This system is designed to protect against double spending and modification of previous transaction records. + +Topl can handle proof of a wide range of different types of data using <>s. Commitments are hashed versions of the data which act as one part of a proof of data integrity since the owner must provide the original data in order to get the hashed value. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/New To Topl/how-topl-addresses-are-generated.md b/versioned_docs/version-Tetra/v1.10.2/New To Topl/how-topl-addresses-are-generated.md new file mode 100644 index 0000000..b06b6e0 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/New To Topl/how-topl-addresses-are-generated.md @@ -0,0 +1,168 @@ +--- +title: "Topl Blockchain Address" +slug: "how-topl-addresses-are-generated" +hidden: false +createdAt: "2021-03-25T20:26:06.337Z" +updatedAt: "2021-04-15T14:27:00.123Z" +--- +The Topl blockchain address is a unique sequence of numbers and letters that functions similarly to an email address. In particular, the numbers and letters are [Base58](https://tools.ietf.org/id/draft-msporny-base58-01.html) encoded. The Topl blockchain address refers to a specific destination on the network to which assets can. For example, imagine that you want to make a transaction on the Topl network with your friend Bob. Bob will share his address with you and you will be able to transact with him via this address. + +# Generate an Address + +Our public and private keys are generated using the <> algorithm. You get a reference for your address in the following way: + +### Step 1: Add the network prefix + - The network prefix allows nodes on the Topl network to verify which network the address is on +[block:parameters] +{ + "data": { + "h-0": "Network Prefix", + "h-1": "Network", + "h-2": "Notes", + "0-0": "0x01", + "0-1": "Topl Public Mainnet", + "0-2": "Not yet available in Beta", + "1-0": "0x10", + "1-1": "Valhalla public testnet", + "1-2": "Live in Beta", + "2-0": "0x30", + "2-1": "Local Developer Network", + "2-2": "Used for <> Developers" + }, + "cols": 3, + "rows": 3 +} +[/block] + ### Step 2: Append the propositionType prefix +- Topl supports addresses with public/private key pairs that are generated using two different algorithms. +[block:parameters] +{ + "data": { + "h-0": "Prefix", + "h-1": "propositionType", + "0-0": "0x01", + "0-1": "Curve25519 Public Key Hash", + "h-2": "Notes", + "0-2": "Default Implementation by Brambl KeyManager", + "1-0": "0x02", + "1-1": "Curve25519 Threshold Hash", + "1-2": "Another implementation accepted by the Topl Network" + }, + "cols": 3, + "rows": 2 +} +[/block] +### Step 3: Append the evidence content + +The evident content is a 32 byte commitment to the proposition that must be supplied and satisfied by the transaction issuer. +[block:parameters] +{ + "data": { + "h-0": "propositionType", + "0-0": "0x01", + "h-1": "Generation Method", + "h-2": "Notes", + "0-1": "Blake2b-256 Hash of the Public Key", + "0-2": "For Curve25519 Public Key Hash", + "1-0": "0x02", + "1-1": "Blake2b-256 Hash of all public keys in the threshold proposition", + "1-2": "For Threshold Hash" + }, + "cols": 3, + "rows": 2 +} +[/block] +### Step 4: Append the address checksum + +Finally, add the first 4 bytes of the Blake2b-256 hash of the preceding 34 bytes. + +### Step 5: Convert into Base58 +The last step is to convert the address that you get after appending the four pieces of information into Base58. + + +# Generate an address using the BramblJS KeyManager module + +The easiest way to generate an address is using the Brambl KeyManager Module. An example of this is shown in the **recipe **below. + +The KeyManager module is compliant with Bifrost's Gjallarhorn Key Manager service and provides an straightforward interface for creating new keyfiles as well as creating and verifying signatures on transactions. New encrypted keyfiles are generated using Curve25519 key pairs and are encrypted using an AES-256 cipher with a user-specified password. All data within the keyfile is encoded using Base58. +[block:tutorial-tile] +{ + "title": "Create Topl Address using BramblJS", + "emoji": "💐", + "backgroundColor": "#2c5572", + "slug": "create-topl-address-using-brambljs", + "_id": "62e99eede9a6470167b86ece", + "id": "62e99eede9a6470167b86ece", + "link": "https://topl.readme.io/v1.3.0/recipes/create-topl-address-using-brambljs" +} +[/block] +#Generate an address using the BramblSc KeyRing + +If you are using BramblSc, it is also simple to generate and address. An example is shown below + +[block:code] +{ + "codes": [ + { + "code": "val address = brambl.keyRing.DiskOps.generateKeyFile(\"password\").get", + "language": "scala" + } + ] +} +[/block] +# Generate multiple addresses using the BramblSC KeyRing + +First, let's initialize our BramblSC instance, then create 3 addresses using the KeyRing. +[block:callout] +{ + "type": "info", + "title": "Note:", + "body": "The password to encrypt the keyfile used must be encoded in Latin-1. In addition, please replace {{myProjectId}} with your projectID." +} +[/block] + +[block:code] +{ + "codes": [ + { + "code": "val provider: Provider = ValhallaTestNet(apiKey = \"myApiKey\", uri = \"https://staging.vertx.topl.services/valhalla/{{myProjectId}}\")\nval brambl: Brambl = Brambl.standalone(\"./my_key_directory\",Some( provider))\n \nval addrs: Set[Address] = brambl.keyRing.generateNewKeyPairs(3) match {\n case Failure(exception) => throw exception\n case Success(value) => value.map(_.publicImage.address(brambl.networkPrefix))\n }", + "language": "scala" + } + ] +} +[/block] +# Import Bifrost Keyfile + +If you are a Bifrost Developer, you can also import keys generated by Bifrost's Gjallarhorn KeyManager. An example is shown in the recipe below. +[block:tutorial-tile] +{ + "title": "Create Topl Address from Curve25519 KeyFile", + "emoji": "🍥", + "backgroundColor": "#331f51", + "slug": "create-topl-address-from-curve25519-keyfile", + "_id": "62e99eede9a6470167b86ecf", + "id": "62e99eede9a6470167b86ecf", + "link": "https://topl.readme.io/v1.3.0/recipes/create-topl-address-from-curve25519-keyfile" +} +[/block] +# Import Keyfile BramblSC + +In addition, you can also import keys generated by BramblSC's KeyRing. An example is shown below. +[block:code] +{ + "codes": [ + { + "code": "val provider: Provider = ValhallaTestNet(apiKey = \"myApiKey\", uri = \"https://staging.vertx.topl.services/valhalla/{{myProjectId}}\")\nval brambl: Brambl = Brambl.standalone(\"./my_key_directory\",Some( provider))\n \n val address1 = brambl.keyRing.DiskOps.unlockKeyFile(\"base58_encoded_address\", \"password\") match {\n case Failure(exception) => throw exception\n case Success(value) => value\n }", + "language": "scala" + } + ] +} +[/block] + +[block:callout] +{ + "type": "warning", + "title": "Note", + "body": "The string for the address has to be the same as the address generated by BramblSC and the naming convention for the keyfile has to include \\.json. \n\nIn addition, BramblSC checks the whole directory for valid keyfiles so if there are other files in your key file directory that are not valid keys, or that are from different networks, then BramblSC will throw a validation error." +} +[/block] \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/New To Topl/introduction-1.md b/versioned_docs/version-Tetra/v1.10.2/New To Topl/introduction-1.md new file mode 100644 index 0000000..2904149 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/New To Topl/introduction-1.md @@ -0,0 +1,12 @@ +--- +title: "Introduction" +slug: "introduction-1" +hidden: false +createdAt: "2021-03-29T18:37:47.745Z" +updatedAt: "2021-04-15T13:55:02.440Z" +--- +If you're new to blockchain, we recommend you first begin with the remainder of this Key Concepts section in order to gain familiarity with the design patterns of blockchain networks. + +This section is may also be useful for getting to know the specifics of Topl's blockchain design as there are a few unique aspects to be aware of if you are migrating from a different blockchain network. + +Once you're comfortable with all the key concepts, you can move on to either the BaaS Portal Onboarding or Getting started sections to explore the demos, technical specifications, and APIs. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/New To Topl/networks.md b/versioned_docs/version-Tetra/v1.10.2/New To Topl/networks.md new file mode 100644 index 0000000..f59c964 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/New To Topl/networks.md @@ -0,0 +1,12 @@ +--- +title: "Networks" +slug: "networks" +hidden: false +createdAt: "2021-04-05T14:23:06.302Z" +updatedAt: "2021-04-15T14:27:53.067Z" +--- +# Networks + +There are two Topl networks as well as custom networks and developer networks. + +Our Brambl API library accepts the following networkPrefixes `toplnet, valhalla, local, private" where Toplnet is the main network, Valhalla is the testing network, local and private designate developer networks running in your local environment. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/New To Topl/signing.md b/versioned_docs/version-Tetra/v1.10.2/New To Topl/signing.md new file mode 100644 index 0000000..e26df7b --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/New To Topl/signing.md @@ -0,0 +1,33 @@ +--- +title: "Signing" +slug: "signing" +hidden: false +createdAt: "2021-04-01T19:19:32.850Z" +updatedAt: "2021-04-01T19:30:53.035Z" +--- +# What is Signing? + +Signing is the act of user A "signing" data that anyone can validate came from user A. This is used in transactions to check if they are real. + +A common question is "how can you validate transactions are real?". The short answer is public-key cryptography. It's an algorithm with 3 parts. + +1.) Key Creation +2.) Encryption/Signing +3.) Decryption/Validation + +Encryption is generally used to hide data in other data. If you encrypt a string like "hello world" you get something like "dqE3gJz/+5CQHfSJwMP2nQ". It's purpose is to hide the message "hello world". Signing is used to create a different output string, but you also publicize the original message. + +The key creation will output two strings, a public and private key. It links them through an algorithm that has the signing and validation properties. A signature will take in a public key, private key, and a message. The output will be another string that is the signature. + +1.) Signature = F(public key, private key, message) +2.) Validation = F(signature, message) +3.) Is Valid if: Validation = public key + +Notice how validation does not require knowledge of the private key. This is what allows 3rd parties to validate information. If the output of the validation function (at Topl, we use the parlance <>) is equal to the public key then the signature is real, otherwise, it is fake. + +The signature is made up of 3 variables. Topl employs <> and those variables are simply part of the underlying math. + +# Why Sign? +Signing is a nice way to know something is being done by the correct person. This means we can trust that someone is actually doing what they say they are. + +Instead of real world signatures, which can be faked, the digital ones can not. If you want to know user A did something, make them sign it before moving forward. Then if a dispute arises, check the signature. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/New To Topl/transactions-1.md b/versioned_docs/version-Tetra/v1.10.2/New To Topl/transactions-1.md new file mode 100644 index 0000000..4f685fc --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/New To Topl/transactions-1.md @@ -0,0 +1,75 @@ +--- +title: "Transactions" +slug: "transactions-1" +hidden: false +createdAt: "2021-08-11T21:05:58.590Z" +updatedAt: "2021-08-11T21:05:58.590Z" +--- +# Introduction + +Transactions are the most important part of the Topl protocol. Everything else in Topl is designed to ensure that transactions can be created, propagated on the network, validated, and finally added to the global ledger of transactions (the blockchain). Transactions are data structures that encode the transfer of tokens between participants in the Topl system. Each transaction is a public entry in Topl's blockchain, the global bookkeeping ledger. + +In this section, we will examine all the various forms of transactions, what they contain, how to create them, how they are verified, and how they become a permanent record of all transactions. + +# Transaction Lifecycle +A transaction's lifecycle begins with the transaction's creation, also known as *origination.* The transaction is then signed with one or more signatures indicating the authorization to spend the UTXOs referenced by the transaction. The transaction is then *broadcast* on the Topl network, where each Bifrost node (participant) validates and propagates the transaction until it reaches every node in the network. Finally, the transaction is verified by a forging node, and included in a block of transactions that is recorded on the blockchain. + + + +Once recorded on the blockchain and confirmed by sufficient subsequent blocks (confirmed), the transaction is a permanent part of the Topl ledger, and is accepted as valid by all participants. The UTXOs allocated to a new owner by the transaction can then be spent in a new transaction, extending the chain of ownership and beginning the lifecycle of a transaction again. + +# Creating Transactions + +In some ways, it helps to think of a transaction in the same way as a paper check. Like a check, a transaction is an instrument that expresses the intent to transfer ownership of an asset and is not visible to the financial system until it is submitted for execution. Like a check, the originator of a transaction does not have to be the one signing the transaction. + +Currently, transactions must be created online. But transactions can be created by anyone, they do not have to have the credentials for a particular address. For example, an accounts payable clerk might process payable checks for signature by the CEO. Similarly, an accounts payable clerk can create Topl transactions and then have the CEO apply digital signatures to make them valid. Whereas a check references a specific account as the source of the funds, a Topl transaction references specific boxes that have been generated by a prior transaction as its source, rather than a particular account. + + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/b36ed30-Screen_Shot_2021-08-11_at_4.36.56_PM.png", + "Screen Shot 2021-08-11 at 4.36.56 PM.png", + 1770, + 918, + "#fcf6f3" + ] + } + ] +} +[/block] +Once a transaction has been created, it is signed by the owner (or owners) of the source of the funds. If it is properly formed and signed, the signed transaction is now valid and contains all the information needed to execute the transfer of tokens. Finally, the valid transaction has to reach the Topl network so that it can be propagated until it reaches a forger for inclusion in the public ledger (the blockchain) + +# Broadcasting Transactions to the Topl Network + +First, a transaction needs to be delivered to the Topl network so that it can be propagated and included in the blockchain. In essence, a Topl transaction is just a few bytes of data and has to reach any one of many Bifrost nodes. The senders do not need to trust the nodes they use to broadcast the transaction, as long as they use more than one to ensure that it propagates. The nodes don't need to trust the sender or establish the sender's "identity". Because the transaction is signed and contains no confidential information, private keys, or credentials, it can be publicly broadcast using the JSON-RPC routes. Unlike credit card transactions, for example, which contain sensitive information and can only be transmitted on an encrypted network, a Topl transaction can be sent over any network. As long as the transaction can reach a Topl node that will propagate it into the Topl network, it doesn't matter how it is transported to the first node. + +Topl transactions can therefore be transmitted to the Topl network over insecure networks like WiFi. As an extreme example, a Topl transaction could even be encoded in smileys (emoticons) and posted in a public forum or sent as a text message or Skype chat message. + +# Polling for Transactions on the Topl Network +Once a Topl transaction is sent to any node connected to the Topl network, the transaction will be validated by that node. If valid, that node will propagate it to the other nodes to which it is connected. If the transaction is invalid, the node will reject it and remove the transaction from the queue of transactions (mempool). + +The Topl network is a peer-to-peer network, meaning that each Bifrost node is connected to a few other Bifrost nodes that it discovers during startup through the peer-to-peer protocol. The entire network forms a loosely connected mesh without a fixed topology or any other structure, making all nodes equal peers. Messages, including transactions and blocks, are propagated from each node to the peers to which it is connected. A new validated transaction injected into any node on the network will be sent to three or four of the neighboring nodes, each of which will send it to three to four more nodes, and so on. In this way, within a few seconds a valid transaction will propagate in an exponentially expanding ripple across the network until all connected nodes have received it. + +The Topl network is designed to propagate transactions and blocks to all nodes in an efficient and resilient manner that is resistant to attacks. To prevent spamming, denial of service attacks, or other nuisance attacks against the Topl network, every node independently validates every transaction before propagating it further. A malformed transaction will not get beyond one node. + +Due to this setup, the originator should poll the mempool periodically. Once a transaction has left the mempool, it could either be because it was incorporated into a new block, or because it was malformed. Thus, after getting an unsuccessful hit from the mempool, the originator should then query the blockchain itself to see if the transaction was incorporated into a block. Only after getting a successful response from the blockchain should they proceed to using any UTXOs that were generated as a result of the transaction. This can be seen in the flow diagram below: + + +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/3b69254-Screen_Shot_2021-08-11_at_5.02.53_PM.png", + "Screen Shot 2021-08-11 at 5.02.53 PM.png", + 1218, + 558, + "#fbf6f3" + ] + } + ] +} +[/block] \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/New To Topl/wallet-cryptography-and-encoding.md b/versioned_docs/version-Tetra/v1.10.2/New To Topl/wallet-cryptography-and-encoding.md new file mode 100644 index 0000000..b4d43ba --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/New To Topl/wallet-cryptography-and-encoding.md @@ -0,0 +1,46 @@ +--- +title: "Recovery Phrases" +slug: "wallet-cryptography-and-encoding" +hidden: false +createdAt: "2021-10-08T21:20:21.210Z" +updatedAt: "2021-10-08T21:35:29.141Z" +--- +## Recovery Phrases + +### Motivation + +We define a way for easily entering and writing down arbitrary binary seeds using +a simple dictionary of known words (available in many different languages). + +The motivation here is to have sentence of words easy to read and write for humans, +which map uniquely back and forth to a sized binary data (harder to remember). + +### Encoding + +The process describing how to encode recovery phrases is described in [BIP-0039](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki) +section "Generating the mnemonic". Below is a reformulation of this specification. + +We call _Entropy_ an arbitrary sequence of bytes that has been generated through high +quality randomness methods. The allowed size of _Entropy_ is 96-256 bits and is +necessarily a multiple of 32 bits (4 bytes). + +A checksum is appended to the initial entropy by taking the first `ENT / 32` bits +of the SHA256 hash of it, where `ENT` designates the _Entropy_ size in bits. + +Then, the concatenated result is split into groups of 11 bits, each encoding a number +from 0 to 2047 serving as an index into a known dictionary (see below). + +| Sentence Length | Entropy Size | Checksum Size | +| ------------ | ------------------- | ------ | +| 9 words | 96 bits (12 bytes) | 3 bits | +| 12 words | 128 bits (16 bytes) | 4 bits | +| 15 words | 160 bits (20 bytes) | 5 bits | +| 18 words | 192 bits (24 bytes) | 6 bits | +| 21 words | 224 bits (28 bytes) | 7 bits | +| 24 words | 256 bits (32 bytes) | 8 bits | + +### Dictionaries + +Topl uses the same dictionaries as defined in [BIP-0039](https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md). + +--- \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/New To Topl/what-are-polys.md b/versioned_docs/version-Tetra/v1.10.2/New To Topl/what-are-polys.md new file mode 100644 index 0000000..775e72d --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/New To Topl/what-are-polys.md @@ -0,0 +1,21 @@ +--- +title: "What are Polys?" +slug: "what-are-polys" +hidden: false +createdAt: "2021-03-31T20:20:07.140Z" +updatedAt: "2022-04-12T15:13:17.746Z" +--- +Polys represent the currency unit used to pay fees on the Topl blockchain. Any user who attempts to broadcast a transaction must include a set number of Polys to ensure that their transaction is included in a new block and thus added to the ledger. + +This fee acts as an incentive to the nodes running the blockchain code to continue to relay messages and keep the network available and secure. The amount of Polys required for a successful transaction is currently fixed by the network. + +1 nanopoly (10^-9 polys) is the smallest unit to which a poly can be divided. The denomination must be used when interacting with the Topl blockchain. + +So instead of entering a value of 1 poly to pay a transaction fee, you would enter a fee 10^9 nanopolys. +[block:callout] +{ + "type": "info", + "title": "Current Fees", + "body": "Currently, the transaction fee for the Valhalla testnet is set to 100 nanopoly.\n\nOn the production mainnet, transaction fees will be set to 1 poly or 10^9 nanopolys." +} +[/block] \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Raw Asset Transfer/raw-asset-transfer.md b/versioned_docs/version-Tetra/v1.10.2/Raw Asset Transfer/raw-asset-transfer.md new file mode 100644 index 0000000..ddf06b2 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Raw Asset Transfer/raw-asset-transfer.md @@ -0,0 +1,7 @@ +--- +title: "Raw Asset Transfer" +slug: "raw-asset-transfer" +hidden: false +createdAt: "2021-07-09T20:54:07.327Z" +updatedAt: "2021-07-09T20:54:07.327Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/Raw Asset Transfer/raw-asset-transfer/createrawassettransfer.md b/versioned_docs/version-Tetra/v1.10.2/Raw Asset Transfer/raw-asset-transfer/createrawassettransfer.md new file mode 100644 index 0000000..ce49246 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Raw Asset Transfer/raw-asset-transfer/createrawassettransfer.md @@ -0,0 +1,8 @@ +--- +title: "Create raw asset transfer" +slug: "createrawassettransfer" +excerpt: "#### Summary\nTransfer Assets from an account to a specified recipient\n\n#### Type\nRemote -- Transaction must be used in conjunction with an external key manager service.\n\n#### Description\nDefault behavior of the wallet is to find the first unlocked address which hold the targetted Asset.\nThe protocols default behavior is to combine multiple UTXOs of the same type into a single UTXO when it can.\n\n#### Notes\n- `AssetCode` in `AssetValue` can be generated using `util_generateAssetCode`\n- `fee` and `quantity` in `AssetValue` need to be strings, they will be converted into Int128 which can go up \nto 178 undecillion(2^127-1)\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|----------------------|------------------------|---------------------|-----------------------------------------------------------------------------------|\n| propositionType | String | Required | Type of proposition, eg., PublicKeyCurve25519, ThresholdCurve25519 |\n| recipients | [[String, AssetValue]] | Required | Array of addresses and assetValues for the transfer recipients(check table below) |\n| sender | [String] | Required | Array of addresses from which Assets should be sent |\n| changeAddress | String | Required | Address for recipient of unspent Polys |\n| consolidationAddress | String | Optional | Address for recipient of unspent Assets |\n| fee | String | Required | Fee for the transfer. Minting AssetTransfer requires fee to be greater than 0 |\n| minting | Boolean | Required | If this is a minting AssetTransfer or not |\n| data | String | Optional | Data string which can be associated with this transaction(may be empty). Data has a maximum value of 127 characters. |\n\n###### AssetValue\n| Fields | Data type | Required / Optional | Description |\n|--------------|-----------|---------------------|-------------------------------------------------------------------------------------------------|\n| type | String | Required | Type of transfer, should be \"Asset\" for AssetTransfer |\n| quantity | String | Required | Number of tokens in String |\n| assetCode | String | Required | Unique identifier for user issued Assets, generated from version, issuer address, and shortName |\n| securityRoot | String | Optional | Optional 32 byte commitment to instance of the AssetBox |\n| metadata | String | Optional | Metadata has a maximum value of 127 characters |" +hidden: false +createdAt: "2021-04-06T16:50:34.984Z" +updatedAt: "2021-07-09T20:54:07.470Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/Raw Poly Transfer/raw-poly-transfer.md b/versioned_docs/version-Tetra/v1.10.2/Raw Poly Transfer/raw-poly-transfer.md new file mode 100644 index 0000000..7def37b --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Raw Poly Transfer/raw-poly-transfer.md @@ -0,0 +1,7 @@ +--- +title: "Raw Poly Transfer" +slug: "raw-poly-transfer" +hidden: false +createdAt: "2021-07-09T20:50:41.410Z" +updatedAt: "2021-07-09T20:50:41.410Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/Raw Poly Transfer/raw-poly-transfer/createrawpolytransfer.md b/versioned_docs/version-Tetra/v1.10.2/Raw Poly Transfer/raw-poly-transfer/createrawpolytransfer.md new file mode 100644 index 0000000..3486a4a --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Raw Poly Transfer/raw-poly-transfer/createrawpolytransfer.md @@ -0,0 +1,8 @@ +--- +title: "Create raw poly transfer" +slug: "createrawpolytransfer" +excerpt: "#### Summary\nTransfer Polys from an account to a specified recipient.\n\n#### Type\nRemote -- Transaction must be used in conjunction with an external key manager service.\n\n#### Description\nDefault behavior of the wallet is to find the first unlocked address which hold Polys.\nThe protocols default behavior is to combine multiple UTXOs of the same type into a single UTXO when it can.\n\n#### Notes\n- `fee` and Poly amounts in `recipients` need to be strings, they will be converted into Int128 which can go up\nto 178 undecillion(2^127-1)\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|-----------------|--------------------|---------------------|--------------------------------------------------------------------------|\n| propositionType | String | Required | Type of proposition, eg., PublicKeyCurve25519, ThresholdCurve25519 |\n| recipients | [[String, String]] | Required | Array of addresses and Poly amounts for the corresponding recipients |\n| sender | [String] | Required | Array of addresses from which Poly should be sent |\n| changeAddress | String | Required | Address for recipient of unspent Polys |\n| fee | String | Required | Fee for the transfer |\n| data | String | Optional | Data string which can be associated with this transaction (may be empty). Data has a maximum value of 127 Latin-1 encoded characters |" +hidden: false +createdAt: "2021-07-09T20:50:41.563Z" +updatedAt: "2021-07-09T20:50:41.563Z" +--- diff --git a/versioned_docs/version-Tetra/v1.10.2/Release Notes/topl-protocol-release-notes.md b/versioned_docs/version-Tetra/v1.10.2/Release Notes/topl-protocol-release-notes.md new file mode 100644 index 0000000..0dd5eaf --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Release Notes/topl-protocol-release-notes.md @@ -0,0 +1,32 @@ +--- +title: "Topl Protocol Release Notes" +slug: "topl-protocol-release-notes" +hidden: false +createdAt: "2021-03-29T18:35:07.099Z" +updatedAt: "2021-11-10T19:10:33.647Z" +--- +The release notes provide more details for users who are planning on using the BaaS + +# Topl Protocol Release Notes +* [Bifrost v1.8.0](https://github.com/Topl/Bifrost/releases/tag/v1.8.0) +* [Bifrost v.1.6.3](https://github.com/Topl/Bifrost/releases/tag/v1.6.3) +* [Bifrost v1.4.3] (https://github.com/Topl/Bifrost/releases/tag/v1.4.3) +* [Bifrost v1.3.4 jar](https://repo.topl.network/bifrost-1.3.4.jar) +* [Bifrost v1.3.3 release notes](https://github.com/Topl/Bifrost/releases/tag/v1.3.3) +* [Bifrost v1.0.0 release notes](https://github.com/Topl/Bifrost/releases/tag/v1.0.0) + +# BramblSC +* [BramblSC v1.8.0](https://github.com/Topl/Bifrost/releases/tag/v1.8.0) +* [BramblSC v1.6.3](https://github.com/Topl/Bifrost/releases/tag/v1.6.3) +* [BramblSC v0.1.0](https://github.com/Topl/BramblSc) + +# BramblJS +* [BramblJS 1.3.0](https://github.com/Topl/BramblJS/releases/tag/1.3.0) +* [BramblJS v1.2.3](https://www.npmjs.com/package/brambljs) +* BramblJS v1.2.2 (Notes to be completed soon) +* [BramblJS v1.2.1](https://github.com/Topl/BramblJS/releases/tag/v1.2.1) +* [BramblJS v1.1.1](https://github.com/Topl/BramblJS/releases/tag/v1.1.1) +*[BramblJS v1.0.1](https://github.com/Topl/BramblJS/releases/tag/v1.0.1) + +#BramblDart +* [BramblDart 0.0.1](https://github.com/Topl/BramblDart/releases/tag/v0.0.1) \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Still have questions-/additional-resources.md b/versioned_docs/version-Tetra/v1.10.2/Still have questions-/additional-resources.md new file mode 100644 index 0000000..725c5ab --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Still have questions-/additional-resources.md @@ -0,0 +1,15 @@ +--- +title: "Additional Resources" +slug: "additional-resources" +hidden: false +createdAt: "2021-03-29T18:55:31.034Z" +updatedAt: "2021-11-10T19:09:07.464Z" +--- +We try to maintain a comprehensive set of documentation for various audiences. However, we realize that often there are questions that remain unanswered. + +### Community +- [Discord][discord-url] +- [StackExchange][stackexchange-url] + +[discord-url]: https://discord.gg/mre2Dazqsy +[stackexchange-url]: https://bitcoin.stackexchange.com/questions/tagged/topl \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Still have questions-/bibliography.md b/versioned_docs/version-Tetra/v1.10.2/Still have questions-/bibliography.md new file mode 100644 index 0000000..73899e4 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Still have questions-/bibliography.md @@ -0,0 +1,10 @@ +--- +title: "Bibliography" +slug: "bibliography" +hidden: false +createdAt: "2021-08-23T17:39:51.187Z" +updatedAt: "2021-10-08T18:59:33.146Z" +--- +Blockchain Explorer overview can be found in more detail here: https://coinmarketcap.com/guides/blockexplorer + +Big thanks to Cardano for their open source work on the Bip-44 HD wallet derivation schemes as well as their robust documentation. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Topl Addresses/install.md b/versioned_docs/version-Tetra/v1.10.2/Topl Addresses/install.md new file mode 100644 index 0000000..fb20513 --- /dev/null +++ b/versioned_docs/version-Tetra/v1.10.2/Topl Addresses/install.md @@ -0,0 +1,53 @@ +--- +title: "Install" +slug: "install" +hidden: false +createdAt: "2021-08-27T19:57:21.680Z" +updatedAt: "2021-10-18T20:07:14.034Z" +--- +# Command Line +[block:image] +{ + "images": [ + { + "image": [ + "https://files.readme.io/16d2ea9-keyboard-4d5a3e1a.svg", + "keyboard-4d5a3e1a.svg", + 320, + 320, + "#998099" + ] + } + ] +} +[/block] +## Install Anywhere (npm) +If you use Node.js, you can install Topl Addresses using [npm](https://www.npmjs.com/) by running `npm install -g bip_topl` + +However, please note that this will install the pure JavaScript implementation of Topl Addresses, which runs somewhat slower than the other options listed here. But it has the same interface, so it'll be easy to swap in another implementation later if you need a bit more speed! + +Once you have run the above command, don't forget to `require()` it as a library! + +When install via npm, Topl Addresses supports a Javascript API that aims to be compatible with Node. Full compatibility is a work in progress. + +## Dart Library +You can also use Dart Bip for Topl to get the speed of the Dart VM plus the ability to extend functions. To add it to an existing project: + +1.) [Install the Dart SDK](https://dart.dev/get-dart#automated-installation-and-updates). Make sure that its bin directory is [on your path](https://katiek2.github.io/path-doc/). +2.) Create a pubspec.yaml file like this: + + + +[block:code] +{ + "codes": [ + { + "code": "name: my_project\ndev_dependencies:\n\tbip_topl: ^x.y.z", + "language": "yaml" + } + ] +} +[/block] +3.) Run dart pub get + +5.) Learn more about [writing Dart code](https://dart.dev/guides/language/language-tour) (it's easy!) \ No newline at end of file diff --git a/versioned_sidebars/version-Dion-sidebars.json b/versioned_sidebars/version-Dion-sidebars.json new file mode 100644 index 0000000..caea0c0 --- /dev/null +++ b/versioned_sidebars/version-Dion-sidebars.json @@ -0,0 +1,8 @@ +{ + "tutorialSidebar": [ + { + "type": "autogenerated", + "dirName": "." + } + ] +} diff --git a/versioned_sidebars/version-Tetra-sidebars.json b/versioned_sidebars/version-Tetra-sidebars.json new file mode 100644 index 0000000..caea0c0 --- /dev/null +++ b/versioned_sidebars/version-Tetra-sidebars.json @@ -0,0 +1,8 @@ +{ + "tutorialSidebar": [ + { + "type": "autogenerated", + "dirName": "." + } + ] +} diff --git a/versions.json b/versions.json new file mode 100644 index 0000000..b5b05b8 --- /dev/null +++ b/versions.json @@ -0,0 +1,4 @@ +[ + "Tetra", + "Dion" +] From 2313b1fd5ab7873dc58c96b40ab3d13ef8ef9c1d Mon Sep 17 00:00:00 2001 From: Logan Edmonds Date: Wed, 15 Feb 2023 13:59:29 -0600 Subject: [PATCH 2/2] Removed versioning --- docusaurus.config.js | 13 +- versioned_docs/version-Dion/intro.md | 47 ---- .../tutorial-basics/_category_.json | 8 - .../tutorial-basics/congratulations.md | 23 -- .../tutorial-basics/create-a-blog-post.md | 34 --- .../tutorial-basics/create-a-document.md | 57 ----- .../tutorial-basics/create-a-page.md | 43 ---- .../tutorial-basics/deploy-your-site.md | 31 --- .../tutorial-basics/markdown-features.mdx | 146 ------------- .../tutorial-extras/_category_.json | 7 - .../img/docsVersionDropdown.png | Bin 25427 -> 0 bytes .../tutorial-extras/img/localeDropdown.png | Bin 27841 -> 0 bytes .../tutorial-extras/manage-docs-versions.md | 55 ----- .../tutorial-extras/translate-your-site.md | 88 -------- .../v1.10.2/Annulus/main-search-bar.md | 29 --- .../v1.10.2/Annulus/overview-page.md | 64 ------ .../v1.10.2/Annulus/recent-blocks.md | 33 --- .../Annulus/simplifying-the-blockchain.md | 25 --- .../v1.10.2/Annulus/transactions-view.md | 63 ------ .../BaaS Portal Onboarding/adding-polys.md | 66 ------ .../choosing-a-network.md | 36 ---- .../creating-a-project.md | 83 ------- .../creating-an-organization-1.md | 136 ------------ ...s-blockchain-as-a-service-baas-platform.md | 13 -- .../BaaS Portal Onboarding/rate-limits.md | 38 ---- .../registration-and-login.md | 56 ----- .../BaaS Portal Onboarding/topl-api-keys.md | 51 ----- .../two-factor-authentication.md | 92 -------- .../BaaS Portal Onboarding/user-settings.md | 19 -- .../broadcast-transaction.md | 7 - .../broadcasttransaction.md | 8 - .../Digital Asset Modeling Language/faq.md | 8 - .../get-latest-block-in-the-chain.md | 7 - .../getthelatestblockinthechain.md | 8 - .../get-all-transactions-from-mempool.md | 7 - .../getmempool.md | 8 - .../brambl-faqs-and-more-information.md | 19 -- .../v1.10.2/Getting Started/daml.md | 37 ---- .../v1.10.2/Getting Started/introduction-2.md | 36 ---- .../Getting Started/sdks-and-api-libraries.md | 54 ----- .../sdks-and-api-libraries/docker.md | 58 ----- .../installing-bifrost.md | 180 ---------------- .../sdks-and-api-libraries/overview.md | 27 --- .../sdks-and-api-libraries/running-bifrost.md | 143 ------------ .../security-and-authentication.md | 84 -------- .../Getting Started/simple-transfer.md | 204 ------------------ .../using-the-valhalla-test-network.md | 68 ------ .../v1.10.2/Introduction/about-topl.md | 22 -- .../v1.10.2/Introduction/conclusion.md | 10 - .../v1.10.2/Introduction/contributors.md | 103 --------- .../v1.10.2/Introduction/getting-started.md | 18 -- .../performance-and-scalability.md | 10 - ...lockchain-technology-for-esg-compliance.md | 10 - .../Lookup Balances/lookup-balances.md | 7 - .../lookup-balances/lookupbalances.md | 8 - .../Lookup Block By Id/lookup-block-by-id.md | 7 - .../lookup-block-by-id/lookupblockbyid.md | 8 - .../lookup-block-by-height.md | 7 - .../lookupblockbyheight.md | 8 - .../lookup-transaction-in-mempool.md | 7 - .../lookuptransactioninmempool.md | 8 - .../Lookup Transaction/lookup-transaction.md | 7 - .../lookup-transaction/lookuptransaction.md | 8 - .../v1.10.2/New To Topl/block-rewards.md | 7 - .../v1.10.2/New To Topl/blockchain.md | 22 -- .../how-topl-addresses-are-generated.md | 168 --------------- .../v1.10.2/New To Topl/introduction-1.md | 12 -- .../v1.10.2/New To Topl/networks.md | 12 -- .../v1.10.2/New To Topl/signing.md | 33 --- .../v1.10.2/New To Topl/transactions-1.md | 75 ------- .../wallet-cryptography-and-encoding.md | 46 ---- .../v1.10.2/New To Topl/what-are-polys.md | 21 -- .../Raw Asset Transfer/raw-asset-transfer.md | 7 - .../createrawassettransfer.md | 8 - .../Raw Poly Transfer/raw-poly-transfer.md | 7 - .../createrawpolytransfer.md | 8 - .../topl-protocol-release-notes.md | 32 --- .../additional-resources.md | 15 -- .../Still have questions-/bibliography.md | 10 - .../v1.10.2/Topl Addresses/install.md | 53 ----- versioned_docs/version-Tetra/intro.md | 47 ---- .../tutorial-basics/_category_.json | 8 - .../tutorial-basics/congratulations.md | 23 -- .../tutorial-basics/create-a-blog-post.md | 34 --- .../tutorial-basics/create-a-document.md | 57 ----- .../tutorial-basics/create-a-page.md | 43 ---- .../tutorial-basics/deploy-your-site.md | 31 --- .../tutorial-basics/markdown-features.mdx | 146 ------------- .../tutorial-extras/_category_.json | 7 - .../img/docsVersionDropdown.png | Bin 25427 -> 0 bytes .../tutorial-extras/img/localeDropdown.png | Bin 27841 -> 0 bytes .../tutorial-extras/manage-docs-versions.md | 55 ----- .../tutorial-extras/translate-your-site.md | 88 -------- .../v1.10.2/Annulus/main-search-bar.md | 29 --- .../v1.10.2/Annulus/overview-page.md | 64 ------ .../v1.10.2/Annulus/recent-blocks.md | 33 --- .../Annulus/simplifying-the-blockchain.md | 25 --- .../v1.10.2/Annulus/transactions-view.md | 63 ------ .../BaaS Portal Onboarding/adding-polys.md | 66 ------ .../choosing-a-network.md | 36 ---- .../creating-a-project.md | 83 ------- .../creating-an-organization-1.md | 136 ------------ ...s-blockchain-as-a-service-baas-platform.md | 13 -- .../BaaS Portal Onboarding/rate-limits.md | 38 ---- .../registration-and-login.md | 56 ----- .../BaaS Portal Onboarding/topl-api-keys.md | 51 ----- .../two-factor-authentication.md | 92 -------- .../BaaS Portal Onboarding/user-settings.md | 19 -- .../broadcast-transaction.md | 7 - .../broadcasttransaction.md | 8 - .../Digital Asset Modeling Language/faq.md | 8 - .../get-latest-block-in-the-chain.md | 7 - .../getthelatestblockinthechain.md | 8 - .../get-all-transactions-from-mempool.md | 7 - .../getmempool.md | 8 - .../brambl-faqs-and-more-information.md | 19 -- .../v1.10.2/Getting Started/daml.md | 37 ---- .../v1.10.2/Getting Started/introduction-2.md | 36 ---- .../Getting Started/sdks-and-api-libraries.md | 54 ----- .../sdks-and-api-libraries/docker.md | 58 ----- .../installing-bifrost.md | 180 ---------------- .../sdks-and-api-libraries/overview.md | 27 --- .../sdks-and-api-libraries/running-bifrost.md | 143 ------------ .../security-and-authentication.md | 84 -------- .../Getting Started/simple-transfer.md | 204 ------------------ .../using-the-valhalla-test-network.md | 68 ------ .../v1.10.2/Introduction/about-topl.md | 22 -- .../v1.10.2/Introduction/conclusion.md | 10 - .../v1.10.2/Introduction/contributors.md | 103 --------- .../v1.10.2/Introduction/getting-started.md | 18 -- .../performance-and-scalability.md | 10 - ...lockchain-technology-for-esg-compliance.md | 10 - .../Lookup Balances/lookup-balances.md | 7 - .../lookup-balances/lookupbalances.md | 8 - .../Lookup Block By Id/lookup-block-by-id.md | 7 - .../lookup-block-by-id/lookupblockbyid.md | 8 - .../lookup-block-by-height.md | 7 - .../lookupblockbyheight.md | 8 - .../lookup-transaction-in-mempool.md | 7 - .../lookuptransactioninmempool.md | 8 - .../Lookup Transaction/lookup-transaction.md | 7 - .../lookup-transaction/lookuptransaction.md | 8 - .../v1.10.2/New To Topl/block-rewards.md | 7 - .../v1.10.2/New To Topl/blockchain.md | 22 -- .../how-topl-addresses-are-generated.md | 168 --------------- .../v1.10.2/New To Topl/introduction-1.md | 12 -- .../v1.10.2/New To Topl/networks.md | 12 -- .../v1.10.2/New To Topl/signing.md | 33 --- .../v1.10.2/New To Topl/transactions-1.md | 75 ------- .../wallet-cryptography-and-encoding.md | 46 ---- .../v1.10.2/New To Topl/what-are-polys.md | 21 -- .../Raw Asset Transfer/raw-asset-transfer.md | 7 - .../createrawassettransfer.md | 8 - .../Raw Poly Transfer/raw-poly-transfer.md | 7 - .../createrawpolytransfer.md | 8 - .../topl-protocol-release-notes.md | 32 --- .../additional-resources.md | 15 -- .../Still have questions-/bibliography.md | 10 - .../v1.10.2/Topl Addresses/install.md | 53 ----- versioned_sidebars/version-Dion-sidebars.json | 8 - .../version-Tetra-sidebars.json | 8 - versions.json | 4 - 162 files changed, 5 insertions(+), 6208 deletions(-) delete mode 100644 versioned_docs/version-Dion/intro.md delete mode 100644 versioned_docs/version-Dion/tutorial-basics/_category_.json delete mode 100644 versioned_docs/version-Dion/tutorial-basics/congratulations.md delete mode 100644 versioned_docs/version-Dion/tutorial-basics/create-a-blog-post.md delete mode 100644 versioned_docs/version-Dion/tutorial-basics/create-a-document.md delete mode 100644 versioned_docs/version-Dion/tutorial-basics/create-a-page.md delete mode 100644 versioned_docs/version-Dion/tutorial-basics/deploy-your-site.md delete mode 100644 versioned_docs/version-Dion/tutorial-basics/markdown-features.mdx delete mode 100644 versioned_docs/version-Dion/tutorial-extras/_category_.json delete mode 100644 versioned_docs/version-Dion/tutorial-extras/img/docsVersionDropdown.png delete mode 100644 versioned_docs/version-Dion/tutorial-extras/img/localeDropdown.png delete mode 100644 versioned_docs/version-Dion/tutorial-extras/manage-docs-versions.md delete mode 100644 versioned_docs/version-Dion/tutorial-extras/translate-your-site.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Annulus/main-search-bar.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Annulus/overview-page.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Annulus/recent-blocks.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Annulus/simplifying-the-blockchain.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Annulus/transactions-view.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/adding-polys.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/choosing-a-network.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/creating-a-project.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/creating-an-organization-1.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/getting-started-with-topls-blockchain-as-a-service-baas-platform.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/rate-limits.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/registration-and-login.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/topl-api-keys.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/two-factor-authentication.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/user-settings.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Broadcast Transaction/broadcast-transaction.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Broadcast Transaction/broadcast-transaction/broadcasttransaction.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Digital Asset Modeling Language/faq.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain/getthelatestblockinthechain.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Get Mempool/get-all-transactions-from-mempool.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Get Mempool/get-all-transactions-from-mempool/getmempool.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/brambl-faqs-and-more-information.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/daml.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/introduction-2.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/docker.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/installing-bifrost.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/overview.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/running-bifrost.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/security-and-authentication.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/simple-transfer.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Getting Started/using-the-valhalla-test-network.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Introduction/about-topl.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Introduction/conclusion.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Introduction/contributors.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Introduction/getting-started.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Introduction/performance-and-scalability.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Introduction/why-use-blockchain-technology-for-esg-compliance.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Lookup Balances/lookup-balances.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Lookup Balances/lookup-balances/lookupbalances.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Lookup Block By Id/lookup-block-by-id.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Lookup Block By Id/lookup-block-by-id/lookupblockbyid.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Lookup Block by Height/lookup-block-by-height.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Lookup Block by Height/lookup-block-by-height/lookupblockbyheight.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool/lookuptransactioninmempool.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Lookup Transaction/lookup-transaction.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Lookup Transaction/lookup-transaction/lookuptransaction.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/New To Topl/block-rewards.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/New To Topl/blockchain.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/New To Topl/how-topl-addresses-are-generated.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/New To Topl/introduction-1.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/New To Topl/networks.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/New To Topl/signing.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/New To Topl/transactions-1.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/New To Topl/wallet-cryptography-and-encoding.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/New To Topl/what-are-polys.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Raw Asset Transfer/raw-asset-transfer.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Raw Asset Transfer/raw-asset-transfer/createrawassettransfer.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Raw Poly Transfer/raw-poly-transfer.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Raw Poly Transfer/raw-poly-transfer/createrawpolytransfer.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Release Notes/topl-protocol-release-notes.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Still have questions-/additional-resources.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Still have questions-/bibliography.md delete mode 100644 versioned_docs/version-Dion/v1.10.2/Topl Addresses/install.md delete mode 100644 versioned_docs/version-Tetra/intro.md delete mode 100644 versioned_docs/version-Tetra/tutorial-basics/_category_.json delete mode 100644 versioned_docs/version-Tetra/tutorial-basics/congratulations.md delete mode 100644 versioned_docs/version-Tetra/tutorial-basics/create-a-blog-post.md delete mode 100644 versioned_docs/version-Tetra/tutorial-basics/create-a-document.md delete mode 100644 versioned_docs/version-Tetra/tutorial-basics/create-a-page.md delete mode 100644 versioned_docs/version-Tetra/tutorial-basics/deploy-your-site.md delete mode 100644 versioned_docs/version-Tetra/tutorial-basics/markdown-features.mdx delete mode 100644 versioned_docs/version-Tetra/tutorial-extras/_category_.json delete mode 100644 versioned_docs/version-Tetra/tutorial-extras/img/docsVersionDropdown.png delete mode 100644 versioned_docs/version-Tetra/tutorial-extras/img/localeDropdown.png delete mode 100644 versioned_docs/version-Tetra/tutorial-extras/manage-docs-versions.md delete mode 100644 versioned_docs/version-Tetra/tutorial-extras/translate-your-site.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Annulus/main-search-bar.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Annulus/overview-page.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Annulus/recent-blocks.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Annulus/simplifying-the-blockchain.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Annulus/transactions-view.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/adding-polys.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/choosing-a-network.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/creating-a-project.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/creating-an-organization-1.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/getting-started-with-topls-blockchain-as-a-service-baas-platform.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/rate-limits.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/registration-and-login.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/topl-api-keys.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/two-factor-authentication.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/user-settings.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Broadcast Transaction/broadcast-transaction.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Broadcast Transaction/broadcast-transaction/broadcasttransaction.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Digital Asset Modeling Language/faq.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain/getthelatestblockinthechain.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Get Mempool/get-all-transactions-from-mempool.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Get Mempool/get-all-transactions-from-mempool/getmempool.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/brambl-faqs-and-more-information.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/daml.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/introduction-2.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/docker.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/installing-bifrost.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/overview.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/running-bifrost.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/security-and-authentication.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/simple-transfer.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Getting Started/using-the-valhalla-test-network.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Introduction/about-topl.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Introduction/conclusion.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Introduction/contributors.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Introduction/getting-started.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Introduction/performance-and-scalability.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Introduction/why-use-blockchain-technology-for-esg-compliance.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Lookup Balances/lookup-balances.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Lookup Balances/lookup-balances/lookupbalances.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Lookup Block By Id/lookup-block-by-id.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Lookup Block By Id/lookup-block-by-id/lookupblockbyid.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Lookup Block by Height/lookup-block-by-height.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Lookup Block by Height/lookup-block-by-height/lookupblockbyheight.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool/lookuptransactioninmempool.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Lookup Transaction/lookup-transaction.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Lookup Transaction/lookup-transaction/lookuptransaction.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/New To Topl/block-rewards.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/New To Topl/blockchain.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/New To Topl/how-topl-addresses-are-generated.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/New To Topl/introduction-1.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/New To Topl/networks.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/New To Topl/signing.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/New To Topl/transactions-1.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/New To Topl/wallet-cryptography-and-encoding.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/New To Topl/what-are-polys.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Raw Asset Transfer/raw-asset-transfer.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Raw Asset Transfer/raw-asset-transfer/createrawassettransfer.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Raw Poly Transfer/raw-poly-transfer.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Raw Poly Transfer/raw-poly-transfer/createrawpolytransfer.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Release Notes/topl-protocol-release-notes.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Still have questions-/additional-resources.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Still have questions-/bibliography.md delete mode 100644 versioned_docs/version-Tetra/v1.10.2/Topl Addresses/install.md delete mode 100644 versioned_sidebars/version-Dion-sidebars.json delete mode 100644 versioned_sidebars/version-Tetra-sidebars.json delete mode 100644 versions.json diff --git a/docusaurus.config.js b/docusaurus.config.js index 7266774..7f446ee 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -78,15 +78,12 @@ const config = { }, items: [ { - type: 'docsVersionDropdown' + type: 'doc', + docId: 'intro', + position: 'left', + label: 'Tutorial', }, - // { - // type: 'doc', - // docId: 'intro', - // position: 'left', - // label: 'Tutorial', - // }, - // {to: '/blog', label: 'Blog', position: 'left'}, + {to: '/blog', label: 'Blog', position: 'left'}, { href: 'https://github.com/topl/developer-portal', label: 'GitHub', diff --git a/versioned_docs/version-Dion/intro.md b/versioned_docs/version-Dion/intro.md deleted file mode 100644 index 8a2e69d..0000000 --- a/versioned_docs/version-Dion/intro.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Tutorial Intro - -Let's discover **Docusaurus in less than 5 minutes**. - -## Getting Started - -Get started by **creating a new site**. - -Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new)**. - -### What you'll need - -- [Node.js](https://nodejs.org/en/download/) version 16.14 or above: - - When installing Node.js, you are recommended to check all checkboxes related to dependencies. - -## Generate a new site - -Generate a new Docusaurus site using the **classic template**. - -The classic template will automatically be added to your project after you run the command: - -```bash -npm init docusaurus@latest my-website classic -``` - -You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor. - -The command also installs all necessary dependencies you need to run Docusaurus. - -## Start your site - -Run the development server: - -```bash -cd my-website -npm run start -``` - -The `cd` command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there. - -The `npm run start` command builds your website locally and serves it through a development server, ready for you to view at http://localhost:3000/. - -Open `docs/intro.md` (this page) and edit some lines: the site **reloads automatically** and displays your changes. diff --git a/versioned_docs/version-Dion/tutorial-basics/_category_.json b/versioned_docs/version-Dion/tutorial-basics/_category_.json deleted file mode 100644 index 2e6db55..0000000 --- a/versioned_docs/version-Dion/tutorial-basics/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Tutorial - Basics", - "position": 2, - "link": { - "type": "generated-index", - "description": "5 minutes to learn the most important Docusaurus concepts." - } -} diff --git a/versioned_docs/version-Dion/tutorial-basics/congratulations.md b/versioned_docs/version-Dion/tutorial-basics/congratulations.md deleted file mode 100644 index 04771a0..0000000 --- a/versioned_docs/version-Dion/tutorial-basics/congratulations.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Congratulations! - -You have just learned the **basics of Docusaurus** and made some changes to the **initial template**. - -Docusaurus has **much more to offer**! - -Have **5 more minutes**? Take a look at **[versioning](../tutorial-extras/manage-docs-versions.md)** and **[i18n](../tutorial-extras/translate-your-site.md)**. - -Anything **unclear** or **buggy** in this tutorial? [Please report it!](https://github.com/facebook/docusaurus/discussions/4610) - -## What's next? - -- Read the [official documentation](https://docusaurus.io/) -- Modify your site configuration with [`docusaurus.config.js`](https://docusaurus.io/docs/api/docusaurus-config) -- Add navbar and footer items with [`themeConfig`](https://docusaurus.io/docs/api/themes/configuration) -- Add a custom [Design and Layout](https://docusaurus.io/docs/styling-layout) -- Add a [search bar](https://docusaurus.io/docs/search) -- Find inspirations in the [Docusaurus showcase](https://docusaurus.io/showcase) -- Get involved in the [Docusaurus Community](https://docusaurus.io/community/support) diff --git a/versioned_docs/version-Dion/tutorial-basics/create-a-blog-post.md b/versioned_docs/version-Dion/tutorial-basics/create-a-blog-post.md deleted file mode 100644 index ea472bb..0000000 --- a/versioned_docs/version-Dion/tutorial-basics/create-a-blog-post.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Create a Blog Post - -Docusaurus creates a **page for each blog post**, but also a **blog index page**, a **tag system**, an **RSS** feed... - -## Create your first Post - -Create a file at `blog/2021-02-28-greetings.md`: - -```md title="blog/2021-02-28-greetings.md" ---- -slug: greetings -title: Greetings! -authors: - - name: Joel Marcey - title: Co-creator of Docusaurus 1 - url: https://github.com/JoelMarcey - image_url: https://github.com/JoelMarcey.png - - name: Sébastien Lorber - title: Docusaurus maintainer - url: https://sebastienlorber.com - image_url: https://github.com/slorber.png -tags: [greetings] ---- - -Congratulations, you have made your first post! - -Feel free to play around and edit this post as much you like. -``` - -A new blog post is now available at [http://localhost:3000/blog/greetings](http://localhost:3000/blog/greetings). diff --git a/versioned_docs/version-Dion/tutorial-basics/create-a-document.md b/versioned_docs/version-Dion/tutorial-basics/create-a-document.md deleted file mode 100644 index ffddfa8..0000000 --- a/versioned_docs/version-Dion/tutorial-basics/create-a-document.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Create a Document - -Documents are **groups of pages** connected through: - -- a **sidebar** -- **previous/next navigation** -- **versioning** - -## Create your first Doc - -Create a Markdown file at `docs/hello.md`: - -```md title="docs/hello.md" -# Hello - -This is my **first Docusaurus document**! -``` - -A new document is now available at [http://localhost:3000/docs/hello](http://localhost:3000/docs/hello). - -## Configure the Sidebar - -Docusaurus automatically **creates a sidebar** from the `docs` folder. - -Add metadata to customize the sidebar label and position: - -```md title="docs/hello.md" {1-4} ---- -sidebar_label: 'Hi!' -sidebar_position: 3 ---- - -# Hello - -This is my **first Docusaurus document**! -``` - -It is also possible to create your sidebar explicitly in `sidebars.js`: - -```js title="sidebars.js" -module.exports = { - tutorialSidebar: [ - 'intro', - // highlight-next-line - 'hello', - { - type: 'category', - label: 'Tutorial', - items: ['tutorial-basics/create-a-document'], - }, - ], -}; -``` diff --git a/versioned_docs/version-Dion/tutorial-basics/create-a-page.md b/versioned_docs/version-Dion/tutorial-basics/create-a-page.md deleted file mode 100644 index 20e2ac3..0000000 --- a/versioned_docs/version-Dion/tutorial-basics/create-a-page.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Create a Page - -Add **Markdown or React** files to `src/pages` to create a **standalone page**: - -- `src/pages/index.js` → `localhost:3000/` -- `src/pages/foo.md` → `localhost:3000/foo` -- `src/pages/foo/bar.js` → `localhost:3000/foo/bar` - -## Create your first React Page - -Create a file at `src/pages/my-react-page.js`: - -```jsx title="src/pages/my-react-page.js" -import React from 'react'; -import Layout from '@theme/Layout'; - -export default function MyReactPage() { - return ( - -

My React page

-

This is a React page

-
- ); -} -``` - -A new page is now available at [http://localhost:3000/my-react-page](http://localhost:3000/my-react-page). - -## Create your first Markdown Page - -Create a file at `src/pages/my-markdown-page.md`: - -```mdx title="src/pages/my-markdown-page.md" -# My Markdown page - -This is a Markdown page -``` - -A new page is now available at [http://localhost:3000/my-markdown-page](http://localhost:3000/my-markdown-page). diff --git a/versioned_docs/version-Dion/tutorial-basics/deploy-your-site.md b/versioned_docs/version-Dion/tutorial-basics/deploy-your-site.md deleted file mode 100644 index 1c50ee0..0000000 --- a/versioned_docs/version-Dion/tutorial-basics/deploy-your-site.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Deploy your site - -Docusaurus is a **static-site-generator** (also called **[Jamstack](https://jamstack.org/)**). - -It builds your site as simple **static HTML, JavaScript and CSS files**. - -## Build your site - -Build your site **for production**: - -```bash -npm run build -``` - -The static files are generated in the `build` folder. - -## Deploy your site - -Test your production build locally: - -```bash -npm run serve -``` - -The `build` folder is now served at [http://localhost:3000/](http://localhost:3000/). - -You can now deploy the `build` folder **almost anywhere** easily, **for free** or very small cost (read the **[Deployment Guide](https://docusaurus.io/docs/deployment)**). diff --git a/versioned_docs/version-Dion/tutorial-basics/markdown-features.mdx b/versioned_docs/version-Dion/tutorial-basics/markdown-features.mdx deleted file mode 100644 index 6b3aaaa..0000000 --- a/versioned_docs/version-Dion/tutorial-basics/markdown-features.mdx +++ /dev/null @@ -1,146 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Markdown Features - -Docusaurus supports **[Markdown](https://daringfireball.net/projects/markdown/syntax)** and a few **additional features**. - -## Front Matter - -Markdown documents have metadata at the top called [Front Matter](https://jekyllrb.com/docs/front-matter/): - -```text title="my-doc.md" -// highlight-start ---- -id: my-doc-id -title: My document title -description: My document description -slug: /my-custom-url ---- -// highlight-end - -## Markdown heading - -Markdown text with [links](./hello.md) -``` - -## Links - -Regular Markdown links are supported, using url paths or relative file paths. - -```md -Let's see how to [Create a page](/create-a-page). -``` - -```md -Let's see how to [Create a page](./create-a-page.md). -``` - -**Result:** Let's see how to [Create a page](./create-a-page.md). - -## Images - -Regular Markdown images are supported. - -You can use absolute paths to reference images in the static directory (`static/img/docusaurus.png`): - -```md -![Docusaurus logo](/img/docusaurus.png) -``` - -![Docusaurus logo](/img/docusaurus.png) - -You can reference images relative to the current file as well, as shown in [the extra guides](../tutorial-extras/manage-docs-versions.md). - -## Code Blocks - -Markdown code blocks are supported with Syntax highlighting. - - ```jsx title="src/components/HelloDocusaurus.js" - function HelloDocusaurus() { - return ( -

Hello, Docusaurus!

- ) - } - ``` - -```jsx title="src/components/HelloDocusaurus.js" -function HelloDocusaurus() { - return

Hello, Docusaurus!

; -} -``` - -## Admonitions - -Docusaurus has a special syntax to create admonitions and callouts: - - :::tip My tip - - Use this awesome feature option - - ::: - - :::danger Take care - - This action is dangerous - - ::: - -:::tip My tip - -Use this awesome feature option - -::: - -:::danger Take care - -This action is dangerous - -::: - -## MDX and React Components - -[MDX](https://mdxjs.com/) can make your documentation more **interactive** and allows using any **React components inside Markdown**: - -```jsx -export const Highlight = ({children, color}) => ( - { - alert(`You clicked the color ${color} with label ${children}`) - }}> - {children} - -); - -This is Docusaurus green ! - -This is Facebook blue ! -``` - -export const Highlight = ({children, color}) => ( - { - alert(`You clicked the color ${color} with label ${children}`); - }}> - {children} - -); - -This is Docusaurus green ! - -This is Facebook blue ! diff --git a/versioned_docs/version-Dion/tutorial-extras/_category_.json b/versioned_docs/version-Dion/tutorial-extras/_category_.json deleted file mode 100644 index a8ffcc1..0000000 --- a/versioned_docs/version-Dion/tutorial-extras/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Tutorial - Extras", - "position": 3, - "link": { - "type": "generated-index" - } -} diff --git a/versioned_docs/version-Dion/tutorial-extras/img/docsVersionDropdown.png b/versioned_docs/version-Dion/tutorial-extras/img/docsVersionDropdown.png deleted file mode 100644 index 97e4164618b5f8beda34cfa699720aba0ad2e342..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25427 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 diff --git a/versioned_docs/version-Dion/tutorial-extras/img/localeDropdown.png b/versioned_docs/version-Dion/tutorial-extras/img/localeDropdown.png deleted file mode 100644 index e257edc1f932985396bf59584c7ccfaddf955779..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27841 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 JrC|B>e*nH7H{}2T diff --git a/versioned_docs/version-Dion/tutorial-extras/manage-docs-versions.md b/versioned_docs/version-Dion/tutorial-extras/manage-docs-versions.md deleted file mode 100644 index e12c3f3..0000000 --- a/versioned_docs/version-Dion/tutorial-extras/manage-docs-versions.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Manage Docs Versions - -Docusaurus can manage multiple versions of your docs. - -## Create a docs version - -Release a version 1.0 of your project: - -```bash -npm run docusaurus docs:version 1.0 -``` - -The `docs` folder is copied into `versioned_docs/version-1.0` and `versions.json` is created. - -Your docs now have 2 versions: - -- `1.0` at `http://localhost:3000/docs/` for the version 1.0 docs -- `current` at `http://localhost:3000/docs/next/` for the **upcoming, unreleased docs** - -## Add a Version Dropdown - -To navigate seamlessly across versions, add a version dropdown. - -Modify the `docusaurus.config.js` file: - -```js title="docusaurus.config.js" -module.exports = { - themeConfig: { - navbar: { - items: [ - // highlight-start - { - type: 'docsVersionDropdown', - }, - // highlight-end - ], - }, - }, -}; -``` - -The docs version dropdown appears in your navbar: - -![Docs Version Dropdown](./img/docsVersionDropdown.png) - -## Update an existing version - -It is possible to edit versioned docs in their respective folder: - -- `versioned_docs/version-1.0/hello.md` updates `http://localhost:3000/docs/hello` -- `docs/hello.md` updates `http://localhost:3000/docs/next/hello` diff --git a/versioned_docs/version-Dion/tutorial-extras/translate-your-site.md b/versioned_docs/version-Dion/tutorial-extras/translate-your-site.md deleted file mode 100644 index caeaffb..0000000 --- a/versioned_docs/version-Dion/tutorial-extras/translate-your-site.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Translate your site - -Let's translate `docs/intro.md` to French. - -## Configure i18n - -Modify `docusaurus.config.js` to add support for the `fr` locale: - -```js title="docusaurus.config.js" -module.exports = { - i18n: { - defaultLocale: 'en', - locales: ['en', 'fr'], - }, -}; -``` - -## Translate a doc - -Copy the `docs/intro.md` file to the `i18n/fr` folder: - -```bash -mkdir -p i18n/fr/docusaurus-plugin-content-docs/current/ - -cp docs/intro.md i18n/fr/docusaurus-plugin-content-docs/current/intro.md -``` - -Translate `i18n/fr/docusaurus-plugin-content-docs/current/intro.md` in French. - -## Start your localized site - -Start your site on the French locale: - -```bash -npm run start -- --locale fr -``` - -Your localized site is accessible at [http://localhost:3000/fr/](http://localhost:3000/fr/) and the `Getting Started` page is translated. - -:::caution - -In development, you can only use one locale at a same time. - -::: - -## Add a Locale Dropdown - -To navigate seamlessly across languages, add a locale dropdown. - -Modify the `docusaurus.config.js` file: - -```js title="docusaurus.config.js" -module.exports = { - themeConfig: { - navbar: { - items: [ - // highlight-start - { - type: 'localeDropdown', - }, - // highlight-end - ], - }, - }, -}; -``` - -The locale dropdown now appears in your navbar: - -![Locale Dropdown](./img/localeDropdown.png) - -## Build your localized site - -Build your site for a specific locale: - -```bash -npm run build -- --locale fr -``` - -Or build your site to include all the locales at once: - -```bash -npm run build -``` diff --git a/versioned_docs/version-Dion/v1.10.2/Annulus/main-search-bar.md b/versioned_docs/version-Dion/v1.10.2/Annulus/main-search-bar.md deleted file mode 100644 index f9531bd..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Annulus/main-search-bar.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "Main Search Bar" -slug: "main-search-bar" -hidden: false -createdAt: "2021-08-23T17:46:57.382Z" -updatedAt: "2021-08-23T20:11:42.664Z" ---- -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/4057ab9-Screen_Shot_2021-08-23_at_1.47.14_PM.png", - "Screen Shot 2021-08-23 at 1.47.14 PM.png", - 3360, - 746, - "#8fd9cd" - ] - } - ] -} -[/block] -#Main Search Bar - -The main search bar is where you can look up something specific right away. As a block explorer user, you can perform a search for either a block (by height or by block hash) or a transaction (by ID or transaction hash). - -One common use case that you can try on the block explorer is checking on the status of a transaction. (We always recommend the copy and paste method to prevent typing errors!) - -Within a block, there can be hundreds of approved transactions, so we do not recommend searching for a specific transaction by scrolling through the pages (of course, unless you want to!). \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Annulus/overview-page.md b/versioned_docs/version-Dion/v1.10.2/Annulus/overview-page.md deleted file mode 100644 index dea238a..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Annulus/overview-page.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: "Overview Page" -slug: "overview-page" -hidden: false -createdAt: "2021-08-23T17:41:05.303Z" -updatedAt: "2021-11-10T19:03:43.293Z" ---- -#Overview Page -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/9ff1fab-Screen_Shot_2021-08-23_at_1.41.54_PM.png", - "Screen Shot 2021-08-23 at 1.41.54 PM.png", - 3356, - 2094, - "#c2e5df" - ] - } - ] -} -[/block] -Upon landing on the Annulus site, you'll be greeted by the overview and a few important elements. On the left side of the header, you'll see the Topl logo which takes you back to this overview screen at any time! - -The **average block time** refers to the average time to forge a new block over a 24-hour period. This number changes depending on difficulty parameters of a given network. - -**Unconfirmed Transactions** are transactions that have been broadcast but are yet to be confirmed by forgers. Since transactions are confirmed in blocks (batches), every transaction will at first be unconfirmed. However, if a transaction remains unconfirmed for more than a few minutes, it may mean that the transaction fee paid with the transaction was too low. Transaction fees act as an incentive for forgers to process a transaction, so a fee below the network minimum would result in the transaction never being confirmed into a block. - -Beginning with the first column in the Blocks section, "Block Height" refers to the index of a given block, which number block is it in the chain. The next column provides the number of transaction present in each block. The last column records the date and time it was completed (in YYYY/MM/DD hh:mm:ss format). - -Should you want to view more details on a specific block, clicking on the block height will take you to all the transactions contained in that specific block. -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/d1a983b-Screen_Shot_2021-08-23_at_1.42.48_PM.png", - "Screen Shot 2021-08-23 at 1.42.48 PM.png", - 3356, - 172, - "#fcfdfc" - ] - } - ] -} -[/block] - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/e0459c0-Screen_Shot_2021-08-23_at_2.28.00_PM.png", - "Screen Shot 2021-08-23 at 2.28.00 PM.png", - 2392, - 1722, - "#f7f8f8" - ] - } - ] -} -[/block] -As an example, we have clicked on block [62855](https://toplnet.annulus.topl.services/#/block/234AsNJz29kQzRpemokJi6ANDHbCxcS4Nv6iDC16B9TTt) to gain more information. The first part shows the block header and its summary, In the "Transactions" subheader below, alphanumeric transaction IDs will be listed. The first two transactions in a Topl block are the block reward sent to the forger or set of forgers who generated the block. This is why you will see that those transactions have 0 in fees. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Annulus/recent-blocks.md b/versioned_docs/version-Dion/v1.10.2/Annulus/recent-blocks.md deleted file mode 100644 index 003821f..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Annulus/recent-blocks.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: "Recent Blocks" -slug: "recent-blocks" -hidden: false -createdAt: "2021-08-23T18:13:52.046Z" -updatedAt: "2021-08-23T20:13:25.986Z" ---- -# Recent Blocks - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/48a834d-Screen_Shot_2021-08-23_at_1.54.30_PM.png", - "Screen Shot 2021-08-23 at 1.54.30 PM.png", - 2388, - 1660, - "#f0f2f0" - ] - } - ] -} -[/block] -To the right of the overview screen on the header, there is a button from which you can search recent blocks. Blocks are chained to each other in the order that they are created and always contain the unique hash number of the previous block. - -This view of the blocks is constantly updated with newer blocks entering at the top and pushing older blocks down the list. The blocks are sized (in KB) proportionally to the number of transactions executed, so the larger the size, the more transactions that were included in the block. This size depends on how many people have been trying to transact during a certain period, and how many of those transactions have been validated. - -A transaction becomes more "final" as new blocks are added onto the existing chain since the deeper a block is buried, the more likely that everyone on the network will have heard about it. - -The table also contains the <>, block ID, timestamp when the block was forged, and the generator that was used to forge the block. - -Once blocks are created, the records that they contain are permanent and can't be altered or deleted. This is what makes blockchain technology tamper-proof as only new data can be added on the block. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Annulus/simplifying-the-blockchain.md b/versioned_docs/version-Dion/v1.10.2/Annulus/simplifying-the-blockchain.md deleted file mode 100644 index a5674e7..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Annulus/simplifying-the-blockchain.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "Simplifying the Blockchain" -slug: "simplifying-the-blockchain" -hidden: false -createdAt: "2021-08-23T17:39:03.391Z" -updatedAt: "2021-11-10T19:03:07.106Z" ---- -# Simplifying the Blockchain - -If you'd like to become confident in using a Topl block explorer and fully understand its functionality, we're here to guide you through Annulus. To start off, you can open up [Annulus](https://toplnet.annulus.topl.services/) in your web browser and follow along using the guide. - -First, what's a block explorer? To provide some basic terms, a <> is a blockchain search engine that allows you to search for a particular piece of information on the blockchain. The activities carried out on blockchains are known as <>s, which occur when crypto-tokens are sent to and from wallet addresses. Blocks on the blockchain are collections of transactions that were processed and approved by special nodes known as forgers. - -To recap, a <> is an online tool to view all transactions that have taken place on the blockchain, the current network hash rate, and transactions between blockchain addresses, amongst other useful information. You can think of it as a window into the blockchain world, giving you the opportunity to observe what's happening there. - -Our block explorer visually displays block activity as it is confirmed in real-time, which allows users to take a more engaged approach to the data. Users can look up a particular block height, and inspect it at another level by viewing the transaction details that make up a block. - -# Who uses a Block Explorer? -For one, developers and users, who often exchange polys and assets will utilize the block explorer to check on the status of their transactions. Once users initiate transactions, they will receive an automatically generated transaction hash and can use it to look up details of the transaction and whether it was successful. - -Forgers will use the block explorer to confirm significant block activity, especially to check if they have been successful in generating a particular block, which means they will receive the block reward. - -Have fun on your blockchain journey! Our aim for the block explorer is a no-frills, user-friendly tool that gives users easy access to data from multiple search vantages and provides a more intuitive understanding of the data. - -On the next page, let's take a deeper look at the <> \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Annulus/transactions-view.md b/versioned_docs/version-Dion/v1.10.2/Annulus/transactions-view.md deleted file mode 100644 index 6d0c7ca..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Annulus/transactions-view.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: "Transactions View" -slug: "transactions-view" -hidden: false -createdAt: "2021-08-23T18:32:25.766Z" -updatedAt: "2021-08-23T20:17:20.313Z" ---- -#Transactions View -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/ef637eb-Screen_Shot_2021-08-23_at_2.32.39_PM.png", - "Screen Shot 2021-08-23 at 2.32.39 PM.png", - 2566, - 1652, - "#edf2f2" - ] - } - ] -} -[/block] -To take a closer look at data on the Topl Blockchain, select the "Transactions" tab to see the individual transactions within their associated block. <>s refer to the act of sending or receiving crypto-tokens. Each transaction ID (also known as TxHash or TxId) is generated by a hashing algorithm according to the information contained in that particular transaction. This transaction ID can be used as a digital proof of payment/transfer. Altering that info in any way causes the transaction ID to change and alerts users that the data has been tampered with. Recipients of a Topl transaction may also look up the transaction by its transaction ID to see its status and confirm whether tokens have arrived in their addresses. - -Sending tokens requires a transaction fee in the same way that it costs money to make a bank transfer. The key difference is that crypto fees are very minimal compared to traditional bank fees. In fact, whether you send 6 million polys or 6 polys, the fee remains constant. -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/cac392c-Screen_Shot_2021-08-23_at_2.42.23_PM.png", - "Screen Shot 2021-08-23 at 2.42.23 PM.png", - 3358, - 2090, - "#fbfbfb" - ] - } - ] -} -[/block] -Clicking on any TxId on the Transactions page brings you to a dedicated page for that specific transaction. On this transaction page, you will be able to see whether the transaction has been successfully confirmed or is still pending (under Status). - -As a general rule, a secure transaction requires 30 blocks to be confirmed above the block in which the transaction was included, which takes about 7.5 minutes on the Topl Blockchain (one block is generated every 15 seconds or so). - -#Topl Transactions: UTXO's - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/f2f8128-Screen_Shot_2021-08-23_at_2.51.11_PM.png", - "Screen Shot 2021-08-23 at 2.51.11 PM.png", - 2308, - 770, - "#f8f9f9" - ] - } - ] -} -[/block] -In this Topl transaction, you'll notice two outputs that contain two different amounts under the "Outputs" sections. A Topl address does not only contain one balance per token, but is rather made up of multiple, smaller balances known as unspent transaction outputs, or UTXO's which create a lump sum that makes up an overall balance. These UTXO's remain intact until a transaction is initiated and then are randomly selected one by one until it meets or exceeds the transaction amount for the given token. At this moment, unspent transaction outputs are broken up so that the correct amount, including fees, are distributed while the remaining value of the tokens are returned to the sender as change or consolidation. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/adding-polys.md b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/adding-polys.md deleted file mode 100644 index e4a1628..0000000 --- a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/adding-polys.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: "Adding Polys" -slug: "adding-polys" -hidden: false -createdAt: "2021-03-23T17:52:21.694Z" -updatedAt: "2021-07-06T19:09:37.056Z" ---- -As discussed previously, polys are required in order to submit transactions to the Topl blockchain. - - -[block:callout] -{ - "type": "danger", - "title": "Note:", - "body": "You must have an address in order to add polys to your address. You can follow our documentation to generate an address using one of our Brambl libraries (see the Topl Blockchain Address page)" -} -[/block] -# How can I get Polys? -It's actually pretty easy, follow these steps: - -#First Step - After logging into the BaaS Portal, go to Settings and find the Purchase Polys section on the page. From there, you can transfer funds to the address directly through the UI! - - - - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/3a0e7a6-Topl_-_API_Console.gif", - "Topl - API Console.gif", - 640, - 400, - "#e1ecea" - ] - } - ] -} -[/block] -You will need to wait until the funds are confirmed to use them. The confirmation status will look something like this: -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/885bf20-Screen_Shot_2021-07-06_at_12.55.27_PM.png", - "Screen Shot 2021-07-06 at 12.55.27 PM.png", - 2296, - 354, - "#fafafa" - ] - } - ] -} -[/block] - -[block:callout] -{ - "type": "info", - "title": "Note:", - "body": "Polys used on our testing network our free, however, you will have to pay to acquire polys on our main network. In addition, you can only request one faucet transaction on the testnet for every 6 hours. This ensures that there will be enough test polys for all of our users." -} -[/block] -If you are wanting to add polys to an account on our mainnet (toplnet), please follow the steps above but use the mainnet dropdown instead of the valhalla dropdown. You should be redirected to stripe where you can purchase polys on the main network. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/choosing-a-network.md b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/choosing-a-network.md deleted file mode 100644 index 6acf8ab..0000000 --- a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/choosing-a-network.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: "Choosing a Network" -slug: "choosing-a-network" -hidden: false -createdAt: "2021-11-11T19:42:32.238Z" -updatedAt: "2021-11-11T19:47:04.058Z" ---- -#Choosing a network -Use one of the following endpoints as url to which you will connect with a Brambl library or directly via cURL - - -[block:callout] -{ - "type": "info", - "title": "Note", - "body": "Be sure to replace `YOUR-PROJECT-ID` with a Project ID from your [BaaS Dashboard](https://topl.services)" -} -[/block] - -[block:parameters] -{ - "data": { - "h-0": "Network", - "h-1": "Connection Supported", - "h-2": "URL", - "0-0": "Mainnet", - "0-1": "JSON_RPC over HTTPS", - "0-2": "https://vertx.topl.services/mainnet/YOUR-PROJECT-ID", - "1-0": "Valhalla", - "1-1": "JSON_RPC over HTTPS", - "1-2": "https://vertx.topl.services/valhalla/YOUR-PROJECT-ID" - }, - "cols": 3, - "rows": 2 -} -[/block] \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/creating-a-project.md b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/creating-a-project.md deleted file mode 100644 index 3f0a331..0000000 --- a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/creating-a-project.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: "Creating a Project" -slug: "creating-a-project" -hidden: false -createdAt: "2021-03-22T21:00:33.504Z" -updatedAt: "2022-03-29T14:36:04.395Z" ---- -There are so many different use cases that can be explored using Topl's blockchain, however, the first step will always be creating a project. - -## Creating a new project for an organization - -To begin interfacing with the Topl blockchain, you'll once again go to the menu on the left-hand side of the screen and click on your Organization Name. From the Organization Page, navigate to projects from where you should find a "Create New Project" button on the right hand side. - - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/22cb408-organization_project_2.gif", - "organization_project_2.gif", - 640, - 344, - "#f6f8f6" - ] - } - ] -} -[/block] -Once you have clicked on the create new project button, you will be shown a screen where you can enter the project name in addition to being able to select which Topl BaaS Offerings you want to add to the project (Torus or Genus). -[block:callout] -{ - "type": "info", - "title": "Torus and Genus", - "body": "Torus enables you to send information to the Topl network while Genus allows you to listen for a response, useful as blockchains are asynchronous. Genus is still under development and should be released later on this year." -} -[/block] -## Projects Page - -From here, you will have access to your projects dashboard. You will be able to view the services for which your projects have been created (Torus/Genus), monitor request activity statistics and the ability to manage your projects for your organization. - -If you are running out of project space within your organization, you can always choose to update your subscription plan at the bottom of this page! - -## Individual Project Page - -You can view any project that is a part of your organization through the view button on the right hand side of the box containing the project. -From here, you'll notice a few main features that are provided for you -- You can see data for your project and filter by network in addition to date. You also have the option to download this data. -- You have the ability to view the API key for both the mainnet and the testnet in addition to your number of daily requests remaining. -- Finally, you can regenerate the API-keys using the button at the bottom. - -If you need to, there is the option to delete your project as well and start over from the individual project page in the bottom right hand corner. - -There are some use cases that fall outside of the scope of an organization. You can also interact with -<> by creating a personal project. - -## Creating a personal project - -To begin a personal project, navigate to the left side bar and click on the Personal Tab then Create New Project. -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/45cb081-personal_project_2.gif", - "personal_project_2.gif", - 640, - 344, - "#f4f8f5" - ] - } - ] -} -[/block] -From here you will see the project settings page appear with the following information: - -1.) The project ID -2.) The traffic for that project (can modify the specific date range for the data) -3.) The API keys for each blockchain network - - These are used to access the blockchain via the API. - - These API keys can be regenerated using the "Re-generate Torus Keys" button. - -Finally, if the project is no longer needed, it can be deleted by pressing the delete project button in the bottom right hand corner to free up space for more personal projects. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/creating-an-organization-1.md b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/creating-an-organization-1.md deleted file mode 100644 index 2cc9fd7..0000000 --- a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/creating-an-organization-1.md +++ /dev/null @@ -1,136 +0,0 @@ ---- -title: "Creating an Organization" -slug: "creating-an-organization-1" -hidden: false -createdAt: "2021-03-22T18:26:47.395Z" -updatedAt: "2021-07-20T14:24:04.570Z" ---- -## Organization Creation - -Organizations are useful to store and manage project details for your company or organization. To create a new organization, your may simply open your side-menu on the right and click the "Create New Organization" button. - - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/29b4b16-remove_enrique_1.gif", - "remove_enrique_1.gif", - 640, - 358, - "#f7f8f6" - ] - } - ] -} -[/block] -## Organization Basics - -After creating the organization, you can then add the name for the organization as well as the email linked to the organization. This email will only be used for information purposes to inform the organization about updates to our services and will not be sold to any third parties. -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/9a11f17-organization_basics_2.gif", - "organization_basics_2.gif", - 640, - 344, - "#f7f8f6" - ] - } - ] -} -[/block] -## Organization Real-World Address Onboarding - -The admin can then add the real world-address to the organization -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/064bd51-mailing_address_2.gif", - "mailing_address_2.gif", - 640, - 344, - "#f7f9f7" - ] - } - ] -} -[/block] - -[block:callout] -{ - "type": "warning", - "body": "Please note that the real-world address has no correlation to the address that is used to make transactions on the Topl Blockchain.", - "title": "Real-world address vs blockchain address" -} -[/block] -## Choose a subscription option - -The next step will be to choose a subscription option out of the following three options depending on your organization's needs and capability for growth. - -* Startup - - For small-scale initiatives and startups with a high growth potential -* Professional - - Mid-market challengers and clients with existing platforms -* Enterprise - - Market leaders and enterprise clients with existing platforms - -### Billing Information - - Our billing is handled by Stripe, so an admin that chooses one of our paid options should go to Stripe to enter the payment information - -## Polys -- Polys are the cryptocurrency that is used to pay for transactions on the Topl Blockchain network. -- Each transaction on the Topl Blockchain takes a certain number of nanopolys (10^-9 polys) in order to make a transaction. -- Please reach out to Chris Georgen at for special deals on polys. -- Please look at the tutorial for [Adding Polys](doc:adding-polys) for more detailed instructions -[block:callout] -{ - "type": "info", - "body": "You may see language referring to \"Transaction Credits\". Note that this is a synonym for polys and that we are working to deprecate this term." -} -[/block] - -[block:callout] -{ - "type": "info", - "body": "Why do transaction fees exist? \n- Forgers on the Topl Network stake arbits to validate transactions. These transactions are bundled in blocks by forgers and get appended to the Blockchain\n- Once a transaction is part of a block on the Topl Blockchain it is considered confirmed, and the more blocks that are forged on top of the block that contains the transaction, the lower the likelihood of the transaction being modified. \n- In return for their service, forgers receive a block reward for each block as well as the sum of all transaction fees users attached to their transactions \n-The transaction fee is currently configured at 1 poly, but once decentralization commences, the transaction fee will be based on the market value of a transaction.", - "title": "Transaction Fees" -} -[/block] -## User Creation - -Owners for organizations that have a Professional subscription can create new users to be associated with an organization. - -## Editing an Organization - -Once you have created your organization, any admin can return to view its information or update the information at any time. - -To begin, simply open your list of organizations and choose the Organization that you wish to view or edit. -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/17e5c3b-edit_organization_2.gif", - "edit_organization_2.gif", - 640, - 344, - "#f6faf7" - ] - } - ] -} -[/block] -From your organization's settings page, (shown in the snippet above), you'll be able to do any of the following: - -1.) Update your Organization's Basic Information -2.) Update your Organization's Mailing Address -3.) Change Subscription -4.) Load Polys into an Address -5.) Add Team Members (Professional Subscription Required) -6.) Manage Projects \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/getting-started-with-topls-blockchain-as-a-service-baas-platform.md b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/getting-started-with-topls-blockchain-as-a-service-baas-platform.md deleted file mode 100644 index ecb9d2b..0000000 --- a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/getting-started-with-topls-blockchain-as-a-service-baas-platform.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Getting Started With Topl's BaaS" -slug: "getting-started-with-topls-blockchain-as-a-service-baas-platform" -excerpt: "Step by step tutorial to get your application running using Topl's state of the art BaaS offerings!" -hidden: false -createdAt: "2021-03-22T15:59:58.983Z" -updatedAt: "2021-04-15T14:00:41.776Z" ---- -Welcome to the Topl <> platform documentation :owlbert-reading: - -In this brief guide, we'll walk you through how to leverage our managed node solution for connecting to the Topl blockchain so that you can access information about specific products at any point in the supply chain and provide others not only reports of <> claims but tangible proof of them. - -This documentation will follow the flow of a developer that will be onboarding an organization and creating projects that will interface with Topl's network through <>. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/rate-limits.md b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/rate-limits.md deleted file mode 100644 index 4e209ad..0000000 --- a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/rate-limits.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: "Rate and Quota Limits" -slug: "rate-limits" -excerpt: "You can call the Topl API as much as you need to make, sign, and verify transactions. However, there are limits to the number of calls that you can make." -hidden: false -createdAt: "2021-03-25T20:08:20.466Z" -updatedAt: "2021-03-29T14:48:01.326Z" ---- -All of Topl's blockchain [API endpoints](https://documenter.getpostman.com/view/2571679/Tz5p5HfD) require [authentication](https://topl.readme.io/v1.3.0/docs/security-and-authentication). Topl BaaS API allows performing requests according to your [subscription](https://www.topl.co/solutions) - -#Rate Limiting - -Rate limiting of the API is based on the client basis and apply to any API call. The rate limit is currently set at 25 requests per five second interval. - -The Topl BaaS API quota limit window is one day. See below how each of our three plans offers different rate limiting per day window - -# Rate Limiting Overview - -[block:parameters] -{ - "data": { - "h-0": "Plan Name", - "h-1": "API Quota Limit", - "0-0": "Startup", - "0-1": "20000 Requests per Day per Project per Network", - "1-0": "Professional", - "1-1": "100000 Requests per Day Per Project Per Network", - "2-0": "Enterprise", - "2-1": "1000000 Requests per Day Per Project Per Network" - }, - "cols": 2, - "rows": 3 -} -[/block] -# How to avoid being quota limited -If you're reaching the quota limit, options to improve performance include restructuring the architecture of the integration, and/or upgrading to Professional or Enterprise Tier. - -Clients that exceed the aforementioned rates will cause the API to return a HTTP 429 response. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/registration-and-login.md b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/registration-and-login.md deleted file mode 100644 index f367568..0000000 --- a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/registration-and-login.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: "Registration and Login" -slug: "registration-and-login" -hidden: false -createdAt: "2021-03-22T16:32:04.887Z" -updatedAt: "2021-10-12T20:02:53.528Z" ---- -[block:callout] -{ - "type": "info", - "title": "Note:", - "body": "For this tutorial, please visit our BaaS portal website at [BaaS](https://beta.topl.services)." -} -[/block] -## <> Portal Registration - -In order to access <> functionality, a user must first register with Topl. - - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/986178a-registration_2.gif", - "registration_2.gif", - 640, - 344, - "#f7f8f6" - ] - } - ] -} -[/block] -After the completion of the registration flow, an email will be sent to you to verify your information - - - -# Login - -Once you have received your verification email from us, you can go ahead and begin using your account. Go to the [<> Portal](https://beta.topl.services/) and enter your email and password. -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/e2ccaf4-login_2.gif", - "login_2.gif", - 640, - 344, - "#f4f7f5" - ] - } - ] -} -[/block] \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/topl-api-keys.md b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/topl-api-keys.md deleted file mode 100644 index c440634..0000000 --- a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/topl-api-keys.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: "Topl API Keys" -slug: "topl-api-keys" -hidden: false -createdAt: "2021-04-01T21:43:27.915Z" -updatedAt: "2022-03-29T14:33:28.295Z" ---- -All requests submitted through BaaS require an API key. This allows our service to authenticate your account to enforce API quotas. - -It is mandatory that you sign up for a free API key which allows for many advantages: -* a **high request rate** and concurrent request limit -* **fast** responses with few retries and timeouts -* useful **metric tracking** for performance tuning and to analyze your customer behavior -* Access to our Genus offerings including the ability to query archived data and advanced logging capabilities (not yet released) -[block:callout] -{ - "type": "warning", - "title": "How to sign up for API Keys", - "body": "You can sign up for API keys by creating a project detailed in the guide below." -} -[/block] -#Authenticating using a Project Id - -BaaS Vertx API requires a valid `Project Id` to be included with your request traffic. This identifier should be appended to the request URL. - - -[block:code] -{ - "codes": [ - { - "code": "https://vertx.topl.services/${network}/YOUR-PROJECT-ID", - "language": "curl" - } - ] -} -[/block] -#Authenticating using a ProjectId and API Key - -As additional protection for your request traffic, an API key is required to access our API. Please ensure that you keep your `API KEY` a secret! - - -[block:code] -{ - "codes": [ - { - "code": "curl --header `x-api-key:YOUR-API-KEY` \\\nhttps://vertx.topl.services/${network}/YOUR-PROJECT-ID", - "language": "curl" - } - ] -} -[/block] \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/two-factor-authentication.md b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/two-factor-authentication.md deleted file mode 100644 index a0a7f5f..0000000 --- a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/two-factor-authentication.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: "Two Factor Authentication" -slug: "two-factor-authentication" -hidden: false -createdAt: "2021-08-13T17:42:26.363Z" -updatedAt: "2021-08-13T20:45:38.933Z" ---- -# Two Factor Authentication for BaaS Users - -##*Two-factor authentication is an extra layer of security for your BaaS user account designed to ensure that you're the only person that can access your account, even if someone knows your password.* - - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/295c98d-Screen_Shot_2021-08-13_at_1.55.38_PM.png", - "Screen Shot 2021-08-13 at 1.55.38 PM.png", - 3360, - 2096, - "#fafbfb" - ] - } - ] -} -[/block] -# How it works - -With two-factor authentication, only you can access your account. When you want to sign into your BaaS account, you'll need to provide two pieces of information -- your password and the six-digit verification code that's automatically displayed on your authenticator application. By entering the code, you're verifying that it is you that is logging in. - -Because your password alone is no longer enough to access your account, two-factor authentication dramatically improves the security of your BaaS user account and all of the information that you store with Topl. - -## Verification Codes -A verification code is a temporary code generated by an authenticator application and is requested when you sign into BaaS. - -Note that a verification code is different than your password. - -# Set up two-factor authentication for your BaaS account - You can follow these steps to turn on two-factor authentication for your account -1.) Go to Settings. -2.) Click on "Enable two factor authentication" -3.) Download one of our supported authenticator apps - - Authy - - 1Password - - Microsoft Authenticator - - Google Authenticator - and use it to scan the QR code. -4.) Use the 6 digit code generated by the application to verify your application and turn on two factor authentication. -5.) Save the recovery codes somewhere safe. - -This is a list of 20 codes generated during the configuration of 2FA. These codes are a single time use only. New recovery codes can be generated if needed, however previous recovery codes would not work after this step. - -# What to remember when you use two-factor authentication -Two-factor authentication significantly improves the security of your BaaS account. After you turn it on, signing into your account will require both your password and access to your verified authenticator application. To keep your account as secure as possible and help ensure you never lose access, there are a few simple guidelines you should follow: -- Remember your BaaS password. -- Download the authenticator app on all of your devices and verify with all devices. -- Keep your trusted device physically secure. - -# Manage your account -You can manage your 2FA settings and other account information from your BaaS Account page. - -# Frequently asked questions -Need help? You might find the answer to your question below. - -## What if I forget my password? -You can reset of change your password when you follow these steps. - -### If logged into BaaS -1.) Go to Settings -2.) Click on Change Password -3.) Type new password into the New Password and Confirm New Password fields - -### From the login page -1.) Click on "forgot your password" -2.) Type in the email for your account -3.) Click on the reset my password link that should be sent to your email. - -## What if I can't access my authenticator application? -If you're signing in and don't have your authenticator application handy that can display verification codes, you can then use the recovery codes that were generated when you enabled two-factor authentication. -Simply click on "Enter recovery code" on the two-factor authentication screen, and enter one of your recovery codes. - -## If I can't sign in, how do I regain access to my account? -If you can't sign in, receive verification codes, or access your recovery codes, you can request account recovery to regain access to your account. Account recovery is our process designed to get you back into your account as quickly as possible while denying access to anyone who might be pretending to be you. It might take a few days, or longer, depending on what specific account information you can provide to verify your identity. - -You can begin the account recovery process by emailing support@topl.me with your BaaS username and a description of the issue. We will then reach out to you in the next couple of days to begin the manual recovery process. - -## Do I need to remember any security questions? -No. With two-factor authentication, you don't need to remember any security questions. We verify your identity exclusively using your password and verification codes. - -## Can I turn off two-factor authentication after I've turned it on? -If you already use two-factor authentication, you can turn it off. Just open your settings and click the disable button. Keep in mind, this makes your account less secure and means that you are potentially putting your information at higher risk. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/user-settings.md b/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/user-settings.md deleted file mode 100644 index 6872bdb..0000000 --- a/versioned_docs/version-Dion/v1.10.2/BaaS Portal Onboarding/user-settings.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "User Settings" -slug: "user-settings" -hidden: true -createdAt: "2021-03-23T17:13:06.763Z" -updatedAt: "2021-04-06T17:34:21.829Z" ---- -## User Settings - -Once users have finished the registration process, they can update their details in the settings. This will ensure that users will have the highest level of support and guidance possible during the initial phases of the Topl launch. - -Users can find the settings by clicking on Settings in the left-hand navigation bar. - - -From here, the user will see a menu which will allow you to update your information so that Topl will be able to provide the highest quality service for our users. - -## Change Password - -From the user settings menu, you can also change your password. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Broadcast Transaction/broadcast-transaction.md b/versioned_docs/version-Dion/v1.10.2/Broadcast Transaction/broadcast-transaction.md deleted file mode 100644 index d3e5c34..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Broadcast Transaction/broadcast-transaction.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Broadcast Transaction" -slug: "broadcast-transaction" -hidden: false -createdAt: "2021-04-06T16:55:04.744Z" -updatedAt: "2021-04-06T16:55:04.744Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/Broadcast Transaction/broadcast-transaction/broadcasttransaction.md b/versioned_docs/version-Dion/v1.10.2/Broadcast Transaction/broadcast-transaction/broadcasttransaction.md deleted file mode 100644 index fdbc1e7..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Broadcast Transaction/broadcast-transaction/broadcasttransaction.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Broadcast Transaction" -slug: "broadcasttransaction" -excerpt: "#### Summary\nBroadcast transaction\n\n#### Type\nRemote -- Route must be used in conjunction with an external key manager service.\n\n#### Description\nPlace specified signed transaction into the mempool and broadcast to other nodes\n\n#### Notes\n- Currently only enabled for `AssetCreation` and `AssetTransfer` transactions\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|--------|-----------|---------------------|-------------------------------------------------------------------------------|\n| tx | object | Required | A full formatted transaction JSON object (prototype transaction + signatures) |" -hidden: false -createdAt: "2021-04-06T16:55:04.857Z" -updatedAt: "2021-04-06T16:55:04.857Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/Digital Asset Modeling Language/faq.md b/versioned_docs/version-Dion/v1.10.2/Digital Asset Modeling Language/faq.md deleted file mode 100644 index 50dfc50..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Digital Asset Modeling Language/faq.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "FAQ" -slug: "faq" -excerpt: "Frequently Asked Questions about Topl's integration with the DAML smart contract language" -hidden: false -createdAt: "2022-11-28T19:30:11.348Z" -updatedAt: "2022-11-30T15:53:47.535Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain.md b/versioned_docs/version-Dion/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain.md deleted file mode 100644 index 355b364..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Get Latest Block in the Chain" -slug: "get-latest-block-in-the-chain" -hidden: false -createdAt: "2021-04-06T16:57:51.857Z" -updatedAt: "2021-04-06T16:57:51.857Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain/getthelatestblockinthechain.md b/versioned_docs/version-Dion/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain/getthelatestblockinthechain.md deleted file mode 100644 index 09a5c73..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain/getthelatestblockinthechain.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Get the latest block in the chain" -slug: "getthelatestblockinthechain" -excerpt: "#### Summary\nRetrieve the best block\n\n#### Description\nFind information about the current state of the chain including height, score, bestBlockId, etc\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|--------------------|-----------|---------------------|-------------|\n| --None specified-- | | | |" -hidden: false -createdAt: "2021-04-06T16:57:51.967Z" -updatedAt: "2021-04-06T16:57:51.967Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/Get Mempool/get-all-transactions-from-mempool.md b/versioned_docs/version-Dion/v1.10.2/Get Mempool/get-all-transactions-from-mempool.md deleted file mode 100644 index aa1e03d..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Get Mempool/get-all-transactions-from-mempool.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Get all Transactions from Mempool" -slug: "get-all-transactions-from-mempool" -hidden: false -createdAt: "2021-04-06T17:05:11.525Z" -updatedAt: "2021-04-06T17:05:11.525Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/Get Mempool/get-all-transactions-from-mempool/getmempool.md b/versioned_docs/version-Dion/v1.10.2/Get Mempool/get-all-transactions-from-mempool/getmempool.md deleted file mode 100644 index 74b8bdd..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Get Mempool/get-all-transactions-from-mempool/getmempool.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Get Mempool" -slug: "getmempool" -excerpt: "#### Summary\nGet the first 100 transactions in the mempool (sorted by fee amount)\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|--------------------|-----------|---------------------|-------------|\n| --None specified-- | | | |" -hidden: false -createdAt: "2021-04-06T17:05:11.640Z" -updatedAt: "2021-04-06T17:05:11.640Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/brambl-faqs-and-more-information.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/brambl-faqs-and-more-information.md deleted file mode 100644 index 583529c..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Getting Started/brambl-faqs-and-more-information.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Brambl FAQs and Future Developments" -slug: "brambl-faqs-and-more-information" -hidden: false -createdAt: "2021-03-25T17:54:51.584Z" -updatedAt: "2021-11-10T19:11:27.590Z" ---- -# BramblPy - -Python 3 implementation of Topl's API library. Currently in pre-alpha release, and slated for public availability by late Q4 2021. Please contact us for early access. - -# Key Generation and Transaction Signing - -While Topl provides full access to its blockchain network through our Blockchain-as-a-Service (BaaS) hosted API, there is certain functionality that must be executed off chain as part of your application itself. - -Therefore, in addition to being able to call all routes comprising the BaaS API, Brambl enables you to both generate and manage your key files as well as sign transactions. - -#Smart Contracts -Topl plans on providing functionality for smart contracts off the chain by the end of Q2 2021 and smart contracts on chain by the end of Q3 2021. Please contact us if you are interested in learning more! \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/daml.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/daml.md deleted file mode 100644 index 18a131f..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Getting Started/daml.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: "DAML Smart Contracts" -slug: "daml" -excerpt: "Interacting with the Topl blockchain using DAML smart contracts" -hidden: false -createdAt: "2022-09-20T12:25:10.499Z" -updatedAt: "2022-09-20T14:16:02.510Z" ---- -[block:api-header] -{ - "title": "Smart Contracts on the Topl Blockchain" -} -[/block] -Topl has integrated the [Digital Asset modeling Language (DAML)](https://docs.daml.com/) as its first smart contract platform for creating and using native assets on the blockchain. As a public and permissionless blockchain, we are utilized the open-source implementation of DAML to bring a secure way to create and deploy off-chain smart contracts that still maintain the same level of cryptographic proofs and asset management that you would find in on-chain smart contracts like Solidity and Rust. - -[block:api-header] -{ - "title": "First Steps" -} -[/block] -### Setting up DAML - -  **[Install](https://docs.daml.com/getting-started/installation.html)** the DAML SDK and VSCode editor integration. - -After successfully installing the DAML SDK, the Participant Node built for facilitating transactions needs to be installed to interact with the Topl Blockchain nodes. - -### Setting up a Participant Node - -  The **[Daml Bifrost Module](https://github.com/Topl/daml-bifrost-module)** installs a Bifrost Participant Node and example deployable smart contract. - -After installation, the participant node and example smart contract need to be compiled in order to run an instance of the off-chain contract. - -### Deploying a smart contract - -  **[Deploy](https://github.com/Topl/daml-bifrost-module#2-compile)** by compiling and starting the participant node. - -Compiling and starting the DAML sandbox will deploy the smart contract to the participant node and allow users to interact with the smart contract. Using the DAML Navigator tool provides an easy-to-use interface for interacting with deployed contracts. diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/introduction-2.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/introduction-2.md deleted file mode 100644 index 6c43b40..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Getting Started/introduction-2.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: "Introduction" -slug: "introduction-2" -hidden: false -createdAt: "2021-03-30T14:36:47.065Z" -updatedAt: "2022-09-20T14:18:07.496Z" ---- -# What you need to bring -To get the most out of the Topl Developer Portal, you should have programming experience and a basic understanding of blockchain concepts of Topl such as UTxO, transactions, addresses, key derivation, and networking. - -If you are unfamiliar with these terms, start with technical concepts, and you can complete the getting started course afterward. - -# Topl is different -If you have experience with other blockchain platforms and want to start building on Topl, it is vital to know its differences: - -* It makes sense to get your head around the concept of an UTxO -* Assets on Topl are not built with smart contracts. Instead, assets are native and live on the ledger. The protocol treats them as first-class citizens, similar to our cryptocurrency <>s. It is quite different from our peers that don’t have native assets and need to use a smart contract to send assets. - -#What you can do on Topl today -You can mint, send, and receive native assets, in addition to polys. - -#Why build on Topl? -* Topl offers a better infrastructure to build products because it is faster, more secure, and cost-effective. -* Topl offers accurate cost predictability when it comes to transactions. There are no auctions for transaction fees. -* Topl has an energetic community. If you stick to specific standards, we are keen to try out and engage with new products. Participating now makes you a first mover. -* Topl is a proof-of-stake blockchain. By design, it consumes much less energy and computational power. -* Topl is built with the rigor of high-assurance formal development methods. The consensus mechanism Ouroboros (currently under development) was delivered with several peer-reviewed papers presented in top-tier conferences and publications in cybersecurity and cryptography. If you build on Topl, you build on this foundation. - -#What you can build on Topl today -* You can integrate Topl into existing websites and services. -* You can issue native assets and mint unique assets to be used as NFTs. -* You can add metadata to transactions to give transactions a story, a background or even an identity. -* You can prove the existence of a file, text or any other data at a specific point in time with asset metadata. You can even use asset metadata to validate and verify external physical products and genuine articles. - -# Where to Start -* Begin by deploying your first [DAML](doc:daml) smart contract and interacting with native assets directly on the chain! \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries.md deleted file mode 100644 index 53e03f9..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: "SDKs and API Libraries" -slug: "sdks-and-api-libraries" -hidden: false -createdAt: "2021-08-31T18:33:22.917Z" -updatedAt: "2022-09-20T14:23:10.107Z" ---- -[block:callout] -{ - "type": "danger", - "body": "Warning: The Topl SDK libraries for the Dion mainnet and testnet, Toplnet and Valhalla respectively, are currently deprecated in order to focus new development on the new version of the Topl blockchain, Tetra. The Dion SDK libraries are usable, but it is highly recommended to focus new development through the [DAML](doc:daml) smart contract integration.", - "title": "# Deprecated" -} -[/block] -#Overview - -Topl has a collection of tools which makes it easier to integrate with the Topl blockchain. Depending on the use-cases you have, you may use any of the components below. - -#Getting Started -To get started, checkout the [📘 Topl User Guide](doc:introduction-2) - -#Components - -## SDKs/ Open Source Libraries - -[block:parameters] -{ - "data": { - "h-0": "name/link", - "h-1": "description", - "0-0": "[BramblJs](https://www.npmjs.com/package/brambljs)", - "0-1": "Contains everything that you need for addresses and creating transactions in Javascript.", - "1-0": "[BramblSc](https://github.com/Topl/Bifrost/tree/main/brambl)", - "1-1": "Contains everything that you need for addresses and creating transactions in Scala.", - "2-0": "[BramblPy](https://github.com/Topl/BramblPy)", - "2-1": "Contains everything that you need for addresses and creating transactions in Python. Currently in pre-release (is not recommended for production environments)", - "3-0": "[BramblDart](https://github.com/Topl/BramblDart)", - "3-1": "Contains everything that you need to manage addresses and create transactions in Dart. Currently in pre-release (it is not recommended for production environments)" - }, - "cols": 2, - "rows": 4 -} -[/block] -# Recipes - -Please see [Recipes](https://topl.readme.io/recipes) for examples on how to use the above resources. - -# API Reference - -If you are interested in seeing the low level JSON-RPC API to directly interact with the Topl Blockchain, please see the documentation located [here](https://topl.readme.io/reference). - -# Contributing - -See [Contributors](doc:contributors) \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/docker.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/docker.md deleted file mode 100644 index 02679fe..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/docker.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: "Docker" -slug: "docker" -hidden: false -createdAt: "2021-10-08T19:20:42.368Z" -updatedAt: "2021-10-08T20:04:06.351Z" ---- -Docker builds of `bifrost` are available on [DockerHub](https://hub.docker.com/r/toplprotocol/bifrost/tags) - -## Downloading the docker image - -To get the latest release of `bifrost`, run: - ``` docker pull toplprotocol/bifrost:{{versionId}} ``` - -## Running the Docker container for `bifrost` -To get a list of the basic CLI arguments, use -``` -docker run --rm toplprotocol/bifrost:{{versionId}} java -jar bifrost-1.8.0.jar --help -``` -See [Running Bifrost](doc:running-bifrost) for full documentation of the CLI arguments. - -Running a `bifrost` node requires a config file (you can either use one of the default configurations or provide your own). - -1. Create your network config or use one of the default network configs provided - - If you choose to create your own network config, remember to add your network config onto the Docker host - ``` -mkdir $HOME/state-docker -``` - - After creating this directory, create your config file within it (optional) - 2.) Run the `bifrost` server : -``` -docker run \ --p 9084:9084 -p 9085:9085 \ ---volume $HOME/state-docker:/data \ ---rm \ -toplprotocol/bifrost \ - java -jar bifrost-1.8.0.jar \ --- config /data/my-config.conf \ --- seed "test" --- apiKeyHash "e4d2a343f3dcf9330ad9035b3e8d168e6728904262f2c434a4f8f934ec7b676" -``` - -Explanation of the arguments: -* `-p 9084:9084 -p 9085:9085` - exposes the API server port from the container to the docker host as well as the JSON-RPC server port. - -* `--volume $HOME/state-docker:/data` - mounts the - `~/state-docker` directory on the Docker host to `/data` inside - the container. - -* ```--config /data/my-config.conf``` - use the config within the data volume for your custom network configuration - -3.) Wait for the message `Listening on 0.0.0.0:9085` to be shown (it may take some small amount of time for Bifrost to create the necessary genesis blocks) - -## Inspecting the contents of the Docker image -If you need to run a shell inside the Docker image, use the bash shell as the entrypoint: -``` -docker run --rm -it --entrypoint bash toplprotocol/bifrost:{{latest-version-id}} -``` \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/installing-bifrost.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/installing-bifrost.md deleted file mode 100644 index eeb5a15..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/installing-bifrost.md +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: "Installing Bifrost" -slug: "installing-bifrost" -hidden: false -createdAt: "2021-10-04T20:22:18.615Z" -updatedAt: "2021-10-05T14:17:33.658Z" ---- -### Overview - -This guide will show you how to compile and install `bifrost` into your operating system of choice, directly from the source code. It will enable you to interact with the **Topl** blockchain, including but not limited to sending/receiving **transactions**, minting/burning customizable **assets**, posting verifiable **metadata** into the blockchain, and so much more! - - -[block:callout] -{ - "type": "info", - "title": "Note", - "body": "If you want to avoid compiling the binaries yourself, you can download the latest version of Bifrost from the links below:\n- [Bifrost](https://github.com/Topl/Bifrost/releases/download/v1.8.0/bifrost-1.8.0.jar)\n\nThere are newer source code available: \n* [latest release](https://github.com/Topl/Bifrost/releases/tag/v1.8.4)\n\nBifrost can be built and run on **Windows** and **MacOS**, but we recommend that node operators use **Linux** to take advantage of associated performance advantages." -} -[/block] -### Prerequisites - -To set up the components, you will need: -* **Windows**, **MacOS**, or **Linux** for your operating system -* A **CPU** with at least **2** cores (recommended **4**) -* **4GB** of RAM (recommended RAM: **8GB**) and at least **20GB** of free disk space (Recommended **80GB** of free disk space - -### Choose your Platform - -* [Linux | MacOS](#linux) -* [Windows](#windows) - -## Linux & MacOS - -In this section, we will walk you through the process of downloading, compiling, and installing `bifrost` into your **Linux-based** or **Mac-OS** operating system. - -#### Installing Operating System Dependencies - -To download the source code and build it, you need the following packages and tools on your Linux system: - - * the version control system `git` -* curl -* unzip -* zip -* GraalVM compatible Java SDK (GraalVM 21+) -* the SBT Scala Compiler (version `1.5.5` or above) -* Java 11 - -In Redhat, Fedora, and Centos: -```bash -sudo yum update -y -sudo yum install git curl unzip zip -y -``` - -For Debian/Ubuntu, use the following instead: -```bash -sudo apt-get update -y -sudo apt-get install git curl unzip zip -y -``` - -For MacOS, all necessary tools should be installed with the following packages and tools for your MacOS system: -* [Xcode](https://developer.apple.com/xcode) - The Apple Development IDE and SDK/Tools -* [Xcode Command Line Tools](https://developer.apple.com/xcode/features/), you can install it by typing `xcode-select --install` in the terminal. -* [Homebrew](https://brew.sh) - The Missing Package Manager for MacOS (or Linux) - -#### Installing GraalVM and SBT - -The fastest way to install **SBT** and **GraalVM** is to use [SDKMAN](https://sdkman.io/) - -Use the following command to install `SDKMAN` -```bash -curl -s "https://get.sdkman.io" | bash -source "$HOME/.sdkman/bin/sdkman-init.sh" -``` -Please follow the instructions and provide the necessary input to the installer if required. Once complete, you should have `SDKMAN` installed to your system. - - - -[block:callout] -{ - "type": "info", - "title": "Note", - "body": "`SDKMAN` will try to detect your shell and add itself to the environment variables. Please restart your shell/terminal after installing `SDKMAN`" -} -[/block] - You can check if `SDKMAN` has been installed correctly by typing `sdk version` into the terminal. You should see something similar to the following: -``` -sdkman 5.0.0+51 -``` - -#### Install GraalVM' -- Install Graalvm using SDKMAN -```sdk install java 21.1.0.r11-gr1``` - -#### Install SBT -- `sbt` is required to build Bifrost from source and may be installed by running the following commands -```sdk install sbt``` - -Note that any version of sbt < `1.5.5` should be able to install and switch to the required version. - -Finally, we check if we have the correct `sbt` and `java` versions installed. - -Check `sbt` version: -```bash -sbt sbtVersion -``` -You should see something like this -``` -$ sbt 'inspect sbtVersion' -[info] Set current project to my_user (in build file:/Users/my_user/) -[info] Setting: java.lang.String = 0.11.1 -[info] Description: -[info] Provides the version of sbt. This setting should be not be modified. -[info] Provided by: -[info] */*:sbtVersion -[info] Defined at: -[info] (sbt.Defaults) Defaults.scala:68 -[info] Delegates: -[info] *:sbtVersion -[info] {.}/*:sbtVersion -[info] */*:sbtVersion -[info] Related: -[info] */*:sbtVersion -``` -Check `java` version: -```bash -java --version -``` - -You should see something like this -``` -java version "1.11.0_55" -Java(TM) SE Runtime Environment (build 1.7.0_55-b13) -Java HotSpot(TM) 64-Bit Server VM (build 24.55-b03, mixed mode) -``` - - -[block:callout] -{ - "type": "warning", - "title": "Important", - "body": "Please confirm that the versions you have installed match the recommended versions above. If not, check if you have missed any of the previous steps." -} -[/block] -#### Downloading and Compiling - -First, download Bifrost from Github -```bash -git clone git@github.com:Topl/Bifrost.git -cd Bifrost -git fetch --all --recurse-submodules --tags -``` - -Switch the repository to the latest tagged commit: -```bash -git checkout tags/1.8.0 -``` - -[block:callout] -{ - "type": "warning", - "title": "Important", - "body": "You can check the latest available version/tag by visiting the `bifrost` [Github-Release](https://github.com/Topl/Bifrost/releases) page. At the time of writing this, the current version is `1.8.0`." -} -[/block] -#### Compiling the node -We can now build the `Scala-based` `bifrost-node` to produce executables. -```bash -sbt compile -``` -Congratulations, you have successfully installed Topl `bifrost` into your Linux or MacOS system! 🎉🎉🎉 - -## Windows - -[block:callout] -{ - "type": "warning", - "title": "Important", - "body": "Currently, the **Windows** installation guide is still in progress. In the meantime, we recommend using [WSL (Windows Subsystem for Linux)](https://docs.microsoft.com/en-us/windows/wsl/) to get a Linux environment on top of Windows. Once installed, you can use the [Linux](#linux) guide to install and run `bifrost` within **WSL**." -} -[/block] \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/overview.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/overview.md deleted file mode 100644 index afdf31e..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/overview.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: "Overview" -slug: "overview" -hidden: false -createdAt: "2021-10-04T19:10:50.318Z" -updatedAt: "2021-10-12T19:10:07.138Z" ---- -## Developer Ecosystem ## -Here is an outline of the developer ecosystem and relevant resources to help you learn how to build on Topl. - -### Programming Languages ### - -#### Scala #### -- [Scala](https://www.scala-lang.org/) -- [Scala Guides (created by Baeldung)](https://github.com/Baeldung/scala-tutorials) -- [Scala Exercises] (https://github.com/scala-exercises/scala-exercises) - -#### Dart #### -- [Dart](https://dart.dev/) -- [Dart official documentation](https://dart.dev/guides) - -### Developer Resources ### - -[Using the Valhalla Test Network](doc:using-the-valhalla-test-network) -[BramblSC](doc:bramblsc) -[BramblJS](doc:setting-up-brambljs) -[BramblDart](doc:brambldart) \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/running-bifrost.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/running-bifrost.md deleted file mode 100644 index 9c41325..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Getting Started/sdks-and-api-libraries/running-bifrost.md +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: "Running Bifrost" -slug: "running-bifrost" -excerpt: "How to run a Bifrost node" -hidden: false -createdAt: "2021-10-04T20:51:56.618Z" -updatedAt: "2021-10-06T20:47:40.015Z" ---- -### Overview - -This guide will show you how to run a `bifrost node` on your system and some simple examples of how you can interact with the **Topl** blockchain. - - -[block:callout] -{ - "type": "info", - "title": "Note", - "body": "This guide assumes that you have installed `bifrost` onto your system. If not, you can refer to [Installing Bifrost](https://docs.topl.co/v1.4.0/docs/installing-bifrost) guide for instructions on how to do that." -} -[/block] -### Network Configuration - -The `bifrost` application has 3 network configurations to run as of writing this article. -- **Mainnet**: The settings that are used on the main Topl network. -- **Valhalla**: The settings that are used on the main public Topl testnet. -- **Private**: The settings that are used by Bifrost developers while working on improving Bifrost functionality - -You might be asking what the difference is between `mainnet` and `valhalla` and why there are two networks? To put it simply, **Topl** is an open-source blockchain and anyone is free to spin up a network based on **Topl's** software components. The `mainnet` network was the first one and currently contains all of the real value of **Topl**. - -Testing the network's features and capabilities can be expensive and will consume real value. So we have spun up a sandbox or testnet version of the network. Instead of using real `poly` tokens for transactions, you use test polys. Alternatively, you can spin up your own custom **Topl** network, but that is outside the scope of this guide. - -To run `bifrost` you enter something like this into the terminal (given that you are in the directory containing the bifrost jar file): -```bash -java -jar bifrost-1.x.x.jar \ - --config path/to/config.json \ - --seed "test" \ - --forge \ - --disableAuth -``` - -To get the complete list of available options, use `java -jar bifrost-1.x.x.jar --help - -```Bifrost (v1.8.4) command line arguements - -c --config file path to a user defined config file - -d --debug Turn on debugging information - -n --network specify preset network by name - -s --seed string to deterministically generate keys on private and local networks - -f --forge enable forging as soon as the node starts - --disableAuth Allow the node to receive API requests without an API key - --apiKeyHash hash of API key - --help prints this command list -``` - -## Bifrost node parameters - -[block:callout] -{ - "type": "info", - "title": "Note:", - "body": "In this section, we will use the path `/home/user/topl` to store all the `bifrost` related configuration files as an example, and please replace it with the directory you have chosen to store the files." -} -[/block] -We will focus on the 7 key command-line parameters for running a node: -** `--config` **: This requires the path of the `.conf` file. - -> For example, if you have created a `.conf` file to the path `/home/user/topl/custom.conf`, then the argument would look like this -``` ---config /home/user/topl/custom.conf -``` - -**`--debug`**: This command line parameter turns on the debugging information for the Bifrost node. - -**`--network`**: This expects one of the predefined config networks as an argument. -> Here is an example `--network` argument: -``` ---network valhalla -``` -This will begin the Bifrost node running with the Valhalla parameters. - -**`--seed` **: This expects a string to deterministically generate the keys for the genesis addresses on private and local networks. This is used primarily so that the user will have access to the polys and arbits that are attributed upon the genesis of the network. - -**`--forge`** : This does not expect an argument and will start the node forging immediately after it starts. - -**`--disableAuth`** : This command line argument disables the api_key authentication allowing you to connect with your node over HTTP without configuring an API key - -**`--apiKeyHash`** : With this command you can provide a Base58 encoded hash of the value that you want to use for the apiKey. This allows for you to construct a more secure node that will require the apiKey for successful HTTP connections. - -In addition, let's look at some of the more important parameters that you can modify using a custom configuration file: - -**`bifrost.application.dataDir`**: This expects the path to the directory where we will store the actual blockchain data like **blocks**, **transactions**, and other datatypes that can be stored on the **Topl** blockchain. - -> For example, if we decided that all of the files required by the `bifrost` node will be in the path `/home/user/topl/`. Then we could create a database directory like this `mkdir -p /home/user/topl/db`. -> The directory structure would then be something like this: -``` -/home/user/topl/ -├── db -├── config.conf -1 directory, 2 files -``` - -**`bifrost.application.rpcApi.bindAddress`**: In this case, this expects the `local address` of the machine to which to bind to. -> Here is an example `bifrost.application.rpcApi.bindAddress` argument: -``` -bindAddress = "0.0.0.0:9085" -``` -> In this case, we expect http clients in your network to connect via `0.0.0.0:9085`. In conjunction with providing the `local address` this command also sets the port that your `bifrost` node will use to listen to any incoming connections. - -Here is a realistic example for running `bifrost` node: -```bash -java -jar bifrost-1.3.3.jar \ - --config /home/user/topl/customtestnet.conf \ - --debug \ - -- seed "test" \ - -- forge \ - -- disableAuth -``` - -If you have everything set correctly, you should see something similar to the following -``` -20:44:17.131| INFO co.topl.settings.AppSettings$ - No network specified, running as private testnet. -20:44:17.748| INFO co.topl.network.NetworkController - Declared address: None -20:44:17.805| INFO co.topl.network.NetworkController - Registered Actor[akka://bifrost/user/peerSynchronizer#341653336] as the handler for List((2,Peers message), (1,GetPeers message)) -20:44:17.975| INFO co.topl.db.LDBFactory$ - Loaded org.fusesource.leveldbjni.JniDBFactory with leveldbjni version 1.8 -20:44:18.154| INFO co.topl.nodeView.CleanupWorker - Cleanup worker started -20:44:18.161| INFO co.topl.network.NetworkController - Registered Actor[akka://bifrost/user/nodeViewSynchronizer#-403724455] as the handler for List((65,Sync), (55,Inv), (22,RequestModifier), (33,Modifier)) -20:44:18.371| INFO co.topl.nodeView.history.History - Block 28XxAtDYfdCkEr8UyzT9f2fDWdn3Uqdu29V58qCiT8y5g appended to parent tksQdfioySWXrLbm7prosYBKze9Augu71ZXde9KuJC4Y at height 1 with score Some(100000000). -20:44:18.392| INFO co.topl.nodeView.state.State$ - Initializing state to watch for all public keys -20:44:18.393| INFO c.t.n.state.ProgramBoxRegistry$ - Initializing state with Program Box Registry -20:44:18.404| INFO c.t.nodeView.state.TokenBoxRegistry$ - Initializing state with Token Box Registry -20:44:18.449| INFO co.topl.nodeView.NodeViewHolder - NodeViewHolder publishing ready signal -20:44:18.450| INFO co.topl.consensus.Forger - Forger transitioning to the operational state -20:44:18.450| INFO co.topl.nodeView.MempoolAuditor - MemPool Auditor transitioning to the operational state -20:44:18.450| INFO co.topl.network.NodeViewSynchronizer - NodeViewSynchronizer transitioning to the operational state -20:44:18.450| INFO co.topl.network.PeerSynchronizer - PeerSynchronizer transitioning to the operational state -20:44:18.450| INFO co.topl.network.PeerManager - PeerManager transitioning to the operational state -20:44:18.453| INFO co.topl.consensus.Forger - Received a START signal, forging will commence shortly. -java.vm.version = 11.0.11+8-jvmci-21.1-b05 -jvmci.Compiler = null -20:44:18.593| INFO co.topl.network.NetworkController - No declared address was provided. Skipping address validation. -20:44:18.600| INFO co.topl.network.NetworkController - Network Controller transitioning to the operational state -20:44:18.619| INFO co.topl.BifrostApp - P2P protocol bound to /0.0.0.0:9084 -20:44:19.273| INFO co.topl.BifrostApp - HTTP server bound to /0.0.0.0:9085 -``` \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/security-and-authentication.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/security-and-authentication.md deleted file mode 100644 index 0561440..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Getting Started/security-and-authentication.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: "Security and Authentication" -slug: "security-and-authentication" -hidden: false -createdAt: "2021-03-24T16:43:22.629Z" -updatedAt: "2021-11-04T17:06:52.342Z" ---- -The Topl endpoints use API keys to allow access. You can obtain your API key through creating a project in the <> developer portal (please view the guide for <> Developer Portal Onboarding for the details on how to setup your first project). - - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/a314980-Screen_Shot_2021-03-24_at_9.46.56_AM.png", - "Screen Shot 2021-03-24 at 9.46.56 AM.png", - 2560, - 1378, - "#fafafa" - ] - } - ] -} -[/block] -To access the APIs, include the API key in the HTTP Header of your HTTP request: - -`x-api-key:yourapisecret` - -Alternatively, you can add the API key into the Requests module object of a BramblJS instance (using our BramblJS library). - -## Examples - - -[block:callout] -{ - "type": "info", - "title": "Please note!!", - "body": "You must replace `yourapisecret` or YOUR_API_KEY in the examples with your actual API key provided by Topl\n\nIn addition, you must replace {{myProjectId}} with the actual projectId provided by Topl" -} -[/block] - -[block:callout] -{ - "type": "info", - "title": "Network Prefix", - "body": "There are two BaaS network prefixes. If you want to use the main net, set networkPrefix = toplnet otherwise set networkPrefix = valhalla for using the test net" -} -[/block] - -[block:code] -{ - "codes": [ - { - "code": "const BramblJS = require('brambljs');\nconst brambl = new BramblJS({\n networkPrefix: \"valhalla\", // applies to Requests and KeyManager\n password: \"topl_the_world!\",\n Requests: {\n url: \"https://valhalla.torus.topl.network/{{myProjectId}}\", // make sure that the project ID from the BaaS portal is included. \n apiKey: \"YOUR_API_KEY\" // set api key for network\n }\n });", - "language": "javascript" - } - ] -} -[/block] -Additionally, you must provide a project ID for each request made. Your Project ID can also be found in the BaaS Portal. -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/668d997-Screen_Shot_2021-03-25_at_3.27.33_PM.png", - "Screen Shot 2021-03-25 at 3.27.33 PM.png", - 3360, - 1876, - "#fafafa" - ] - } - ] -} -[/block] - -[block:callout] -{ - "type": "danger", - "title": "Important", - "body": "Note that our BaaS offering has a rate limit defined at 5 requests per second. Please contact us if that is not sufficient for your use case!" -} -[/block] \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/simple-transfer.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/simple-transfer.md deleted file mode 100644 index d8b2416..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Getting Started/simple-transfer.md +++ /dev/null @@ -1,204 +0,0 @@ ---- -title: "Assets" -slug: "simple-transfer" -hidden: false -createdAt: "2021-03-30T15:10:50.375Z" -updatedAt: "2022-10-28T14:20:04.707Z" ---- -Assets are a critical part of our blockchain technology. Assets are homogeneous tokens that can be transferred to other users and spent as currency (e.g. ERC-20 on Ethereum). In addition, users can store meta-data as part of the process of creating an asset, allowing users to store arbitrary information on the Topl Blockchain. - -Usually, a central ledger keeps track of a user's token balances. Topl implements Assets in a way that avoids having a centralized account ledger. - -We're going to take you through these steps to get comfortable with Assets: -* Mint an Asset and store it in your address -* Mint a collection of assets and store the collection of assets in your address -* Setup a second account using the previous steps -* Transfer an asset from one account to another -* Write a script to see what assets are stored in each account's collection. - -The concepts involved in creating an Asset can be hard to grasp at first. For an in-depth explanation of the functionality and code, continue reading the next section. - -Or if you'd like to go immediately into creating an asset and using it, you can skip to the **Interacting with Assets** section of this tutorial. - -Assets have some of the following properties: -* Ownership is decentralized and does not rely on a central ledger -* Bugs and exploits present less risk for users and less opportunity for attackers -* Assets can not be double spent and it is very hard for them to be lost, stolen, or destroyed - -# Intuiting Ownership with Asset Codes - -An important concept in Topl are <>s. An asset code is composed of the version, issuer address, and user provided name. Instead of representing asset ownership in a centralized ledger or db, each account owns a series of asset codes which represents the number of assets that they own and the type of each asset. This way, when users want to transact with each other, they can do so peer-to-peer without having to interact with any managed Topl resources. To transfer assets to one another, they call a `transfer` function on their own Brambl Request instance rather than having to go through Topl as an intermediary. - -This simplifies access control because instead of having Topl check the sender of the function call, most function calls happen on Brambl Request instances referencing asset codes stored in the user's address, and the user controls who is able to call the functions for the asset codes in their addresses. - -This approach also helps protect against potential bugs. If all of the logic was handled by Topl, an exploit is likely to affect all users. Now, if there is a bug in the Brambl logic, an attacker would have to exploit the bug for each asset code holder's account individually, which is much more complicated and time consuming than it is in a centralized ledger system. - -# Ensuring Security in Public: Capability Security -Another important feature of Topl's blockchain is its utilization of Capability Security. This feature ensures that, while API used to transfer Assets is public, no one except the intended user and those they approve of can transfer assets from their account. - -Topl's security model ensures that objects stored in an address can only be accessed by the user that owns them. If the user wants to give another user access to their assets, they would have to give that user the keyfile for that address. - -# Create and send an Asset **MINTING** transaction - -Now that you have read about how Assets work, we can mint an asset and add it to your address and also transact using the asset that you have minted. - -[block:callout] -{ - "type": "info", - "body": "A helpful resource is the recipe at the bottom of the page which you can use to follow along interactively.\n\nIn addition, you must have an address that has Polys in order to form a valid transaction. Please look at the Adding Polys guide under the BaaS portal onboarding for more information about how to obtain Polys for your addresses.", - "title": "Note:" -} -[/block] - -[block:code] -{ - "codes": [ - { - "code": "const BramblJS = require('brambljs');\n\nconst myKeyPath = \"myKeyPath\"\n\nconst keyManager = BramblJS.KeyManager({\n networkPrefix: \"valhalla\", // network prefix is required\n password: \"my_key_password\",\n keyPath: myKeyPath\n});\n\nconst brambl = new BramblJS({\n networkPrefix: \"valhalla\",\n KeyManager: keyManager, //applies to Requests and KeyManager\n Requests: {\n url: \"https://vertx.topl.services/valhalla/{{myProjectId}}\", // set url\n apiKey: \"{{myApiKey}}\"\n }\n})\n\nconst assetCode = brambl.createAssetCode(\"name1234\")\n\nconst rawAssetParams = {\n \"propositionType\": \"PublicKeyCurve25519\",\n \"recipients\": [\n // basic: [address, quantity]\n [brambl.keyManager.address, 4]\n ],\n \"assetCode\": assetCode,\n \"sender\": [brambl.keyManager.address],\n \"changeAddress\": brambl.keyManager.address,\n \"consolidationAddress\": brambl.keyManager.address,\n \"minting\": true,\n \"fee\": 100\n};\n\nconst pollParams = {\n \"timeout\": 90,\n \"interval\": 3,\n \"maxFailedQueries\": 10\n}\n\nbrambl.transaction('createRawAssetTransfer', rawAssetParams)\n.then(res => { console.log('Unconfirmed transaction'); console.log(res); return res })\n.then(res => brambl.pollTx(res.result.txHash, pollParams))\n.then(res => { console.log('\\nConfirmed transaction'); console.log(res) })\n.catch(console.log)\n", - "language": "javascript" - }, - { - "code": "object CreateAnDSendRawAssetMintingTransfer {\n\n import exampleState._\n import provider._\n\n val params: RawAssetTransfer.Params = ToplRpc.Transaction.RawAssetTransfer.Params(\n propositionType = PublicKeyPropositionCurve25519.typeString,\n sender = NonEmptyChain(externalAddress.head),\n recipients = NonEmptyChain((externalAddress.head, AssetValue(4, assetCode))),\n fee = 0,\n changeAddress = externalAddress.head,\n consolidationAddress = externalAddress.head,\n minting = true,\n data = None\n )\n\n val response: RpcErrorOr[BroadcastTx.Response] = for {\n rawTx <- ToplRpc.Transaction.RawAssetTransfer.rpc(params).map(_.rawTx)\n signTx <- EitherT.right {\n clearKeyRing()\n genKeys()\n val msg2Sign = rawTx.messageToSign\n val signFunc = (addr: Address) => keyRing.generateAttestation(addr)(msg2Sign)\n val signatures = keyRing.addresses.map(signFunc).reduce(_ ++ _)\n Future(rawTx.copy(attestation = signatures))\n }\n broadcastTx <- ToplRpc.Transaction.BroadcastTx.rpc(ToplRpc.Transaction.BroadcastTx.Params(signTx))\n } yield broadcastTx\n\n def main(args: Array[String]): Unit =\n response.value.foreach {\n case Left(value) => println(s\"Got some error: $value\")\n case Right(value) => println(s\"Got a success response: $value\")\n }\n}", - "language": "scala" - } - ] -} -[/block] -This script stores the assetCode for the asset in your address so that you can use them in future transactions. In this example, the script mints 4 assets and stores them in your address. You can use the unique assetCode to mint more assets of the same type. - -On line 31 in the JS code and line 13 in the SC code, we set minting to true to tell the Topl network that we are creating a new asset. If the value was set to false, then the network would attempt to transfer an existing asset. - -Addresses are like pointers. They are a link to a collection of boxes and can be used to retrieve balances, or transfer tokens to/from the boxes they reference. Addresses do not move, or modify the boxes directly. -[block:callout] -{ - "type": "info", - "title": "Note:", - "body": "During our beta offering, asset minting and transfers have a min-fee of 100 nano-polys on Valhalla (1 poly = 10^9 nano-polys). Please see [this page](https://topl.readme.io/v1.3.0/docs/adding-polys) for loading your address with polys" -} -[/block] -You are now ready to run transactions that use Assets! - -# Transfer Assets to another User - -Now we are going to run a transaction that sends 10 Assets to another address. We will do this by using the transfer function and turning minting off. That will deposit tokens into the second address. -[block:callout] -{ - "type": "info", - "body": "In a previous section, we have walked through how to create a [Topl Blockchain Address](https://topl.readme.io/v1.3.0/docs/how-topl-addresses-are-generated). \n\nPlease create a second address now." -} -[/block] -Now the second account is ready to start building its fortune! We can check that that our account is currently empty by calling the `lookupBalancesByAddresses` method in Brambl function. -[block:code] -{ - "codes": [ - { - "code": "brambl.requests.lookupBalancesByAddresses({addresses: [address]})", - "language": "javascript" - }, - { - "code": "object LookupBalance {\n\n import exampleState._\n import provider._\n\n val params: Balances.Params = ToplRpc.NodeView.Balances.Params(externalAddress.toList)\n val response: RpcErrorOr[Balances.Response] = ToplRpc.NodeView.Balances.rpc(params)\n\n def main(args: Array[String]): Unit =\n response.value.foreach {\n case Left(value) => println(s\"Got some error: $value\")\n case Right(value) => println(s\"Got a success response: $value\")\n }\n\n}", - "language": "scala" - } - ] -} -[/block] -Asset creation (for the asset that we minted in the last step) is restricted to the address which originally minted the asset, so the asset code ensures that nobody is able to create a duplicate of that asset out of thin air. - -As part of the initial minting process for an Asset, the first address created an <>. By using this code, the address that owns it can mint new assets. Right now, the first address owns it, so it has the sole power to mint new Assets. - -As we have explained before, the resource model plus capability security handles this access control for us as a built-in property of the block-chain. - -In the next transaction, address 1 will mint 10 new assets and deposit them into the second account. - -[block:callout] -{ - "type": "warning", - "title": "Note:", - "body": "The variables will refer to your own addresses so you may have to replace the stand-in variables in the example with the values of your address details." -} -[/block] - -[block:callout] -{ - "type": "warning", - "title": "Note:", - "body": "The Change Address (for the left-over polys) and Consolidation Address (for left-over assets) are required as of Bifrost Version 1.4.3." -} -[/block] - -[block:code] -{ - "codes": [ - { - "code": "const myKeyPath1 = \"valhalla_.json\";\nconst myKeyPath2 = \"valhalla_key_file.json\";\n\nconst keyManager1 = BramblJS.KeyManager({\n password: \"{{myFirstPassword}}\",\n keyPath: myKeyPath1\n});\n\nconst keyManager2 = BramblJS.KeyManager({\n password: \"{{myPassword}}\",\n keyPath: myKeyPath2\n})\n\nconst brambl1 = new BramblJS({\n networkPrefix: \"valhalla\",\n KeyManager: keyManager1,\n Requests: {\n url: \"https://vertx.topl.services/valhalla/{{yourProjectIdHere}}\",\n apiKey: \"{{yourApiKeyHere}}\"\n }\n})\n\n const brambl2 = new BramblJS({\n networkPrefix: \"valhalla\",\n KeyManager: keyManager2,\n Requests: {\n url: \"https://vertx.topl.services/valhalla/{{yourProjectIdHere}}\", // set url\n apiKey: \"{{yourApiKeyHere}}\"\n }\n })\n \n// Create an new AssetCode to be used in Create Raw Asset Transactions \n \nconst assetCode1 = brambl1.createAssetCode(\"asset1\");\n \nconst address1 = brambl1.keyManager.address;\nconst address2 = brambl2.keyManager.address;\n\n const rawAssetParams1 = {\n \"propositionType\": \"PublicKeyCurve25519\",\n \"recipients\": [\n // basic: [address, quantity]\n // advance: [address, quantity, securityRoot, metadata]\n [address2, 10]\n ],\n \"assetCode\": assetCode1,\n \"sender\": [address1],\n \"changeAddress\": address1,\n \"consolidationAddress\" : address1\n \"minting\": true,\n \"fee\": 1000000001\n };\n\nconst pollParams = {\n \"timeout\": 90,\n \"interval\": 3,\n \"maxFailedQueries\": 10\n };\n\nbrambl1.transaction('createRawAssetTransfer', rawAssetParams1)\n .catch((e) => console.error(e))\n .then(res => { console.log('Unconfirmed transaction'); console.log(res); return res })\n .then(res => brambl1.pollTx(res.result.txId, pollParams))\n .then(res => console.log(res))\n .catch((e) => console.error(e))\n", - "language": "javascript" - }, - { - "code": "object CreateAndSendRawAssetMintingTransfer {\n\n import exampleState._\n import provider._\n\n val params: RawAssetTransfer.Params = ToplRpc.Transaction.RawAssetTransfer.Params(\n propositionType = PublicKeyPropositionCurve25519.typeString,\n sender = NonEmptyChain(externalAddress.head),\n recipients = NonEmptyChain((externalAddress(1), AssetValue(10, assetCode))),\n fee = 0,\n changeAddress = externalAddress.head,\n consolidationAddress = externalAddress(1),\n minting = true,\n data = None\n )\n\n val response: RpcErrorOr[BroadcastTx.Response] = for {\n rawTx <- ToplRpc.Transaction.RawAssetTransfer.rpc(params).map(_.rawTx)\n signTx <- EitherT.right {\n clearKeyRing()\n genKeys()\n val msg2Sign = rawTx.messageToSign\n val signFunc = (addr: Address) => keyRing.generateAttestation(addr)(msg2Sign)\n val signatures = keyRing.addresses.map(signFunc).reduce(_ ++ _)\n Future(rawTx.copy(attestation = signatures))\n }\n broadcastTx <- ToplRpc.Transaction.BroadcastTx.rpc(ToplRpc.Transaction.BroadcastTx.Params(signTx))\n } yield broadcastTx\n\n def main(args: Array[String]): Unit =\n response.value.foreach {\n case Left(value) => println(s\"Got some error: $value\")\n case Right(value) => println(s\"Got a success response: $value\")\n }\n}", - "language": "scala" - } - ] -} -[/block] -#Checking account balances - -Now address 2 should have an asset box with 10 assets while address 1 has no assets. - -In this example, we will query the balance of each address's assets. The following will print out the balance of each account. -[block:code] -{ - "codes": [ - { - "code": "brambl1.requests.lookupBalancesByAddresses({addresses: [address1, address2]}\n .then(res => {console.log(res.result[address1].Boxes.AssetBox); return res;})\n .then(res => console.log(res.result[address2].Boxes.AssetBox))\n .catch((e) => console.error(e))", - "language": "javascript" - }, - { - "code": "object LookupBalance {\n\n import exampleState._\n import provider._\n\n val params: Balances.Params = ToplRpc.NodeView.Balances.Params(externalAddress.toList)\n val response: RpcErrorOr[Balances.Response] = ToplRpc.NodeView.Balances.rpc(params)\n\n def main(args: Array[String]): Unit =\n response.value.foreach {\n case Left(value) => println(s\"Got some error: $value\")\n case Right(value) => println(s\"Got a success response: $value\")\n }\n\n}", - "language": "scala" - } - ] -} -[/block] -After running this script, it should ensure the following: -Address 1's asset balance is 0 -Address 2's asset balance is 10 - -If correct, you should see something similar to the following lines for address 2 -[block:code] -{ - "codes": [ - { - "code": "\n {\n \"nonce\": \"-8730299170071731040\",\n \"id\": \"CJNEBJEUjbuz8xt4YFgJt5bUAFUDnTw2tmUt4ah5BFxZ\",\n \"evidence\": \"LQ9nmM1uiThbsgEU4bVk95SKwkxpffW4E3kdGT8hY5oE\",\n \"type\": \"AssetBox\",\n \"value\": {\n \"quantity\": \"10\",\n \"assetCode\": \"5onZ9zqoVAtqQju5i8apy9v7WsDZ6fMqc31P9Qnbwv3z2gERL31eZnoTcj\",\n \"metadata\": null,\n \"type\": \"Asset\",\n \"securityRoot\": \"11111111111111111111111111111111\"\n }\n }\n ", - "language": "json" - } - ] -} -[/block] -Now that we have two addresses each loaded with their own assets, we can see how they transfer tokens to each other! - -In this example, the signer withdraws assets from their address. Then the transaction moves those resources to another user's address. -[block:callout] -{ - "type": "info", - "body": "After completing the first tutorial with a value > 10, complete the second tutorial, this time turning minting to \"false\" so that assets are not created, but rather pulled from the first address' balance." -} -[/block] -If correct, you should see that the 10 assets that were minted in step one have been added to the asset balance for address 2! - -You now know how a basic Asset is used in Topl's Blockchain! - -From here, you can try to extend the functionality of assets by making -* a faucet for these assets -* an <> that can be deposited to -* Of course, minting new Assets! -[block:tutorial-tile] -{ - "title": "Transfer Assets between Addresses in Valhalla", - "emoji": "🐳", - "backgroundColor": "#018FF4", - "slug": "transfer-assets-between-addresses-in-valhalla", - "_id": "62e99eede9a6470167b86ed6", - "id": "62e99eede9a6470167b86ed6", - "link": "https://topl.readme.io/v1.3.0/recipes/transfer-assets-between-addresses-in-valhalla" -} -[/block] \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Getting Started/using-the-valhalla-test-network.md b/versioned_docs/version-Dion/v1.10.2/Getting Started/using-the-valhalla-test-network.md deleted file mode 100644 index 5842eaa..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Getting Started/using-the-valhalla-test-network.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: "Using the Valhalla Test Network" -slug: "using-the-valhalla-test-network" -hidden: false -createdAt: "2021-03-29T20:54:31.580Z" -updatedAt: "2021-11-10T19:13:42.177Z" ---- -#Before you begin - -Before you can interact with the test network, you need to install Brambl -[block:callout] -{ - "type": "warning", - "title": "Important", - "body": "This tutorial is compatible with BramblJS 1.3.x. After you have installed the [prerequisites](https://topl.readme.io/v1.3.0/docs/prerequisites), ** you must install [BramblJS](https://topl.readme.io/v1.3.0/docs/brambljs-installation-guide)**\n\nThis tutorial is also compatible with BramblSC. The steps to installing and importing are also above." -} -[/block] -# <> -When imported with no arguments, BramblJS defaults to point at a private node running on your localhost. While this is an option, it is easier to use Topl's test network (<>) where <>s have no real-world value. - -Using BramblSc, the quickest and easiest way to experiment and begin developing on Topl is to use the ValhallaTestNet provider found [here](doc:providers) -[block:callout] -{ - "type": "info", - "title": "Note", - "body": "The Topl development team pushes new updates and features to Valhalla before they are pushed to the main Toplnet. This may cause some behavior differences for a short period between the two networks." -} -[/block] -## Interacting with the network - -You can use Brambl to interact with the Valhalla network. BramblJS allows you to make transactions, view blocks on the chain, and other functionality! - -At the bottom of this page, you can view this tutorial as a recipe, with an interactive flow to help you to visualize how to get connected. - -### Step 1. Importing the Brambl Module - -To create a minimal instance of Brambl in your application, include the following lines in your application -[block:code] -{ - "codes": [ - { - "code": "const BramblJS = require('brambljs');", - "language": "javascript" - }, - { - "code": "val brambl: Brambl = Brambl.standalone(\"my_key_file_directory\", Some(ValhallaTestNet(apiKey = \"myApiKey\", , uri = \"https://staging.vertx.topl.services/valhalla/{{myProjectId}}\")))", - "language": "scala" - } - ] -} -[/block] - -To use Valhalla, use the network prefix `valhalla` when creating a new instance of BramblJS or use the ValhallaTestNet provider when using BramblSC -[block:code] -{ - "codes": [ - { - "code": "const brambl = new BramblJS({\n networkPrefix : \"valhalla\"\n\t}\n)", - "language": "javascript" - }, - { - "code": "val provider: Provider = ValhallaTestNet(apiKey = \"myApiKey\")\nval brambl: Brambl = Brambl.standalone(\"myKeyFileDirectory\", provider)", - "language": "scala" - } - ] -} -[/block] -To get free polys for testing, please follow the instructions [here](https://topl.readme.io/v1.3.0/docs/adding-polys) to get polys using our faucet available in the BaaS portal \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Introduction/about-topl.md b/versioned_docs/version-Dion/v1.10.2/Introduction/about-topl.md deleted file mode 100644 index 0bdff13..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Introduction/about-topl.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "About Topl" -slug: "about-topl" -excerpt: "The Platform and its History" -hidden: false -createdAt: "2021-03-25T17:37:46.969Z" -updatedAt: "2021-10-12T19:57:13.249Z" ---- -# Brief Overview - -Built as the only blockchain designed from the ground up for social impact and sustainability, Topl sits at the unique intersection of cutting-edge technology and positive change. Founded in 2017, Topl's mission is to support and nurture an ecosystem of blockchain-powered applications solving problems ranging from carbon reduction and capture to financial inclusion and supply chain transparency. - -We've committed our resources and ourselves to the development of the blockchain that you're currently exploring. Our team has purpose-built every aspect of our technology, from our blockchain's underlying consensus to its integration tooling, with our users' unique needs and a strong focus on bringing transparency and verifiability to the positive changes you're all effecting. - -You're changing the world; we're just here to support you and help you prove it. - -# Network Offerings -Topl's blockchain network has been active since late 2018, and everyday we are working to improve its functionality and deliver new and exciting features. We've recently released Blockchain-as-a-Service (BaaS) to provide a simple and streamlined way for developers to integrate their applications onto the Topl blockchain. - -As we work to improve this service for our users please don't hesitate to reach out with feedback or questions. We value your thoughts immensely. - -See below to review our documentation structure, check out examples of use-cases and solutions, and dive right into the documentation! \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Introduction/conclusion.md b/versioned_docs/version-Dion/v1.10.2/Introduction/conclusion.md deleted file mode 100644 index 9ceb50f..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Introduction/conclusion.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Conclusion" -slug: "conclusion" -hidden: false -createdAt: "2021-03-29T18:19:08.069Z" -updatedAt: "2021-03-29T18:21:58.880Z" ---- -If you are a serious developer looking to create rock-solid transparency for your company or organization, Topl BaaS should be in your short list of solutions. - -The many capabilities of Topl BaaS makes it a highly scalable system supporting flexible trust assumptions that enable our platform to support a wide range of industry use cases ranging from food and fashion to precious gems and metals, to alternative finance, to carbon and impact credits, and so much more! \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Introduction/contributors.md b/versioned_docs/version-Dion/v1.10.2/Introduction/contributors.md deleted file mode 100644 index 8f6fea9..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Introduction/contributors.md +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: "Contributors" -slug: "contributors" -hidden: false -createdAt: "2021-03-25T17:51:42.285Z" -updatedAt: "2022-03-28T14:43:24.380Z" ---- -# Contributing to the Brambl libraries - -You want to contribute to Brambl libraries? Awesome. Please take a few moments to -review the following guidelines to get you started. Cheers. - -* [Communication channels](#communication) -* [Team members](#team) -* [Documentation](#documentation) -* [Issue tracker](#issues) -* [Bug reports](#bugs) -* [Pull requests](#pull-requests) -* [Versioning](#versioning) -* [License](#license) - - -## Communication channels - -Before you get lost in the repository, here are a few starting points -for you to check out. You might find that others have had similar -questions or that your question rather belongs in one place than another. - -* Chat: https://discord.gg/CHaG8utU -* Website: https://www.topl.co/ -* Twitter: https://twitter.com/topl_protocol - - - -## Team members - -The Brambl libraries are developed as an open source project by [Topl](https://www.topl.co/) -headquartered in Houston, TX. The core maintainers you will encounter in this project -are all part of Topl. - -## Documentation - -The Brambl documentation is primarily auto-generated. -Any pull requests to improve the documentation are highly appreciated. - - -## Using the issue tracker - -The issue tracker is the preferred channel for [bug reports](#bugs), -[features requests](#features) and [submitting pull -requests](#pull-requests), but please respect the following restriction: - -Please **do not** use the issue tracker for personal support requests (use [Discord chat](https://discord.gg/CHaG8utU)). - - -## Bug reports - -A bug is a _demonstrable problem_ that is caused by the code in the repository. -Good bug reports are extremely helpful - thank you! - -A good bug report shouldn't leave others needing to chase you up for more -information. Please try to be as detailed as possible in your report. What is -your environment? What steps will reproduce the issue? What would you expect to -be the outcome? All these details will help people to fix any potential bugs. - - -## Pull requests - -Good pull requests - patches, improvements, new features - are a fantastic -help. Thanks for taking the time to contribute. - -**Please ask first** before embarking on any significant pull request, -otherwise you risk spending a lot of time working on something that the -project's developers might not want to merge into the project. - -Brambl libraries follows the [GitFlow branching model](http://nvie.com/posts/a-successful-git-branching-model). The ```main``` branch always reflects a production-ready state while the latest development is taking place in the ```dev``` branch. - -Each time you want to work on a fix or a new feature, create a new branch based on the ```dev``` branch: ```git checkout -b BRANCH_NAME dev```. Only pull requests to the ```dev``` branch will be merged. - - -## Commit Message Convention - -Brambl libraries adapt the [Vue's commit convention](https://github.com/vuejs/vue/blob/dev/.github/COMMIT_CONVENTION.md). Commit messages can have the following types: - -- `build:` Changes that affect the build system or external dependencies -- `chore:` Changes to readme, etc -- `ci:` Changes to our CI configuration files and scripts -- `docs:` Documentation only changes -- `feat:` A new feature -- `fix:` A bug fix -- `perf:` A code change that improves performance -- `refactor:` A code change that neither fixes a bug nor adds a feature -- `style:` Changes that do not affect the meaning of the code (white-space, formatting, etc) -- `test:` Adding missing tests or correcting existing tests - -## Versioning - -Brambl is maintained by using the [Semantic Versioning Specification (SemVer)](http://semver.org). - - -## License - -By contributing your code, you agree to license your contribution under the [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/) \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Introduction/getting-started.md b/versioned_docs/version-Dion/v1.10.2/Introduction/getting-started.md deleted file mode 100644 index 8dbedf0..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Introduction/getting-started.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "About This Guide" -slug: "getting-started" -hidden: false -createdAt: "2021-01-10T18:12:33.532Z" -updatedAt: "2021-04-15T13:51:22.771Z" ---- -#Topl <> Core Developer Guide - -Documentation and guides for interacting with Topl <> Platform programmatically through one of our Brambl API libraries or via Curl/Postman Requests. - -#Structure of our Readme - -Our documentation is structured to support the solutions that we offer. We begin with the onboarding process onto our <> platform, then continue to explore how to setup a sample application to interface with the Topl blockchain itself. - -If there are any improvements, please feel free to `Suggest Edits` using the button in the top right of each document. - -This resource is updated and improved regularly. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Introduction/performance-and-scalability.md b/versioned_docs/version-Dion/v1.10.2/Introduction/performance-and-scalability.md deleted file mode 100644 index 94ab1da..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Introduction/performance-and-scalability.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Performance and Scalability" -slug: "performance-and-scalability" -hidden: true -createdAt: "2021-03-29T18:13:41.673Z" -updatedAt: "2021-04-12T09:43:27.887Z" ---- -Performance of the Topl BaaS can be affected by many variables such as the transaction size, block size, and the existing state of the network. - -For <> and <> transfer transactions, the size is standardized and quantity will not affect performance. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Introduction/why-use-blockchain-technology-for-esg-compliance.md b/versioned_docs/version-Dion/v1.10.2/Introduction/why-use-blockchain-technology-for-esg-compliance.md deleted file mode 100644 index 1e7ab7f..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Introduction/why-use-blockchain-technology-for-esg-compliance.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Topl BaaS" -slug: "why-use-blockchain-technology-for-esg-compliance" -hidden: false -createdAt: "2021-03-29T16:03:10.251Z" -updatedAt: "2021-10-12T19:57:29.478Z" ---- -Topl's Blockchain-as-a-Service (<>) offering provides frictionless access to Topl's underlying distributed ledger network. Designed to suit everyone from startups to large enterprises, Topl's blockchain delivers state of the art capabilities for verifying <> compliance. - -By leveraging BaaS, you will be able to build a unique blockchain-powered application without the need to actually deploy or operate your own node or blockchain infrastructure. Topl's API-accessible hosted blockchain nodes together with Brambl API libraries are intended to enable a fast and easy development process. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Lookup Balances/lookup-balances.md b/versioned_docs/version-Dion/v1.10.2/Lookup Balances/lookup-balances.md deleted file mode 100644 index 4000b15..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Lookup Balances/lookup-balances.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Lookup Balances" -slug: "lookup-balances" -hidden: false -createdAt: "2021-04-06T17:01:51.812Z" -updatedAt: "2021-04-06T17:01:51.812Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/Lookup Balances/lookup-balances/lookupbalances.md b/versioned_docs/version-Dion/v1.10.2/Lookup Balances/lookup-balances/lookupbalances.md deleted file mode 100644 index b94a5ea..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Lookup Balances/lookup-balances/lookupbalances.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Lookup Balances" -slug: "lookupbalances" -excerpt: "#### Summary\nLookup balances\n\n#### Type\nRemote -- Transaction must be used in conjunction with an external key manager service.\n\n#### Description\nCheck balances of specified addresses.\n\n#### Notes\n- Requires the Token Box Registry to be active\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|-----------|-----------|---------------------|----------------------------------------------|\n| addresses | [String] | Required | Addresses whose balances are to be retrieved |" -hidden: false -createdAt: "2021-04-06T17:01:51.937Z" -updatedAt: "2021-04-15T14:38:26.364Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/Lookup Block By Id/lookup-block-by-id.md b/versioned_docs/version-Dion/v1.10.2/Lookup Block By Id/lookup-block-by-id.md deleted file mode 100644 index e7860ef..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Lookup Block By Id/lookup-block-by-id.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Lookup Block by Id" -slug: "lookup-block-by-id" -hidden: false -createdAt: "2021-04-06T17:12:49.980Z" -updatedAt: "2021-04-06T17:12:49.980Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/Lookup Block By Id/lookup-block-by-id/lookupblockbyid.md b/versioned_docs/version-Dion/v1.10.2/Lookup Block By Id/lookup-block-by-id/lookupblockbyid.md deleted file mode 100644 index f00435c..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Lookup Block By Id/lookup-block-by-id/lookupblockbyid.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Lookup Block by id" -slug: "lookupblockbyid" -excerpt: "#### Summary\nLookup a block by its id\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|---------|-----------|---------------------|---------------------------------|\n| blockId | String | Required | Base58 encoded transaction hash |" -hidden: false -createdAt: "2021-04-06T17:12:50.159Z" -updatedAt: "2021-04-06T17:12:50.159Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/Lookup Block by Height/lookup-block-by-height.md b/versioned_docs/version-Dion/v1.10.2/Lookup Block by Height/lookup-block-by-height.md deleted file mode 100644 index 7749cfd..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Lookup Block by Height/lookup-block-by-height.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Lookup Block by Height" -slug: "lookup-block-by-height" -hidden: false -createdAt: "2021-04-06T17:15:57.542Z" -updatedAt: "2021-04-06T17:15:57.542Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/Lookup Block by Height/lookup-block-by-height/lookupblockbyheight.md b/versioned_docs/version-Dion/v1.10.2/Lookup Block by Height/lookup-block-by-height/lookupblockbyheight.md deleted file mode 100644 index 5608fc2..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Lookup Block by Height/lookup-block-by-height/lookupblockbyheight.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Lookup Block by Height" -slug: "lookupblockbyheight" -excerpt: "#### Summary\nLookup a block by its height\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|--------|-----------|---------------------|-------------------------------------------|\n| height | Number | Required | Height to retrieve on the canonical chain |" -hidden: false -createdAt: "2021-04-06T17:15:57.665Z" -updatedAt: "2021-04-06T17:15:57.665Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool.md b/versioned_docs/version-Dion/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool.md deleted file mode 100644 index aaba21b..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Lookup Transaction in Mempool" -slug: "lookup-transaction-in-mempool" -hidden: false -createdAt: "2021-04-06T17:10:27.370Z" -updatedAt: "2021-04-06T17:10:27.370Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool/lookuptransactioninmempool.md b/versioned_docs/version-Dion/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool/lookuptransactioninmempool.md deleted file mode 100644 index 863f775..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool/lookuptransactioninmempool.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Lookup Transaction in Mempool" -slug: "lookuptransactioninmempool" -excerpt: "#### Summary\nLookup a transaction in the mempool by its id\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|---------------|-----------|---------------------|---------------------------------|\n| transactionId | String | Required | Base58 encoded transaction hash |" -hidden: false -createdAt: "2021-04-06T17:10:27.493Z" -updatedAt: "2021-04-06T17:10:27.493Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/Lookup Transaction/lookup-transaction.md b/versioned_docs/version-Dion/v1.10.2/Lookup Transaction/lookup-transaction.md deleted file mode 100644 index 263716f..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Lookup Transaction/lookup-transaction.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Lookup Transaction" -slug: "lookup-transaction" -hidden: false -createdAt: "2021-04-06T17:07:37.229Z" -updatedAt: "2021-04-06T17:07:37.229Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/Lookup Transaction/lookup-transaction/lookuptransaction.md b/versioned_docs/version-Dion/v1.10.2/Lookup Transaction/lookup-transaction/lookuptransaction.md deleted file mode 100644 index c92113c..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Lookup Transaction/lookup-transaction/lookuptransaction.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Lookup Transaction" -slug: "lookuptransaction" -excerpt: "#### Summary\nLookup a transaction by its id\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|---------------|-----------|---------------------|---------------------------------|\n| transactionId | String | Required | Base58 encoded transaction hash |" -hidden: false -createdAt: "2021-04-06T17:07:37.348Z" -updatedAt: "2021-04-06T17:07:37.348Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/New To Topl/block-rewards.md b/versioned_docs/version-Dion/v1.10.2/New To Topl/block-rewards.md deleted file mode 100644 index 78ffd8a..0000000 --- a/versioned_docs/version-Dion/v1.10.2/New To Topl/block-rewards.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Block Rewards" -slug: "block-rewards" -hidden: true -createdAt: "2021-08-23T18:39:06.224Z" -updatedAt: "2021-08-23T18:39:06.224Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/New To Topl/blockchain.md b/versioned_docs/version-Dion/v1.10.2/New To Topl/blockchain.md deleted file mode 100644 index d5d7d99..0000000 --- a/versioned_docs/version-Dion/v1.10.2/New To Topl/blockchain.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "Blockchain and Commitments" -slug: "blockchain" -hidden: false -createdAt: "2021-03-30T14:40:21.822Z" -updatedAt: "2021-05-10T17:55:56.196Z" ---- -A broad view of Topl might divide the world into two major parts: the blockchain and commitments - -A <> is best described as an append only public ledger or database that is distributed across many computers in a network. The blockchain logs the network's state at specific times after transactions have altered the state. - -The term "block" refers to the fact that data and state are stored in sequential batches or "blocks". "Chain" refers to the fact that each block cryptographically references its parent through a (hashed) linked-list. Each block does not store all the data in the blockchain network (it would be far too large). - -The state data is stored in an abstraction called a Box. User Address data and <> data are stored within these Boxes. - -Each new block must be agreed upon by every node in the network. This is so everyone has the same data. For this to work, <> s need a consensus mechanism. - -Topl uses a proof-of-stake <> , which unlike proof-of-work <> does not require large amounts of energy consumption to remain secure. - -New blocks are broadcast to the nodes on the network, checked and verified, updating the state for everyone. The blockchain is Topl's public ledger, an ordered and timestamped record of transactions. This system is designed to protect against double spending and modification of previous transaction records. - -Topl can handle proof of a wide range of different types of data using <>s. Commitments are hashed versions of the data which act as one part of a proof of data integrity since the owner must provide the original data in order to get the hashed value. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/New To Topl/how-topl-addresses-are-generated.md b/versioned_docs/version-Dion/v1.10.2/New To Topl/how-topl-addresses-are-generated.md deleted file mode 100644 index b06b6e0..0000000 --- a/versioned_docs/version-Dion/v1.10.2/New To Topl/how-topl-addresses-are-generated.md +++ /dev/null @@ -1,168 +0,0 @@ ---- -title: "Topl Blockchain Address" -slug: "how-topl-addresses-are-generated" -hidden: false -createdAt: "2021-03-25T20:26:06.337Z" -updatedAt: "2021-04-15T14:27:00.123Z" ---- -The Topl blockchain address is a unique sequence of numbers and letters that functions similarly to an email address. In particular, the numbers and letters are [Base58](https://tools.ietf.org/id/draft-msporny-base58-01.html) encoded. The Topl blockchain address refers to a specific destination on the network to which assets can. For example, imagine that you want to make a transaction on the Topl network with your friend Bob. Bob will share his address with you and you will be able to transact with him via this address. - -# Generate an Address - -Our public and private keys are generated using the <> algorithm. You get a reference for your address in the following way: - -### Step 1: Add the network prefix - - The network prefix allows nodes on the Topl network to verify which network the address is on -[block:parameters] -{ - "data": { - "h-0": "Network Prefix", - "h-1": "Network", - "h-2": "Notes", - "0-0": "0x01", - "0-1": "Topl Public Mainnet", - "0-2": "Not yet available in Beta", - "1-0": "0x10", - "1-1": "Valhalla public testnet", - "1-2": "Live in Beta", - "2-0": "0x30", - "2-1": "Local Developer Network", - "2-2": "Used for <> Developers" - }, - "cols": 3, - "rows": 3 -} -[/block] - ### Step 2: Append the propositionType prefix -- Topl supports addresses with public/private key pairs that are generated using two different algorithms. -[block:parameters] -{ - "data": { - "h-0": "Prefix", - "h-1": "propositionType", - "0-0": "0x01", - "0-1": "Curve25519 Public Key Hash", - "h-2": "Notes", - "0-2": "Default Implementation by Brambl KeyManager", - "1-0": "0x02", - "1-1": "Curve25519 Threshold Hash", - "1-2": "Another implementation accepted by the Topl Network" - }, - "cols": 3, - "rows": 2 -} -[/block] -### Step 3: Append the evidence content - -The evident content is a 32 byte commitment to the proposition that must be supplied and satisfied by the transaction issuer. -[block:parameters] -{ - "data": { - "h-0": "propositionType", - "0-0": "0x01", - "h-1": "Generation Method", - "h-2": "Notes", - "0-1": "Blake2b-256 Hash of the Public Key", - "0-2": "For Curve25519 Public Key Hash", - "1-0": "0x02", - "1-1": "Blake2b-256 Hash of all public keys in the threshold proposition", - "1-2": "For Threshold Hash" - }, - "cols": 3, - "rows": 2 -} -[/block] -### Step 4: Append the address checksum - -Finally, add the first 4 bytes of the Blake2b-256 hash of the preceding 34 bytes. - -### Step 5: Convert into Base58 -The last step is to convert the address that you get after appending the four pieces of information into Base58. - - -# Generate an address using the BramblJS KeyManager module - -The easiest way to generate an address is using the Brambl KeyManager Module. An example of this is shown in the **recipe **below. - -The KeyManager module is compliant with Bifrost's Gjallarhorn Key Manager service and provides an straightforward interface for creating new keyfiles as well as creating and verifying signatures on transactions. New encrypted keyfiles are generated using Curve25519 key pairs and are encrypted using an AES-256 cipher with a user-specified password. All data within the keyfile is encoded using Base58. -[block:tutorial-tile] -{ - "title": "Create Topl Address using BramblJS", - "emoji": "💐", - "backgroundColor": "#2c5572", - "slug": "create-topl-address-using-brambljs", - "_id": "62e99eede9a6470167b86ece", - "id": "62e99eede9a6470167b86ece", - "link": "https://topl.readme.io/v1.3.0/recipes/create-topl-address-using-brambljs" -} -[/block] -#Generate an address using the BramblSc KeyRing - -If you are using BramblSc, it is also simple to generate and address. An example is shown below - -[block:code] -{ - "codes": [ - { - "code": "val address = brambl.keyRing.DiskOps.generateKeyFile(\"password\").get", - "language": "scala" - } - ] -} -[/block] -# Generate multiple addresses using the BramblSC KeyRing - -First, let's initialize our BramblSC instance, then create 3 addresses using the KeyRing. -[block:callout] -{ - "type": "info", - "title": "Note:", - "body": "The password to encrypt the keyfile used must be encoded in Latin-1. In addition, please replace {{myProjectId}} with your projectID." -} -[/block] - -[block:code] -{ - "codes": [ - { - "code": "val provider: Provider = ValhallaTestNet(apiKey = \"myApiKey\", uri = \"https://staging.vertx.topl.services/valhalla/{{myProjectId}}\")\nval brambl: Brambl = Brambl.standalone(\"./my_key_directory\",Some( provider))\n \nval addrs: Set[Address] = brambl.keyRing.generateNewKeyPairs(3) match {\n case Failure(exception) => throw exception\n case Success(value) => value.map(_.publicImage.address(brambl.networkPrefix))\n }", - "language": "scala" - } - ] -} -[/block] -# Import Bifrost Keyfile - -If you are a Bifrost Developer, you can also import keys generated by Bifrost's Gjallarhorn KeyManager. An example is shown in the recipe below. -[block:tutorial-tile] -{ - "title": "Create Topl Address from Curve25519 KeyFile", - "emoji": "🍥", - "backgroundColor": "#331f51", - "slug": "create-topl-address-from-curve25519-keyfile", - "_id": "62e99eede9a6470167b86ecf", - "id": "62e99eede9a6470167b86ecf", - "link": "https://topl.readme.io/v1.3.0/recipes/create-topl-address-from-curve25519-keyfile" -} -[/block] -# Import Keyfile BramblSC - -In addition, you can also import keys generated by BramblSC's KeyRing. An example is shown below. -[block:code] -{ - "codes": [ - { - "code": "val provider: Provider = ValhallaTestNet(apiKey = \"myApiKey\", uri = \"https://staging.vertx.topl.services/valhalla/{{myProjectId}}\")\nval brambl: Brambl = Brambl.standalone(\"./my_key_directory\",Some( provider))\n \n val address1 = brambl.keyRing.DiskOps.unlockKeyFile(\"base58_encoded_address\", \"password\") match {\n case Failure(exception) => throw exception\n case Success(value) => value\n }", - "language": "scala" - } - ] -} -[/block] - -[block:callout] -{ - "type": "warning", - "title": "Note", - "body": "The string for the address has to be the same as the address generated by BramblSC and the naming convention for the keyfile has to include \\.json. \n\nIn addition, BramblSC checks the whole directory for valid keyfiles so if there are other files in your key file directory that are not valid keys, or that are from different networks, then BramblSC will throw a validation error." -} -[/block] \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/New To Topl/introduction-1.md b/versioned_docs/version-Dion/v1.10.2/New To Topl/introduction-1.md deleted file mode 100644 index 2904149..0000000 --- a/versioned_docs/version-Dion/v1.10.2/New To Topl/introduction-1.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Introduction" -slug: "introduction-1" -hidden: false -createdAt: "2021-03-29T18:37:47.745Z" -updatedAt: "2021-04-15T13:55:02.440Z" ---- -If you're new to blockchain, we recommend you first begin with the remainder of this Key Concepts section in order to gain familiarity with the design patterns of blockchain networks. - -This section is may also be useful for getting to know the specifics of Topl's blockchain design as there are a few unique aspects to be aware of if you are migrating from a different blockchain network. - -Once you're comfortable with all the key concepts, you can move on to either the BaaS Portal Onboarding or Getting started sections to explore the demos, technical specifications, and APIs. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/New To Topl/networks.md b/versioned_docs/version-Dion/v1.10.2/New To Topl/networks.md deleted file mode 100644 index f59c964..0000000 --- a/versioned_docs/version-Dion/v1.10.2/New To Topl/networks.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Networks" -slug: "networks" -hidden: false -createdAt: "2021-04-05T14:23:06.302Z" -updatedAt: "2021-04-15T14:27:53.067Z" ---- -# Networks - -There are two Topl networks as well as custom networks and developer networks. - -Our Brambl API library accepts the following networkPrefixes `toplnet, valhalla, local, private" where Toplnet is the main network, Valhalla is the testing network, local and private designate developer networks running in your local environment. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/New To Topl/signing.md b/versioned_docs/version-Dion/v1.10.2/New To Topl/signing.md deleted file mode 100644 index e26df7b..0000000 --- a/versioned_docs/version-Dion/v1.10.2/New To Topl/signing.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: "Signing" -slug: "signing" -hidden: false -createdAt: "2021-04-01T19:19:32.850Z" -updatedAt: "2021-04-01T19:30:53.035Z" ---- -# What is Signing? - -Signing is the act of user A "signing" data that anyone can validate came from user A. This is used in transactions to check if they are real. - -A common question is "how can you validate transactions are real?". The short answer is public-key cryptography. It's an algorithm with 3 parts. - -1.) Key Creation -2.) Encryption/Signing -3.) Decryption/Validation - -Encryption is generally used to hide data in other data. If you encrypt a string like "hello world" you get something like "dqE3gJz/+5CQHfSJwMP2nQ". It's purpose is to hide the message "hello world". Signing is used to create a different output string, but you also publicize the original message. - -The key creation will output two strings, a public and private key. It links them through an algorithm that has the signing and validation properties. A signature will take in a public key, private key, and a message. The output will be another string that is the signature. - -1.) Signature = F(public key, private key, message) -2.) Validation = F(signature, message) -3.) Is Valid if: Validation = public key - -Notice how validation does not require knowledge of the private key. This is what allows 3rd parties to validate information. If the output of the validation function (at Topl, we use the parlance <>) is equal to the public key then the signature is real, otherwise, it is fake. - -The signature is made up of 3 variables. Topl employs <> and those variables are simply part of the underlying math. - -# Why Sign? -Signing is a nice way to know something is being done by the correct person. This means we can trust that someone is actually doing what they say they are. - -Instead of real world signatures, which can be faked, the digital ones can not. If you want to know user A did something, make them sign it before moving forward. Then if a dispute arises, check the signature. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/New To Topl/transactions-1.md b/versioned_docs/version-Dion/v1.10.2/New To Topl/transactions-1.md deleted file mode 100644 index 4f685fc..0000000 --- a/versioned_docs/version-Dion/v1.10.2/New To Topl/transactions-1.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: "Transactions" -slug: "transactions-1" -hidden: false -createdAt: "2021-08-11T21:05:58.590Z" -updatedAt: "2021-08-11T21:05:58.590Z" ---- -# Introduction - -Transactions are the most important part of the Topl protocol. Everything else in Topl is designed to ensure that transactions can be created, propagated on the network, validated, and finally added to the global ledger of transactions (the blockchain). Transactions are data structures that encode the transfer of tokens between participants in the Topl system. Each transaction is a public entry in Topl's blockchain, the global bookkeeping ledger. - -In this section, we will examine all the various forms of transactions, what they contain, how to create them, how they are verified, and how they become a permanent record of all transactions. - -# Transaction Lifecycle -A transaction's lifecycle begins with the transaction's creation, also known as *origination.* The transaction is then signed with one or more signatures indicating the authorization to spend the UTXOs referenced by the transaction. The transaction is then *broadcast* on the Topl network, where each Bifrost node (participant) validates and propagates the transaction until it reaches every node in the network. Finally, the transaction is verified by a forging node, and included in a block of transactions that is recorded on the blockchain. - - - -Once recorded on the blockchain and confirmed by sufficient subsequent blocks (confirmed), the transaction is a permanent part of the Topl ledger, and is accepted as valid by all participants. The UTXOs allocated to a new owner by the transaction can then be spent in a new transaction, extending the chain of ownership and beginning the lifecycle of a transaction again. - -# Creating Transactions - -In some ways, it helps to think of a transaction in the same way as a paper check. Like a check, a transaction is an instrument that expresses the intent to transfer ownership of an asset and is not visible to the financial system until it is submitted for execution. Like a check, the originator of a transaction does not have to be the one signing the transaction. - -Currently, transactions must be created online. But transactions can be created by anyone, they do not have to have the credentials for a particular address. For example, an accounts payable clerk might process payable checks for signature by the CEO. Similarly, an accounts payable clerk can create Topl transactions and then have the CEO apply digital signatures to make them valid. Whereas a check references a specific account as the source of the funds, a Topl transaction references specific boxes that have been generated by a prior transaction as its source, rather than a particular account. - - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/b36ed30-Screen_Shot_2021-08-11_at_4.36.56_PM.png", - "Screen Shot 2021-08-11 at 4.36.56 PM.png", - 1770, - 918, - "#fcf6f3" - ] - } - ] -} -[/block] -Once a transaction has been created, it is signed by the owner (or owners) of the source of the funds. If it is properly formed and signed, the signed transaction is now valid and contains all the information needed to execute the transfer of tokens. Finally, the valid transaction has to reach the Topl network so that it can be propagated until it reaches a forger for inclusion in the public ledger (the blockchain) - -# Broadcasting Transactions to the Topl Network - -First, a transaction needs to be delivered to the Topl network so that it can be propagated and included in the blockchain. In essence, a Topl transaction is just a few bytes of data and has to reach any one of many Bifrost nodes. The senders do not need to trust the nodes they use to broadcast the transaction, as long as they use more than one to ensure that it propagates. The nodes don't need to trust the sender or establish the sender's "identity". Because the transaction is signed and contains no confidential information, private keys, or credentials, it can be publicly broadcast using the JSON-RPC routes. Unlike credit card transactions, for example, which contain sensitive information and can only be transmitted on an encrypted network, a Topl transaction can be sent over any network. As long as the transaction can reach a Topl node that will propagate it into the Topl network, it doesn't matter how it is transported to the first node. - -Topl transactions can therefore be transmitted to the Topl network over insecure networks like WiFi. As an extreme example, a Topl transaction could even be encoded in smileys (emoticons) and posted in a public forum or sent as a text message or Skype chat message. - -# Polling for Transactions on the Topl Network -Once a Topl transaction is sent to any node connected to the Topl network, the transaction will be validated by that node. If valid, that node will propagate it to the other nodes to which it is connected. If the transaction is invalid, the node will reject it and remove the transaction from the queue of transactions (mempool). - -The Topl network is a peer-to-peer network, meaning that each Bifrost node is connected to a few other Bifrost nodes that it discovers during startup through the peer-to-peer protocol. The entire network forms a loosely connected mesh without a fixed topology or any other structure, making all nodes equal peers. Messages, including transactions and blocks, are propagated from each node to the peers to which it is connected. A new validated transaction injected into any node on the network will be sent to three or four of the neighboring nodes, each of which will send it to three to four more nodes, and so on. In this way, within a few seconds a valid transaction will propagate in an exponentially expanding ripple across the network until all connected nodes have received it. - -The Topl network is designed to propagate transactions and blocks to all nodes in an efficient and resilient manner that is resistant to attacks. To prevent spamming, denial of service attacks, or other nuisance attacks against the Topl network, every node independently validates every transaction before propagating it further. A malformed transaction will not get beyond one node. - -Due to this setup, the originator should poll the mempool periodically. Once a transaction has left the mempool, it could either be because it was incorporated into a new block, or because it was malformed. Thus, after getting an unsuccessful hit from the mempool, the originator should then query the blockchain itself to see if the transaction was incorporated into a block. Only after getting a successful response from the blockchain should they proceed to using any UTXOs that were generated as a result of the transaction. This can be seen in the flow diagram below: - - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/3b69254-Screen_Shot_2021-08-11_at_5.02.53_PM.png", - "Screen Shot 2021-08-11 at 5.02.53 PM.png", - 1218, - 558, - "#fbf6f3" - ] - } - ] -} -[/block] \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/New To Topl/wallet-cryptography-and-encoding.md b/versioned_docs/version-Dion/v1.10.2/New To Topl/wallet-cryptography-and-encoding.md deleted file mode 100644 index b4d43ba..0000000 --- a/versioned_docs/version-Dion/v1.10.2/New To Topl/wallet-cryptography-and-encoding.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: "Recovery Phrases" -slug: "wallet-cryptography-and-encoding" -hidden: false -createdAt: "2021-10-08T21:20:21.210Z" -updatedAt: "2021-10-08T21:35:29.141Z" ---- -## Recovery Phrases - -### Motivation - -We define a way for easily entering and writing down arbitrary binary seeds using -a simple dictionary of known words (available in many different languages). - -The motivation here is to have sentence of words easy to read and write for humans, -which map uniquely back and forth to a sized binary data (harder to remember). - -### Encoding - -The process describing how to encode recovery phrases is described in [BIP-0039](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki) -section "Generating the mnemonic". Below is a reformulation of this specification. - -We call _Entropy_ an arbitrary sequence of bytes that has been generated through high -quality randomness methods. The allowed size of _Entropy_ is 96-256 bits and is -necessarily a multiple of 32 bits (4 bytes). - -A checksum is appended to the initial entropy by taking the first `ENT / 32` bits -of the SHA256 hash of it, where `ENT` designates the _Entropy_ size in bits. - -Then, the concatenated result is split into groups of 11 bits, each encoding a number -from 0 to 2047 serving as an index into a known dictionary (see below). - -| Sentence Length | Entropy Size | Checksum Size | -| ------------ | ------------------- | ------ | -| 9 words | 96 bits (12 bytes) | 3 bits | -| 12 words | 128 bits (16 bytes) | 4 bits | -| 15 words | 160 bits (20 bytes) | 5 bits | -| 18 words | 192 bits (24 bytes) | 6 bits | -| 21 words | 224 bits (28 bytes) | 7 bits | -| 24 words | 256 bits (32 bytes) | 8 bits | - -### Dictionaries - -Topl uses the same dictionaries as defined in [BIP-0039](https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md). - ---- \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/New To Topl/what-are-polys.md b/versioned_docs/version-Dion/v1.10.2/New To Topl/what-are-polys.md deleted file mode 100644 index 775e72d..0000000 --- a/versioned_docs/version-Dion/v1.10.2/New To Topl/what-are-polys.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "What are Polys?" -slug: "what-are-polys" -hidden: false -createdAt: "2021-03-31T20:20:07.140Z" -updatedAt: "2022-04-12T15:13:17.746Z" ---- -Polys represent the currency unit used to pay fees on the Topl blockchain. Any user who attempts to broadcast a transaction must include a set number of Polys to ensure that their transaction is included in a new block and thus added to the ledger. - -This fee acts as an incentive to the nodes running the blockchain code to continue to relay messages and keep the network available and secure. The amount of Polys required for a successful transaction is currently fixed by the network. - -1 nanopoly (10^-9 polys) is the smallest unit to which a poly can be divided. The denomination must be used when interacting with the Topl blockchain. - -So instead of entering a value of 1 poly to pay a transaction fee, you would enter a fee 10^9 nanopolys. -[block:callout] -{ - "type": "info", - "title": "Current Fees", - "body": "Currently, the transaction fee for the Valhalla testnet is set to 100 nanopoly.\n\nOn the production mainnet, transaction fees will be set to 1 poly or 10^9 nanopolys." -} -[/block] \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Raw Asset Transfer/raw-asset-transfer.md b/versioned_docs/version-Dion/v1.10.2/Raw Asset Transfer/raw-asset-transfer.md deleted file mode 100644 index ddf06b2..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Raw Asset Transfer/raw-asset-transfer.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Raw Asset Transfer" -slug: "raw-asset-transfer" -hidden: false -createdAt: "2021-07-09T20:54:07.327Z" -updatedAt: "2021-07-09T20:54:07.327Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/Raw Asset Transfer/raw-asset-transfer/createrawassettransfer.md b/versioned_docs/version-Dion/v1.10.2/Raw Asset Transfer/raw-asset-transfer/createrawassettransfer.md deleted file mode 100644 index ce49246..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Raw Asset Transfer/raw-asset-transfer/createrawassettransfer.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Create raw asset transfer" -slug: "createrawassettransfer" -excerpt: "#### Summary\nTransfer Assets from an account to a specified recipient\n\n#### Type\nRemote -- Transaction must be used in conjunction with an external key manager service.\n\n#### Description\nDefault behavior of the wallet is to find the first unlocked address which hold the targetted Asset.\nThe protocols default behavior is to combine multiple UTXOs of the same type into a single UTXO when it can.\n\n#### Notes\n- `AssetCode` in `AssetValue` can be generated using `util_generateAssetCode`\n- `fee` and `quantity` in `AssetValue` need to be strings, they will be converted into Int128 which can go up \nto 178 undecillion(2^127-1)\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|----------------------|------------------------|---------------------|-----------------------------------------------------------------------------------|\n| propositionType | String | Required | Type of proposition, eg., PublicKeyCurve25519, ThresholdCurve25519 |\n| recipients | [[String, AssetValue]] | Required | Array of addresses and assetValues for the transfer recipients(check table below) |\n| sender | [String] | Required | Array of addresses from which Assets should be sent |\n| changeAddress | String | Required | Address for recipient of unspent Polys |\n| consolidationAddress | String | Optional | Address for recipient of unspent Assets |\n| fee | String | Required | Fee for the transfer. Minting AssetTransfer requires fee to be greater than 0 |\n| minting | Boolean | Required | If this is a minting AssetTransfer or not |\n| data | String | Optional | Data string which can be associated with this transaction(may be empty). Data has a maximum value of 127 characters. |\n\n###### AssetValue\n| Fields | Data type | Required / Optional | Description |\n|--------------|-----------|---------------------|-------------------------------------------------------------------------------------------------|\n| type | String | Required | Type of transfer, should be \"Asset\" for AssetTransfer |\n| quantity | String | Required | Number of tokens in String |\n| assetCode | String | Required | Unique identifier for user issued Assets, generated from version, issuer address, and shortName |\n| securityRoot | String | Optional | Optional 32 byte commitment to instance of the AssetBox |\n| metadata | String | Optional | Metadata has a maximum value of 127 characters |" -hidden: false -createdAt: "2021-04-06T16:50:34.984Z" -updatedAt: "2021-07-09T20:54:07.470Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/Raw Poly Transfer/raw-poly-transfer.md b/versioned_docs/version-Dion/v1.10.2/Raw Poly Transfer/raw-poly-transfer.md deleted file mode 100644 index 7def37b..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Raw Poly Transfer/raw-poly-transfer.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Raw Poly Transfer" -slug: "raw-poly-transfer" -hidden: false -createdAt: "2021-07-09T20:50:41.410Z" -updatedAt: "2021-07-09T20:50:41.410Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/Raw Poly Transfer/raw-poly-transfer/createrawpolytransfer.md b/versioned_docs/version-Dion/v1.10.2/Raw Poly Transfer/raw-poly-transfer/createrawpolytransfer.md deleted file mode 100644 index 3486a4a..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Raw Poly Transfer/raw-poly-transfer/createrawpolytransfer.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Create raw poly transfer" -slug: "createrawpolytransfer" -excerpt: "#### Summary\nTransfer Polys from an account to a specified recipient.\n\n#### Type\nRemote -- Transaction must be used in conjunction with an external key manager service.\n\n#### Description\nDefault behavior of the wallet is to find the first unlocked address which hold Polys.\nThe protocols default behavior is to combine multiple UTXOs of the same type into a single UTXO when it can.\n\n#### Notes\n- `fee` and Poly amounts in `recipients` need to be strings, they will be converted into Int128 which can go up\nto 178 undecillion(2^127-1)\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|-----------------|--------------------|---------------------|--------------------------------------------------------------------------|\n| propositionType | String | Required | Type of proposition, eg., PublicKeyCurve25519, ThresholdCurve25519 |\n| recipients | [[String, String]] | Required | Array of addresses and Poly amounts for the corresponding recipients |\n| sender | [String] | Required | Array of addresses from which Poly should be sent |\n| changeAddress | String | Required | Address for recipient of unspent Polys |\n| fee | String | Required | Fee for the transfer |\n| data | String | Optional | Data string which can be associated with this transaction (may be empty). Data has a maximum value of 127 Latin-1 encoded characters |" -hidden: false -createdAt: "2021-07-09T20:50:41.563Z" -updatedAt: "2021-07-09T20:50:41.563Z" ---- diff --git a/versioned_docs/version-Dion/v1.10.2/Release Notes/topl-protocol-release-notes.md b/versioned_docs/version-Dion/v1.10.2/Release Notes/topl-protocol-release-notes.md deleted file mode 100644 index 0dd5eaf..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Release Notes/topl-protocol-release-notes.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: "Topl Protocol Release Notes" -slug: "topl-protocol-release-notes" -hidden: false -createdAt: "2021-03-29T18:35:07.099Z" -updatedAt: "2021-11-10T19:10:33.647Z" ---- -The release notes provide more details for users who are planning on using the BaaS - -# Topl Protocol Release Notes -* [Bifrost v1.8.0](https://github.com/Topl/Bifrost/releases/tag/v1.8.0) -* [Bifrost v.1.6.3](https://github.com/Topl/Bifrost/releases/tag/v1.6.3) -* [Bifrost v1.4.3] (https://github.com/Topl/Bifrost/releases/tag/v1.4.3) -* [Bifrost v1.3.4 jar](https://repo.topl.network/bifrost-1.3.4.jar) -* [Bifrost v1.3.3 release notes](https://github.com/Topl/Bifrost/releases/tag/v1.3.3) -* [Bifrost v1.0.0 release notes](https://github.com/Topl/Bifrost/releases/tag/v1.0.0) - -# BramblSC -* [BramblSC v1.8.0](https://github.com/Topl/Bifrost/releases/tag/v1.8.0) -* [BramblSC v1.6.3](https://github.com/Topl/Bifrost/releases/tag/v1.6.3) -* [BramblSC v0.1.0](https://github.com/Topl/BramblSc) - -# BramblJS -* [BramblJS 1.3.0](https://github.com/Topl/BramblJS/releases/tag/1.3.0) -* [BramblJS v1.2.3](https://www.npmjs.com/package/brambljs) -* BramblJS v1.2.2 (Notes to be completed soon) -* [BramblJS v1.2.1](https://github.com/Topl/BramblJS/releases/tag/v1.2.1) -* [BramblJS v1.1.1](https://github.com/Topl/BramblJS/releases/tag/v1.1.1) -*[BramblJS v1.0.1](https://github.com/Topl/BramblJS/releases/tag/v1.0.1) - -#BramblDart -* [BramblDart 0.0.1](https://github.com/Topl/BramblDart/releases/tag/v0.0.1) \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Still have questions-/additional-resources.md b/versioned_docs/version-Dion/v1.10.2/Still have questions-/additional-resources.md deleted file mode 100644 index 725c5ab..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Still have questions-/additional-resources.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Additional Resources" -slug: "additional-resources" -hidden: false -createdAt: "2021-03-29T18:55:31.034Z" -updatedAt: "2021-11-10T19:09:07.464Z" ---- -We try to maintain a comprehensive set of documentation for various audiences. However, we realize that often there are questions that remain unanswered. - -### Community -- [Discord][discord-url] -- [StackExchange][stackexchange-url] - -[discord-url]: https://discord.gg/mre2Dazqsy -[stackexchange-url]: https://bitcoin.stackexchange.com/questions/tagged/topl \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Still have questions-/bibliography.md b/versioned_docs/version-Dion/v1.10.2/Still have questions-/bibliography.md deleted file mode 100644 index 73899e4..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Still have questions-/bibliography.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Bibliography" -slug: "bibliography" -hidden: false -createdAt: "2021-08-23T17:39:51.187Z" -updatedAt: "2021-10-08T18:59:33.146Z" ---- -Blockchain Explorer overview can be found in more detail here: https://coinmarketcap.com/guides/blockexplorer - -Big thanks to Cardano for their open source work on the Bip-44 HD wallet derivation schemes as well as their robust documentation. \ No newline at end of file diff --git a/versioned_docs/version-Dion/v1.10.2/Topl Addresses/install.md b/versioned_docs/version-Dion/v1.10.2/Topl Addresses/install.md deleted file mode 100644 index fb20513..0000000 --- a/versioned_docs/version-Dion/v1.10.2/Topl Addresses/install.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: "Install" -slug: "install" -hidden: false -createdAt: "2021-08-27T19:57:21.680Z" -updatedAt: "2021-10-18T20:07:14.034Z" ---- -# Command Line -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/16d2ea9-keyboard-4d5a3e1a.svg", - "keyboard-4d5a3e1a.svg", - 320, - 320, - "#998099" - ] - } - ] -} -[/block] -## Install Anywhere (npm) -If you use Node.js, you can install Topl Addresses using [npm](https://www.npmjs.com/) by running `npm install -g bip_topl` - -However, please note that this will install the pure JavaScript implementation of Topl Addresses, which runs somewhat slower than the other options listed here. But it has the same interface, so it'll be easy to swap in another implementation later if you need a bit more speed! - -Once you have run the above command, don't forget to `require()` it as a library! - -When install via npm, Topl Addresses supports a Javascript API that aims to be compatible with Node. Full compatibility is a work in progress. - -## Dart Library -You can also use Dart Bip for Topl to get the speed of the Dart VM plus the ability to extend functions. To add it to an existing project: - -1.) [Install the Dart SDK](https://dart.dev/get-dart#automated-installation-and-updates). Make sure that its bin directory is [on your path](https://katiek2.github.io/path-doc/). -2.) Create a pubspec.yaml file like this: - - - -[block:code] -{ - "codes": [ - { - "code": "name: my_project\ndev_dependencies:\n\tbip_topl: ^x.y.z", - "language": "yaml" - } - ] -} -[/block] -3.) Run dart pub get - -5.) Learn more about [writing Dart code](https://dart.dev/guides/language/language-tour) (it's easy!) \ No newline at end of file diff --git a/versioned_docs/version-Tetra/intro.md b/versioned_docs/version-Tetra/intro.md deleted file mode 100644 index 8a2e69d..0000000 --- a/versioned_docs/version-Tetra/intro.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Tutorial Intro - -Let's discover **Docusaurus in less than 5 minutes**. - -## Getting Started - -Get started by **creating a new site**. - -Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new)**. - -### What you'll need - -- [Node.js](https://nodejs.org/en/download/) version 16.14 or above: - - When installing Node.js, you are recommended to check all checkboxes related to dependencies. - -## Generate a new site - -Generate a new Docusaurus site using the **classic template**. - -The classic template will automatically be added to your project after you run the command: - -```bash -npm init docusaurus@latest my-website classic -``` - -You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor. - -The command also installs all necessary dependencies you need to run Docusaurus. - -## Start your site - -Run the development server: - -```bash -cd my-website -npm run start -``` - -The `cd` command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there. - -The `npm run start` command builds your website locally and serves it through a development server, ready for you to view at http://localhost:3000/. - -Open `docs/intro.md` (this page) and edit some lines: the site **reloads automatically** and displays your changes. diff --git a/versioned_docs/version-Tetra/tutorial-basics/_category_.json b/versioned_docs/version-Tetra/tutorial-basics/_category_.json deleted file mode 100644 index 2e6db55..0000000 --- a/versioned_docs/version-Tetra/tutorial-basics/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Tutorial - Basics", - "position": 2, - "link": { - "type": "generated-index", - "description": "5 minutes to learn the most important Docusaurus concepts." - } -} diff --git a/versioned_docs/version-Tetra/tutorial-basics/congratulations.md b/versioned_docs/version-Tetra/tutorial-basics/congratulations.md deleted file mode 100644 index 04771a0..0000000 --- a/versioned_docs/version-Tetra/tutorial-basics/congratulations.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Congratulations! - -You have just learned the **basics of Docusaurus** and made some changes to the **initial template**. - -Docusaurus has **much more to offer**! - -Have **5 more minutes**? Take a look at **[versioning](../tutorial-extras/manage-docs-versions.md)** and **[i18n](../tutorial-extras/translate-your-site.md)**. - -Anything **unclear** or **buggy** in this tutorial? [Please report it!](https://github.com/facebook/docusaurus/discussions/4610) - -## What's next? - -- Read the [official documentation](https://docusaurus.io/) -- Modify your site configuration with [`docusaurus.config.js`](https://docusaurus.io/docs/api/docusaurus-config) -- Add navbar and footer items with [`themeConfig`](https://docusaurus.io/docs/api/themes/configuration) -- Add a custom [Design and Layout](https://docusaurus.io/docs/styling-layout) -- Add a [search bar](https://docusaurus.io/docs/search) -- Find inspirations in the [Docusaurus showcase](https://docusaurus.io/showcase) -- Get involved in the [Docusaurus Community](https://docusaurus.io/community/support) diff --git a/versioned_docs/version-Tetra/tutorial-basics/create-a-blog-post.md b/versioned_docs/version-Tetra/tutorial-basics/create-a-blog-post.md deleted file mode 100644 index ea472bb..0000000 --- a/versioned_docs/version-Tetra/tutorial-basics/create-a-blog-post.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Create a Blog Post - -Docusaurus creates a **page for each blog post**, but also a **blog index page**, a **tag system**, an **RSS** feed... - -## Create your first Post - -Create a file at `blog/2021-02-28-greetings.md`: - -```md title="blog/2021-02-28-greetings.md" ---- -slug: greetings -title: Greetings! -authors: - - name: Joel Marcey - title: Co-creator of Docusaurus 1 - url: https://github.com/JoelMarcey - image_url: https://github.com/JoelMarcey.png - - name: Sébastien Lorber - title: Docusaurus maintainer - url: https://sebastienlorber.com - image_url: https://github.com/slorber.png -tags: [greetings] ---- - -Congratulations, you have made your first post! - -Feel free to play around and edit this post as much you like. -``` - -A new blog post is now available at [http://localhost:3000/blog/greetings](http://localhost:3000/blog/greetings). diff --git a/versioned_docs/version-Tetra/tutorial-basics/create-a-document.md b/versioned_docs/version-Tetra/tutorial-basics/create-a-document.md deleted file mode 100644 index ffddfa8..0000000 --- a/versioned_docs/version-Tetra/tutorial-basics/create-a-document.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Create a Document - -Documents are **groups of pages** connected through: - -- a **sidebar** -- **previous/next navigation** -- **versioning** - -## Create your first Doc - -Create a Markdown file at `docs/hello.md`: - -```md title="docs/hello.md" -# Hello - -This is my **first Docusaurus document**! -``` - -A new document is now available at [http://localhost:3000/docs/hello](http://localhost:3000/docs/hello). - -## Configure the Sidebar - -Docusaurus automatically **creates a sidebar** from the `docs` folder. - -Add metadata to customize the sidebar label and position: - -```md title="docs/hello.md" {1-4} ---- -sidebar_label: 'Hi!' -sidebar_position: 3 ---- - -# Hello - -This is my **first Docusaurus document**! -``` - -It is also possible to create your sidebar explicitly in `sidebars.js`: - -```js title="sidebars.js" -module.exports = { - tutorialSidebar: [ - 'intro', - // highlight-next-line - 'hello', - { - type: 'category', - label: 'Tutorial', - items: ['tutorial-basics/create-a-document'], - }, - ], -}; -``` diff --git a/versioned_docs/version-Tetra/tutorial-basics/create-a-page.md b/versioned_docs/version-Tetra/tutorial-basics/create-a-page.md deleted file mode 100644 index 20e2ac3..0000000 --- a/versioned_docs/version-Tetra/tutorial-basics/create-a-page.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Create a Page - -Add **Markdown or React** files to `src/pages` to create a **standalone page**: - -- `src/pages/index.js` → `localhost:3000/` -- `src/pages/foo.md` → `localhost:3000/foo` -- `src/pages/foo/bar.js` → `localhost:3000/foo/bar` - -## Create your first React Page - -Create a file at `src/pages/my-react-page.js`: - -```jsx title="src/pages/my-react-page.js" -import React from 'react'; -import Layout from '@theme/Layout'; - -export default function MyReactPage() { - return ( - -

My React page

-

This is a React page

-
- ); -} -``` - -A new page is now available at [http://localhost:3000/my-react-page](http://localhost:3000/my-react-page). - -## Create your first Markdown Page - -Create a file at `src/pages/my-markdown-page.md`: - -```mdx title="src/pages/my-markdown-page.md" -# My Markdown page - -This is a Markdown page -``` - -A new page is now available at [http://localhost:3000/my-markdown-page](http://localhost:3000/my-markdown-page). diff --git a/versioned_docs/version-Tetra/tutorial-basics/deploy-your-site.md b/versioned_docs/version-Tetra/tutorial-basics/deploy-your-site.md deleted file mode 100644 index 1c50ee0..0000000 --- a/versioned_docs/version-Tetra/tutorial-basics/deploy-your-site.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Deploy your site - -Docusaurus is a **static-site-generator** (also called **[Jamstack](https://jamstack.org/)**). - -It builds your site as simple **static HTML, JavaScript and CSS files**. - -## Build your site - -Build your site **for production**: - -```bash -npm run build -``` - -The static files are generated in the `build` folder. - -## Deploy your site - -Test your production build locally: - -```bash -npm run serve -``` - -The `build` folder is now served at [http://localhost:3000/](http://localhost:3000/). - -You can now deploy the `build` folder **almost anywhere** easily, **for free** or very small cost (read the **[Deployment Guide](https://docusaurus.io/docs/deployment)**). diff --git a/versioned_docs/version-Tetra/tutorial-basics/markdown-features.mdx b/versioned_docs/version-Tetra/tutorial-basics/markdown-features.mdx deleted file mode 100644 index 6b3aaaa..0000000 --- a/versioned_docs/version-Tetra/tutorial-basics/markdown-features.mdx +++ /dev/null @@ -1,146 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Markdown Features - -Docusaurus supports **[Markdown](https://daringfireball.net/projects/markdown/syntax)** and a few **additional features**. - -## Front Matter - -Markdown documents have metadata at the top called [Front Matter](https://jekyllrb.com/docs/front-matter/): - -```text title="my-doc.md" -// highlight-start ---- -id: my-doc-id -title: My document title -description: My document description -slug: /my-custom-url ---- -// highlight-end - -## Markdown heading - -Markdown text with [links](./hello.md) -``` - -## Links - -Regular Markdown links are supported, using url paths or relative file paths. - -```md -Let's see how to [Create a page](/create-a-page). -``` - -```md -Let's see how to [Create a page](./create-a-page.md). -``` - -**Result:** Let's see how to [Create a page](./create-a-page.md). - -## Images - -Regular Markdown images are supported. - -You can use absolute paths to reference images in the static directory (`static/img/docusaurus.png`): - -```md -![Docusaurus logo](/img/docusaurus.png) -``` - -![Docusaurus logo](/img/docusaurus.png) - -You can reference images relative to the current file as well, as shown in [the extra guides](../tutorial-extras/manage-docs-versions.md). - -## Code Blocks - -Markdown code blocks are supported with Syntax highlighting. - - ```jsx title="src/components/HelloDocusaurus.js" - function HelloDocusaurus() { - return ( -

Hello, Docusaurus!

- ) - } - ``` - -```jsx title="src/components/HelloDocusaurus.js" -function HelloDocusaurus() { - return

Hello, Docusaurus!

; -} -``` - -## Admonitions - -Docusaurus has a special syntax to create admonitions and callouts: - - :::tip My tip - - Use this awesome feature option - - ::: - - :::danger Take care - - This action is dangerous - - ::: - -:::tip My tip - -Use this awesome feature option - -::: - -:::danger Take care - -This action is dangerous - -::: - -## MDX and React Components - -[MDX](https://mdxjs.com/) can make your documentation more **interactive** and allows using any **React components inside Markdown**: - -```jsx -export const Highlight = ({children, color}) => ( - { - alert(`You clicked the color ${color} with label ${children}`) - }}> - {children} - -); - -This is Docusaurus green ! - -This is Facebook blue ! -``` - -export const Highlight = ({children, color}) => ( - { - alert(`You clicked the color ${color} with label ${children}`); - }}> - {children} - -); - -This is Docusaurus green ! - -This is Facebook blue ! diff --git a/versioned_docs/version-Tetra/tutorial-extras/_category_.json b/versioned_docs/version-Tetra/tutorial-extras/_category_.json deleted file mode 100644 index a8ffcc1..0000000 --- a/versioned_docs/version-Tetra/tutorial-extras/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Tutorial - Extras", - "position": 3, - "link": { - "type": "generated-index" - } -} diff --git a/versioned_docs/version-Tetra/tutorial-extras/img/docsVersionDropdown.png b/versioned_docs/version-Tetra/tutorial-extras/img/docsVersionDropdown.png deleted file mode 100644 index 97e4164618b5f8beda34cfa699720aba0ad2e342..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25427 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 diff --git a/versioned_docs/version-Tetra/tutorial-extras/img/localeDropdown.png b/versioned_docs/version-Tetra/tutorial-extras/img/localeDropdown.png deleted file mode 100644 index e257edc1f932985396bf59584c7ccfaddf955779..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27841 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 JrC|B>e*nH7H{}2T diff --git a/versioned_docs/version-Tetra/tutorial-extras/manage-docs-versions.md b/versioned_docs/version-Tetra/tutorial-extras/manage-docs-versions.md deleted file mode 100644 index e12c3f3..0000000 --- a/versioned_docs/version-Tetra/tutorial-extras/manage-docs-versions.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Manage Docs Versions - -Docusaurus can manage multiple versions of your docs. - -## Create a docs version - -Release a version 1.0 of your project: - -```bash -npm run docusaurus docs:version 1.0 -``` - -The `docs` folder is copied into `versioned_docs/version-1.0` and `versions.json` is created. - -Your docs now have 2 versions: - -- `1.0` at `http://localhost:3000/docs/` for the version 1.0 docs -- `current` at `http://localhost:3000/docs/next/` for the **upcoming, unreleased docs** - -## Add a Version Dropdown - -To navigate seamlessly across versions, add a version dropdown. - -Modify the `docusaurus.config.js` file: - -```js title="docusaurus.config.js" -module.exports = { - themeConfig: { - navbar: { - items: [ - // highlight-start - { - type: 'docsVersionDropdown', - }, - // highlight-end - ], - }, - }, -}; -``` - -The docs version dropdown appears in your navbar: - -![Docs Version Dropdown](./img/docsVersionDropdown.png) - -## Update an existing version - -It is possible to edit versioned docs in their respective folder: - -- `versioned_docs/version-1.0/hello.md` updates `http://localhost:3000/docs/hello` -- `docs/hello.md` updates `http://localhost:3000/docs/next/hello` diff --git a/versioned_docs/version-Tetra/tutorial-extras/translate-your-site.md b/versioned_docs/version-Tetra/tutorial-extras/translate-your-site.md deleted file mode 100644 index caeaffb..0000000 --- a/versioned_docs/version-Tetra/tutorial-extras/translate-your-site.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Translate your site - -Let's translate `docs/intro.md` to French. - -## Configure i18n - -Modify `docusaurus.config.js` to add support for the `fr` locale: - -```js title="docusaurus.config.js" -module.exports = { - i18n: { - defaultLocale: 'en', - locales: ['en', 'fr'], - }, -}; -``` - -## Translate a doc - -Copy the `docs/intro.md` file to the `i18n/fr` folder: - -```bash -mkdir -p i18n/fr/docusaurus-plugin-content-docs/current/ - -cp docs/intro.md i18n/fr/docusaurus-plugin-content-docs/current/intro.md -``` - -Translate `i18n/fr/docusaurus-plugin-content-docs/current/intro.md` in French. - -## Start your localized site - -Start your site on the French locale: - -```bash -npm run start -- --locale fr -``` - -Your localized site is accessible at [http://localhost:3000/fr/](http://localhost:3000/fr/) and the `Getting Started` page is translated. - -:::caution - -In development, you can only use one locale at a same time. - -::: - -## Add a Locale Dropdown - -To navigate seamlessly across languages, add a locale dropdown. - -Modify the `docusaurus.config.js` file: - -```js title="docusaurus.config.js" -module.exports = { - themeConfig: { - navbar: { - items: [ - // highlight-start - { - type: 'localeDropdown', - }, - // highlight-end - ], - }, - }, -}; -``` - -The locale dropdown now appears in your navbar: - -![Locale Dropdown](./img/localeDropdown.png) - -## Build your localized site - -Build your site for a specific locale: - -```bash -npm run build -- --locale fr -``` - -Or build your site to include all the locales at once: - -```bash -npm run build -``` diff --git a/versioned_docs/version-Tetra/v1.10.2/Annulus/main-search-bar.md b/versioned_docs/version-Tetra/v1.10.2/Annulus/main-search-bar.md deleted file mode 100644 index f9531bd..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Annulus/main-search-bar.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "Main Search Bar" -slug: "main-search-bar" -hidden: false -createdAt: "2021-08-23T17:46:57.382Z" -updatedAt: "2021-08-23T20:11:42.664Z" ---- -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/4057ab9-Screen_Shot_2021-08-23_at_1.47.14_PM.png", - "Screen Shot 2021-08-23 at 1.47.14 PM.png", - 3360, - 746, - "#8fd9cd" - ] - } - ] -} -[/block] -#Main Search Bar - -The main search bar is where you can look up something specific right away. As a block explorer user, you can perform a search for either a block (by height or by block hash) or a transaction (by ID or transaction hash). - -One common use case that you can try on the block explorer is checking on the status of a transaction. (We always recommend the copy and paste method to prevent typing errors!) - -Within a block, there can be hundreds of approved transactions, so we do not recommend searching for a specific transaction by scrolling through the pages (of course, unless you want to!). \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Annulus/overview-page.md b/versioned_docs/version-Tetra/v1.10.2/Annulus/overview-page.md deleted file mode 100644 index dea238a..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Annulus/overview-page.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: "Overview Page" -slug: "overview-page" -hidden: false -createdAt: "2021-08-23T17:41:05.303Z" -updatedAt: "2021-11-10T19:03:43.293Z" ---- -#Overview Page -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/9ff1fab-Screen_Shot_2021-08-23_at_1.41.54_PM.png", - "Screen Shot 2021-08-23 at 1.41.54 PM.png", - 3356, - 2094, - "#c2e5df" - ] - } - ] -} -[/block] -Upon landing on the Annulus site, you'll be greeted by the overview and a few important elements. On the left side of the header, you'll see the Topl logo which takes you back to this overview screen at any time! - -The **average block time** refers to the average time to forge a new block over a 24-hour period. This number changes depending on difficulty parameters of a given network. - -**Unconfirmed Transactions** are transactions that have been broadcast but are yet to be confirmed by forgers. Since transactions are confirmed in blocks (batches), every transaction will at first be unconfirmed. However, if a transaction remains unconfirmed for more than a few minutes, it may mean that the transaction fee paid with the transaction was too low. Transaction fees act as an incentive for forgers to process a transaction, so a fee below the network minimum would result in the transaction never being confirmed into a block. - -Beginning with the first column in the Blocks section, "Block Height" refers to the index of a given block, which number block is it in the chain. The next column provides the number of transaction present in each block. The last column records the date and time it was completed (in YYYY/MM/DD hh:mm:ss format). - -Should you want to view more details on a specific block, clicking on the block height will take you to all the transactions contained in that specific block. -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/d1a983b-Screen_Shot_2021-08-23_at_1.42.48_PM.png", - "Screen Shot 2021-08-23 at 1.42.48 PM.png", - 3356, - 172, - "#fcfdfc" - ] - } - ] -} -[/block] - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/e0459c0-Screen_Shot_2021-08-23_at_2.28.00_PM.png", - "Screen Shot 2021-08-23 at 2.28.00 PM.png", - 2392, - 1722, - "#f7f8f8" - ] - } - ] -} -[/block] -As an example, we have clicked on block [62855](https://toplnet.annulus.topl.services/#/block/234AsNJz29kQzRpemokJi6ANDHbCxcS4Nv6iDC16B9TTt) to gain more information. The first part shows the block header and its summary, In the "Transactions" subheader below, alphanumeric transaction IDs will be listed. The first two transactions in a Topl block are the block reward sent to the forger or set of forgers who generated the block. This is why you will see that those transactions have 0 in fees. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Annulus/recent-blocks.md b/versioned_docs/version-Tetra/v1.10.2/Annulus/recent-blocks.md deleted file mode 100644 index 003821f..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Annulus/recent-blocks.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: "Recent Blocks" -slug: "recent-blocks" -hidden: false -createdAt: "2021-08-23T18:13:52.046Z" -updatedAt: "2021-08-23T20:13:25.986Z" ---- -# Recent Blocks - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/48a834d-Screen_Shot_2021-08-23_at_1.54.30_PM.png", - "Screen Shot 2021-08-23 at 1.54.30 PM.png", - 2388, - 1660, - "#f0f2f0" - ] - } - ] -} -[/block] -To the right of the overview screen on the header, there is a button from which you can search recent blocks. Blocks are chained to each other in the order that they are created and always contain the unique hash number of the previous block. - -This view of the blocks is constantly updated with newer blocks entering at the top and pushing older blocks down the list. The blocks are sized (in KB) proportionally to the number of transactions executed, so the larger the size, the more transactions that were included in the block. This size depends on how many people have been trying to transact during a certain period, and how many of those transactions have been validated. - -A transaction becomes more "final" as new blocks are added onto the existing chain since the deeper a block is buried, the more likely that everyone on the network will have heard about it. - -The table also contains the <>, block ID, timestamp when the block was forged, and the generator that was used to forge the block. - -Once blocks are created, the records that they contain are permanent and can't be altered or deleted. This is what makes blockchain technology tamper-proof as only new data can be added on the block. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Annulus/simplifying-the-blockchain.md b/versioned_docs/version-Tetra/v1.10.2/Annulus/simplifying-the-blockchain.md deleted file mode 100644 index a5674e7..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Annulus/simplifying-the-blockchain.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "Simplifying the Blockchain" -slug: "simplifying-the-blockchain" -hidden: false -createdAt: "2021-08-23T17:39:03.391Z" -updatedAt: "2021-11-10T19:03:07.106Z" ---- -# Simplifying the Blockchain - -If you'd like to become confident in using a Topl block explorer and fully understand its functionality, we're here to guide you through Annulus. To start off, you can open up [Annulus](https://toplnet.annulus.topl.services/) in your web browser and follow along using the guide. - -First, what's a block explorer? To provide some basic terms, a <> is a blockchain search engine that allows you to search for a particular piece of information on the blockchain. The activities carried out on blockchains are known as <>s, which occur when crypto-tokens are sent to and from wallet addresses. Blocks on the blockchain are collections of transactions that were processed and approved by special nodes known as forgers. - -To recap, a <> is an online tool to view all transactions that have taken place on the blockchain, the current network hash rate, and transactions between blockchain addresses, amongst other useful information. You can think of it as a window into the blockchain world, giving you the opportunity to observe what's happening there. - -Our block explorer visually displays block activity as it is confirmed in real-time, which allows users to take a more engaged approach to the data. Users can look up a particular block height, and inspect it at another level by viewing the transaction details that make up a block. - -# Who uses a Block Explorer? -For one, developers and users, who often exchange polys and assets will utilize the block explorer to check on the status of their transactions. Once users initiate transactions, they will receive an automatically generated transaction hash and can use it to look up details of the transaction and whether it was successful. - -Forgers will use the block explorer to confirm significant block activity, especially to check if they have been successful in generating a particular block, which means they will receive the block reward. - -Have fun on your blockchain journey! Our aim for the block explorer is a no-frills, user-friendly tool that gives users easy access to data from multiple search vantages and provides a more intuitive understanding of the data. - -On the next page, let's take a deeper look at the <> \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Annulus/transactions-view.md b/versioned_docs/version-Tetra/v1.10.2/Annulus/transactions-view.md deleted file mode 100644 index 6d0c7ca..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Annulus/transactions-view.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: "Transactions View" -slug: "transactions-view" -hidden: false -createdAt: "2021-08-23T18:32:25.766Z" -updatedAt: "2021-08-23T20:17:20.313Z" ---- -#Transactions View -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/ef637eb-Screen_Shot_2021-08-23_at_2.32.39_PM.png", - "Screen Shot 2021-08-23 at 2.32.39 PM.png", - 2566, - 1652, - "#edf2f2" - ] - } - ] -} -[/block] -To take a closer look at data on the Topl Blockchain, select the "Transactions" tab to see the individual transactions within their associated block. <>s refer to the act of sending or receiving crypto-tokens. Each transaction ID (also known as TxHash or TxId) is generated by a hashing algorithm according to the information contained in that particular transaction. This transaction ID can be used as a digital proof of payment/transfer. Altering that info in any way causes the transaction ID to change and alerts users that the data has been tampered with. Recipients of a Topl transaction may also look up the transaction by its transaction ID to see its status and confirm whether tokens have arrived in their addresses. - -Sending tokens requires a transaction fee in the same way that it costs money to make a bank transfer. The key difference is that crypto fees are very minimal compared to traditional bank fees. In fact, whether you send 6 million polys or 6 polys, the fee remains constant. -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/cac392c-Screen_Shot_2021-08-23_at_2.42.23_PM.png", - "Screen Shot 2021-08-23 at 2.42.23 PM.png", - 3358, - 2090, - "#fbfbfb" - ] - } - ] -} -[/block] -Clicking on any TxId on the Transactions page brings you to a dedicated page for that specific transaction. On this transaction page, you will be able to see whether the transaction has been successfully confirmed or is still pending (under Status). - -As a general rule, a secure transaction requires 30 blocks to be confirmed above the block in which the transaction was included, which takes about 7.5 minutes on the Topl Blockchain (one block is generated every 15 seconds or so). - -#Topl Transactions: UTXO's - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/f2f8128-Screen_Shot_2021-08-23_at_2.51.11_PM.png", - "Screen Shot 2021-08-23 at 2.51.11 PM.png", - 2308, - 770, - "#f8f9f9" - ] - } - ] -} -[/block] -In this Topl transaction, you'll notice two outputs that contain two different amounts under the "Outputs" sections. A Topl address does not only contain one balance per token, but is rather made up of multiple, smaller balances known as unspent transaction outputs, or UTXO's which create a lump sum that makes up an overall balance. These UTXO's remain intact until a transaction is initiated and then are randomly selected one by one until it meets or exceeds the transaction amount for the given token. At this moment, unspent transaction outputs are broken up so that the correct amount, including fees, are distributed while the remaining value of the tokens are returned to the sender as change or consolidation. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/adding-polys.md b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/adding-polys.md deleted file mode 100644 index e4a1628..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/adding-polys.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: "Adding Polys" -slug: "adding-polys" -hidden: false -createdAt: "2021-03-23T17:52:21.694Z" -updatedAt: "2021-07-06T19:09:37.056Z" ---- -As discussed previously, polys are required in order to submit transactions to the Topl blockchain. - - -[block:callout] -{ - "type": "danger", - "title": "Note:", - "body": "You must have an address in order to add polys to your address. You can follow our documentation to generate an address using one of our Brambl libraries (see the Topl Blockchain Address page)" -} -[/block] -# How can I get Polys? -It's actually pretty easy, follow these steps: - -#First Step - After logging into the BaaS Portal, go to Settings and find the Purchase Polys section on the page. From there, you can transfer funds to the address directly through the UI! - - - - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/3a0e7a6-Topl_-_API_Console.gif", - "Topl - API Console.gif", - 640, - 400, - "#e1ecea" - ] - } - ] -} -[/block] -You will need to wait until the funds are confirmed to use them. The confirmation status will look something like this: -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/885bf20-Screen_Shot_2021-07-06_at_12.55.27_PM.png", - "Screen Shot 2021-07-06 at 12.55.27 PM.png", - 2296, - 354, - "#fafafa" - ] - } - ] -} -[/block] - -[block:callout] -{ - "type": "info", - "title": "Note:", - "body": "Polys used on our testing network our free, however, you will have to pay to acquire polys on our main network. In addition, you can only request one faucet transaction on the testnet for every 6 hours. This ensures that there will be enough test polys for all of our users." -} -[/block] -If you are wanting to add polys to an account on our mainnet (toplnet), please follow the steps above but use the mainnet dropdown instead of the valhalla dropdown. You should be redirected to stripe where you can purchase polys on the main network. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/choosing-a-network.md b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/choosing-a-network.md deleted file mode 100644 index 6acf8ab..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/choosing-a-network.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: "Choosing a Network" -slug: "choosing-a-network" -hidden: false -createdAt: "2021-11-11T19:42:32.238Z" -updatedAt: "2021-11-11T19:47:04.058Z" ---- -#Choosing a network -Use one of the following endpoints as url to which you will connect with a Brambl library or directly via cURL - - -[block:callout] -{ - "type": "info", - "title": "Note", - "body": "Be sure to replace `YOUR-PROJECT-ID` with a Project ID from your [BaaS Dashboard](https://topl.services)" -} -[/block] - -[block:parameters] -{ - "data": { - "h-0": "Network", - "h-1": "Connection Supported", - "h-2": "URL", - "0-0": "Mainnet", - "0-1": "JSON_RPC over HTTPS", - "0-2": "https://vertx.topl.services/mainnet/YOUR-PROJECT-ID", - "1-0": "Valhalla", - "1-1": "JSON_RPC over HTTPS", - "1-2": "https://vertx.topl.services/valhalla/YOUR-PROJECT-ID" - }, - "cols": 3, - "rows": 2 -} -[/block] \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/creating-a-project.md b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/creating-a-project.md deleted file mode 100644 index 3f0a331..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/creating-a-project.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: "Creating a Project" -slug: "creating-a-project" -hidden: false -createdAt: "2021-03-22T21:00:33.504Z" -updatedAt: "2022-03-29T14:36:04.395Z" ---- -There are so many different use cases that can be explored using Topl's blockchain, however, the first step will always be creating a project. - -## Creating a new project for an organization - -To begin interfacing with the Topl blockchain, you'll once again go to the menu on the left-hand side of the screen and click on your Organization Name. From the Organization Page, navigate to projects from where you should find a "Create New Project" button on the right hand side. - - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/22cb408-organization_project_2.gif", - "organization_project_2.gif", - 640, - 344, - "#f6f8f6" - ] - } - ] -} -[/block] -Once you have clicked on the create new project button, you will be shown a screen where you can enter the project name in addition to being able to select which Topl BaaS Offerings you want to add to the project (Torus or Genus). -[block:callout] -{ - "type": "info", - "title": "Torus and Genus", - "body": "Torus enables you to send information to the Topl network while Genus allows you to listen for a response, useful as blockchains are asynchronous. Genus is still under development and should be released later on this year." -} -[/block] -## Projects Page - -From here, you will have access to your projects dashboard. You will be able to view the services for which your projects have been created (Torus/Genus), monitor request activity statistics and the ability to manage your projects for your organization. - -If you are running out of project space within your organization, you can always choose to update your subscription plan at the bottom of this page! - -## Individual Project Page - -You can view any project that is a part of your organization through the view button on the right hand side of the box containing the project. -From here, you'll notice a few main features that are provided for you -- You can see data for your project and filter by network in addition to date. You also have the option to download this data. -- You have the ability to view the API key for both the mainnet and the testnet in addition to your number of daily requests remaining. -- Finally, you can regenerate the API-keys using the button at the bottom. - -If you need to, there is the option to delete your project as well and start over from the individual project page in the bottom right hand corner. - -There are some use cases that fall outside of the scope of an organization. You can also interact with -<> by creating a personal project. - -## Creating a personal project - -To begin a personal project, navigate to the left side bar and click on the Personal Tab then Create New Project. -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/45cb081-personal_project_2.gif", - "personal_project_2.gif", - 640, - 344, - "#f4f8f5" - ] - } - ] -} -[/block] -From here you will see the project settings page appear with the following information: - -1.) The project ID -2.) The traffic for that project (can modify the specific date range for the data) -3.) The API keys for each blockchain network - - These are used to access the blockchain via the API. - - These API keys can be regenerated using the "Re-generate Torus Keys" button. - -Finally, if the project is no longer needed, it can be deleted by pressing the delete project button in the bottom right hand corner to free up space for more personal projects. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/creating-an-organization-1.md b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/creating-an-organization-1.md deleted file mode 100644 index 2cc9fd7..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/creating-an-organization-1.md +++ /dev/null @@ -1,136 +0,0 @@ ---- -title: "Creating an Organization" -slug: "creating-an-organization-1" -hidden: false -createdAt: "2021-03-22T18:26:47.395Z" -updatedAt: "2021-07-20T14:24:04.570Z" ---- -## Organization Creation - -Organizations are useful to store and manage project details for your company or organization. To create a new organization, your may simply open your side-menu on the right and click the "Create New Organization" button. - - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/29b4b16-remove_enrique_1.gif", - "remove_enrique_1.gif", - 640, - 358, - "#f7f8f6" - ] - } - ] -} -[/block] -## Organization Basics - -After creating the organization, you can then add the name for the organization as well as the email linked to the organization. This email will only be used for information purposes to inform the organization about updates to our services and will not be sold to any third parties. -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/9a11f17-organization_basics_2.gif", - "organization_basics_2.gif", - 640, - 344, - "#f7f8f6" - ] - } - ] -} -[/block] -## Organization Real-World Address Onboarding - -The admin can then add the real world-address to the organization -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/064bd51-mailing_address_2.gif", - "mailing_address_2.gif", - 640, - 344, - "#f7f9f7" - ] - } - ] -} -[/block] - -[block:callout] -{ - "type": "warning", - "body": "Please note that the real-world address has no correlation to the address that is used to make transactions on the Topl Blockchain.", - "title": "Real-world address vs blockchain address" -} -[/block] -## Choose a subscription option - -The next step will be to choose a subscription option out of the following three options depending on your organization's needs and capability for growth. - -* Startup - - For small-scale initiatives and startups with a high growth potential -* Professional - - Mid-market challengers and clients with existing platforms -* Enterprise - - Market leaders and enterprise clients with existing platforms - -### Billing Information - - Our billing is handled by Stripe, so an admin that chooses one of our paid options should go to Stripe to enter the payment information - -## Polys -- Polys are the cryptocurrency that is used to pay for transactions on the Topl Blockchain network. -- Each transaction on the Topl Blockchain takes a certain number of nanopolys (10^-9 polys) in order to make a transaction. -- Please reach out to Chris Georgen at for special deals on polys. -- Please look at the tutorial for [Adding Polys](doc:adding-polys) for more detailed instructions -[block:callout] -{ - "type": "info", - "body": "You may see language referring to \"Transaction Credits\". Note that this is a synonym for polys and that we are working to deprecate this term." -} -[/block] - -[block:callout] -{ - "type": "info", - "body": "Why do transaction fees exist? \n- Forgers on the Topl Network stake arbits to validate transactions. These transactions are bundled in blocks by forgers and get appended to the Blockchain\n- Once a transaction is part of a block on the Topl Blockchain it is considered confirmed, and the more blocks that are forged on top of the block that contains the transaction, the lower the likelihood of the transaction being modified. \n- In return for their service, forgers receive a block reward for each block as well as the sum of all transaction fees users attached to their transactions \n-The transaction fee is currently configured at 1 poly, but once decentralization commences, the transaction fee will be based on the market value of a transaction.", - "title": "Transaction Fees" -} -[/block] -## User Creation - -Owners for organizations that have a Professional subscription can create new users to be associated with an organization. - -## Editing an Organization - -Once you have created your organization, any admin can return to view its information or update the information at any time. - -To begin, simply open your list of organizations and choose the Organization that you wish to view or edit. -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/17e5c3b-edit_organization_2.gif", - "edit_organization_2.gif", - 640, - 344, - "#f6faf7" - ] - } - ] -} -[/block] -From your organization's settings page, (shown in the snippet above), you'll be able to do any of the following: - -1.) Update your Organization's Basic Information -2.) Update your Organization's Mailing Address -3.) Change Subscription -4.) Load Polys into an Address -5.) Add Team Members (Professional Subscription Required) -6.) Manage Projects \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/getting-started-with-topls-blockchain-as-a-service-baas-platform.md b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/getting-started-with-topls-blockchain-as-a-service-baas-platform.md deleted file mode 100644 index ecb9d2b..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/getting-started-with-topls-blockchain-as-a-service-baas-platform.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Getting Started With Topl's BaaS" -slug: "getting-started-with-topls-blockchain-as-a-service-baas-platform" -excerpt: "Step by step tutorial to get your application running using Topl's state of the art BaaS offerings!" -hidden: false -createdAt: "2021-03-22T15:59:58.983Z" -updatedAt: "2021-04-15T14:00:41.776Z" ---- -Welcome to the Topl <> platform documentation :owlbert-reading: - -In this brief guide, we'll walk you through how to leverage our managed node solution for connecting to the Topl blockchain so that you can access information about specific products at any point in the supply chain and provide others not only reports of <> claims but tangible proof of them. - -This documentation will follow the flow of a developer that will be onboarding an organization and creating projects that will interface with Topl's network through <>. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/rate-limits.md b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/rate-limits.md deleted file mode 100644 index 4e209ad..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/rate-limits.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: "Rate and Quota Limits" -slug: "rate-limits" -excerpt: "You can call the Topl API as much as you need to make, sign, and verify transactions. However, there are limits to the number of calls that you can make." -hidden: false -createdAt: "2021-03-25T20:08:20.466Z" -updatedAt: "2021-03-29T14:48:01.326Z" ---- -All of Topl's blockchain [API endpoints](https://documenter.getpostman.com/view/2571679/Tz5p5HfD) require [authentication](https://topl.readme.io/v1.3.0/docs/security-and-authentication). Topl BaaS API allows performing requests according to your [subscription](https://www.topl.co/solutions) - -#Rate Limiting - -Rate limiting of the API is based on the client basis and apply to any API call. The rate limit is currently set at 25 requests per five second interval. - -The Topl BaaS API quota limit window is one day. See below how each of our three plans offers different rate limiting per day window - -# Rate Limiting Overview - -[block:parameters] -{ - "data": { - "h-0": "Plan Name", - "h-1": "API Quota Limit", - "0-0": "Startup", - "0-1": "20000 Requests per Day per Project per Network", - "1-0": "Professional", - "1-1": "100000 Requests per Day Per Project Per Network", - "2-0": "Enterprise", - "2-1": "1000000 Requests per Day Per Project Per Network" - }, - "cols": 2, - "rows": 3 -} -[/block] -# How to avoid being quota limited -If you're reaching the quota limit, options to improve performance include restructuring the architecture of the integration, and/or upgrading to Professional or Enterprise Tier. - -Clients that exceed the aforementioned rates will cause the API to return a HTTP 429 response. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/registration-and-login.md b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/registration-and-login.md deleted file mode 100644 index f367568..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/registration-and-login.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: "Registration and Login" -slug: "registration-and-login" -hidden: false -createdAt: "2021-03-22T16:32:04.887Z" -updatedAt: "2021-10-12T20:02:53.528Z" ---- -[block:callout] -{ - "type": "info", - "title": "Note:", - "body": "For this tutorial, please visit our BaaS portal website at [BaaS](https://beta.topl.services)." -} -[/block] -## <> Portal Registration - -In order to access <> functionality, a user must first register with Topl. - - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/986178a-registration_2.gif", - "registration_2.gif", - 640, - 344, - "#f7f8f6" - ] - } - ] -} -[/block] -After the completion of the registration flow, an email will be sent to you to verify your information - - - -# Login - -Once you have received your verification email from us, you can go ahead and begin using your account. Go to the [<> Portal](https://beta.topl.services/) and enter your email and password. -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/e2ccaf4-login_2.gif", - "login_2.gif", - 640, - 344, - "#f4f7f5" - ] - } - ] -} -[/block] \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/topl-api-keys.md b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/topl-api-keys.md deleted file mode 100644 index c440634..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/topl-api-keys.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: "Topl API Keys" -slug: "topl-api-keys" -hidden: false -createdAt: "2021-04-01T21:43:27.915Z" -updatedAt: "2022-03-29T14:33:28.295Z" ---- -All requests submitted through BaaS require an API key. This allows our service to authenticate your account to enforce API quotas. - -It is mandatory that you sign up for a free API key which allows for many advantages: -* a **high request rate** and concurrent request limit -* **fast** responses with few retries and timeouts -* useful **metric tracking** for performance tuning and to analyze your customer behavior -* Access to our Genus offerings including the ability to query archived data and advanced logging capabilities (not yet released) -[block:callout] -{ - "type": "warning", - "title": "How to sign up for API Keys", - "body": "You can sign up for API keys by creating a project detailed in the guide below." -} -[/block] -#Authenticating using a Project Id - -BaaS Vertx API requires a valid `Project Id` to be included with your request traffic. This identifier should be appended to the request URL. - - -[block:code] -{ - "codes": [ - { - "code": "https://vertx.topl.services/${network}/YOUR-PROJECT-ID", - "language": "curl" - } - ] -} -[/block] -#Authenticating using a ProjectId and API Key - -As additional protection for your request traffic, an API key is required to access our API. Please ensure that you keep your `API KEY` a secret! - - -[block:code] -{ - "codes": [ - { - "code": "curl --header `x-api-key:YOUR-API-KEY` \\\nhttps://vertx.topl.services/${network}/YOUR-PROJECT-ID", - "language": "curl" - } - ] -} -[/block] \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/two-factor-authentication.md b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/two-factor-authentication.md deleted file mode 100644 index a0a7f5f..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/two-factor-authentication.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: "Two Factor Authentication" -slug: "two-factor-authentication" -hidden: false -createdAt: "2021-08-13T17:42:26.363Z" -updatedAt: "2021-08-13T20:45:38.933Z" ---- -# Two Factor Authentication for BaaS Users - -##*Two-factor authentication is an extra layer of security for your BaaS user account designed to ensure that you're the only person that can access your account, even if someone knows your password.* - - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/295c98d-Screen_Shot_2021-08-13_at_1.55.38_PM.png", - "Screen Shot 2021-08-13 at 1.55.38 PM.png", - 3360, - 2096, - "#fafbfb" - ] - } - ] -} -[/block] -# How it works - -With two-factor authentication, only you can access your account. When you want to sign into your BaaS account, you'll need to provide two pieces of information -- your password and the six-digit verification code that's automatically displayed on your authenticator application. By entering the code, you're verifying that it is you that is logging in. - -Because your password alone is no longer enough to access your account, two-factor authentication dramatically improves the security of your BaaS user account and all of the information that you store with Topl. - -## Verification Codes -A verification code is a temporary code generated by an authenticator application and is requested when you sign into BaaS. - -Note that a verification code is different than your password. - -# Set up two-factor authentication for your BaaS account - You can follow these steps to turn on two-factor authentication for your account -1.) Go to Settings. -2.) Click on "Enable two factor authentication" -3.) Download one of our supported authenticator apps - - Authy - - 1Password - - Microsoft Authenticator - - Google Authenticator - and use it to scan the QR code. -4.) Use the 6 digit code generated by the application to verify your application and turn on two factor authentication. -5.) Save the recovery codes somewhere safe. - -This is a list of 20 codes generated during the configuration of 2FA. These codes are a single time use only. New recovery codes can be generated if needed, however previous recovery codes would not work after this step. - -# What to remember when you use two-factor authentication -Two-factor authentication significantly improves the security of your BaaS account. After you turn it on, signing into your account will require both your password and access to your verified authenticator application. To keep your account as secure as possible and help ensure you never lose access, there are a few simple guidelines you should follow: -- Remember your BaaS password. -- Download the authenticator app on all of your devices and verify with all devices. -- Keep your trusted device physically secure. - -# Manage your account -You can manage your 2FA settings and other account information from your BaaS Account page. - -# Frequently asked questions -Need help? You might find the answer to your question below. - -## What if I forget my password? -You can reset of change your password when you follow these steps. - -### If logged into BaaS -1.) Go to Settings -2.) Click on Change Password -3.) Type new password into the New Password and Confirm New Password fields - -### From the login page -1.) Click on "forgot your password" -2.) Type in the email for your account -3.) Click on the reset my password link that should be sent to your email. - -## What if I can't access my authenticator application? -If you're signing in and don't have your authenticator application handy that can display verification codes, you can then use the recovery codes that were generated when you enabled two-factor authentication. -Simply click on "Enter recovery code" on the two-factor authentication screen, and enter one of your recovery codes. - -## If I can't sign in, how do I regain access to my account? -If you can't sign in, receive verification codes, or access your recovery codes, you can request account recovery to regain access to your account. Account recovery is our process designed to get you back into your account as quickly as possible while denying access to anyone who might be pretending to be you. It might take a few days, or longer, depending on what specific account information you can provide to verify your identity. - -You can begin the account recovery process by emailing support@topl.me with your BaaS username and a description of the issue. We will then reach out to you in the next couple of days to begin the manual recovery process. - -## Do I need to remember any security questions? -No. With two-factor authentication, you don't need to remember any security questions. We verify your identity exclusively using your password and verification codes. - -## Can I turn off two-factor authentication after I've turned it on? -If you already use two-factor authentication, you can turn it off. Just open your settings and click the disable button. Keep in mind, this makes your account less secure and means that you are potentially putting your information at higher risk. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/user-settings.md b/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/user-settings.md deleted file mode 100644 index 6872bdb..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/BaaS Portal Onboarding/user-settings.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "User Settings" -slug: "user-settings" -hidden: true -createdAt: "2021-03-23T17:13:06.763Z" -updatedAt: "2021-04-06T17:34:21.829Z" ---- -## User Settings - -Once users have finished the registration process, they can update their details in the settings. This will ensure that users will have the highest level of support and guidance possible during the initial phases of the Topl launch. - -Users can find the settings by clicking on Settings in the left-hand navigation bar. - - -From here, the user will see a menu which will allow you to update your information so that Topl will be able to provide the highest quality service for our users. - -## Change Password - -From the user settings menu, you can also change your password. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Broadcast Transaction/broadcast-transaction.md b/versioned_docs/version-Tetra/v1.10.2/Broadcast Transaction/broadcast-transaction.md deleted file mode 100644 index d3e5c34..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Broadcast Transaction/broadcast-transaction.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Broadcast Transaction" -slug: "broadcast-transaction" -hidden: false -createdAt: "2021-04-06T16:55:04.744Z" -updatedAt: "2021-04-06T16:55:04.744Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/Broadcast Transaction/broadcast-transaction/broadcasttransaction.md b/versioned_docs/version-Tetra/v1.10.2/Broadcast Transaction/broadcast-transaction/broadcasttransaction.md deleted file mode 100644 index fdbc1e7..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Broadcast Transaction/broadcast-transaction/broadcasttransaction.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Broadcast Transaction" -slug: "broadcasttransaction" -excerpt: "#### Summary\nBroadcast transaction\n\n#### Type\nRemote -- Route must be used in conjunction with an external key manager service.\n\n#### Description\nPlace specified signed transaction into the mempool and broadcast to other nodes\n\n#### Notes\n- Currently only enabled for `AssetCreation` and `AssetTransfer` transactions\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|--------|-----------|---------------------|-------------------------------------------------------------------------------|\n| tx | object | Required | A full formatted transaction JSON object (prototype transaction + signatures) |" -hidden: false -createdAt: "2021-04-06T16:55:04.857Z" -updatedAt: "2021-04-06T16:55:04.857Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/Digital Asset Modeling Language/faq.md b/versioned_docs/version-Tetra/v1.10.2/Digital Asset Modeling Language/faq.md deleted file mode 100644 index 50dfc50..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Digital Asset Modeling Language/faq.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "FAQ" -slug: "faq" -excerpt: "Frequently Asked Questions about Topl's integration with the DAML smart contract language" -hidden: false -createdAt: "2022-11-28T19:30:11.348Z" -updatedAt: "2022-11-30T15:53:47.535Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain.md b/versioned_docs/version-Tetra/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain.md deleted file mode 100644 index 355b364..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Get Latest Block in the Chain" -slug: "get-latest-block-in-the-chain" -hidden: false -createdAt: "2021-04-06T16:57:51.857Z" -updatedAt: "2021-04-06T16:57:51.857Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain/getthelatestblockinthechain.md b/versioned_docs/version-Tetra/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain/getthelatestblockinthechain.md deleted file mode 100644 index 09a5c73..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Get Latest Block In The Chain/get-latest-block-in-the-chain/getthelatestblockinthechain.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Get the latest block in the chain" -slug: "getthelatestblockinthechain" -excerpt: "#### Summary\nRetrieve the best block\n\n#### Description\nFind information about the current state of the chain including height, score, bestBlockId, etc\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|--------------------|-----------|---------------------|-------------|\n| --None specified-- | | | |" -hidden: false -createdAt: "2021-04-06T16:57:51.967Z" -updatedAt: "2021-04-06T16:57:51.967Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/Get Mempool/get-all-transactions-from-mempool.md b/versioned_docs/version-Tetra/v1.10.2/Get Mempool/get-all-transactions-from-mempool.md deleted file mode 100644 index aa1e03d..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Get Mempool/get-all-transactions-from-mempool.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Get all Transactions from Mempool" -slug: "get-all-transactions-from-mempool" -hidden: false -createdAt: "2021-04-06T17:05:11.525Z" -updatedAt: "2021-04-06T17:05:11.525Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/Get Mempool/get-all-transactions-from-mempool/getmempool.md b/versioned_docs/version-Tetra/v1.10.2/Get Mempool/get-all-transactions-from-mempool/getmempool.md deleted file mode 100644 index 74b8bdd..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Get Mempool/get-all-transactions-from-mempool/getmempool.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Get Mempool" -slug: "getmempool" -excerpt: "#### Summary\nGet the first 100 transactions in the mempool (sorted by fee amount)\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|--------------------|-----------|---------------------|-------------|\n| --None specified-- | | | |" -hidden: false -createdAt: "2021-04-06T17:05:11.640Z" -updatedAt: "2021-04-06T17:05:11.640Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/brambl-faqs-and-more-information.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/brambl-faqs-and-more-information.md deleted file mode 100644 index 583529c..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Getting Started/brambl-faqs-and-more-information.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Brambl FAQs and Future Developments" -slug: "brambl-faqs-and-more-information" -hidden: false -createdAt: "2021-03-25T17:54:51.584Z" -updatedAt: "2021-11-10T19:11:27.590Z" ---- -# BramblPy - -Python 3 implementation of Topl's API library. Currently in pre-alpha release, and slated for public availability by late Q4 2021. Please contact us for early access. - -# Key Generation and Transaction Signing - -While Topl provides full access to its blockchain network through our Blockchain-as-a-Service (BaaS) hosted API, there is certain functionality that must be executed off chain as part of your application itself. - -Therefore, in addition to being able to call all routes comprising the BaaS API, Brambl enables you to both generate and manage your key files as well as sign transactions. - -#Smart Contracts -Topl plans on providing functionality for smart contracts off the chain by the end of Q2 2021 and smart contracts on chain by the end of Q3 2021. Please contact us if you are interested in learning more! \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/daml.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/daml.md deleted file mode 100644 index 18a131f..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Getting Started/daml.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: "DAML Smart Contracts" -slug: "daml" -excerpt: "Interacting with the Topl blockchain using DAML smart contracts" -hidden: false -createdAt: "2022-09-20T12:25:10.499Z" -updatedAt: "2022-09-20T14:16:02.510Z" ---- -[block:api-header] -{ - "title": "Smart Contracts on the Topl Blockchain" -} -[/block] -Topl has integrated the [Digital Asset modeling Language (DAML)](https://docs.daml.com/) as its first smart contract platform for creating and using native assets on the blockchain. As a public and permissionless blockchain, we are utilized the open-source implementation of DAML to bring a secure way to create and deploy off-chain smart contracts that still maintain the same level of cryptographic proofs and asset management that you would find in on-chain smart contracts like Solidity and Rust. - -[block:api-header] -{ - "title": "First Steps" -} -[/block] -### Setting up DAML - -  **[Install](https://docs.daml.com/getting-started/installation.html)** the DAML SDK and VSCode editor integration. - -After successfully installing the DAML SDK, the Participant Node built for facilitating transactions needs to be installed to interact with the Topl Blockchain nodes. - -### Setting up a Participant Node - -  The **[Daml Bifrost Module](https://github.com/Topl/daml-bifrost-module)** installs a Bifrost Participant Node and example deployable smart contract. - -After installation, the participant node and example smart contract need to be compiled in order to run an instance of the off-chain contract. - -### Deploying a smart contract - -  **[Deploy](https://github.com/Topl/daml-bifrost-module#2-compile)** by compiling and starting the participant node. - -Compiling and starting the DAML sandbox will deploy the smart contract to the participant node and allow users to interact with the smart contract. Using the DAML Navigator tool provides an easy-to-use interface for interacting with deployed contracts. diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/introduction-2.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/introduction-2.md deleted file mode 100644 index 6c43b40..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Getting Started/introduction-2.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: "Introduction" -slug: "introduction-2" -hidden: false -createdAt: "2021-03-30T14:36:47.065Z" -updatedAt: "2022-09-20T14:18:07.496Z" ---- -# What you need to bring -To get the most out of the Topl Developer Portal, you should have programming experience and a basic understanding of blockchain concepts of Topl such as UTxO, transactions, addresses, key derivation, and networking. - -If you are unfamiliar with these terms, start with technical concepts, and you can complete the getting started course afterward. - -# Topl is different -If you have experience with other blockchain platforms and want to start building on Topl, it is vital to know its differences: - -* It makes sense to get your head around the concept of an UTxO -* Assets on Topl are not built with smart contracts. Instead, assets are native and live on the ledger. The protocol treats them as first-class citizens, similar to our cryptocurrency <>s. It is quite different from our peers that don’t have native assets and need to use a smart contract to send assets. - -#What you can do on Topl today -You can mint, send, and receive native assets, in addition to polys. - -#Why build on Topl? -* Topl offers a better infrastructure to build products because it is faster, more secure, and cost-effective. -* Topl offers accurate cost predictability when it comes to transactions. There are no auctions for transaction fees. -* Topl has an energetic community. If you stick to specific standards, we are keen to try out and engage with new products. Participating now makes you a first mover. -* Topl is a proof-of-stake blockchain. By design, it consumes much less energy and computational power. -* Topl is built with the rigor of high-assurance formal development methods. The consensus mechanism Ouroboros (currently under development) was delivered with several peer-reviewed papers presented in top-tier conferences and publications in cybersecurity and cryptography. If you build on Topl, you build on this foundation. - -#What you can build on Topl today -* You can integrate Topl into existing websites and services. -* You can issue native assets and mint unique assets to be used as NFTs. -* You can add metadata to transactions to give transactions a story, a background or even an identity. -* You can prove the existence of a file, text or any other data at a specific point in time with asset metadata. You can even use asset metadata to validate and verify external physical products and genuine articles. - -# Where to Start -* Begin by deploying your first [DAML](doc:daml) smart contract and interacting with native assets directly on the chain! \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries.md deleted file mode 100644 index 53e03f9..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: "SDKs and API Libraries" -slug: "sdks-and-api-libraries" -hidden: false -createdAt: "2021-08-31T18:33:22.917Z" -updatedAt: "2022-09-20T14:23:10.107Z" ---- -[block:callout] -{ - "type": "danger", - "body": "Warning: The Topl SDK libraries for the Dion mainnet and testnet, Toplnet and Valhalla respectively, are currently deprecated in order to focus new development on the new version of the Topl blockchain, Tetra. The Dion SDK libraries are usable, but it is highly recommended to focus new development through the [DAML](doc:daml) smart contract integration.", - "title": "# Deprecated" -} -[/block] -#Overview - -Topl has a collection of tools which makes it easier to integrate with the Topl blockchain. Depending on the use-cases you have, you may use any of the components below. - -#Getting Started -To get started, checkout the [📘 Topl User Guide](doc:introduction-2) - -#Components - -## SDKs/ Open Source Libraries - -[block:parameters] -{ - "data": { - "h-0": "name/link", - "h-1": "description", - "0-0": "[BramblJs](https://www.npmjs.com/package/brambljs)", - "0-1": "Contains everything that you need for addresses and creating transactions in Javascript.", - "1-0": "[BramblSc](https://github.com/Topl/Bifrost/tree/main/brambl)", - "1-1": "Contains everything that you need for addresses and creating transactions in Scala.", - "2-0": "[BramblPy](https://github.com/Topl/BramblPy)", - "2-1": "Contains everything that you need for addresses and creating transactions in Python. Currently in pre-release (is not recommended for production environments)", - "3-0": "[BramblDart](https://github.com/Topl/BramblDart)", - "3-1": "Contains everything that you need to manage addresses and create transactions in Dart. Currently in pre-release (it is not recommended for production environments)" - }, - "cols": 2, - "rows": 4 -} -[/block] -# Recipes - -Please see [Recipes](https://topl.readme.io/recipes) for examples on how to use the above resources. - -# API Reference - -If you are interested in seeing the low level JSON-RPC API to directly interact with the Topl Blockchain, please see the documentation located [here](https://topl.readme.io/reference). - -# Contributing - -See [Contributors](doc:contributors) \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/docker.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/docker.md deleted file mode 100644 index 02679fe..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/docker.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: "Docker" -slug: "docker" -hidden: false -createdAt: "2021-10-08T19:20:42.368Z" -updatedAt: "2021-10-08T20:04:06.351Z" ---- -Docker builds of `bifrost` are available on [DockerHub](https://hub.docker.com/r/toplprotocol/bifrost/tags) - -## Downloading the docker image - -To get the latest release of `bifrost`, run: - ``` docker pull toplprotocol/bifrost:{{versionId}} ``` - -## Running the Docker container for `bifrost` -To get a list of the basic CLI arguments, use -``` -docker run --rm toplprotocol/bifrost:{{versionId}} java -jar bifrost-1.8.0.jar --help -``` -See [Running Bifrost](doc:running-bifrost) for full documentation of the CLI arguments. - -Running a `bifrost` node requires a config file (you can either use one of the default configurations or provide your own). - -1. Create your network config or use one of the default network configs provided - - If you choose to create your own network config, remember to add your network config onto the Docker host - ``` -mkdir $HOME/state-docker -``` - - After creating this directory, create your config file within it (optional) - 2.) Run the `bifrost` server : -``` -docker run \ --p 9084:9084 -p 9085:9085 \ ---volume $HOME/state-docker:/data \ ---rm \ -toplprotocol/bifrost \ - java -jar bifrost-1.8.0.jar \ --- config /data/my-config.conf \ --- seed "test" --- apiKeyHash "e4d2a343f3dcf9330ad9035b3e8d168e6728904262f2c434a4f8f934ec7b676" -``` - -Explanation of the arguments: -* `-p 9084:9084 -p 9085:9085` - exposes the API server port from the container to the docker host as well as the JSON-RPC server port. - -* `--volume $HOME/state-docker:/data` - mounts the - `~/state-docker` directory on the Docker host to `/data` inside - the container. - -* ```--config /data/my-config.conf``` - use the config within the data volume for your custom network configuration - -3.) Wait for the message `Listening on 0.0.0.0:9085` to be shown (it may take some small amount of time for Bifrost to create the necessary genesis blocks) - -## Inspecting the contents of the Docker image -If you need to run a shell inside the Docker image, use the bash shell as the entrypoint: -``` -docker run --rm -it --entrypoint bash toplprotocol/bifrost:{{latest-version-id}} -``` \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/installing-bifrost.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/installing-bifrost.md deleted file mode 100644 index eeb5a15..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/installing-bifrost.md +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: "Installing Bifrost" -slug: "installing-bifrost" -hidden: false -createdAt: "2021-10-04T20:22:18.615Z" -updatedAt: "2021-10-05T14:17:33.658Z" ---- -### Overview - -This guide will show you how to compile and install `bifrost` into your operating system of choice, directly from the source code. It will enable you to interact with the **Topl** blockchain, including but not limited to sending/receiving **transactions**, minting/burning customizable **assets**, posting verifiable **metadata** into the blockchain, and so much more! - - -[block:callout] -{ - "type": "info", - "title": "Note", - "body": "If you want to avoid compiling the binaries yourself, you can download the latest version of Bifrost from the links below:\n- [Bifrost](https://github.com/Topl/Bifrost/releases/download/v1.8.0/bifrost-1.8.0.jar)\n\nThere are newer source code available: \n* [latest release](https://github.com/Topl/Bifrost/releases/tag/v1.8.4)\n\nBifrost can be built and run on **Windows** and **MacOS**, but we recommend that node operators use **Linux** to take advantage of associated performance advantages." -} -[/block] -### Prerequisites - -To set up the components, you will need: -* **Windows**, **MacOS**, or **Linux** for your operating system -* A **CPU** with at least **2** cores (recommended **4**) -* **4GB** of RAM (recommended RAM: **8GB**) and at least **20GB** of free disk space (Recommended **80GB** of free disk space - -### Choose your Platform - -* [Linux | MacOS](#linux) -* [Windows](#windows) - -## Linux & MacOS - -In this section, we will walk you through the process of downloading, compiling, and installing `bifrost` into your **Linux-based** or **Mac-OS** operating system. - -#### Installing Operating System Dependencies - -To download the source code and build it, you need the following packages and tools on your Linux system: - - * the version control system `git` -* curl -* unzip -* zip -* GraalVM compatible Java SDK (GraalVM 21+) -* the SBT Scala Compiler (version `1.5.5` or above) -* Java 11 - -In Redhat, Fedora, and Centos: -```bash -sudo yum update -y -sudo yum install git curl unzip zip -y -``` - -For Debian/Ubuntu, use the following instead: -```bash -sudo apt-get update -y -sudo apt-get install git curl unzip zip -y -``` - -For MacOS, all necessary tools should be installed with the following packages and tools for your MacOS system: -* [Xcode](https://developer.apple.com/xcode) - The Apple Development IDE and SDK/Tools -* [Xcode Command Line Tools](https://developer.apple.com/xcode/features/), you can install it by typing `xcode-select --install` in the terminal. -* [Homebrew](https://brew.sh) - The Missing Package Manager for MacOS (or Linux) - -#### Installing GraalVM and SBT - -The fastest way to install **SBT** and **GraalVM** is to use [SDKMAN](https://sdkman.io/) - -Use the following command to install `SDKMAN` -```bash -curl -s "https://get.sdkman.io" | bash -source "$HOME/.sdkman/bin/sdkman-init.sh" -``` -Please follow the instructions and provide the necessary input to the installer if required. Once complete, you should have `SDKMAN` installed to your system. - - - -[block:callout] -{ - "type": "info", - "title": "Note", - "body": "`SDKMAN` will try to detect your shell and add itself to the environment variables. Please restart your shell/terminal after installing `SDKMAN`" -} -[/block] - You can check if `SDKMAN` has been installed correctly by typing `sdk version` into the terminal. You should see something similar to the following: -``` -sdkman 5.0.0+51 -``` - -#### Install GraalVM' -- Install Graalvm using SDKMAN -```sdk install java 21.1.0.r11-gr1``` - -#### Install SBT -- `sbt` is required to build Bifrost from source and may be installed by running the following commands -```sdk install sbt``` - -Note that any version of sbt < `1.5.5` should be able to install and switch to the required version. - -Finally, we check if we have the correct `sbt` and `java` versions installed. - -Check `sbt` version: -```bash -sbt sbtVersion -``` -You should see something like this -``` -$ sbt 'inspect sbtVersion' -[info] Set current project to my_user (in build file:/Users/my_user/) -[info] Setting: java.lang.String = 0.11.1 -[info] Description: -[info] Provides the version of sbt. This setting should be not be modified. -[info] Provided by: -[info] */*:sbtVersion -[info] Defined at: -[info] (sbt.Defaults) Defaults.scala:68 -[info] Delegates: -[info] *:sbtVersion -[info] {.}/*:sbtVersion -[info] */*:sbtVersion -[info] Related: -[info] */*:sbtVersion -``` -Check `java` version: -```bash -java --version -``` - -You should see something like this -``` -java version "1.11.0_55" -Java(TM) SE Runtime Environment (build 1.7.0_55-b13) -Java HotSpot(TM) 64-Bit Server VM (build 24.55-b03, mixed mode) -``` - - -[block:callout] -{ - "type": "warning", - "title": "Important", - "body": "Please confirm that the versions you have installed match the recommended versions above. If not, check if you have missed any of the previous steps." -} -[/block] -#### Downloading and Compiling - -First, download Bifrost from Github -```bash -git clone git@github.com:Topl/Bifrost.git -cd Bifrost -git fetch --all --recurse-submodules --tags -``` - -Switch the repository to the latest tagged commit: -```bash -git checkout tags/1.8.0 -``` - -[block:callout] -{ - "type": "warning", - "title": "Important", - "body": "You can check the latest available version/tag by visiting the `bifrost` [Github-Release](https://github.com/Topl/Bifrost/releases) page. At the time of writing this, the current version is `1.8.0`." -} -[/block] -#### Compiling the node -We can now build the `Scala-based` `bifrost-node` to produce executables. -```bash -sbt compile -``` -Congratulations, you have successfully installed Topl `bifrost` into your Linux or MacOS system! 🎉🎉🎉 - -## Windows - -[block:callout] -{ - "type": "warning", - "title": "Important", - "body": "Currently, the **Windows** installation guide is still in progress. In the meantime, we recommend using [WSL (Windows Subsystem for Linux)](https://docs.microsoft.com/en-us/windows/wsl/) to get a Linux environment on top of Windows. Once installed, you can use the [Linux](#linux) guide to install and run `bifrost` within **WSL**." -} -[/block] \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/overview.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/overview.md deleted file mode 100644 index afdf31e..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/overview.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: "Overview" -slug: "overview" -hidden: false -createdAt: "2021-10-04T19:10:50.318Z" -updatedAt: "2021-10-12T19:10:07.138Z" ---- -## Developer Ecosystem ## -Here is an outline of the developer ecosystem and relevant resources to help you learn how to build on Topl. - -### Programming Languages ### - -#### Scala #### -- [Scala](https://www.scala-lang.org/) -- [Scala Guides (created by Baeldung)](https://github.com/Baeldung/scala-tutorials) -- [Scala Exercises] (https://github.com/scala-exercises/scala-exercises) - -#### Dart #### -- [Dart](https://dart.dev/) -- [Dart official documentation](https://dart.dev/guides) - -### Developer Resources ### - -[Using the Valhalla Test Network](doc:using-the-valhalla-test-network) -[BramblSC](doc:bramblsc) -[BramblJS](doc:setting-up-brambljs) -[BramblDart](doc:brambldart) \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/running-bifrost.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/running-bifrost.md deleted file mode 100644 index 9c41325..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Getting Started/sdks-and-api-libraries/running-bifrost.md +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: "Running Bifrost" -slug: "running-bifrost" -excerpt: "How to run a Bifrost node" -hidden: false -createdAt: "2021-10-04T20:51:56.618Z" -updatedAt: "2021-10-06T20:47:40.015Z" ---- -### Overview - -This guide will show you how to run a `bifrost node` on your system and some simple examples of how you can interact with the **Topl** blockchain. - - -[block:callout] -{ - "type": "info", - "title": "Note", - "body": "This guide assumes that you have installed `bifrost` onto your system. If not, you can refer to [Installing Bifrost](https://docs.topl.co/v1.4.0/docs/installing-bifrost) guide for instructions on how to do that." -} -[/block] -### Network Configuration - -The `bifrost` application has 3 network configurations to run as of writing this article. -- **Mainnet**: The settings that are used on the main Topl network. -- **Valhalla**: The settings that are used on the main public Topl testnet. -- **Private**: The settings that are used by Bifrost developers while working on improving Bifrost functionality - -You might be asking what the difference is between `mainnet` and `valhalla` and why there are two networks? To put it simply, **Topl** is an open-source blockchain and anyone is free to spin up a network based on **Topl's** software components. The `mainnet` network was the first one and currently contains all of the real value of **Topl**. - -Testing the network's features and capabilities can be expensive and will consume real value. So we have spun up a sandbox or testnet version of the network. Instead of using real `poly` tokens for transactions, you use test polys. Alternatively, you can spin up your own custom **Topl** network, but that is outside the scope of this guide. - -To run `bifrost` you enter something like this into the terminal (given that you are in the directory containing the bifrost jar file): -```bash -java -jar bifrost-1.x.x.jar \ - --config path/to/config.json \ - --seed "test" \ - --forge \ - --disableAuth -``` - -To get the complete list of available options, use `java -jar bifrost-1.x.x.jar --help - -```Bifrost (v1.8.4) command line arguements - -c --config file path to a user defined config file - -d --debug Turn on debugging information - -n --network specify preset network by name - -s --seed string to deterministically generate keys on private and local networks - -f --forge enable forging as soon as the node starts - --disableAuth Allow the node to receive API requests without an API key - --apiKeyHash hash of API key - --help prints this command list -``` - -## Bifrost node parameters - -[block:callout] -{ - "type": "info", - "title": "Note:", - "body": "In this section, we will use the path `/home/user/topl` to store all the `bifrost` related configuration files as an example, and please replace it with the directory you have chosen to store the files." -} -[/block] -We will focus on the 7 key command-line parameters for running a node: -** `--config` **: This requires the path of the `.conf` file. - -> For example, if you have created a `.conf` file to the path `/home/user/topl/custom.conf`, then the argument would look like this -``` ---config /home/user/topl/custom.conf -``` - -**`--debug`**: This command line parameter turns on the debugging information for the Bifrost node. - -**`--network`**: This expects one of the predefined config networks as an argument. -> Here is an example `--network` argument: -``` ---network valhalla -``` -This will begin the Bifrost node running with the Valhalla parameters. - -**`--seed` **: This expects a string to deterministically generate the keys for the genesis addresses on private and local networks. This is used primarily so that the user will have access to the polys and arbits that are attributed upon the genesis of the network. - -**`--forge`** : This does not expect an argument and will start the node forging immediately after it starts. - -**`--disableAuth`** : This command line argument disables the api_key authentication allowing you to connect with your node over HTTP without configuring an API key - -**`--apiKeyHash`** : With this command you can provide a Base58 encoded hash of the value that you want to use for the apiKey. This allows for you to construct a more secure node that will require the apiKey for successful HTTP connections. - -In addition, let's look at some of the more important parameters that you can modify using a custom configuration file: - -**`bifrost.application.dataDir`**: This expects the path to the directory where we will store the actual blockchain data like **blocks**, **transactions**, and other datatypes that can be stored on the **Topl** blockchain. - -> For example, if we decided that all of the files required by the `bifrost` node will be in the path `/home/user/topl/`. Then we could create a database directory like this `mkdir -p /home/user/topl/db`. -> The directory structure would then be something like this: -``` -/home/user/topl/ -├── db -├── config.conf -1 directory, 2 files -``` - -**`bifrost.application.rpcApi.bindAddress`**: In this case, this expects the `local address` of the machine to which to bind to. -> Here is an example `bifrost.application.rpcApi.bindAddress` argument: -``` -bindAddress = "0.0.0.0:9085" -``` -> In this case, we expect http clients in your network to connect via `0.0.0.0:9085`. In conjunction with providing the `local address` this command also sets the port that your `bifrost` node will use to listen to any incoming connections. - -Here is a realistic example for running `bifrost` node: -```bash -java -jar bifrost-1.3.3.jar \ - --config /home/user/topl/customtestnet.conf \ - --debug \ - -- seed "test" \ - -- forge \ - -- disableAuth -``` - -If you have everything set correctly, you should see something similar to the following -``` -20:44:17.131| INFO co.topl.settings.AppSettings$ - No network specified, running as private testnet. -20:44:17.748| INFO co.topl.network.NetworkController - Declared address: None -20:44:17.805| INFO co.topl.network.NetworkController - Registered Actor[akka://bifrost/user/peerSynchronizer#341653336] as the handler for List((2,Peers message), (1,GetPeers message)) -20:44:17.975| INFO co.topl.db.LDBFactory$ - Loaded org.fusesource.leveldbjni.JniDBFactory with leveldbjni version 1.8 -20:44:18.154| INFO co.topl.nodeView.CleanupWorker - Cleanup worker started -20:44:18.161| INFO co.topl.network.NetworkController - Registered Actor[akka://bifrost/user/nodeViewSynchronizer#-403724455] as the handler for List((65,Sync), (55,Inv), (22,RequestModifier), (33,Modifier)) -20:44:18.371| INFO co.topl.nodeView.history.History - Block 28XxAtDYfdCkEr8UyzT9f2fDWdn3Uqdu29V58qCiT8y5g appended to parent tksQdfioySWXrLbm7prosYBKze9Augu71ZXde9KuJC4Y at height 1 with score Some(100000000). -20:44:18.392| INFO co.topl.nodeView.state.State$ - Initializing state to watch for all public keys -20:44:18.393| INFO c.t.n.state.ProgramBoxRegistry$ - Initializing state with Program Box Registry -20:44:18.404| INFO c.t.nodeView.state.TokenBoxRegistry$ - Initializing state with Token Box Registry -20:44:18.449| INFO co.topl.nodeView.NodeViewHolder - NodeViewHolder publishing ready signal -20:44:18.450| INFO co.topl.consensus.Forger - Forger transitioning to the operational state -20:44:18.450| INFO co.topl.nodeView.MempoolAuditor - MemPool Auditor transitioning to the operational state -20:44:18.450| INFO co.topl.network.NodeViewSynchronizer - NodeViewSynchronizer transitioning to the operational state -20:44:18.450| INFO co.topl.network.PeerSynchronizer - PeerSynchronizer transitioning to the operational state -20:44:18.450| INFO co.topl.network.PeerManager - PeerManager transitioning to the operational state -20:44:18.453| INFO co.topl.consensus.Forger - Received a START signal, forging will commence shortly. -java.vm.version = 11.0.11+8-jvmci-21.1-b05 -jvmci.Compiler = null -20:44:18.593| INFO co.topl.network.NetworkController - No declared address was provided. Skipping address validation. -20:44:18.600| INFO co.topl.network.NetworkController - Network Controller transitioning to the operational state -20:44:18.619| INFO co.topl.BifrostApp - P2P protocol bound to /0.0.0.0:9084 -20:44:19.273| INFO co.topl.BifrostApp - HTTP server bound to /0.0.0.0:9085 -``` \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/security-and-authentication.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/security-and-authentication.md deleted file mode 100644 index 0561440..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Getting Started/security-and-authentication.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: "Security and Authentication" -slug: "security-and-authentication" -hidden: false -createdAt: "2021-03-24T16:43:22.629Z" -updatedAt: "2021-11-04T17:06:52.342Z" ---- -The Topl endpoints use API keys to allow access. You can obtain your API key through creating a project in the <> developer portal (please view the guide for <> Developer Portal Onboarding for the details on how to setup your first project). - - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/a314980-Screen_Shot_2021-03-24_at_9.46.56_AM.png", - "Screen Shot 2021-03-24 at 9.46.56 AM.png", - 2560, - 1378, - "#fafafa" - ] - } - ] -} -[/block] -To access the APIs, include the API key in the HTTP Header of your HTTP request: - -`x-api-key:yourapisecret` - -Alternatively, you can add the API key into the Requests module object of a BramblJS instance (using our BramblJS library). - -## Examples - - -[block:callout] -{ - "type": "info", - "title": "Please note!!", - "body": "You must replace `yourapisecret` or YOUR_API_KEY in the examples with your actual API key provided by Topl\n\nIn addition, you must replace {{myProjectId}} with the actual projectId provided by Topl" -} -[/block] - -[block:callout] -{ - "type": "info", - "title": "Network Prefix", - "body": "There are two BaaS network prefixes. If you want to use the main net, set networkPrefix = toplnet otherwise set networkPrefix = valhalla for using the test net" -} -[/block] - -[block:code] -{ - "codes": [ - { - "code": "const BramblJS = require('brambljs');\nconst brambl = new BramblJS({\n networkPrefix: \"valhalla\", // applies to Requests and KeyManager\n password: \"topl_the_world!\",\n Requests: {\n url: \"https://valhalla.torus.topl.network/{{myProjectId}}\", // make sure that the project ID from the BaaS portal is included. \n apiKey: \"YOUR_API_KEY\" // set api key for network\n }\n });", - "language": "javascript" - } - ] -} -[/block] -Additionally, you must provide a project ID for each request made. Your Project ID can also be found in the BaaS Portal. -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/668d997-Screen_Shot_2021-03-25_at_3.27.33_PM.png", - "Screen Shot 2021-03-25 at 3.27.33 PM.png", - 3360, - 1876, - "#fafafa" - ] - } - ] -} -[/block] - -[block:callout] -{ - "type": "danger", - "title": "Important", - "body": "Note that our BaaS offering has a rate limit defined at 5 requests per second. Please contact us if that is not sufficient for your use case!" -} -[/block] \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/simple-transfer.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/simple-transfer.md deleted file mode 100644 index d8b2416..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Getting Started/simple-transfer.md +++ /dev/null @@ -1,204 +0,0 @@ ---- -title: "Assets" -slug: "simple-transfer" -hidden: false -createdAt: "2021-03-30T15:10:50.375Z" -updatedAt: "2022-10-28T14:20:04.707Z" ---- -Assets are a critical part of our blockchain technology. Assets are homogeneous tokens that can be transferred to other users and spent as currency (e.g. ERC-20 on Ethereum). In addition, users can store meta-data as part of the process of creating an asset, allowing users to store arbitrary information on the Topl Blockchain. - -Usually, a central ledger keeps track of a user's token balances. Topl implements Assets in a way that avoids having a centralized account ledger. - -We're going to take you through these steps to get comfortable with Assets: -* Mint an Asset and store it in your address -* Mint a collection of assets and store the collection of assets in your address -* Setup a second account using the previous steps -* Transfer an asset from one account to another -* Write a script to see what assets are stored in each account's collection. - -The concepts involved in creating an Asset can be hard to grasp at first. For an in-depth explanation of the functionality and code, continue reading the next section. - -Or if you'd like to go immediately into creating an asset and using it, you can skip to the **Interacting with Assets** section of this tutorial. - -Assets have some of the following properties: -* Ownership is decentralized and does not rely on a central ledger -* Bugs and exploits present less risk for users and less opportunity for attackers -* Assets can not be double spent and it is very hard for them to be lost, stolen, or destroyed - -# Intuiting Ownership with Asset Codes - -An important concept in Topl are <>s. An asset code is composed of the version, issuer address, and user provided name. Instead of representing asset ownership in a centralized ledger or db, each account owns a series of asset codes which represents the number of assets that they own and the type of each asset. This way, when users want to transact with each other, they can do so peer-to-peer without having to interact with any managed Topl resources. To transfer assets to one another, they call a `transfer` function on their own Brambl Request instance rather than having to go through Topl as an intermediary. - -This simplifies access control because instead of having Topl check the sender of the function call, most function calls happen on Brambl Request instances referencing asset codes stored in the user's address, and the user controls who is able to call the functions for the asset codes in their addresses. - -This approach also helps protect against potential bugs. If all of the logic was handled by Topl, an exploit is likely to affect all users. Now, if there is a bug in the Brambl logic, an attacker would have to exploit the bug for each asset code holder's account individually, which is much more complicated and time consuming than it is in a centralized ledger system. - -# Ensuring Security in Public: Capability Security -Another important feature of Topl's blockchain is its utilization of Capability Security. This feature ensures that, while API used to transfer Assets is public, no one except the intended user and those they approve of can transfer assets from their account. - -Topl's security model ensures that objects stored in an address can only be accessed by the user that owns them. If the user wants to give another user access to their assets, they would have to give that user the keyfile for that address. - -# Create and send an Asset **MINTING** transaction - -Now that you have read about how Assets work, we can mint an asset and add it to your address and also transact using the asset that you have minted. - -[block:callout] -{ - "type": "info", - "body": "A helpful resource is the recipe at the bottom of the page which you can use to follow along interactively.\n\nIn addition, you must have an address that has Polys in order to form a valid transaction. Please look at the Adding Polys guide under the BaaS portal onboarding for more information about how to obtain Polys for your addresses.", - "title": "Note:" -} -[/block] - -[block:code] -{ - "codes": [ - { - "code": "const BramblJS = require('brambljs');\n\nconst myKeyPath = \"myKeyPath\"\n\nconst keyManager = BramblJS.KeyManager({\n networkPrefix: \"valhalla\", // network prefix is required\n password: \"my_key_password\",\n keyPath: myKeyPath\n});\n\nconst brambl = new BramblJS({\n networkPrefix: \"valhalla\",\n KeyManager: keyManager, //applies to Requests and KeyManager\n Requests: {\n url: \"https://vertx.topl.services/valhalla/{{myProjectId}}\", // set url\n apiKey: \"{{myApiKey}}\"\n }\n})\n\nconst assetCode = brambl.createAssetCode(\"name1234\")\n\nconst rawAssetParams = {\n \"propositionType\": \"PublicKeyCurve25519\",\n \"recipients\": [\n // basic: [address, quantity]\n [brambl.keyManager.address, 4]\n ],\n \"assetCode\": assetCode,\n \"sender\": [brambl.keyManager.address],\n \"changeAddress\": brambl.keyManager.address,\n \"consolidationAddress\": brambl.keyManager.address,\n \"minting\": true,\n \"fee\": 100\n};\n\nconst pollParams = {\n \"timeout\": 90,\n \"interval\": 3,\n \"maxFailedQueries\": 10\n}\n\nbrambl.transaction('createRawAssetTransfer', rawAssetParams)\n.then(res => { console.log('Unconfirmed transaction'); console.log(res); return res })\n.then(res => brambl.pollTx(res.result.txHash, pollParams))\n.then(res => { console.log('\\nConfirmed transaction'); console.log(res) })\n.catch(console.log)\n", - "language": "javascript" - }, - { - "code": "object CreateAnDSendRawAssetMintingTransfer {\n\n import exampleState._\n import provider._\n\n val params: RawAssetTransfer.Params = ToplRpc.Transaction.RawAssetTransfer.Params(\n propositionType = PublicKeyPropositionCurve25519.typeString,\n sender = NonEmptyChain(externalAddress.head),\n recipients = NonEmptyChain((externalAddress.head, AssetValue(4, assetCode))),\n fee = 0,\n changeAddress = externalAddress.head,\n consolidationAddress = externalAddress.head,\n minting = true,\n data = None\n )\n\n val response: RpcErrorOr[BroadcastTx.Response] = for {\n rawTx <- ToplRpc.Transaction.RawAssetTransfer.rpc(params).map(_.rawTx)\n signTx <- EitherT.right {\n clearKeyRing()\n genKeys()\n val msg2Sign = rawTx.messageToSign\n val signFunc = (addr: Address) => keyRing.generateAttestation(addr)(msg2Sign)\n val signatures = keyRing.addresses.map(signFunc).reduce(_ ++ _)\n Future(rawTx.copy(attestation = signatures))\n }\n broadcastTx <- ToplRpc.Transaction.BroadcastTx.rpc(ToplRpc.Transaction.BroadcastTx.Params(signTx))\n } yield broadcastTx\n\n def main(args: Array[String]): Unit =\n response.value.foreach {\n case Left(value) => println(s\"Got some error: $value\")\n case Right(value) => println(s\"Got a success response: $value\")\n }\n}", - "language": "scala" - } - ] -} -[/block] -This script stores the assetCode for the asset in your address so that you can use them in future transactions. In this example, the script mints 4 assets and stores them in your address. You can use the unique assetCode to mint more assets of the same type. - -On line 31 in the JS code and line 13 in the SC code, we set minting to true to tell the Topl network that we are creating a new asset. If the value was set to false, then the network would attempt to transfer an existing asset. - -Addresses are like pointers. They are a link to a collection of boxes and can be used to retrieve balances, or transfer tokens to/from the boxes they reference. Addresses do not move, or modify the boxes directly. -[block:callout] -{ - "type": "info", - "title": "Note:", - "body": "During our beta offering, asset minting and transfers have a min-fee of 100 nano-polys on Valhalla (1 poly = 10^9 nano-polys). Please see [this page](https://topl.readme.io/v1.3.0/docs/adding-polys) for loading your address with polys" -} -[/block] -You are now ready to run transactions that use Assets! - -# Transfer Assets to another User - -Now we are going to run a transaction that sends 10 Assets to another address. We will do this by using the transfer function and turning minting off. That will deposit tokens into the second address. -[block:callout] -{ - "type": "info", - "body": "In a previous section, we have walked through how to create a [Topl Blockchain Address](https://topl.readme.io/v1.3.0/docs/how-topl-addresses-are-generated). \n\nPlease create a second address now." -} -[/block] -Now the second account is ready to start building its fortune! We can check that that our account is currently empty by calling the `lookupBalancesByAddresses` method in Brambl function. -[block:code] -{ - "codes": [ - { - "code": "brambl.requests.lookupBalancesByAddresses({addresses: [address]})", - "language": "javascript" - }, - { - "code": "object LookupBalance {\n\n import exampleState._\n import provider._\n\n val params: Balances.Params = ToplRpc.NodeView.Balances.Params(externalAddress.toList)\n val response: RpcErrorOr[Balances.Response] = ToplRpc.NodeView.Balances.rpc(params)\n\n def main(args: Array[String]): Unit =\n response.value.foreach {\n case Left(value) => println(s\"Got some error: $value\")\n case Right(value) => println(s\"Got a success response: $value\")\n }\n\n}", - "language": "scala" - } - ] -} -[/block] -Asset creation (for the asset that we minted in the last step) is restricted to the address which originally minted the asset, so the asset code ensures that nobody is able to create a duplicate of that asset out of thin air. - -As part of the initial minting process for an Asset, the first address created an <>. By using this code, the address that owns it can mint new assets. Right now, the first address owns it, so it has the sole power to mint new Assets. - -As we have explained before, the resource model plus capability security handles this access control for us as a built-in property of the block-chain. - -In the next transaction, address 1 will mint 10 new assets and deposit them into the second account. - -[block:callout] -{ - "type": "warning", - "title": "Note:", - "body": "The variables will refer to your own addresses so you may have to replace the stand-in variables in the example with the values of your address details." -} -[/block] - -[block:callout] -{ - "type": "warning", - "title": "Note:", - "body": "The Change Address (for the left-over polys) and Consolidation Address (for left-over assets) are required as of Bifrost Version 1.4.3." -} -[/block] - -[block:code] -{ - "codes": [ - { - "code": "const myKeyPath1 = \"valhalla_.json\";\nconst myKeyPath2 = \"valhalla_key_file.json\";\n\nconst keyManager1 = BramblJS.KeyManager({\n password: \"{{myFirstPassword}}\",\n keyPath: myKeyPath1\n});\n\nconst keyManager2 = BramblJS.KeyManager({\n password: \"{{myPassword}}\",\n keyPath: myKeyPath2\n})\n\nconst brambl1 = new BramblJS({\n networkPrefix: \"valhalla\",\n KeyManager: keyManager1,\n Requests: {\n url: \"https://vertx.topl.services/valhalla/{{yourProjectIdHere}}\",\n apiKey: \"{{yourApiKeyHere}}\"\n }\n})\n\n const brambl2 = new BramblJS({\n networkPrefix: \"valhalla\",\n KeyManager: keyManager2,\n Requests: {\n url: \"https://vertx.topl.services/valhalla/{{yourProjectIdHere}}\", // set url\n apiKey: \"{{yourApiKeyHere}}\"\n }\n })\n \n// Create an new AssetCode to be used in Create Raw Asset Transactions \n \nconst assetCode1 = brambl1.createAssetCode(\"asset1\");\n \nconst address1 = brambl1.keyManager.address;\nconst address2 = brambl2.keyManager.address;\n\n const rawAssetParams1 = {\n \"propositionType\": \"PublicKeyCurve25519\",\n \"recipients\": [\n // basic: [address, quantity]\n // advance: [address, quantity, securityRoot, metadata]\n [address2, 10]\n ],\n \"assetCode\": assetCode1,\n \"sender\": [address1],\n \"changeAddress\": address1,\n \"consolidationAddress\" : address1\n \"minting\": true,\n \"fee\": 1000000001\n };\n\nconst pollParams = {\n \"timeout\": 90,\n \"interval\": 3,\n \"maxFailedQueries\": 10\n };\n\nbrambl1.transaction('createRawAssetTransfer', rawAssetParams1)\n .catch((e) => console.error(e))\n .then(res => { console.log('Unconfirmed transaction'); console.log(res); return res })\n .then(res => brambl1.pollTx(res.result.txId, pollParams))\n .then(res => console.log(res))\n .catch((e) => console.error(e))\n", - "language": "javascript" - }, - { - "code": "object CreateAndSendRawAssetMintingTransfer {\n\n import exampleState._\n import provider._\n\n val params: RawAssetTransfer.Params = ToplRpc.Transaction.RawAssetTransfer.Params(\n propositionType = PublicKeyPropositionCurve25519.typeString,\n sender = NonEmptyChain(externalAddress.head),\n recipients = NonEmptyChain((externalAddress(1), AssetValue(10, assetCode))),\n fee = 0,\n changeAddress = externalAddress.head,\n consolidationAddress = externalAddress(1),\n minting = true,\n data = None\n )\n\n val response: RpcErrorOr[BroadcastTx.Response] = for {\n rawTx <- ToplRpc.Transaction.RawAssetTransfer.rpc(params).map(_.rawTx)\n signTx <- EitherT.right {\n clearKeyRing()\n genKeys()\n val msg2Sign = rawTx.messageToSign\n val signFunc = (addr: Address) => keyRing.generateAttestation(addr)(msg2Sign)\n val signatures = keyRing.addresses.map(signFunc).reduce(_ ++ _)\n Future(rawTx.copy(attestation = signatures))\n }\n broadcastTx <- ToplRpc.Transaction.BroadcastTx.rpc(ToplRpc.Transaction.BroadcastTx.Params(signTx))\n } yield broadcastTx\n\n def main(args: Array[String]): Unit =\n response.value.foreach {\n case Left(value) => println(s\"Got some error: $value\")\n case Right(value) => println(s\"Got a success response: $value\")\n }\n}", - "language": "scala" - } - ] -} -[/block] -#Checking account balances - -Now address 2 should have an asset box with 10 assets while address 1 has no assets. - -In this example, we will query the balance of each address's assets. The following will print out the balance of each account. -[block:code] -{ - "codes": [ - { - "code": "brambl1.requests.lookupBalancesByAddresses({addresses: [address1, address2]}\n .then(res => {console.log(res.result[address1].Boxes.AssetBox); return res;})\n .then(res => console.log(res.result[address2].Boxes.AssetBox))\n .catch((e) => console.error(e))", - "language": "javascript" - }, - { - "code": "object LookupBalance {\n\n import exampleState._\n import provider._\n\n val params: Balances.Params = ToplRpc.NodeView.Balances.Params(externalAddress.toList)\n val response: RpcErrorOr[Balances.Response] = ToplRpc.NodeView.Balances.rpc(params)\n\n def main(args: Array[String]): Unit =\n response.value.foreach {\n case Left(value) => println(s\"Got some error: $value\")\n case Right(value) => println(s\"Got a success response: $value\")\n }\n\n}", - "language": "scala" - } - ] -} -[/block] -After running this script, it should ensure the following: -Address 1's asset balance is 0 -Address 2's asset balance is 10 - -If correct, you should see something similar to the following lines for address 2 -[block:code] -{ - "codes": [ - { - "code": "\n {\n \"nonce\": \"-8730299170071731040\",\n \"id\": \"CJNEBJEUjbuz8xt4YFgJt5bUAFUDnTw2tmUt4ah5BFxZ\",\n \"evidence\": \"LQ9nmM1uiThbsgEU4bVk95SKwkxpffW4E3kdGT8hY5oE\",\n \"type\": \"AssetBox\",\n \"value\": {\n \"quantity\": \"10\",\n \"assetCode\": \"5onZ9zqoVAtqQju5i8apy9v7WsDZ6fMqc31P9Qnbwv3z2gERL31eZnoTcj\",\n \"metadata\": null,\n \"type\": \"Asset\",\n \"securityRoot\": \"11111111111111111111111111111111\"\n }\n }\n ", - "language": "json" - } - ] -} -[/block] -Now that we have two addresses each loaded with their own assets, we can see how they transfer tokens to each other! - -In this example, the signer withdraws assets from their address. Then the transaction moves those resources to another user's address. -[block:callout] -{ - "type": "info", - "body": "After completing the first tutorial with a value > 10, complete the second tutorial, this time turning minting to \"false\" so that assets are not created, but rather pulled from the first address' balance." -} -[/block] -If correct, you should see that the 10 assets that were minted in step one have been added to the asset balance for address 2! - -You now know how a basic Asset is used in Topl's Blockchain! - -From here, you can try to extend the functionality of assets by making -* a faucet for these assets -* an <> that can be deposited to -* Of course, minting new Assets! -[block:tutorial-tile] -{ - "title": "Transfer Assets between Addresses in Valhalla", - "emoji": "🐳", - "backgroundColor": "#018FF4", - "slug": "transfer-assets-between-addresses-in-valhalla", - "_id": "62e99eede9a6470167b86ed6", - "id": "62e99eede9a6470167b86ed6", - "link": "https://topl.readme.io/v1.3.0/recipes/transfer-assets-between-addresses-in-valhalla" -} -[/block] \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Getting Started/using-the-valhalla-test-network.md b/versioned_docs/version-Tetra/v1.10.2/Getting Started/using-the-valhalla-test-network.md deleted file mode 100644 index 5842eaa..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Getting Started/using-the-valhalla-test-network.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: "Using the Valhalla Test Network" -slug: "using-the-valhalla-test-network" -hidden: false -createdAt: "2021-03-29T20:54:31.580Z" -updatedAt: "2021-11-10T19:13:42.177Z" ---- -#Before you begin - -Before you can interact with the test network, you need to install Brambl -[block:callout] -{ - "type": "warning", - "title": "Important", - "body": "This tutorial is compatible with BramblJS 1.3.x. After you have installed the [prerequisites](https://topl.readme.io/v1.3.0/docs/prerequisites), ** you must install [BramblJS](https://topl.readme.io/v1.3.0/docs/brambljs-installation-guide)**\n\nThis tutorial is also compatible with BramblSC. The steps to installing and importing are also above." -} -[/block] -# <> -When imported with no arguments, BramblJS defaults to point at a private node running on your localhost. While this is an option, it is easier to use Topl's test network (<>) where <>s have no real-world value. - -Using BramblSc, the quickest and easiest way to experiment and begin developing on Topl is to use the ValhallaTestNet provider found [here](doc:providers) -[block:callout] -{ - "type": "info", - "title": "Note", - "body": "The Topl development team pushes new updates and features to Valhalla before they are pushed to the main Toplnet. This may cause some behavior differences for a short period between the two networks." -} -[/block] -## Interacting with the network - -You can use Brambl to interact with the Valhalla network. BramblJS allows you to make transactions, view blocks on the chain, and other functionality! - -At the bottom of this page, you can view this tutorial as a recipe, with an interactive flow to help you to visualize how to get connected. - -### Step 1. Importing the Brambl Module - -To create a minimal instance of Brambl in your application, include the following lines in your application -[block:code] -{ - "codes": [ - { - "code": "const BramblJS = require('brambljs');", - "language": "javascript" - }, - { - "code": "val brambl: Brambl = Brambl.standalone(\"my_key_file_directory\", Some(ValhallaTestNet(apiKey = \"myApiKey\", , uri = \"https://staging.vertx.topl.services/valhalla/{{myProjectId}}\")))", - "language": "scala" - } - ] -} -[/block] - -To use Valhalla, use the network prefix `valhalla` when creating a new instance of BramblJS or use the ValhallaTestNet provider when using BramblSC -[block:code] -{ - "codes": [ - { - "code": "const brambl = new BramblJS({\n networkPrefix : \"valhalla\"\n\t}\n)", - "language": "javascript" - }, - { - "code": "val provider: Provider = ValhallaTestNet(apiKey = \"myApiKey\")\nval brambl: Brambl = Brambl.standalone(\"myKeyFileDirectory\", provider)", - "language": "scala" - } - ] -} -[/block] -To get free polys for testing, please follow the instructions [here](https://topl.readme.io/v1.3.0/docs/adding-polys) to get polys using our faucet available in the BaaS portal \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Introduction/about-topl.md b/versioned_docs/version-Tetra/v1.10.2/Introduction/about-topl.md deleted file mode 100644 index 0bdff13..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Introduction/about-topl.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "About Topl" -slug: "about-topl" -excerpt: "The Platform and its History" -hidden: false -createdAt: "2021-03-25T17:37:46.969Z" -updatedAt: "2021-10-12T19:57:13.249Z" ---- -# Brief Overview - -Built as the only blockchain designed from the ground up for social impact and sustainability, Topl sits at the unique intersection of cutting-edge technology and positive change. Founded in 2017, Topl's mission is to support and nurture an ecosystem of blockchain-powered applications solving problems ranging from carbon reduction and capture to financial inclusion and supply chain transparency. - -We've committed our resources and ourselves to the development of the blockchain that you're currently exploring. Our team has purpose-built every aspect of our technology, from our blockchain's underlying consensus to its integration tooling, with our users' unique needs and a strong focus on bringing transparency and verifiability to the positive changes you're all effecting. - -You're changing the world; we're just here to support you and help you prove it. - -# Network Offerings -Topl's blockchain network has been active since late 2018, and everyday we are working to improve its functionality and deliver new and exciting features. We've recently released Blockchain-as-a-Service (BaaS) to provide a simple and streamlined way for developers to integrate their applications onto the Topl blockchain. - -As we work to improve this service for our users please don't hesitate to reach out with feedback or questions. We value your thoughts immensely. - -See below to review our documentation structure, check out examples of use-cases and solutions, and dive right into the documentation! \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Introduction/conclusion.md b/versioned_docs/version-Tetra/v1.10.2/Introduction/conclusion.md deleted file mode 100644 index 9ceb50f..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Introduction/conclusion.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Conclusion" -slug: "conclusion" -hidden: false -createdAt: "2021-03-29T18:19:08.069Z" -updatedAt: "2021-03-29T18:21:58.880Z" ---- -If you are a serious developer looking to create rock-solid transparency for your company or organization, Topl BaaS should be in your short list of solutions. - -The many capabilities of Topl BaaS makes it a highly scalable system supporting flexible trust assumptions that enable our platform to support a wide range of industry use cases ranging from food and fashion to precious gems and metals, to alternative finance, to carbon and impact credits, and so much more! \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Introduction/contributors.md b/versioned_docs/version-Tetra/v1.10.2/Introduction/contributors.md deleted file mode 100644 index 8f6fea9..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Introduction/contributors.md +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: "Contributors" -slug: "contributors" -hidden: false -createdAt: "2021-03-25T17:51:42.285Z" -updatedAt: "2022-03-28T14:43:24.380Z" ---- -# Contributing to the Brambl libraries - -You want to contribute to Brambl libraries? Awesome. Please take a few moments to -review the following guidelines to get you started. Cheers. - -* [Communication channels](#communication) -* [Team members](#team) -* [Documentation](#documentation) -* [Issue tracker](#issues) -* [Bug reports](#bugs) -* [Pull requests](#pull-requests) -* [Versioning](#versioning) -* [License](#license) - - -## Communication channels - -Before you get lost in the repository, here are a few starting points -for you to check out. You might find that others have had similar -questions or that your question rather belongs in one place than another. - -* Chat: https://discord.gg/CHaG8utU -* Website: https://www.topl.co/ -* Twitter: https://twitter.com/topl_protocol - - - -## Team members - -The Brambl libraries are developed as an open source project by [Topl](https://www.topl.co/) -headquartered in Houston, TX. The core maintainers you will encounter in this project -are all part of Topl. - -## Documentation - -The Brambl documentation is primarily auto-generated. -Any pull requests to improve the documentation are highly appreciated. - - -## Using the issue tracker - -The issue tracker is the preferred channel for [bug reports](#bugs), -[features requests](#features) and [submitting pull -requests](#pull-requests), but please respect the following restriction: - -Please **do not** use the issue tracker for personal support requests (use [Discord chat](https://discord.gg/CHaG8utU)). - - -## Bug reports - -A bug is a _demonstrable problem_ that is caused by the code in the repository. -Good bug reports are extremely helpful - thank you! - -A good bug report shouldn't leave others needing to chase you up for more -information. Please try to be as detailed as possible in your report. What is -your environment? What steps will reproduce the issue? What would you expect to -be the outcome? All these details will help people to fix any potential bugs. - - -## Pull requests - -Good pull requests - patches, improvements, new features - are a fantastic -help. Thanks for taking the time to contribute. - -**Please ask first** before embarking on any significant pull request, -otherwise you risk spending a lot of time working on something that the -project's developers might not want to merge into the project. - -Brambl libraries follows the [GitFlow branching model](http://nvie.com/posts/a-successful-git-branching-model). The ```main``` branch always reflects a production-ready state while the latest development is taking place in the ```dev``` branch. - -Each time you want to work on a fix or a new feature, create a new branch based on the ```dev``` branch: ```git checkout -b BRANCH_NAME dev```. Only pull requests to the ```dev``` branch will be merged. - - -## Commit Message Convention - -Brambl libraries adapt the [Vue's commit convention](https://github.com/vuejs/vue/blob/dev/.github/COMMIT_CONVENTION.md). Commit messages can have the following types: - -- `build:` Changes that affect the build system or external dependencies -- `chore:` Changes to readme, etc -- `ci:` Changes to our CI configuration files and scripts -- `docs:` Documentation only changes -- `feat:` A new feature -- `fix:` A bug fix -- `perf:` A code change that improves performance -- `refactor:` A code change that neither fixes a bug nor adds a feature -- `style:` Changes that do not affect the meaning of the code (white-space, formatting, etc) -- `test:` Adding missing tests or correcting existing tests - -## Versioning - -Brambl is maintained by using the [Semantic Versioning Specification (SemVer)](http://semver.org). - - -## License - -By contributing your code, you agree to license your contribution under the [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/) \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Introduction/getting-started.md b/versioned_docs/version-Tetra/v1.10.2/Introduction/getting-started.md deleted file mode 100644 index 8dbedf0..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Introduction/getting-started.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "About This Guide" -slug: "getting-started" -hidden: false -createdAt: "2021-01-10T18:12:33.532Z" -updatedAt: "2021-04-15T13:51:22.771Z" ---- -#Topl <> Core Developer Guide - -Documentation and guides for interacting with Topl <> Platform programmatically through one of our Brambl API libraries or via Curl/Postman Requests. - -#Structure of our Readme - -Our documentation is structured to support the solutions that we offer. We begin with the onboarding process onto our <> platform, then continue to explore how to setup a sample application to interface with the Topl blockchain itself. - -If there are any improvements, please feel free to `Suggest Edits` using the button in the top right of each document. - -This resource is updated and improved regularly. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Introduction/performance-and-scalability.md b/versioned_docs/version-Tetra/v1.10.2/Introduction/performance-and-scalability.md deleted file mode 100644 index 94ab1da..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Introduction/performance-and-scalability.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Performance and Scalability" -slug: "performance-and-scalability" -hidden: true -createdAt: "2021-03-29T18:13:41.673Z" -updatedAt: "2021-04-12T09:43:27.887Z" ---- -Performance of the Topl BaaS can be affected by many variables such as the transaction size, block size, and the existing state of the network. - -For <> and <> transfer transactions, the size is standardized and quantity will not affect performance. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Introduction/why-use-blockchain-technology-for-esg-compliance.md b/versioned_docs/version-Tetra/v1.10.2/Introduction/why-use-blockchain-technology-for-esg-compliance.md deleted file mode 100644 index 1e7ab7f..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Introduction/why-use-blockchain-technology-for-esg-compliance.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Topl BaaS" -slug: "why-use-blockchain-technology-for-esg-compliance" -hidden: false -createdAt: "2021-03-29T16:03:10.251Z" -updatedAt: "2021-10-12T19:57:29.478Z" ---- -Topl's Blockchain-as-a-Service (<>) offering provides frictionless access to Topl's underlying distributed ledger network. Designed to suit everyone from startups to large enterprises, Topl's blockchain delivers state of the art capabilities for verifying <> compliance. - -By leveraging BaaS, you will be able to build a unique blockchain-powered application without the need to actually deploy or operate your own node or blockchain infrastructure. Topl's API-accessible hosted blockchain nodes together with Brambl API libraries are intended to enable a fast and easy development process. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Lookup Balances/lookup-balances.md b/versioned_docs/version-Tetra/v1.10.2/Lookup Balances/lookup-balances.md deleted file mode 100644 index 4000b15..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Lookup Balances/lookup-balances.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Lookup Balances" -slug: "lookup-balances" -hidden: false -createdAt: "2021-04-06T17:01:51.812Z" -updatedAt: "2021-04-06T17:01:51.812Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/Lookup Balances/lookup-balances/lookupbalances.md b/versioned_docs/version-Tetra/v1.10.2/Lookup Balances/lookup-balances/lookupbalances.md deleted file mode 100644 index b94a5ea..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Lookup Balances/lookup-balances/lookupbalances.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Lookup Balances" -slug: "lookupbalances" -excerpt: "#### Summary\nLookup balances\n\n#### Type\nRemote -- Transaction must be used in conjunction with an external key manager service.\n\n#### Description\nCheck balances of specified addresses.\n\n#### Notes\n- Requires the Token Box Registry to be active\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|-----------|-----------|---------------------|----------------------------------------------|\n| addresses | [String] | Required | Addresses whose balances are to be retrieved |" -hidden: false -createdAt: "2021-04-06T17:01:51.937Z" -updatedAt: "2021-04-15T14:38:26.364Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/Lookup Block By Id/lookup-block-by-id.md b/versioned_docs/version-Tetra/v1.10.2/Lookup Block By Id/lookup-block-by-id.md deleted file mode 100644 index e7860ef..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Lookup Block By Id/lookup-block-by-id.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Lookup Block by Id" -slug: "lookup-block-by-id" -hidden: false -createdAt: "2021-04-06T17:12:49.980Z" -updatedAt: "2021-04-06T17:12:49.980Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/Lookup Block By Id/lookup-block-by-id/lookupblockbyid.md b/versioned_docs/version-Tetra/v1.10.2/Lookup Block By Id/lookup-block-by-id/lookupblockbyid.md deleted file mode 100644 index f00435c..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Lookup Block By Id/lookup-block-by-id/lookupblockbyid.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Lookup Block by id" -slug: "lookupblockbyid" -excerpt: "#### Summary\nLookup a block by its id\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|---------|-----------|---------------------|---------------------------------|\n| blockId | String | Required | Base58 encoded transaction hash |" -hidden: false -createdAt: "2021-04-06T17:12:50.159Z" -updatedAt: "2021-04-06T17:12:50.159Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/Lookup Block by Height/lookup-block-by-height.md b/versioned_docs/version-Tetra/v1.10.2/Lookup Block by Height/lookup-block-by-height.md deleted file mode 100644 index 7749cfd..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Lookup Block by Height/lookup-block-by-height.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Lookup Block by Height" -slug: "lookup-block-by-height" -hidden: false -createdAt: "2021-04-06T17:15:57.542Z" -updatedAt: "2021-04-06T17:15:57.542Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/Lookup Block by Height/lookup-block-by-height/lookupblockbyheight.md b/versioned_docs/version-Tetra/v1.10.2/Lookup Block by Height/lookup-block-by-height/lookupblockbyheight.md deleted file mode 100644 index 5608fc2..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Lookup Block by Height/lookup-block-by-height/lookupblockbyheight.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Lookup Block by Height" -slug: "lookupblockbyheight" -excerpt: "#### Summary\nLookup a block by its height\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|--------|-----------|---------------------|-------------------------------------------|\n| height | Number | Required | Height to retrieve on the canonical chain |" -hidden: false -createdAt: "2021-04-06T17:15:57.665Z" -updatedAt: "2021-04-06T17:15:57.665Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool.md b/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool.md deleted file mode 100644 index aaba21b..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Lookup Transaction in Mempool" -slug: "lookup-transaction-in-mempool" -hidden: false -createdAt: "2021-04-06T17:10:27.370Z" -updatedAt: "2021-04-06T17:10:27.370Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool/lookuptransactioninmempool.md b/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool/lookuptransactioninmempool.md deleted file mode 100644 index 863f775..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction in Mempool/lookup-transaction-in-mempool/lookuptransactioninmempool.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Lookup Transaction in Mempool" -slug: "lookuptransactioninmempool" -excerpt: "#### Summary\nLookup a transaction in the mempool by its id\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|---------------|-----------|---------------------|---------------------------------|\n| transactionId | String | Required | Base58 encoded transaction hash |" -hidden: false -createdAt: "2021-04-06T17:10:27.493Z" -updatedAt: "2021-04-06T17:10:27.493Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction/lookup-transaction.md b/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction/lookup-transaction.md deleted file mode 100644 index 263716f..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction/lookup-transaction.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Lookup Transaction" -slug: "lookup-transaction" -hidden: false -createdAt: "2021-04-06T17:07:37.229Z" -updatedAt: "2021-04-06T17:07:37.229Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction/lookup-transaction/lookuptransaction.md b/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction/lookup-transaction/lookuptransaction.md deleted file mode 100644 index c92113c..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Lookup Transaction/lookup-transaction/lookuptransaction.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Lookup Transaction" -slug: "lookuptransaction" -excerpt: "#### Summary\nLookup a transaction by its id\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|---------------|-----------|---------------------|---------------------------------|\n| transactionId | String | Required | Base58 encoded transaction hash |" -hidden: false -createdAt: "2021-04-06T17:07:37.348Z" -updatedAt: "2021-04-06T17:07:37.348Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/New To Topl/block-rewards.md b/versioned_docs/version-Tetra/v1.10.2/New To Topl/block-rewards.md deleted file mode 100644 index 78ffd8a..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/New To Topl/block-rewards.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Block Rewards" -slug: "block-rewards" -hidden: true -createdAt: "2021-08-23T18:39:06.224Z" -updatedAt: "2021-08-23T18:39:06.224Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/New To Topl/blockchain.md b/versioned_docs/version-Tetra/v1.10.2/New To Topl/blockchain.md deleted file mode 100644 index d5d7d99..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/New To Topl/blockchain.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "Blockchain and Commitments" -slug: "blockchain" -hidden: false -createdAt: "2021-03-30T14:40:21.822Z" -updatedAt: "2021-05-10T17:55:56.196Z" ---- -A broad view of Topl might divide the world into two major parts: the blockchain and commitments - -A <> is best described as an append only public ledger or database that is distributed across many computers in a network. The blockchain logs the network's state at specific times after transactions have altered the state. - -The term "block" refers to the fact that data and state are stored in sequential batches or "blocks". "Chain" refers to the fact that each block cryptographically references its parent through a (hashed) linked-list. Each block does not store all the data in the blockchain network (it would be far too large). - -The state data is stored in an abstraction called a Box. User Address data and <> data are stored within these Boxes. - -Each new block must be agreed upon by every node in the network. This is so everyone has the same data. For this to work, <> s need a consensus mechanism. - -Topl uses a proof-of-stake <> , which unlike proof-of-work <> does not require large amounts of energy consumption to remain secure. - -New blocks are broadcast to the nodes on the network, checked and verified, updating the state for everyone. The blockchain is Topl's public ledger, an ordered and timestamped record of transactions. This system is designed to protect against double spending and modification of previous transaction records. - -Topl can handle proof of a wide range of different types of data using <>s. Commitments are hashed versions of the data which act as one part of a proof of data integrity since the owner must provide the original data in order to get the hashed value. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/New To Topl/how-topl-addresses-are-generated.md b/versioned_docs/version-Tetra/v1.10.2/New To Topl/how-topl-addresses-are-generated.md deleted file mode 100644 index b06b6e0..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/New To Topl/how-topl-addresses-are-generated.md +++ /dev/null @@ -1,168 +0,0 @@ ---- -title: "Topl Blockchain Address" -slug: "how-topl-addresses-are-generated" -hidden: false -createdAt: "2021-03-25T20:26:06.337Z" -updatedAt: "2021-04-15T14:27:00.123Z" ---- -The Topl blockchain address is a unique sequence of numbers and letters that functions similarly to an email address. In particular, the numbers and letters are [Base58](https://tools.ietf.org/id/draft-msporny-base58-01.html) encoded. The Topl blockchain address refers to a specific destination on the network to which assets can. For example, imagine that you want to make a transaction on the Topl network with your friend Bob. Bob will share his address with you and you will be able to transact with him via this address. - -# Generate an Address - -Our public and private keys are generated using the <> algorithm. You get a reference for your address in the following way: - -### Step 1: Add the network prefix - - The network prefix allows nodes on the Topl network to verify which network the address is on -[block:parameters] -{ - "data": { - "h-0": "Network Prefix", - "h-1": "Network", - "h-2": "Notes", - "0-0": "0x01", - "0-1": "Topl Public Mainnet", - "0-2": "Not yet available in Beta", - "1-0": "0x10", - "1-1": "Valhalla public testnet", - "1-2": "Live in Beta", - "2-0": "0x30", - "2-1": "Local Developer Network", - "2-2": "Used for <> Developers" - }, - "cols": 3, - "rows": 3 -} -[/block] - ### Step 2: Append the propositionType prefix -- Topl supports addresses with public/private key pairs that are generated using two different algorithms. -[block:parameters] -{ - "data": { - "h-0": "Prefix", - "h-1": "propositionType", - "0-0": "0x01", - "0-1": "Curve25519 Public Key Hash", - "h-2": "Notes", - "0-2": "Default Implementation by Brambl KeyManager", - "1-0": "0x02", - "1-1": "Curve25519 Threshold Hash", - "1-2": "Another implementation accepted by the Topl Network" - }, - "cols": 3, - "rows": 2 -} -[/block] -### Step 3: Append the evidence content - -The evident content is a 32 byte commitment to the proposition that must be supplied and satisfied by the transaction issuer. -[block:parameters] -{ - "data": { - "h-0": "propositionType", - "0-0": "0x01", - "h-1": "Generation Method", - "h-2": "Notes", - "0-1": "Blake2b-256 Hash of the Public Key", - "0-2": "For Curve25519 Public Key Hash", - "1-0": "0x02", - "1-1": "Blake2b-256 Hash of all public keys in the threshold proposition", - "1-2": "For Threshold Hash" - }, - "cols": 3, - "rows": 2 -} -[/block] -### Step 4: Append the address checksum - -Finally, add the first 4 bytes of the Blake2b-256 hash of the preceding 34 bytes. - -### Step 5: Convert into Base58 -The last step is to convert the address that you get after appending the four pieces of information into Base58. - - -# Generate an address using the BramblJS KeyManager module - -The easiest way to generate an address is using the Brambl KeyManager Module. An example of this is shown in the **recipe **below. - -The KeyManager module is compliant with Bifrost's Gjallarhorn Key Manager service and provides an straightforward interface for creating new keyfiles as well as creating and verifying signatures on transactions. New encrypted keyfiles are generated using Curve25519 key pairs and are encrypted using an AES-256 cipher with a user-specified password. All data within the keyfile is encoded using Base58. -[block:tutorial-tile] -{ - "title": "Create Topl Address using BramblJS", - "emoji": "💐", - "backgroundColor": "#2c5572", - "slug": "create-topl-address-using-brambljs", - "_id": "62e99eede9a6470167b86ece", - "id": "62e99eede9a6470167b86ece", - "link": "https://topl.readme.io/v1.3.0/recipes/create-topl-address-using-brambljs" -} -[/block] -#Generate an address using the BramblSc KeyRing - -If you are using BramblSc, it is also simple to generate and address. An example is shown below - -[block:code] -{ - "codes": [ - { - "code": "val address = brambl.keyRing.DiskOps.generateKeyFile(\"password\").get", - "language": "scala" - } - ] -} -[/block] -# Generate multiple addresses using the BramblSC KeyRing - -First, let's initialize our BramblSC instance, then create 3 addresses using the KeyRing. -[block:callout] -{ - "type": "info", - "title": "Note:", - "body": "The password to encrypt the keyfile used must be encoded in Latin-1. In addition, please replace {{myProjectId}} with your projectID." -} -[/block] - -[block:code] -{ - "codes": [ - { - "code": "val provider: Provider = ValhallaTestNet(apiKey = \"myApiKey\", uri = \"https://staging.vertx.topl.services/valhalla/{{myProjectId}}\")\nval brambl: Brambl = Brambl.standalone(\"./my_key_directory\",Some( provider))\n \nval addrs: Set[Address] = brambl.keyRing.generateNewKeyPairs(3) match {\n case Failure(exception) => throw exception\n case Success(value) => value.map(_.publicImage.address(brambl.networkPrefix))\n }", - "language": "scala" - } - ] -} -[/block] -# Import Bifrost Keyfile - -If you are a Bifrost Developer, you can also import keys generated by Bifrost's Gjallarhorn KeyManager. An example is shown in the recipe below. -[block:tutorial-tile] -{ - "title": "Create Topl Address from Curve25519 KeyFile", - "emoji": "🍥", - "backgroundColor": "#331f51", - "slug": "create-topl-address-from-curve25519-keyfile", - "_id": "62e99eede9a6470167b86ecf", - "id": "62e99eede9a6470167b86ecf", - "link": "https://topl.readme.io/v1.3.0/recipes/create-topl-address-from-curve25519-keyfile" -} -[/block] -# Import Keyfile BramblSC - -In addition, you can also import keys generated by BramblSC's KeyRing. An example is shown below. -[block:code] -{ - "codes": [ - { - "code": "val provider: Provider = ValhallaTestNet(apiKey = \"myApiKey\", uri = \"https://staging.vertx.topl.services/valhalla/{{myProjectId}}\")\nval brambl: Brambl = Brambl.standalone(\"./my_key_directory\",Some( provider))\n \n val address1 = brambl.keyRing.DiskOps.unlockKeyFile(\"base58_encoded_address\", \"password\") match {\n case Failure(exception) => throw exception\n case Success(value) => value\n }", - "language": "scala" - } - ] -} -[/block] - -[block:callout] -{ - "type": "warning", - "title": "Note", - "body": "The string for the address has to be the same as the address generated by BramblSC and the naming convention for the keyfile has to include \\.json. \n\nIn addition, BramblSC checks the whole directory for valid keyfiles so if there are other files in your key file directory that are not valid keys, or that are from different networks, then BramblSC will throw a validation error." -} -[/block] \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/New To Topl/introduction-1.md b/versioned_docs/version-Tetra/v1.10.2/New To Topl/introduction-1.md deleted file mode 100644 index 2904149..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/New To Topl/introduction-1.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Introduction" -slug: "introduction-1" -hidden: false -createdAt: "2021-03-29T18:37:47.745Z" -updatedAt: "2021-04-15T13:55:02.440Z" ---- -If you're new to blockchain, we recommend you first begin with the remainder of this Key Concepts section in order to gain familiarity with the design patterns of blockchain networks. - -This section is may also be useful for getting to know the specifics of Topl's blockchain design as there are a few unique aspects to be aware of if you are migrating from a different blockchain network. - -Once you're comfortable with all the key concepts, you can move on to either the BaaS Portal Onboarding or Getting started sections to explore the demos, technical specifications, and APIs. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/New To Topl/networks.md b/versioned_docs/version-Tetra/v1.10.2/New To Topl/networks.md deleted file mode 100644 index f59c964..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/New To Topl/networks.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Networks" -slug: "networks" -hidden: false -createdAt: "2021-04-05T14:23:06.302Z" -updatedAt: "2021-04-15T14:27:53.067Z" ---- -# Networks - -There are two Topl networks as well as custom networks and developer networks. - -Our Brambl API library accepts the following networkPrefixes `toplnet, valhalla, local, private" where Toplnet is the main network, Valhalla is the testing network, local and private designate developer networks running in your local environment. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/New To Topl/signing.md b/versioned_docs/version-Tetra/v1.10.2/New To Topl/signing.md deleted file mode 100644 index e26df7b..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/New To Topl/signing.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: "Signing" -slug: "signing" -hidden: false -createdAt: "2021-04-01T19:19:32.850Z" -updatedAt: "2021-04-01T19:30:53.035Z" ---- -# What is Signing? - -Signing is the act of user A "signing" data that anyone can validate came from user A. This is used in transactions to check if they are real. - -A common question is "how can you validate transactions are real?". The short answer is public-key cryptography. It's an algorithm with 3 parts. - -1.) Key Creation -2.) Encryption/Signing -3.) Decryption/Validation - -Encryption is generally used to hide data in other data. If you encrypt a string like "hello world" you get something like "dqE3gJz/+5CQHfSJwMP2nQ". It's purpose is to hide the message "hello world". Signing is used to create a different output string, but you also publicize the original message. - -The key creation will output two strings, a public and private key. It links them through an algorithm that has the signing and validation properties. A signature will take in a public key, private key, and a message. The output will be another string that is the signature. - -1.) Signature = F(public key, private key, message) -2.) Validation = F(signature, message) -3.) Is Valid if: Validation = public key - -Notice how validation does not require knowledge of the private key. This is what allows 3rd parties to validate information. If the output of the validation function (at Topl, we use the parlance <>) is equal to the public key then the signature is real, otherwise, it is fake. - -The signature is made up of 3 variables. Topl employs <> and those variables are simply part of the underlying math. - -# Why Sign? -Signing is a nice way to know something is being done by the correct person. This means we can trust that someone is actually doing what they say they are. - -Instead of real world signatures, which can be faked, the digital ones can not. If you want to know user A did something, make them sign it before moving forward. Then if a dispute arises, check the signature. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/New To Topl/transactions-1.md b/versioned_docs/version-Tetra/v1.10.2/New To Topl/transactions-1.md deleted file mode 100644 index 4f685fc..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/New To Topl/transactions-1.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: "Transactions" -slug: "transactions-1" -hidden: false -createdAt: "2021-08-11T21:05:58.590Z" -updatedAt: "2021-08-11T21:05:58.590Z" ---- -# Introduction - -Transactions are the most important part of the Topl protocol. Everything else in Topl is designed to ensure that transactions can be created, propagated on the network, validated, and finally added to the global ledger of transactions (the blockchain). Transactions are data structures that encode the transfer of tokens between participants in the Topl system. Each transaction is a public entry in Topl's blockchain, the global bookkeeping ledger. - -In this section, we will examine all the various forms of transactions, what they contain, how to create them, how they are verified, and how they become a permanent record of all transactions. - -# Transaction Lifecycle -A transaction's lifecycle begins with the transaction's creation, also known as *origination.* The transaction is then signed with one or more signatures indicating the authorization to spend the UTXOs referenced by the transaction. The transaction is then *broadcast* on the Topl network, where each Bifrost node (participant) validates and propagates the transaction until it reaches every node in the network. Finally, the transaction is verified by a forging node, and included in a block of transactions that is recorded on the blockchain. - - - -Once recorded on the blockchain and confirmed by sufficient subsequent blocks (confirmed), the transaction is a permanent part of the Topl ledger, and is accepted as valid by all participants. The UTXOs allocated to a new owner by the transaction can then be spent in a new transaction, extending the chain of ownership and beginning the lifecycle of a transaction again. - -# Creating Transactions - -In some ways, it helps to think of a transaction in the same way as a paper check. Like a check, a transaction is an instrument that expresses the intent to transfer ownership of an asset and is not visible to the financial system until it is submitted for execution. Like a check, the originator of a transaction does not have to be the one signing the transaction. - -Currently, transactions must be created online. But transactions can be created by anyone, they do not have to have the credentials for a particular address. For example, an accounts payable clerk might process payable checks for signature by the CEO. Similarly, an accounts payable clerk can create Topl transactions and then have the CEO apply digital signatures to make them valid. Whereas a check references a specific account as the source of the funds, a Topl transaction references specific boxes that have been generated by a prior transaction as its source, rather than a particular account. - - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/b36ed30-Screen_Shot_2021-08-11_at_4.36.56_PM.png", - "Screen Shot 2021-08-11 at 4.36.56 PM.png", - 1770, - 918, - "#fcf6f3" - ] - } - ] -} -[/block] -Once a transaction has been created, it is signed by the owner (or owners) of the source of the funds. If it is properly formed and signed, the signed transaction is now valid and contains all the information needed to execute the transfer of tokens. Finally, the valid transaction has to reach the Topl network so that it can be propagated until it reaches a forger for inclusion in the public ledger (the blockchain) - -# Broadcasting Transactions to the Topl Network - -First, a transaction needs to be delivered to the Topl network so that it can be propagated and included in the blockchain. In essence, a Topl transaction is just a few bytes of data and has to reach any one of many Bifrost nodes. The senders do not need to trust the nodes they use to broadcast the transaction, as long as they use more than one to ensure that it propagates. The nodes don't need to trust the sender or establish the sender's "identity". Because the transaction is signed and contains no confidential information, private keys, or credentials, it can be publicly broadcast using the JSON-RPC routes. Unlike credit card transactions, for example, which contain sensitive information and can only be transmitted on an encrypted network, a Topl transaction can be sent over any network. As long as the transaction can reach a Topl node that will propagate it into the Topl network, it doesn't matter how it is transported to the first node. - -Topl transactions can therefore be transmitted to the Topl network over insecure networks like WiFi. As an extreme example, a Topl transaction could even be encoded in smileys (emoticons) and posted in a public forum or sent as a text message or Skype chat message. - -# Polling for Transactions on the Topl Network -Once a Topl transaction is sent to any node connected to the Topl network, the transaction will be validated by that node. If valid, that node will propagate it to the other nodes to which it is connected. If the transaction is invalid, the node will reject it and remove the transaction from the queue of transactions (mempool). - -The Topl network is a peer-to-peer network, meaning that each Bifrost node is connected to a few other Bifrost nodes that it discovers during startup through the peer-to-peer protocol. The entire network forms a loosely connected mesh without a fixed topology or any other structure, making all nodes equal peers. Messages, including transactions and blocks, are propagated from each node to the peers to which it is connected. A new validated transaction injected into any node on the network will be sent to three or four of the neighboring nodes, each of which will send it to three to four more nodes, and so on. In this way, within a few seconds a valid transaction will propagate in an exponentially expanding ripple across the network until all connected nodes have received it. - -The Topl network is designed to propagate transactions and blocks to all nodes in an efficient and resilient manner that is resistant to attacks. To prevent spamming, denial of service attacks, or other nuisance attacks against the Topl network, every node independently validates every transaction before propagating it further. A malformed transaction will not get beyond one node. - -Due to this setup, the originator should poll the mempool periodically. Once a transaction has left the mempool, it could either be because it was incorporated into a new block, or because it was malformed. Thus, after getting an unsuccessful hit from the mempool, the originator should then query the blockchain itself to see if the transaction was incorporated into a block. Only after getting a successful response from the blockchain should they proceed to using any UTXOs that were generated as a result of the transaction. This can be seen in the flow diagram below: - - -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/3b69254-Screen_Shot_2021-08-11_at_5.02.53_PM.png", - "Screen Shot 2021-08-11 at 5.02.53 PM.png", - 1218, - 558, - "#fbf6f3" - ] - } - ] -} -[/block] \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/New To Topl/wallet-cryptography-and-encoding.md b/versioned_docs/version-Tetra/v1.10.2/New To Topl/wallet-cryptography-and-encoding.md deleted file mode 100644 index b4d43ba..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/New To Topl/wallet-cryptography-and-encoding.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: "Recovery Phrases" -slug: "wallet-cryptography-and-encoding" -hidden: false -createdAt: "2021-10-08T21:20:21.210Z" -updatedAt: "2021-10-08T21:35:29.141Z" ---- -## Recovery Phrases - -### Motivation - -We define a way for easily entering and writing down arbitrary binary seeds using -a simple dictionary of known words (available in many different languages). - -The motivation here is to have sentence of words easy to read and write for humans, -which map uniquely back and forth to a sized binary data (harder to remember). - -### Encoding - -The process describing how to encode recovery phrases is described in [BIP-0039](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki) -section "Generating the mnemonic". Below is a reformulation of this specification. - -We call _Entropy_ an arbitrary sequence of bytes that has been generated through high -quality randomness methods. The allowed size of _Entropy_ is 96-256 bits and is -necessarily a multiple of 32 bits (4 bytes). - -A checksum is appended to the initial entropy by taking the first `ENT / 32` bits -of the SHA256 hash of it, where `ENT` designates the _Entropy_ size in bits. - -Then, the concatenated result is split into groups of 11 bits, each encoding a number -from 0 to 2047 serving as an index into a known dictionary (see below). - -| Sentence Length | Entropy Size | Checksum Size | -| ------------ | ------------------- | ------ | -| 9 words | 96 bits (12 bytes) | 3 bits | -| 12 words | 128 bits (16 bytes) | 4 bits | -| 15 words | 160 bits (20 bytes) | 5 bits | -| 18 words | 192 bits (24 bytes) | 6 bits | -| 21 words | 224 bits (28 bytes) | 7 bits | -| 24 words | 256 bits (32 bytes) | 8 bits | - -### Dictionaries - -Topl uses the same dictionaries as defined in [BIP-0039](https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md). - ---- \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/New To Topl/what-are-polys.md b/versioned_docs/version-Tetra/v1.10.2/New To Topl/what-are-polys.md deleted file mode 100644 index 775e72d..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/New To Topl/what-are-polys.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "What are Polys?" -slug: "what-are-polys" -hidden: false -createdAt: "2021-03-31T20:20:07.140Z" -updatedAt: "2022-04-12T15:13:17.746Z" ---- -Polys represent the currency unit used to pay fees on the Topl blockchain. Any user who attempts to broadcast a transaction must include a set number of Polys to ensure that their transaction is included in a new block and thus added to the ledger. - -This fee acts as an incentive to the nodes running the blockchain code to continue to relay messages and keep the network available and secure. The amount of Polys required for a successful transaction is currently fixed by the network. - -1 nanopoly (10^-9 polys) is the smallest unit to which a poly can be divided. The denomination must be used when interacting with the Topl blockchain. - -So instead of entering a value of 1 poly to pay a transaction fee, you would enter a fee 10^9 nanopolys. -[block:callout] -{ - "type": "info", - "title": "Current Fees", - "body": "Currently, the transaction fee for the Valhalla testnet is set to 100 nanopoly.\n\nOn the production mainnet, transaction fees will be set to 1 poly or 10^9 nanopolys." -} -[/block] \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Raw Asset Transfer/raw-asset-transfer.md b/versioned_docs/version-Tetra/v1.10.2/Raw Asset Transfer/raw-asset-transfer.md deleted file mode 100644 index ddf06b2..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Raw Asset Transfer/raw-asset-transfer.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Raw Asset Transfer" -slug: "raw-asset-transfer" -hidden: false -createdAt: "2021-07-09T20:54:07.327Z" -updatedAt: "2021-07-09T20:54:07.327Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/Raw Asset Transfer/raw-asset-transfer/createrawassettransfer.md b/versioned_docs/version-Tetra/v1.10.2/Raw Asset Transfer/raw-asset-transfer/createrawassettransfer.md deleted file mode 100644 index ce49246..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Raw Asset Transfer/raw-asset-transfer/createrawassettransfer.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Create raw asset transfer" -slug: "createrawassettransfer" -excerpt: "#### Summary\nTransfer Assets from an account to a specified recipient\n\n#### Type\nRemote -- Transaction must be used in conjunction with an external key manager service.\n\n#### Description\nDefault behavior of the wallet is to find the first unlocked address which hold the targetted Asset.\nThe protocols default behavior is to combine multiple UTXOs of the same type into a single UTXO when it can.\n\n#### Notes\n- `AssetCode` in `AssetValue` can be generated using `util_generateAssetCode`\n- `fee` and `quantity` in `AssetValue` need to be strings, they will be converted into Int128 which can go up \nto 178 undecillion(2^127-1)\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|----------------------|------------------------|---------------------|-----------------------------------------------------------------------------------|\n| propositionType | String | Required | Type of proposition, eg., PublicKeyCurve25519, ThresholdCurve25519 |\n| recipients | [[String, AssetValue]] | Required | Array of addresses and assetValues for the transfer recipients(check table below) |\n| sender | [String] | Required | Array of addresses from which Assets should be sent |\n| changeAddress | String | Required | Address for recipient of unspent Polys |\n| consolidationAddress | String | Optional | Address for recipient of unspent Assets |\n| fee | String | Required | Fee for the transfer. Minting AssetTransfer requires fee to be greater than 0 |\n| minting | Boolean | Required | If this is a minting AssetTransfer or not |\n| data | String | Optional | Data string which can be associated with this transaction(may be empty). Data has a maximum value of 127 characters. |\n\n###### AssetValue\n| Fields | Data type | Required / Optional | Description |\n|--------------|-----------|---------------------|-------------------------------------------------------------------------------------------------|\n| type | String | Required | Type of transfer, should be \"Asset\" for AssetTransfer |\n| quantity | String | Required | Number of tokens in String |\n| assetCode | String | Required | Unique identifier for user issued Assets, generated from version, issuer address, and shortName |\n| securityRoot | String | Optional | Optional 32 byte commitment to instance of the AssetBox |\n| metadata | String | Optional | Metadata has a maximum value of 127 characters |" -hidden: false -createdAt: "2021-04-06T16:50:34.984Z" -updatedAt: "2021-07-09T20:54:07.470Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/Raw Poly Transfer/raw-poly-transfer.md b/versioned_docs/version-Tetra/v1.10.2/Raw Poly Transfer/raw-poly-transfer.md deleted file mode 100644 index 7def37b..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Raw Poly Transfer/raw-poly-transfer.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Raw Poly Transfer" -slug: "raw-poly-transfer" -hidden: false -createdAt: "2021-07-09T20:50:41.410Z" -updatedAt: "2021-07-09T20:50:41.410Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/Raw Poly Transfer/raw-poly-transfer/createrawpolytransfer.md b/versioned_docs/version-Tetra/v1.10.2/Raw Poly Transfer/raw-poly-transfer/createrawpolytransfer.md deleted file mode 100644 index 3486a4a..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Raw Poly Transfer/raw-poly-transfer/createrawpolytransfer.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Create raw poly transfer" -slug: "createrawpolytransfer" -excerpt: "#### Summary\nTransfer Polys from an account to a specified recipient.\n\n#### Type\nRemote -- Transaction must be used in conjunction with an external key manager service.\n\n#### Description\nDefault behavior of the wallet is to find the first unlocked address which hold Polys.\nThe protocols default behavior is to combine multiple UTXOs of the same type into a single UTXO when it can.\n\n#### Notes\n- `fee` and Poly amounts in `recipients` need to be strings, they will be converted into Int128 which can go up\nto 178 undecillion(2^127-1)\n\n#### Params\n| Fields | Data type | Required / Optional | Description |\n|-----------------|--------------------|---------------------|--------------------------------------------------------------------------|\n| propositionType | String | Required | Type of proposition, eg., PublicKeyCurve25519, ThresholdCurve25519 |\n| recipients | [[String, String]] | Required | Array of addresses and Poly amounts for the corresponding recipients |\n| sender | [String] | Required | Array of addresses from which Poly should be sent |\n| changeAddress | String | Required | Address for recipient of unspent Polys |\n| fee | String | Required | Fee for the transfer |\n| data | String | Optional | Data string which can be associated with this transaction (may be empty). Data has a maximum value of 127 Latin-1 encoded characters |" -hidden: false -createdAt: "2021-07-09T20:50:41.563Z" -updatedAt: "2021-07-09T20:50:41.563Z" ---- diff --git a/versioned_docs/version-Tetra/v1.10.2/Release Notes/topl-protocol-release-notes.md b/versioned_docs/version-Tetra/v1.10.2/Release Notes/topl-protocol-release-notes.md deleted file mode 100644 index 0dd5eaf..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Release Notes/topl-protocol-release-notes.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: "Topl Protocol Release Notes" -slug: "topl-protocol-release-notes" -hidden: false -createdAt: "2021-03-29T18:35:07.099Z" -updatedAt: "2021-11-10T19:10:33.647Z" ---- -The release notes provide more details for users who are planning on using the BaaS - -# Topl Protocol Release Notes -* [Bifrost v1.8.0](https://github.com/Topl/Bifrost/releases/tag/v1.8.0) -* [Bifrost v.1.6.3](https://github.com/Topl/Bifrost/releases/tag/v1.6.3) -* [Bifrost v1.4.3] (https://github.com/Topl/Bifrost/releases/tag/v1.4.3) -* [Bifrost v1.3.4 jar](https://repo.topl.network/bifrost-1.3.4.jar) -* [Bifrost v1.3.3 release notes](https://github.com/Topl/Bifrost/releases/tag/v1.3.3) -* [Bifrost v1.0.0 release notes](https://github.com/Topl/Bifrost/releases/tag/v1.0.0) - -# BramblSC -* [BramblSC v1.8.0](https://github.com/Topl/Bifrost/releases/tag/v1.8.0) -* [BramblSC v1.6.3](https://github.com/Topl/Bifrost/releases/tag/v1.6.3) -* [BramblSC v0.1.0](https://github.com/Topl/BramblSc) - -# BramblJS -* [BramblJS 1.3.0](https://github.com/Topl/BramblJS/releases/tag/1.3.0) -* [BramblJS v1.2.3](https://www.npmjs.com/package/brambljs) -* BramblJS v1.2.2 (Notes to be completed soon) -* [BramblJS v1.2.1](https://github.com/Topl/BramblJS/releases/tag/v1.2.1) -* [BramblJS v1.1.1](https://github.com/Topl/BramblJS/releases/tag/v1.1.1) -*[BramblJS v1.0.1](https://github.com/Topl/BramblJS/releases/tag/v1.0.1) - -#BramblDart -* [BramblDart 0.0.1](https://github.com/Topl/BramblDart/releases/tag/v0.0.1) \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Still have questions-/additional-resources.md b/versioned_docs/version-Tetra/v1.10.2/Still have questions-/additional-resources.md deleted file mode 100644 index 725c5ab..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Still have questions-/additional-resources.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Additional Resources" -slug: "additional-resources" -hidden: false -createdAt: "2021-03-29T18:55:31.034Z" -updatedAt: "2021-11-10T19:09:07.464Z" ---- -We try to maintain a comprehensive set of documentation for various audiences. However, we realize that often there are questions that remain unanswered. - -### Community -- [Discord][discord-url] -- [StackExchange][stackexchange-url] - -[discord-url]: https://discord.gg/mre2Dazqsy -[stackexchange-url]: https://bitcoin.stackexchange.com/questions/tagged/topl \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Still have questions-/bibliography.md b/versioned_docs/version-Tetra/v1.10.2/Still have questions-/bibliography.md deleted file mode 100644 index 73899e4..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Still have questions-/bibliography.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Bibliography" -slug: "bibliography" -hidden: false -createdAt: "2021-08-23T17:39:51.187Z" -updatedAt: "2021-10-08T18:59:33.146Z" ---- -Blockchain Explorer overview can be found in more detail here: https://coinmarketcap.com/guides/blockexplorer - -Big thanks to Cardano for their open source work on the Bip-44 HD wallet derivation schemes as well as their robust documentation. \ No newline at end of file diff --git a/versioned_docs/version-Tetra/v1.10.2/Topl Addresses/install.md b/versioned_docs/version-Tetra/v1.10.2/Topl Addresses/install.md deleted file mode 100644 index fb20513..0000000 --- a/versioned_docs/version-Tetra/v1.10.2/Topl Addresses/install.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: "Install" -slug: "install" -hidden: false -createdAt: "2021-08-27T19:57:21.680Z" -updatedAt: "2021-10-18T20:07:14.034Z" ---- -# Command Line -[block:image] -{ - "images": [ - { - "image": [ - "https://files.readme.io/16d2ea9-keyboard-4d5a3e1a.svg", - "keyboard-4d5a3e1a.svg", - 320, - 320, - "#998099" - ] - } - ] -} -[/block] -## Install Anywhere (npm) -If you use Node.js, you can install Topl Addresses using [npm](https://www.npmjs.com/) by running `npm install -g bip_topl` - -However, please note that this will install the pure JavaScript implementation of Topl Addresses, which runs somewhat slower than the other options listed here. But it has the same interface, so it'll be easy to swap in another implementation later if you need a bit more speed! - -Once you have run the above command, don't forget to `require()` it as a library! - -When install via npm, Topl Addresses supports a Javascript API that aims to be compatible with Node. Full compatibility is a work in progress. - -## Dart Library -You can also use Dart Bip for Topl to get the speed of the Dart VM plus the ability to extend functions. To add it to an existing project: - -1.) [Install the Dart SDK](https://dart.dev/get-dart#automated-installation-and-updates). Make sure that its bin directory is [on your path](https://katiek2.github.io/path-doc/). -2.) Create a pubspec.yaml file like this: - - - -[block:code] -{ - "codes": [ - { - "code": "name: my_project\ndev_dependencies:\n\tbip_topl: ^x.y.z", - "language": "yaml" - } - ] -} -[/block] -3.) Run dart pub get - -5.) Learn more about [writing Dart code](https://dart.dev/guides/language/language-tour) (it's easy!) \ No newline at end of file diff --git a/versioned_sidebars/version-Dion-sidebars.json b/versioned_sidebars/version-Dion-sidebars.json deleted file mode 100644 index caea0c0..0000000 --- a/versioned_sidebars/version-Dion-sidebars.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "tutorialSidebar": [ - { - "type": "autogenerated", - "dirName": "." - } - ] -} diff --git a/versioned_sidebars/version-Tetra-sidebars.json b/versioned_sidebars/version-Tetra-sidebars.json deleted file mode 100644 index caea0c0..0000000 --- a/versioned_sidebars/version-Tetra-sidebars.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "tutorialSidebar": [ - { - "type": "autogenerated", - "dirName": "." - } - ] -} diff --git a/versions.json b/versions.json deleted file mode 100644 index b5b05b8..0000000 --- a/versions.json +++ /dev/null @@ -1,4 +0,0 @@ -[ - "Tetra", - "Dion" -]