diff --git a/404.html b/404.html index 8b88733df1b..8423d9d9055 100644 --- a/404.html +++ b/404.html @@ -2,12 +2,12 @@ - + Web3 Foundation Grants - - + + -
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

\ No newline at end of file diff --git a/CODE_OF_CONDUCT.html b/CODE_OF_CONDUCT.html index 9c4a803b23a..278bd6361a5 100644 --- a/CODE_OF_CONDUCT.html +++ b/CODE_OF_CONDUCT.html @@ -2,10 +2,10 @@ - + Contributor Covenant Code of Conduct | Web3 Foundation Grants - - + +
Skip to main content
+https://www.contributor-covenant.org/translations.

\ No newline at end of file diff --git a/applications.html b/applications.html index 9b6fa382f5a..1c899c8ed90 100644 --- a/applications.html +++ b/applications.html @@ -2,10 +2,10 @@ - + Accepted Grant Applications | Web3 Foundation Grants - - + +
Skip to main content

Accepted Grant Applications

Use this page for an overview of all public grants and their status. Each row links to a project's website, their grant application document and code repository.

@@ -138,6 +138,6 @@

๐Ÿ„ Wave

๐Ÿ”

๐Ÿ„ Wave 1 - Q1 2019โ€‹

TeamProjectLinkTerminatedFirst DeliveryCompleted
ChainSafePolkadot Runtime Environment in Go (via an RFP)GitHubโ˜โ˜’โ˜’
SoramitsuPolkadot Runtime Environment in C++ (via an RFP)GitHubโ˜โ˜’โ˜’
WEB3SCANPolkascan: Open Source Block ExplorerGitHubโ˜โ˜’โ˜’
PolkawalletMobile WalletGitHubโ˜โ˜’โ˜
ValidatorsOpen Source Scalable ClusterGitHubโ˜โ˜’โ˜’
BlockX LabsEnzyme Browser extension walletGitHubโ˜โ˜’โ˜’
Speckle OSBrowser extension walletGitHubโ˜โ˜’โ˜’
Noise ExplorerRust code generator for formally verified (Noise/ cryptographic) handshakesSource Codeโ˜โ˜’โ˜’
ProtosOpen Source Node ExplorerGitHubโ˜’โ˜’โ˜
Supercomputing SystemsSubstrate Transaction Privacy using Intel SGXGitHubโ˜โ˜’โ˜’
-

๐Ÿ”

+

๐Ÿ”

\ No newline at end of file diff --git a/applications/AdMeta.html b/applications/AdMeta.html index 8c8abc8a6c0..22f5367d2a9 100644 --- a/applications/AdMeta.html +++ b/applications/AdMeta.html @@ -2,10 +2,10 @@ - + AdMeta | Web3 Foundation Grants - - + +
Skip to main content
+

How did you hear about the Grants Program? Personal recommendation

\ No newline at end of file diff --git a/applications/Afloat.html b/applications/Afloat.html index 831f9a1c366..8bd2822781f 100644 --- a/applications/Afloat.html +++ b/applications/Afloat.html @@ -2,10 +2,10 @@ - + Afloat Tax Infrastructure Polkadot Integration | Web3 Foundation Grants - - + +
Skip to main content
+

https://www.investopedia.com/news/majority-us-states-are-still-acknowledge-cryptocurrencies/

\ No newline at end of file diff --git a/applications/AgriDot.html b/applications/AgriDot.html index 65001976bf4..701d7fc2f82 100644 --- a/applications/AgriDot.html +++ b/applications/AgriDot.html @@ -2,10 +2,10 @@ - + AgriDot - Web3 application for farmers | Web3 Foundation Grants - - + +
Skip to main content

AgriDot - Web3 application for farmers

@@ -14,7 +14,7 @@
  • Payment Details:
    • DOT: 1ukfa64f2WxSvJy8zwNC2RpSiajt2X1hsYQqBHmM9DTjT8R
    • -
    • Payment: Fiat payment - Details will be provided if the proposal gets accepted.
    • +
    • Payment: Fiat payment - Details shared on 8. January 2025 at 18:36 via email in the application below.
  • Level: 1 ๐Ÿฃ
  • @@ -166,6 +166,6 @@

    Re

    Additional Information โž•โ€‹

    How did you hear about the Grants Program? Personal recommendation by the university thesis supervisor.

    -

    The main problem Farmers seem to have with Blockchain is a lack of trust in this technology. We would like to prove them otherwise and explain to them in the simplest way possible, that this technology is very useful in various use cases that we wish to explore and bring to them throughout their (and our) journey with AgriDot.

    +

    The main problem Farmers seem to have with Blockchain is a lack of trust in this technology. We would like to prove them otherwise and explain to them in the simplest way possible, that this technology is very useful in various use cases that we wish to explore and bring to them throughout their (and our) journey with AgriDot.

    \ No newline at end of file diff --git a/applications/Aisland-DocSig.html b/applications/Aisland-DocSig.html index a442234c481..a41eae2c28f 100644 --- a/applications/Aisland-DocSig.html +++ b/applications/Aisland-DocSig.html @@ -2,10 +2,10 @@ - + Aisland Docsig | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/AlgoCash.html b/applications/AlgoCash.html index 1cbc5976354..1ee17cbd776 100644 --- a/applications/AlgoCash.html +++ b/applications/AlgoCash.html @@ -2,10 +2,10 @@ - + AlgoCash | Web3 Foundation Grants - - + +
    Skip to main content
    +

    We will reach DEX and Lending protocol communities to enlarge Algo Cash adoption.

    \ No newline at end of file diff --git a/applications/Anchor.html b/applications/Anchor.html index 05e2d03d664..c916ce2673b 100644 --- a/applications/Anchor.html +++ b/applications/Anchor.html @@ -2,10 +2,10 @@ - + Anchor, On-chain Linked List pallet and Name Service | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/Apron_Network.html b/applications/Apron_Network.html index fcc7ac9f6cc..384e4883934 100644 --- a/applications/Apron_Network.html +++ b/applications/Apron_Network.html @@ -2,10 +2,10 @@ - + Apron Network | Web3 Foundation Grants - - + +
    Skip to main content
    +

    The project repo: https://github.com/apron-network

    \ No newline at end of file diff --git a/applications/ArtZero_InkWhale.html b/applications/ArtZero_InkWhale.html index b8b9515bcc7..5d7f18833ed 100644 --- a/applications/ArtZero_InkWhale.html +++ b/applications/ArtZero_InkWhale.html @@ -2,10 +2,10 @@ - + ArtZero & InkWhale | Web3 Foundation Grants - - + +
    Skip to main content

    ArtZero & InkWhale

    @@ -95,6 +95,6 @@

    https://www.figma.com/file/63xCCH71Oa8AfJpkK1wCO3/Ink-Whale?node-id=88%3A234. The current demo can be seen at https://testnet.inkwhale.net4.TestingWe will provide unit test for smart contracts. For Frontend and Backend testing we will provide Test Document with Plan and Test Cases for operating and using Ink Whale platform

    Future Plansโ€‹

    Additional Information โž•โ€‹

    -

    How did you hear about the Grants Program? from Founder of SubWallet

    +

    How did you hear about the Grants Program? from Founder of SubWallet

    \ No newline at end of file diff --git a/applications/Awesome-Polka.html b/applications/Awesome-Polka.html index b6cd6d2071e..037457574f2 100644 --- a/applications/Awesome-Polka.html +++ b/applications/Awesome-Polka.html @@ -2,10 +2,10 @@ - + Awesome Polka | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/BCANN.html b/applications/BCANN.html index 7291a243f46..d69df47887c 100644 --- a/applications/BCANN.html +++ b/applications/BCANN.html @@ -2,10 +2,10 @@ - + BCANN ( The blockchain system for Assigned Names And Numbers ) | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/Banksy_Finance.html b/applications/Banksy_Finance.html index 28d30e8c3a6..bffe067bd84 100644 --- a/applications/Banksy_Finance.html +++ b/applications/Banksy_Finance.html @@ -2,10 +2,10 @@ - + Banksy Finance | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/CESS.html b/applications/CESS.html index 1d07ced0e7a..1d30582825a 100644 --- a/applications/CESS.html +++ b/applications/CESS.html @@ -2,10 +2,10 @@ - + Cumulus Encrypted Storage System (CESS) | Web3 Foundation Grants - - + +
    Skip to main content

    Cumulus Encrypted Storage System (CESS)

    @@ -147,6 +147,6 @@

    Future PlansAdditional Information โž•โ€‹

    How did you hear about the Grants Program? We have heard from Parity Asia.

    What work has been done already? We have already implemented a design prototype and pilot test system.

    -

    Have you ever applied for other grants? We have not applied for any other grants so far.

    +

    Have you ever applied for other grants? We have not applied for any other grants so far.

    \ No newline at end of file diff --git a/applications/CILA-omnichain-infrastructure.html b/applications/CILA-omnichain-infrastructure.html index 81223c9f6d6..61dbb06b2c8 100644 --- a/applications/CILA-omnichain-infrastructure.html +++ b/applications/CILA-omnichain-infrastructure.html @@ -2,10 +2,10 @@ - + CILA - Omnichain Infrastructure | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? personal recommendation

    \ No newline at end of file diff --git a/applications/Calamar.html b/applications/Calamar.html index 207fa80e4c1..bd1375bd550 100644 --- a/applications/Calamar.html +++ b/applications/Calamar.html @@ -2,10 +2,10 @@ - + Calamar | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/Cere_Turnkey_Private_Blockchain_Network.html b/applications/Cere_Turnkey_Private_Blockchain_Network.html index c3c40dc94ab..db0880c34b0 100644 --- a/applications/Cere_Turnkey_Private_Blockchain_Network.html +++ b/applications/Cere_Turnkey_Private_Blockchain_Network.html @@ -2,10 +2,10 @@ - + Turn-key Private Standalone Blockchain Network | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/Claps.html b/applications/Claps.html index 4ff67f7608f..bdc4526332a 100644 --- a/applications/Claps.html +++ b/applications/Claps.html @@ -2,10 +2,10 @@ - + Claps Health | Web3 Foundation Grants - - + +
    Skip to main content
    +https://medium.com/dtco/blockchain-enabled-personal-health-record-os-challenges-opportunities-in-health-care-55161e3a5a32

    \ No newline at end of file diff --git a/applications/CoinFabrik_On_Ink_Integration_Tests.html b/applications/CoinFabrik_On_Ink_Integration_Tests.html index 5cad09d8cc2..6ba120c9ee6 100644 --- a/applications/CoinFabrik_On_Ink_Integration_Tests.html +++ b/applications/CoinFabrik_On_Ink_Integration_Tests.html @@ -2,10 +2,10 @@ - + CoinFabrik On Ink Integration Tests | Web3 Foundation Grants - - + +
    Skip to main content

    CoinFabrik On Ink Integration Tests

    @@ -106,6 +106,6 @@

    Future PlansReferral Program (optional) ๐Ÿ’ฐโ€‹

    Additional Information โž•โ€‹

    How did you hear about the Grants Program? Richard Casey from Parity brought this program to our attention, and we have already successfully delivered two applications as a result.

    -

    During our inquiries for this application, we briefly consulted Sam Ruberti from the ink! Team and David Hawig from the Web3 Foundation. Their encouragement motivated us to proceed with this presentation.

    +

    During our inquiries for this application, we briefly consulted Sam Ruberti from the ink! Team and David Hawig from the Web3 Foundation. Their encouragement motivated us to proceed with this presentation.

    \ No newline at end of file diff --git a/applications/CoinFabrik_On_Ink_Integration_Tests_2.html b/applications/CoinFabrik_On_Ink_Integration_Tests_2.html index 4ceadce6b36..57f98a452c1 100644 --- a/applications/CoinFabrik_On_Ink_Integration_Tests_2.html +++ b/applications/CoinFabrik_On_Ink_Integration_Tests_2.html @@ -2,10 +2,10 @@ - + CoinFabrik On Ink Integration Tests 2 | Web3 Foundation Grants - - + +
    Skip to main content

    CoinFabrik On Ink Integration Tests 2

    @@ -114,6 +114,6 @@

    Nex

    Referral Program (optional) ๐Ÿ’ฐโ€‹

    Additional Information โž•โ€‹

    How did you hear about the Grants Program? Richard Casey from Parity brought this program to our attention, and we have already successfully delivered two applications as a result.

    -

    During our inquiries for this application, we briefly consulted Sam Ruberti from the ink! Team and David Hawig from the Web3 Foundation. Their encouragement motivated us to proceed with this presentation.

    +

    During our inquiries for this application, we briefly consulted Sam Ruberti from the ink! Team and David Hawig from the Web3 Foundation. Their encouragement motivated us to proceed with this presentation.

    \ No newline at end of file diff --git a/applications/CoinFabrik_On_Ink_Integration_Tests_3.html b/applications/CoinFabrik_On_Ink_Integration_Tests_3.html index 91f56a59055..0c4fcc41eaa 100644 --- a/applications/CoinFabrik_On_Ink_Integration_Tests_3.html +++ b/applications/CoinFabrik_On_Ink_Integration_Tests_3.html @@ -2,10 +2,10 @@ - + CoinFabrik On Ink Integration Tests 3 | Web3 Foundation Grants - - + +
    Skip to main content

    CoinFabrik On Ink Integration Tests 3

    @@ -94,6 +94,6 @@

    Future PlansReferral Program (optional) ๐Ÿ’ฐโ€‹

    Additional Information โž•โ€‹

    How did you hear about the Grants Program? Richard Casey from Parity brought this program to our attention, and we have already successfully delivered two applications as a result.

    -

    During our inquiries for this application, we briefly consulted Sam Ruberti from the ink! Team and David Hawig from the Web3 Foundation. Their encouragement motivated us to proceed with this presentation.

    +

    During our inquiries for this application, we briefly consulted Sam Ruberti from the ink! Team and David Hawig from the Web3 Foundation. Their encouragement motivated us to proceed with this presentation.

    \ No newline at end of file diff --git a/applications/Coinversation.html b/applications/Coinversation.html index 35534d3f54d..6748d90a414 100644 --- a/applications/Coinversation.html +++ b/applications/Coinversation.html @@ -2,10 +2,10 @@ - + Coinversation Protocol | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/Contract_wizard.html b/applications/Contract_wizard.html index 670238dadf8..bdbeecac2c3 100644 --- a/applications/Contract_wizard.html +++ b/applications/Contract_wizard.html @@ -2,10 +2,10 @@ - + Polkadot Contract Wizard | Web3 Foundation Grants - - + +
    Skip to main content
    +

    Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/CosmWasmVM-CoreProduct.html b/applications/CosmWasmVM-CoreProduct.html index 344a1a33a37..03c87e3a758 100644 --- a/applications/CosmWasmVM-CoreProduct.html +++ b/applications/CosmWasmVM-CoreProduct.html @@ -2,10 +2,10 @@ - + CosmWasm VM - Core product | Web3 Foundation Grants - - + +
    Skip to main content
    +

    Web3 Foundation Medium and Twitter

    \ No newline at end of file diff --git a/applications/Crowdloans-FET.html b/applications/Crowdloans-FET.html index 7dcd1c64abe..1b3ccd7d14e 100644 --- a/applications/Crowdloans-FET.html +++ b/applications/Crowdloans-FET.html @@ -2,10 +2,10 @@ - + The CrowdloanFET Project | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/Cyborg.html b/applications/Cyborg.html index 115893b8de1..9cabe99795f 100644 --- a/applications/Cyborg.html +++ b/applications/Cyborg.html @@ -2,10 +2,10 @@ - + Cyborg Network - Empowering Decentralized Edge Networks | Web3 Foundation Grants - - + +
    Skip to main content

    Cyborg Network - Empowering Decentralized Edge Networks

    @@ -139,6 +139,6 @@

    web3hackx Hackathon - Hong Kong (Nov 2023) in the Infrastructure track and Polkadot Bounty.

    Megha Varshini (COO) - represented Cyborg Network at the Finals (Top 7 teams) of the PBA pitch Contest in Hong Kong (Feb 2024)

    Kresna (CTO) has also contributed to the InvArch's Web3 Foundation Grant Milestone 1 that has been completed successfully. He also contributed to the Chocolate Network as a Substrate developer for their Substrate Builder Program (SBP) Milestone 1 delivery which has been completed successfully.

    -

    Cyborg Network has been inducted into the Polkadot Alpha Builder's Program in March 2024.

    +

    Cyborg Network has been inducted into the Polkadot Alpha Builder's Program in March 2024.

    \ No newline at end of file diff --git a/applications/DAOsign.html b/applications/DAOsign.html index 98ebee15bde..03383f2f0fc 100644 --- a/applications/DAOsign.html +++ b/applications/DAOsign.html @@ -2,10 +2,10 @@ - + DAOsign | Web3 Foundation Grants - - + +
    Skip to main content
    +

    By recommendation of Richard Casey from Parity.

    \ No newline at end of file diff --git a/applications/DIA_Bridge_Attestation_Oracle.html b/applications/DIA_Bridge_Attestation_Oracle.html index 99ade9b2b75..745fc438648 100644 --- a/applications/DIA_Bridge_Attestation_Oracle.html +++ b/applications/DIA_Bridge_Attestation_Oracle.html @@ -2,10 +2,10 @@ - + Bridges Attestation Oracle | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? - personal recommendation

    \ No newline at end of file diff --git a/applications/DICO.html b/applications/DICO.html index 3b85bdd6d5e..96fe3afc019 100644 --- a/applications/DICO.html +++ b/applications/DICO.html @@ -2,10 +2,10 @@ - + DICO | Web3 Foundation Grants - - + +
    Skip to main content

    DICO

    @@ -129,6 +129,6 @@

    NumberDeliverableSpecification0LicenseApache 2.01.aSubstrate module: KYC palletKYC pallet Includes identity authentication service(IAS), KYC users, and swordholder. responsible for providing users with a decentralized KYC certification service.and provide area authentication of the account.Detailed explanation is described here1.bSubstrate module: ICO palletApply for ICO and council review for the project party. Detailed explanation is described here1.cSubstrate module: DAO palletIntegrate governance with the ICO module to provide governance logic for the opening and closing of the ICO of the project. Detailed explanation is described here2.a.Integration with front-end(dapp)integrate our existing front end to the finalized module.2.bTutorialWe will create an screenshot tutorial and a demo video that will explain how users can start using the platform for KYC and ICO.3.Testing Guide/DocumentationCore functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests and add inline documentation of the code.4.DockerWe will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone.5.Docker-composeWe will provide a docker-compse.yml that can be used to test parachain version node delivered with this milestone.in this version, users will be invited to this testnet6.Lending module(research oriented)Innovation combining ICO and borrowing/lending. In our 2.0 version, we hope to introduce an innovation combining lending and ICO. The goal is to make ICO more diversified through borrowing/lending. Through the logic of borrowing/lending, and participation in ICO, the participants will be more diverse. At the same time, in the 2.0 testnet, we will let users participate in this pallet. According to the test results, publish a blog to show the test results.

    +
    NumberDeliverableSpecification
    0LicenseApache 2.0
    1.aSubstrate module: KYC palletKYC pallet Includes identity authentication service(IAS), KYC users, and swordholder. responsible for providing users with a decentralized KYC certification service.and provide area authentication of the account.Detailed explanation is described here
    1.bSubstrate module: ICO palletApply for ICO and council review for the project party. Detailed explanation is described here
    1.cSubstrate module: DAO palletIntegrate governance with the ICO module to provide governance logic for the opening and closing of the ICO of the project. Detailed explanation is described here
    2.a.Integration with front-end(dapp)integrate our existing front end to the finalized module.
    2.bTutorialWe will create an screenshot tutorial and a demo video that will explain how users can start using the platform for KYC and ICO.
    3.Testing Guide/DocumentationCore functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests and add inline documentation of the code.
    4.DockerWe will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone.
    5.Docker-composeWe will provide a docker-compse.yml that can be used to test parachain version node delivered with this milestone.in this version, users will be invited to this testnet
    6.Lending module(research oriented)Innovation combining ICO and borrowing/lending. In our 2.0 version, we hope to introduce an innovation combining lending and ICO. The goal is to make ICO more diversified through borrowing/lending. Through the logic of borrowing/lending, and participation in ICO, the participants will be more diverse. At the same time, in the 2.0 testnet, we will let users participate in this pallet. According to the test results, publish a blog to show the test results.
    \ No newline at end of file diff --git a/applications/DINFRA.html b/applications/DINFRA.html index 92a84a6c344..7caa4b24ed4 100644 --- a/applications/DINFRA.html +++ b/applications/DINFRA.html @@ -2,10 +2,10 @@ - + DINFRA | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/DKSAP.html b/applications/DKSAP.html index b432565112d..0eed4f6195e 100644 --- a/applications/DKSAP.html +++ b/applications/DKSAP.html @@ -2,10 +2,10 @@ - + DKSAP | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/DNFT.html b/applications/DNFT.html index ceba2413387..d3f7775cd31 100644 --- a/applications/DNFT.html +++ b/applications/DNFT.html @@ -2,10 +2,10 @@ - + DNFT Protocol | Web3 Foundation Grants - - + +
    Skip to main content
    +4.Pallet_dao, we will add a governance mechanism to lanch proposals.

    \ No newline at end of file diff --git a/applications/Dante_Network.html b/applications/Dante_Network.html index a1447a5f0b0..bd240b824ef 100644 --- a/applications/Dante_Network.html +++ b/applications/Dante_Network.html @@ -2,10 +2,10 @@ - + Dante Network | Web3 Foundation Grants - - + +
    Skip to main content

    Dante Network

    @@ -184,6 +184,6 @@

    Future PlansAdditional Information โž•โ€‹

    We highly endorse the philosophy of Web3 Foundation. We think the web3 world is expected to be an โ€œinternetโ€ of multi-chains, each of which can provide its own special features and every participant can share it worldwide. So there should be a kind of infrastructure that can provide consistent and convenient multi-chain interoperability for DApps in Web3 so that they can focus on their application business. At that time, DApps can serve the whole web3 market instead of staying in some certain ecosystem.

    In our idea, we think different chains are like realms in mythology. There are barriers for users to having universal transportation to travel around the different realms. And there is Bifrost to open a teleport between realms, but it is neither cheap nor easy. So inspired by this, we want to grow a โ€œWorld Treeโ€ that supports open and collaborative ecosystems in web3.

    -

    It can take roots in the computing resources and storage infrastructures in web3 and web2 to provide orderly resource scheduling. And it can grow by offering non-differentiated data collaboration services for DApps in web3 and providing valid resources. This is why we have the Dante Network.

    +

    It can take roots in the computing resources and storage infrastructures in web3 and web2 to provide orderly resource scheduling. And it can grow by offering non-differentiated data collaboration services for DApps in web3 and providing valid resources. This is why we have the Dante Network.

    \ No newline at end of file diff --git a/applications/Datagen_Project.html b/applications/Datagen_Project.html index 8b33c7e333d..af1440c26e9 100644 --- a/applications/Datagen_Project.html +++ b/applications/Datagen_Project.html @@ -2,10 +2,10 @@ - + Datagen Project | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/DeepAccountAnalytics-PolkadotDataAlliance.html b/applications/DeepAccountAnalytics-PolkadotDataAlliance.html index 04041cc84da..36858773772 100644 --- a/applications/DeepAccountAnalytics-PolkadotDataAlliance.html +++ b/applications/DeepAccountAnalytics-PolkadotDataAlliance.html @@ -2,10 +2,10 @@ - + Web3 Foundation Deep Account Analytics in Three Tiers for the Polkadot Data Alliance | Web3 Foundation Grants - - + +
    Skip to main content
    +contributors.

    \ No newline at end of file diff --git a/applications/Deitos_Network.html b/applications/Deitos_Network.html index 96509897ffd..c6741cbd270 100644 --- a/applications/Deitos_Network.html +++ b/applications/Deitos_Network.html @@ -2,10 +2,10 @@ - + Deitos Network | Web3 Foundation Grants - - + +
    Skip to main content
    +

    The team has a longstanding engagement with the ecosystem, making us well-acquainted with Web3 grants.

    \ No newline at end of file diff --git a/applications/Diffy_chat.html b/applications/Diffy_chat.html index b2003da3bce..25f4c27345e 100644 --- a/applications/Diffy_chat.html +++ b/applications/Diffy_chat.html @@ -2,10 +2,10 @@ - + Diffy messenger | Web3 Foundation Grants - - + +
    Skip to main content
    +

    These should be developed under later stages of the project.

    \ No newline at end of file diff --git a/applications/DipoleOracle.html b/applications/DipoleOracle.html index cf68480435a..d4440b37f37 100644 --- a/applications/DipoleOracle.html +++ b/applications/DipoleOracle.html @@ -2,10 +2,10 @@ - + Dipole Oracle | Web3 Foundation Grants - - + +
    Skip to main content

    Dipole Oracle

    @@ -105,6 +105,6 @@

    About Dipoleโ€‹

    -

    Dipole Tech is a Distributed Energy Resource aggregator, providing services for the massive amount of distributed energy assets that will emerge in the future and facilitating the decarbonization of the energy system. Dipole Tech develops an independent Substrate-based blockchain which records all stages within the industry and enables interoperability from DER assets. Learn more by visiting the Dipole Tech website or following them on Twitter.

    +

    Dipole Tech is a Distributed Energy Resource aggregator, providing services for the massive amount of distributed energy assets that will emerge in the future and facilitating the decarbonization of the energy system. Dipole Tech develops an independent Substrate-based blockchain which records all stages within the industry and enables interoperability from DER assets. Learn more by visiting the Dipole Tech website or following them on Twitter.

    \ No newline at end of file diff --git a/applications/DistributedKeyManagement.html b/applications/DistributedKeyManagement.html index 73e58ad0ff8..c41a276ff89 100644 --- a/applications/DistributedKeyManagement.html +++ b/applications/DistributedKeyManagement.html @@ -2,10 +2,10 @@ - + Distributed Key Management | Web3 Foundation Grants - - + +
    Skip to main content

    Distributed Key Management

    @@ -102,6 +102,6 @@

    45,000granttodeveloptheKryptikwalletinterface.Thisworkwrappedthekeymanagementsystemwithsoftwarethatsupportsmultichainswaps,collectibles,payments,etc.Ialsoreceived45,000 grant to develop the Kryptik wallet interface. This work wrapped the key management system with software that supports multi chain swaps, collectibles, payments, etc. I also received 20,000 from the Solana Foundation to provide open source documentation and Solana specific examples. Both of these grants are directed towards the Kryptik wallet interface, not the key management system which was devised separately.

    Finally, I received $500 from Carnegie Mellon to build the key manager and host the wallet interface.

    **How does this project benefit the Polkadot/Kusama/Substrate ecosystem? -Asymmetric key management is an open issue that affects every blockchain ecosystem. An improved key management system will help improve wallet design which, in turn, will help improve the user experience of the Polkadot/Kusama/Substrate ecosystem. The research proposed above will provide foundational knowledge and software that can be integrated into existing Polkadot related wallets and in emerging wallets that have yet to be designed. In summary, successful execution of the grant will result in a simple and more secure way to interact with the Polkadot/Kusama/Substrate ecosystem. This will benefit users, who will have an improved wallet experience, and developers who can build upon a novel approach to key management.

    +Asymmetric key management is an open issue that affects every blockchain ecosystem. An improved key management system will help improve wallet design which, in turn, will help improve the user experience of the Polkadot/Kusama/Substrate ecosystem. The research proposed above will provide foundational knowledge and software that can be integrated into existing Polkadot related wallets and in emerging wallets that have yet to be designed. In summary, successful execution of the grant will result in a simple and more secure way to interact with the Polkadot/Kusama/Substrate ecosystem. This will benefit users, who will have an improved wallet experience, and developers who can build upon a novel approach to key management.

    \ No newline at end of file diff --git a/applications/DotPay.html b/applications/DotPay.html index d5267e9d57a..a9a906b9d1f 100644 --- a/applications/DotPay.html +++ b/applications/DotPay.html @@ -2,10 +2,10 @@ - + DOT PAY | Web3 Foundation Grants - - + +
    Skip to main content
    +

    And we hope that open source paid collaboration More decentralized rather than relying on a certain company.

    \ No newline at end of file diff --git a/applications/DotPulse.html b/applications/DotPulse.html index 58e9da97fa5..a1504ea2e7f 100644 --- a/applications/DotPulse.html +++ b/applications/DotPulse.html @@ -2,10 +2,10 @@ - + DotPulse | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? Web3 Foundation Website / Friends & Colleagues

    \ No newline at end of file diff --git a/applications/Doter.html b/applications/Doter.html index 19f7c95cbae..493eff47d1c 100644 --- a/applications/Doter.html +++ b/applications/Doter.html @@ -2,10 +2,10 @@ - + Doter (A browser extension wallet for Polkadot) | Web3 Foundation Grants - - + +
    Skip to main content
    +

    So far, we have developed at our own expense, but in order to have sufficient funds to support the realization of our long-term vision, we will try to obtain the support of investment institutions.

    \ No newline at end of file diff --git a/applications/Dotflow.html b/applications/Dotflow.html index 4019f2776ee..c181ada2097 100644 --- a/applications/Dotflow.html +++ b/applications/Dotflow.html @@ -2,10 +2,10 @@ - + Dotflow | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? GitHub

    \ No newline at end of file diff --git a/applications/Eiger_Storage_on_Polkadot_1.html b/applications/Eiger_Storage_on_Polkadot_1.html index 735a32234d8..7b5ed088018 100644 --- a/applications/Eiger_Storage_on_Polkadot_1.html +++ b/applications/Eiger_Storage_on_Polkadot_1.html @@ -2,10 +2,10 @@ - + Proposal: Storage solution on Polkadot | Web3 Foundation Grants - - + +
    Skip to main content

    Proposal: Storage solution on Polkadot

    @@ -86,6 +86,6 @@

    Future Plansโ€‹

    This initial grant will produce a game plan on how exactly this storage network will work. Using this knowledge we will submit another future proposal to build this solution. Once this storage solution has been built, it will be voted on by a governance vote. If successful then this system parachain will be available to be used by anyone in the ecosystem and payable in native DOT.

    Additional Information โž•โ€‹

    -

    How did you hear about the Grants Program? We are working on MoveVM pallet grant which asnwers the original RFP from the foundation so we were familiar with the ecosystem.

    +

    How did you hear about the Grants Program? We are working on MoveVM pallet grant which asnwers the original RFP from the foundation so we were familiar with the ecosystem.

    \ No newline at end of file diff --git a/applications/EverlastingCash.html b/applications/EverlastingCash.html index 3ebf9f9b66b..0b64b840455 100644 --- a/applications/EverlastingCash.html +++ b/applications/EverlastingCash.html @@ -2,10 +2,10 @@ - + Everlasting Cash | Web3 Foundation Grants - - + +
    Skip to main content
    +

    ย To the best of our knowledge, there is no project about anti-inflation stablecoin that is similar to our project. Please let us know if there are any.

    \ No newline at end of file diff --git a/applications/FIAT-on-off-ramp.html b/applications/FIAT-on-off-ramp.html index 341e5034b60..6a9c0067788 100644 --- a/applications/FIAT-on-off-ramp.html +++ b/applications/FIAT-on-off-ramp.html @@ -2,10 +2,10 @@ - + FIAT on-off-ramp | Web3 Foundation Grants - - + +
    Skip to main content

    FIAT on-off-ramp

    @@ -243,6 +243,6 @@

    +-------------+          +-------------------+              +-------------------+                         +---------------+           +---------------+         
    | BankAccount | | OpenBankingClient | | EventProcessing | | FiatChain | | TargetAccount |
    +-------------+ +-------------------+ +-------------------+ +---------------+ +---------------+
    | | | | |
    | | | | |
    | | | | |
    | | | | |
    | | Check new Transactions | | |
    | |<---------------------------------| | |
    | | | | |
    | daily statement | | | |
    |<--------------------------| | | |
    | | | | |
    | | | found new incoming Payment:+100 โ‚ฌ | |
    | | |---------------------------------- | |
    | | | | | |
    | | |<--------------------------------- | |
    | | | | |
    | | | mint 100 to TargetAddress | |
    | | |------------------------------------------>| |
    | | | | |
    | | | | assign 100 tokens |
    | | | |-------------------------->|
    | | | | |
    | | | | |
    | | | | |
    | | | | |

    +
    +-------------+          +-------------------+              +-------------------+                         +---------------+           +---------------+         
    | BankAccount | | OpenBankingClient | | EventProcessing | | FiatChain | | TargetAccount |
    +-------------+ +-------------------+ +-------------------+ +---------------+ +---------------+
    | | | | |
    | | | | |
    | | | | |
    | | | | |
    | | Check new Transactions | | |
    | |<---------------------------------| | |
    | | | | |
    | daily statement | | | |
    |<--------------------------| | | |
    | | | | |
    | | | found new incoming Payment:+100 โ‚ฌ | |
    | | |---------------------------------- | |
    | | | | | |
    | | |<--------------------------------- | |
    | | | | |
    | | | mint 100 to TargetAddress | |
    | | |------------------------------------------>| |
    | | | | |
    | | | | assign 100 tokens |
    | | | |-------------------------->|
    | | | | |
    | | | | |
    | | | | |
    | | | | |
    \ No newline at end of file diff --git a/applications/Faucet.html b/applications/Faucet.html index 695d6a05067..40f57743eb3 100644 --- a/applications/Faucet.html +++ b/applications/Faucet.html @@ -2,10 +2,10 @@ - + Generic sybil-resistant faucet | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? Developer DAO

    \ No newline at end of file diff --git a/applications/Fennel_Protocol.html b/applications/Fennel_Protocol.html index 8525350f4d2..01f2e0df761 100644 --- a/applications/Fennel_Protocol.html +++ b/applications/Fennel_Protocol.html @@ -2,10 +2,10 @@ - + Fennel Protocol | Web3 Foundation Grants - - + +
    Skip to main content
    +We've also begun writing function and trait stubs to ensure that thorough documentation can be generated.

    \ No newline at end of file diff --git a/applications/FuturFusion.html b/applications/FuturFusion.html index d41467abe6b..beabe03105f 100644 --- a/applications/FuturFusion.html +++ b/applications/FuturFusion.html @@ -2,10 +2,10 @@ - + Futur & Fusion Protocols | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/FuzzLand.html b/applications/FuzzLand.html index dfe6a20bf54..701e227f443 100644 --- a/applications/FuzzLand.html +++ b/applications/FuzzLand.html @@ -2,10 +2,10 @@ - + FuzzLand | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? Personal recommendation

    \ No newline at end of file diff --git a/applications/Gafi.html b/applications/Gafi.html index 1286f83dda0..8381200437b 100644 --- a/applications/Gafi.html +++ b/applications/Gafi.html @@ -2,10 +2,10 @@ - + Gafi Network - The Network of Game Finance | Web3 Foundation Grants - - + +
    Skip to main content

    Gafi Network - The Network of Game Finance

    @@ -203,6 +203,6 @@

    NumberDeliverableSpecification0a.Apache 2.00b.DocumentationModule documentation and Wiki(optional)0c.Testing GuideDispatable functions and public functions must have the comment followed by a unittest0d.DockerWe will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone.0e.Articlewiki.gafi.network and Medium1.Substrate module: pallet game-creatorhttps://wiki.gafi.network/learn/game-creator2.Weights/Benchmarkingimplement benchmarking for pallets to determine appropriate weights3.DemoDemo new features in milestone 3 with guide article

    Future Plansโ€‹

    Fortunately, we will integrate Heroes & Empires into Gafi Network first, allowing us to devote all of our resources (20 team members including marketing, QA, and QC) to expanding, using, and testing Gafi Network.

    -

    We will work with several top NFT Game projects and teams in Vietnam such as Axie Infinity, Imba Game, and StarPunk to deploy on Gafi Network.

    +

    We will work with several top NFT Game projects and teams in Vietnam such as Axie Infinity, Imba Game, and StarPunk to deploy on Gafi Network.

    \ No newline at end of file diff --git a/applications/GenesisDAO.html b/applications/GenesisDAO.html index 12a229c8479..7049bc05fde 100644 --- a/applications/GenesisDAO.html +++ b/applications/GenesisDAO.html @@ -2,10 +2,10 @@ - + GenesisDAO | Web3 Foundation Grants - - + +
    Skip to main content
    +

    The important outline for this project is to become a common good parachain, that acts as an infrastructure service for the ecosystem. Therefore extendable integrations with other important chains in the polkadot realm as well as attracting dao-specific protocols to extend the base chain functionality is part of the near term roadmap as well.

    \ No newline at end of file diff --git a/applications/Gluon_decentralized_hardware_crypto_wallet_services.html b/applications/Gluon_decentralized_hardware_crypto_wallet_services.html index 2f0e232ea41..8ec9b9bb283 100644 --- a/applications/Gluon_decentralized_hardware_crypto_wallet_services.html +++ b/applications/Gluon_decentralized_hardware_crypto_wallet_services.html @@ -2,10 +2,10 @@ - + Gluon - Decentralized Hardware Crypto Wallet Services | Web3 Foundation Grants - - + +
    Skip to main content

    Gluon - Decentralized Hardware Crypto Wallet Services

    @@ -275,6 +275,6 @@

    Future Plans

    Most items in this to-do list are part of the TEA Project plan. When TEA is ready, most of the features will be available too.

    Additional Information โž•โ€‹

    -

    We started the TEA project in 2019. It has been under the radar until recently when it was released to the public. We believe the TEA project could grow large and become the backend service platform for a new type of dApps. These dApps can go beyond the limit of traditional blockchain technologies. Gluon is just one of the many possible demo apps. Once our honor gets granted, we will start looking for investors and hire a CEO and more developers to join us. We hope to maintain a long term and close relationship with the Polkadot community.

    +

    We started the TEA project in 2019. It has been under the radar until recently when it was released to the public. We believe the TEA project could grow large and become the backend service platform for a new type of dApps. These dApps can go beyond the limit of traditional blockchain technologies. Gluon is just one of the many possible demo apps. Once our honor gets granted, we will start looking for investors and hire a CEO and more developers to join us. We hope to maintain a long term and close relationship with the Polkadot community.

    \ No newline at end of file diff --git a/applications/Grant_management_webapp.html b/applications/Grant_management_webapp.html index 69cfa1c817f..f465a9a4a2d 100644 --- a/applications/Grant_management_webapp.html +++ b/applications/Grant_management_webapp.html @@ -2,10 +2,10 @@ - + Grant Management Webapp | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? Grants Portal

    \ No newline at end of file diff --git a/applications/GreenLemon.html b/applications/GreenLemon.html index 3062f7bc9bb..153dfd348cf 100644 --- a/applications/GreenLemon.html +++ b/applications/GreenLemon.html @@ -2,10 +2,10 @@ - + Green Lemon | Web3 Foundation Grants - - + +
    Skip to main content
    +

    Proposal: Dual-Key Stealth Address Protocol

    \ No newline at end of file diff --git a/applications/High_availability_validator_setup.html b/applications/High_availability_validator_setup.html index 08b84c20184..1aaab63c814 100644 --- a/applications/High_availability_validator_setup.html +++ b/applications/High_availability_validator_setup.html @@ -2,10 +2,10 @@ - + High-availability validator setup | Web3 Foundation Grants - - + +
    Skip to main content
    +Similar for rounds and sessions.

    \ No newline at end of file diff --git a/applications/Hyperdot.html b/applications/Hyperdot.html index 6fdf4d5438c..1291f6f2bd9 100644 --- a/applications/Hyperdot.html +++ b/applications/Hyperdot.html @@ -2,10 +2,10 @@ - + Hyperdot - Powerful data analysis and creation platform โ€” RFP | Web3 Foundation Grants - - + +
    Skip to main content
    +

    Lastly, we expect to collaborate with foundations to promote our platform and showcase its value to more users. We will also engage with the community through platforms such as Twitter, YouTube, Medium, and others to introduce hyperdot.

    \ No newline at end of file diff --git a/applications/ISO-8583-implementation.html b/applications/ISO-8583-implementation.html index 11f3e11564e..0febdc5a431 100644 --- a/applications/ISO-8583-implementation.html +++ b/applications/ISO-8583-implementation.html @@ -2,10 +2,10 @@ - + ISO-8583 implementation | Web3 Foundation Grants - - + +
    Skip to main content
    +

    I have previously worked on several grant projects (listed above) and generally have been in Polkadot ecosystem for more than 3 years.

    \ No newline at end of file diff --git a/applications/ISO20022-Implementation-POC.html b/applications/ISO20022-Implementation-POC.html index a5ee6df546e..aba27da96cb 100644 --- a/applications/ISO20022-Implementation-POC.html +++ b/applications/ISO20022-Implementation-POC.html @@ -2,10 +2,10 @@ - + ISO20022 Ecosystem Research and Technical Design | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/ISO20022.html b/applications/ISO20022.html index d21826ea0b2..6b2fde46013 100644 --- a/applications/ISO20022.html +++ b/applications/ISO20022.html @@ -2,10 +2,10 @@ - + ISO20022 PoC | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? Web3 Foundation Website and previous work interactions

    \ No newline at end of file diff --git a/applications/Idavoll Network.html b/applications/Idavoll Network.html index 2c607b5e9c9..1daa25e77d7 100644 --- a/applications/Idavoll Network.html +++ b/applications/Idavoll Network.html @@ -2,10 +2,10 @@ - + Idavoll Network | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/Integrating-ISO8583.html b/applications/Integrating-ISO8583.html index 510a80283c1..be384f30f75 100644 --- a/applications/Integrating-ISO8583.html +++ b/applications/Integrating-ISO8583.html @@ -2,10 +2,10 @@ - + Integrating ISO-8583 | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? Previous Grantee

    \ No newline at end of file diff --git a/applications/Interstellar-Network.html b/applications/Interstellar-Network.html index d22d3ca6f7b..2aac42fb3eb 100644 --- a/applications/Interstellar-Network.html +++ b/applications/Interstellar-Network.html @@ -2,10 +2,10 @@ - + Interstellar - Wallet Phase 1 | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/Interstellar-network2.html b/applications/Interstellar-network2.html index 21d94833dbc..7c4d747506f 100644 --- a/applications/Interstellar-network2.html +++ b/applications/Interstellar-network2.html @@ -2,10 +2,10 @@ - + Interstellar - Wallet Phase 2 (amended) | Web3 Foundation Grants - - + +
    Skip to main content

    Interstellar - Wallet Phase 2 (amended)

    @@ -171,6 +171,6 @@

    NumberDeliverableSpecification0a.LicenseAPACHE 20b.DocumentationWe will provide both inline documentation of the code and a basic tutorial that explains how a user can (for example) spin up our stack and send test transactions, which will show how the new functionality works.0c.Testing and Testing GuideCore functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests.1.Display Circuit updateWe will modify the current display circuit to enable a more comfortable user experience by decreasing the cognitive load needed for the user to read the screen. - likely by adding specific sub-circuits to manage a set of probabilities of displaying segments for each frame, then fine tuned segments ON/OFF per frame to improve readbility2.Light security screenWe will provide a less secure but very comfortable to read secure screen version using fading with less blinking (link) - this non-screenshot proof version will be used later with our adaptive security framework

    Additional information (reason for amendment):

    As we prioritize the user experience and aim to showcase the FPS improvement and overall viusal improvement for the user compared to the previous milestone, there is no need for a Docker here. Instead, we provide an offline demo app to simplify the evaluation.

    -

    However, if you'd like to test the full pipeline for this milestone, we can provide you with both a Docker and an online version of the app and the related demo tutorial.

    +

    However, if you'd like to test the full pipeline for this milestone, we can provide you with both a Docker and an online version of the app and the related demo tutorial.

    \ No newline at end of file diff --git a/applications/InvArch.html b/applications/InvArch.html index 81feaf5ca04..aeda8a0f708 100644 --- a/applications/InvArch.html +++ b/applications/InvArch.html @@ -2,10 +2,10 @@ - + The InvArch - INV4 Frame : IP Assets, Licensings, & CLI tool for the Substate ecosystem. | Web3 Foundation Grants - - + +
    Skip to main content
    +Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/JsonRpsee-socks5-proxy.html b/applications/JsonRpsee-socks5-proxy.html index e6ea02b5d8c..715b33c7099 100644 --- a/applications/JsonRpsee-socks5-proxy.html +++ b/applications/JsonRpsee-socks5-proxy.html @@ -2,10 +2,10 @@ - + JsonRpsee socks5 proxy | Web3 Foundation Grants - - + +
    Skip to main content
    +

    If there are any problems with this feature, I will still maintain it.

    \ No newline at end of file diff --git a/applications/JuniDB.html b/applications/JuniDB.html index 63cce5c8d22..482764a8c27 100644 --- a/applications/JuniDB.html +++ b/applications/JuniDB.html @@ -2,10 +2,10 @@ - + JuniDB | Web3 Foundation Grants - - + +
    Skip to main content
    +

    The development of the prototype and initial research have been started with the personal funds. We have tried for a General Grant first, and decided to start with an Open grant Program relying on recommendation. Also we have applied for the Substrate Builders Programm and have proceeded with a general interview to iterate around steps going forward. We have also opened a dialogue with Blockchers & IPFS.

    \ No newline at end of file diff --git a/applications/KSM-embeddable-tip-or-donate-button.html b/applications/KSM-embeddable-tip-or-donate-button.html index 123f6eea70c..4c4a03e5547 100644 --- a/applications/KSM-embeddable-tip-or-donate-button.html +++ b/applications/KSM-embeddable-tip-or-donate-button.html @@ -2,10 +2,10 @@ - + Tip or Donate KSM Embeddable Button | Web3 Foundation Grants - - + +
    Skip to main content

    Tip or Donate KSM Embeddable Button

    @@ -75,6 +75,6 @@

    Addit
    • Are there are any teams who have already contributed (financially) to the project? No.
    • Have you applied for other grants so far? We have received funding and completed Ink! Remix plugin.
    • -

    +
    \ No newline at end of file diff --git a/applications/Knowledge-Oriented-Framework.html b/applications/Knowledge-Oriented-Framework.html index de2ae47956b..124f7c55386 100644 --- a/applications/Knowledge-Oriented-Framework.html +++ b/applications/Knowledge-Oriented-Framework.html @@ -2,10 +2,10 @@ - + A Knowledge-Oriented Approach to Enhance Integration and Communicability in the Polkadot Ecosystem | Web3 Foundation Grants - - + +
    Skip to main content
    +

    We have already submited proposals to Waves and VeChain grant programs.

    \ No newline at end of file diff --git a/applications/Koiverse.html b/applications/Koiverse.html index c3887b7119f..6802cedbca4 100644 --- a/applications/Koiverse.html +++ b/applications/Koiverse.html @@ -2,10 +2,10 @@ - + Koi Metaverse | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/Lastic.html b/applications/Lastic.html index 79e92c98f40..60a384abc86 100644 --- a/applications/Lastic.html +++ b/applications/Lastic.html @@ -2,10 +2,10 @@ - + Lastic | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/Libra.html b/applications/Libra.html index e967ef08355..6433b027714 100644 --- a/applications/Libra.html +++ b/applications/Libra.html @@ -2,10 +2,10 @@ - + Libra - Decentralized Payment Network | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/LightSpell-proposal.html b/applications/LightSpell-proposal.html index 12dde6ef398..3fe85722e3a 100644 --- a/applications/LightSpell-proposal.html +++ b/applications/LightSpell-proposal.html @@ -2,10 +2,10 @@ - + LightSpell XCM API by ParaSpellโœจ | Web3 Foundation Grants - - + +
    Skip to main content

    LightSpell XCM API by ParaSpellโœจ

    @@ -216,6 +216,6 @@
    Application, Delivery
  • ๐Ÿ—๏ธ Web 3 Foundation phase 3 grant (Make SDK better) Milestone 1 / 1 delivered Application, Delivery
  • ๐Ÿ“˜ Article about Polkadot & ParaSpell created & accepted to be presented at international cross-chain conference IEEE BCCA 2023 held in Kuwait [links TBA]
  • -
    +
    \ No newline at end of file diff --git a/applications/LiisaPortfolioTracker.html b/applications/LiisaPortfolioTracker.html index 2a20787af7b..d8abfca5743 100644 --- a/applications/LiisaPortfolioTracker.html +++ b/applications/LiisaPortfolioTracker.html @@ -2,10 +2,10 @@ - + Polkadot NFT Portfolio Tracker by Liisa - MVP | Web3 Foundation Grants - - + +
    Skip to main content
    +No

    \ No newline at end of file diff --git a/applications/MAP-Bridge.html b/applications/MAP-Bridge.html index 71328f00738..b5942289853 100644 --- a/applications/MAP-Bridge.html +++ b/applications/MAP-Bridge.html @@ -2,10 +2,10 @@ - + Map Bridge | Web3 Foundation Grants - - + +
    Skip to main content

    Map Bridge

    @@ -76,6 +76,6 @@

    Future Plansโ€‹

    -

    We plan to extend our bridge to most POW and POS type blockchains in the future. Through our bridge we could link more and more other blockchain systems into Polkadot Ecosystem .

    +

    We plan to extend our bridge to most POW and POS type blockchains in the future. Through our bridge we could link more and more other blockchain systems into Polkadot Ecosystem .

    \ No newline at end of file diff --git a/applications/MIXER.html b/applications/MIXER.html index e0f9f6ba6eb..f9e247c2e78 100644 --- a/applications/MIXER.html +++ b/applications/MIXER.html @@ -2,10 +2,10 @@ - + Webb Mixer | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/MIXERv2.html b/applications/MIXERv2.html index aad3443e4c0..082cc84f571 100644 --- a/applications/MIXERv2.html +++ b/applications/MIXERv2.html @@ -2,10 +2,10 @@ - + Webb Mixer Extended | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/Maki.html b/applications/Maki.html index e89d4facde0..d84ef27069b 100644 --- a/applications/Maki.html +++ b/applications/Maki.html @@ -2,10 +2,10 @@ - + Maki | Web3 Foundation Grants - - + +
    Skip to main content
    +I've been part of the program once (polk-auction application)

    \ No newline at end of file diff --git a/applications/MangoBOX-Protocol.html b/applications/MangoBOX-Protocol.html index 0e4176da6ea..ab75c76d558 100644 --- a/applications/MangoBOX-Protocol.html +++ b/applications/MangoBOX-Protocol.html @@ -2,10 +2,10 @@ - + MangoBOX Protocol | Web3 Foundation Grants - - + +
    Skip to main content
    +

    NO.

    \ No newline at end of file diff --git a/applications/MangoSale_Protocol.html b/applications/MangoSale_Protocol.html index 8db1549f4e7..ad309698366 100644 --- a/applications/MangoSale_Protocol.html +++ b/applications/MangoSale_Protocol.html @@ -2,10 +2,10 @@ - + MangoSale Protocol | Web3 Foundation Grants - - + +
    Skip to main content
    +

    NO.

    \ No newline at end of file diff --git a/applications/MeProtocol.html b/applications/MeProtocol.html index 656641194af..916808c2910 100644 --- a/applications/MeProtocol.html +++ b/applications/MeProtocol.html @@ -2,10 +2,10 @@ - + Me Protocol | Web3 Foundation Grants - - + +
    Skip to main content
    +

    Previous grants: We received financial support in the form of an investment from the Blockchain Founders Group.

    \ No newline at end of file diff --git a/applications/Melodot.html b/applications/Melodot.html index 3471d1c458e..3e9e9e22fb0 100644 --- a/applications/Melodot.html +++ b/applications/Melodot.html @@ -2,10 +2,10 @@ - + Melodot: Incentive-compatible data availability layer | Web3 Foundation Grants - - + +
    Skip to main content
    +

    We have previously applied for ZeroDAO-node, which has now been renamed to (ourspace).

    \ No newline at end of file diff --git a/applications/Meta_Defender.html b/applications/Meta_Defender.html index 1fa85972568..851ad6cc3bf 100644 --- a/applications/Meta_Defender.html +++ b/applications/Meta_Defender.html @@ -2,10 +2,10 @@ - + Meta Defender | Web3 Foundation Grants - - + +
    Skip to main content

    Meta Defender

    @@ -248,6 +248,6 @@

    https://twitter.com/AcalaNetwork/status/1527290444379394049?s=20&t=u60vX2VZTWvSoZ1x62Y-sA

    Meta Defender is also in the 2022 cohort of Web3.0 Bootcamp supported by Web3 Foundation, Parity and Wanxiang Blockchain Labs.

    -

    Since we have participated in a few activities in the Polkadot Ecosystem and have a profound understanding of the eco, we have been advised that we could apply for the grants program and grow with Polkadot.

    +

    Since we have participated in a few activities in the Polkadot Ecosystem and have a profound understanding of the eco, we have been advised that we could apply for the grants program and grow with Polkadot.

    \ No newline at end of file diff --git a/applications/MigrationEase.html b/applications/MigrationEase.html index 8d2bc49818f..a4e9cd5b258 100644 --- a/applications/MigrationEase.html +++ b/applications/MigrationEase.html @@ -2,10 +2,10 @@ - + MigrationEase | Web3 Foundation Grants - - + +
    Skip to main content
    +

    Zondax has been contributing to the Polkadot ecosystem for several years, and has successfully completed several grants.

    \ No newline at end of file diff --git a/applications/Multix-a-simple-UI-for-complex-multisig.html b/applications/Multix-a-simple-UI-for-complex-multisig.html index 48ddaee1f0c..e9e8279e56a 100644 --- a/applications/Multix-a-simple-UI-for-complex-multisig.html +++ b/applications/Multix-a-simple-UI-for-complex-multisig.html @@ -2,10 +2,10 @@ - + Multix a simple interface for complex multisigs | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? At W3F and Parity's request

    \ No newline at end of file diff --git a/applications/NFTStore_Network.html b/applications/NFTStore_Network.html index db729041566..cc03ca3cb7f 100644 --- a/applications/NFTStore_Network.html +++ b/applications/NFTStore_Network.html @@ -2,10 +2,10 @@ - + NFTStore | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.html b/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.html index c7a36ce6596..2834d739d10 100644 --- a/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.html +++ b/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.html @@ -2,10 +2,10 @@ - + Protocol for NFT Migration and Data Exchange | Web3 Foundation Grants - - + +
    Skip to main content
    +

    Learn more about our vision for the bridge here: link

    \ No newline at end of file diff --git a/applications/NeuroZK.html b/applications/NeuroZK.html index 4db131ad077..cb55b8a72b6 100644 --- a/applications/NeuroZK.html +++ b/applications/NeuroZK.html @@ -2,10 +2,10 @@ - + NeuroZK - Empowering AI at the edge with zero-knowledge proofs. | Web3 Foundation Grants - - + +
    Skip to main content

    NeuroZK - Empowering AI at the edge with zero-knowledge proofs.

    @@ -201,6 +201,6 @@

    Milestone 1 that has been completed successfully. He also contributed to the Chocolate Network as a Substrate developer for their Substrate Builder Program (SBP) Milestone 1 delivery which has been completed successfully.

    Cyborg Network has been inducted into the Polkadot Alpha Builder's Program in March 2024.

    -

    In June 2024, we secured 3rd place in the Polkadot Global Series: North America Hackathon and 2nd place in the Polkadot Prodigy Hackathon for the Web3 & Tooling track.

    +

    In June 2024, we secured 3rd place in the Polkadot Global Series: North America Hackathon and 2nd place in the Polkadot Prodigy Hackathon for the Web3 & Tooling track.

    \ No newline at end of file diff --git a/applications/Nolik.html b/applications/Nolik.html index 4b3767a7d7e..fc7db7401f8 100644 --- a/applications/Nolik.html +++ b/applications/Nolik.html @@ -2,10 +2,10 @@ - + Nolik | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/NuLink.html b/applications/NuLink.html index 9abc183eb59..3e7401354cc 100644 --- a/applications/NuLink.html +++ b/applications/NuLink.html @@ -2,10 +2,10 @@ - + NuLink | Web3 Foundation Grants - - + +
    Skip to main content

    NuLink

    @@ -72,6 +72,6 @@

    Update &a

    2022/02/27โ€‹

    We underestimated the total work and the time-line has now been exceeded by several months. We have already submitted our work and are waiting for review.

    This amendment updates the name of the mirror pallet to the Nuproxy pallet, and the name of the Policy Management pallet to Policy pallet.

    -

    We have decided to implement the watcher network as one single node in the current version. And we will keep working on this and support the multi-nodes network in the future.

    +

    We have decided to implement the watcher network as one single node in the current version. And we will keep working on this and support the multi-nodes network in the future.

    \ No newline at end of file diff --git a/applications/Omniverse DLT.html b/applications/Omniverse DLT.html index ea7673b989d..04866ca209b 100644 --- a/applications/Omniverse DLT.html +++ b/applications/Omniverse DLT.html @@ -2,10 +2,10 @@ - + Omniverse DLT | Web3 Foundation Grants - - + +
    Skip to main content
    +

    Thirdly, as always, we highly endorse the philosophy of the Web3 Foundation. We are continuing to build more and deeper on Polkadot.

    \ No newline at end of file diff --git a/applications/OpenSquare-offchain-voting.html b/applications/OpenSquare-offchain-voting.html index 9625f6d0da0..c37cf1d5b5f 100644 --- a/applications/OpenSquare-offchain-voting.html +++ b/applications/OpenSquare-offchain-voting.html @@ -2,10 +2,10 @@ - + OpenSquare off-chain voting for Polkadot ecosystem | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/OpenSquare_paid_qa_protocol.html b/applications/OpenSquare_paid_qa_protocol.html index 2fd5f195900..895b216110c 100644 --- a/applications/OpenSquare_paid_qa_protocol.html +++ b/applications/OpenSquare_paid_qa_protocol.html @@ -2,10 +2,10 @@ - + OpenSquare Paid QA protocol | Web3 Foundation Grants - - + +
    Skip to main content
    +writing this proposal.

    \ No newline at end of file diff --git a/applications/P2PStateChannels.html b/applications/P2PStateChannels.html index 28ea230fa30..72fe75a42cc 100644 --- a/applications/P2PStateChannels.html +++ b/applications/P2PStateChannels.html @@ -2,10 +2,10 @@ - + P2P State Channels | Web3 Foundation Grants - - + +
    Skip to main content
    +

    ** Continuation of our DF proposal - Web3 Foundation

    \ No newline at end of file diff --git a/applications/ParaSpell.html b/applications/ParaSpell.html index da46e3e117c..93993b23594 100644 --- a/applications/ParaSpell.html +++ b/applications/ParaSpell.html @@ -2,10 +2,10 @@ - + ParaSpell | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/ParaSpell_follow-up.html b/applications/ParaSpell_follow-up.html index bd4fe499129..370f6aecc24 100644 --- a/applications/ParaSpell_follow-up.html +++ b/applications/ParaSpell_follow-up.html @@ -2,10 +2,10 @@ - + ParaSpell | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/ParaSpell_follow-up2.html b/applications/ParaSpell_follow-up2.html index 94da492bcd8..91f3038f4b0 100644 --- a/applications/ParaSpell_follow-up2.html +++ b/applications/ParaSpell_follow-up2.html @@ -2,10 +2,10 @@ - + ParaSpell | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/Parallel.html b/applications/Parallel.html index 9882a04668f..f06653d7899 100644 --- a/applications/Parallel.html +++ b/applications/Parallel.html @@ -2,10 +2,10 @@ - + Parallel Finance | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/Plus-follow-up.html b/applications/Plus-follow-up.html index e87bba6acb7..185ed88de54 100644 --- a/applications/Plus-follow-up.html +++ b/applications/Plus-follow-up.html @@ -2,10 +2,10 @@ - + Polkadot js plus / Nomination pools | Web3 Foundation Grants - - + +
    Skip to main content

    Polkadot js plus / Nomination pools

    @@ -109,6 +109,6 @@

    Mi

    Future Plansโ€‹

    We have some plans to extend Plus features on parachains, as an example one plan is adding token swapping of Acala to Plus extension, supporting NFT on parachains like Efinity will be another plan for feature.

    Additional Information โž•โ€‹

    -

    How did you hear about the Grants Program? In the initial stage of Plus, we presented it to the core developers of the original polkadot js extension on Github, there they suggested to apply for W3F grants.

    +

    How did you hear about the Grants Program? In the initial stage of Plus, we presented it to the core developers of the original polkadot js extension on Github, there they suggested to apply for W3F grants.

    \ No newline at end of file diff --git a/applications/Plus-social-recovery-wallet.html b/applications/Plus-social-recovery-wallet.html index cd01db9e55b..9d8057a40ec 100644 --- a/applications/Plus-social-recovery-wallet.html +++ b/applications/Plus-social-recovery-wallet.html @@ -2,10 +2,10 @@ - + Polkadot js plus / Social Recovery Wallet | Web3 Foundation Grants - - + +
    Skip to main content

    Polkadot js plus / Social Recovery Wallet

    @@ -122,6 +122,6 @@

    Future Plansโ€‹

    We have some plans to extend Plus features on parachains, as an example one plan is adding light client as an endpoint to Plus extension, supporting XCMP, and Governance 2 will be other plans for feature.

    Additional Information โž•โ€‹

    -

    How did you hear about the Grants Program? In the initial stage of Plus, we presented it to the core developers of the original polkadot js extension on Github, there they suggested to apply for W3F grants.

    +

    How did you hear about the Grants Program? In the initial stage of Plus, we presented it to the core developers of the original polkadot js extension on Github, there they suggested to apply for W3F grants.

    \ No newline at end of file diff --git a/applications/Plus.html b/applications/Plus.html index 289c4add743..e166b5c9440 100644 --- a/applications/Plus.html +++ b/applications/Plus.html @@ -2,10 +2,10 @@ - + Plus: Polkadot js plus extension | Web3 Foundation Grants - - + +
    Skip to main content

    Plus: Polkadot js plus extension

    @@ -123,6 +123,6 @@

    Future Plansโ€‹

    After we finish these 2 milestones, we will publish Plus extension to Chrome and Firefox browser addon market, we have some plans to extend Plus features on parachains, as an example one plan is adding token swapping of Acala to Plus extension, supporting NFT on parachains like Efinity will be another plan for feature.

    Additional Information โž•โ€‹

    -

    How did you hear about the Grants Program? In the initial stage of Plus, we presented it to the core developers of the original polkadot js extension on Github, there they suggested us to apply for W3 grants.

    +

    How did you hear about the Grants Program? In the initial stage of Plus, we presented it to the core developers of the original polkadot js extension on Github, there they suggested us to apply for W3 grants.

    \ No newline at end of file diff --git a/applications/Plutonication.html b/applications/Plutonication.html index ee0da0eb57c..7ad520b496b 100644 --- a/applications/Plutonication.html +++ b/applications/Plutonication.html @@ -2,10 +2,10 @@ - + Plutonication | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/PoCS.html b/applications/PoCS.html index 3ff14fe4e73..2eb6501add8 100644 --- a/applications/PoCS.html +++ b/applications/PoCS.html @@ -2,10 +2,10 @@ - + Proof of Contract Stake (Pallet) | Web3 Foundation Grants - - + +
    Skip to main content
    +

    No

    \ No newline at end of file diff --git a/applications/PolkaKey.html b/applications/PolkaKey.html index c1a124bb459..289fefc24bb 100644 --- a/applications/PolkaKey.html +++ b/applications/PolkaKey.html @@ -2,10 +2,10 @@ - + PolkaKey | Web3 Foundation Grants - - + +
    Skip to main content

    PolkaKey

    @@ -52,6 +52,6 @@

    Milestone 3
  • Estimated Duration: 2 weeks
  • Costs: 0.1 BTC
  • -
    NumberDeliverableSpecification
    1.Add a Chinese + English tutorialThis tutorial is mainly about how to build an Electron app with Polkadot.js API. The tutorial will first be available on the github Wiki. If possible, i hope to publish this tutorial on Polkaworld and Substrate Dev Hub

    +
    NumberDeliverableSpecification
    1.Add a Chinese + English tutorialThis tutorial is mainly about how to build an Electron app with Polkadot.js API. The tutorial will first be available on the github Wiki. If possible, i hope to publish this tutorial on Polkaworld and Substrate Dev Hub
    \ No newline at end of file diff --git a/applications/PolkaSignIn.html b/applications/PolkaSignIn.html index de083e00f55..87316cddaa0 100644 --- a/applications/PolkaSignIn.html +++ b/applications/PolkaSignIn.html @@ -2,10 +2,10 @@ - + Polka SignIn | Web3 Foundation Grants - - + +
    Skip to main content

    Polka SignIn

    @@ -175,6 +175,6 @@

    Future Plansโ€‹

    We planned to have a web app for user to manage the access control of the logged platforms, and enable user to curate the profile information in the future.

    -

    It would be great to integrate with popular auth solutions in web technology, like passport (node js), next-auth (next.js).

    +

    It would be great to integrate with popular auth solutions in web technology, like passport (node js), next-auth (next.js).

    \ No newline at end of file diff --git a/applications/Polkadart.html b/applications/Polkadart.html index c3c9185a2e0..7bf3a24187f 100644 --- a/applications/Polkadart.html +++ b/applications/Polkadart.html @@ -2,10 +2,10 @@ - + Polkadart | Web3 Foundation Grants - - + +
    Skip to main content
    +Excel

    \ No newline at end of file diff --git a/applications/Polkadot-Dart.html b/applications/Polkadot-Dart.html index 3af92602e2a..0e930cf6533 100644 --- a/applications/Polkadot-Dart.html +++ b/applications/Polkadot-Dart.html @@ -2,10 +2,10 @@ - + Polkadot-Dart | Web3 Foundation Grants - - + +
    Skip to main content
    +

    Pocket4D

    \ No newline at end of file diff --git a/applications/Polkadot-Protocol-Conformance-Tests.html b/applications/Polkadot-Protocol-Conformance-Tests.html index f7c24611b22..197bc50213b 100644 --- a/applications/Polkadot-Protocol-Conformance-Tests.html +++ b/applications/Polkadot-Protocol-Conformance-Tests.html @@ -2,10 +2,10 @@ - + Polkadot Protocol Conformance Tests Research Proposal | Web3 Foundation Grants - - + +
    Skip to main content

    Polkadot Protocol Conformance Tests Research Proposal

    @@ -126,6 +126,6 @@

    Future PlansBased on the research findings, our team could formulate a proposal for implementing these tests and restructuring the conformance testing suite with the new approach, and/or contributing the necessary features that would enable Zombienet to be utilised for these purposes.

    Additional Information โž•โ€‹

    How did you hear about the Grants Program?

    -

    At LimeChain, we have been contributors to the Polkadot ecosystem for the last 3+ years as we believe in a multi-chain future, based on interoperability and decentralisation. Principles that are built into the core of the Polkadot network. We possess considerable expertise in developing various tools, including Gosemble, a framework for building Substrate compatible Runtimes in Go, a framework for runtimes in AssemblyScript,, and Parachain Validation Conformance Testing. Additionally, we have substantial experience in Rust/WebAssembly developer tooling from Matchstick and have actively contributed to infrastructure projects in Cosmos, Near, Filecoin, Ledger and Hedera Hashgraph.

    +

    At LimeChain, we have been contributors to the Polkadot ecosystem for the last 3+ years as we believe in a multi-chain future, based on interoperability and decentralisation. Principles that are built into the core of the Polkadot network. We possess considerable expertise in developing various tools, including Gosemble, a framework for building Substrate compatible Runtimes in Go, a framework for runtimes in AssemblyScript,, and Parachain Validation Conformance Testing. Additionally, we have substantial experience in Rust/WebAssembly developer tooling from Matchstick and have actively contributed to infrastructure projects in Cosmos, Near, Filecoin, Ledger and Hedera Hashgraph.

    \ No newline at end of file diff --git a/applications/PolkadotSnap.html b/applications/PolkadotSnap.html index 9953ba2acd4..1b1a01b6622 100644 Binary files a/applications/PolkadotSnap.html and b/applications/PolkadotSnap.html differ diff --git a/applications/Polkadot_Web_UI.html b/applications/Polkadot_Web_UI.html index 2883c0ff8de..6617e9779ee 100644 --- a/applications/Polkadot_Web_UI.html +++ b/applications/Polkadot_Web_UI.html @@ -2,10 +2,10 @@ - + Polkadot UI Web Identicon + Angular Identicon | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/Polkaholic.html b/applications/Polkaholic.html index efb76f73b1f..1fad6bfbb1a 100644 --- a/applications/Polkaholic.html +++ b/applications/Polkaholic.html @@ -2,10 +2,10 @@ - + Polkaholic.io's Multi-Chain Substrate Block Explorer | Web3 Foundation Grants - - + +
    Skip to main content

    Polkaholic.io's Multi-Chain Substrate Block Explorer

    @@ -232,6 +232,6 @@
    +
    \ No newline at end of file diff --git a/applications/Polkawatch.html b/applications/Polkawatch.html index e592a25ab0f..4303967ae05 100644 --- a/applications/Polkawatch.html +++ b/applications/Polkawatch.html @@ -2,10 +2,10 @@ - + Polkawatch | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? We found out in the Web3 Foundation Website.

    \ No newline at end of file diff --git a/applications/Primis.html b/applications/Primis.html index 2437e966c40..3984fb535ae 100644 --- a/applications/Primis.html +++ b/applications/Primis.html @@ -2,10 +2,10 @@ - + Primis | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/PrivaDEX_aggregator.html b/applications/PrivaDEX_aggregator.html index a8c0030af2b..f47f85d0468 100644 --- a/applications/PrivaDEX_aggregator.html +++ b/applications/PrivaDEX_aggregator.html @@ -2,10 +2,10 @@ - + PrivaDEX: Cross-Chain DEX Aggregator MVP | Web3 Foundation Grants - - + +
    Skip to main content

    PrivaDEX: Cross-Chain DEX Aggregator MVP

    @@ -168,6 +168,6 @@

    Future PlansAdditional Information โž•โ€‹

    How did you hear about the Grants Program?

    Rob Habermeier recommended that we explore Web3 support and reach out to Parity Growth. Nicolas Arevalo advised me further to apply for a Web3 grant!

    -

    We have applied for a grant from the Moonbeam Foundation that is more focused on providing value to the Moonbeam EVM ecosystem.

    +

    We have applied for a grant from the Moonbeam Foundation that is more focused on providing value to the Moonbeam EVM ecosystem.

    \ No newline at end of file diff --git a/applications/Profond.html b/applications/Profond.html index 56a68d3b5b2..7059825d2a2 100644 --- a/applications/Profond.html +++ b/applications/Profond.html @@ -2,10 +2,10 @@ - + [Profond.ai](http://Profond.ai) - No Code Builder for artists and developers to build, validate, and scale their dApp. | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/QRUCIAL_DAO.html b/applications/QRUCIAL_DAO.html index 981456130cc..02ad6af0744 100644 --- a/applications/QRUCIAL_DAO.html +++ b/applications/QRUCIAL_DAO.html @@ -2,10 +2,10 @@ - + QRUCIAL DAO | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/QSTN.html b/applications/QSTN.html index 3cac39c7e4b..4964ad4e722 100644 --- a/applications/QSTN.html +++ b/applications/QSTN.html @@ -2,10 +2,10 @@ - + QSTN | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/RainbowDAO Protocol ink Phase 1.html b/applications/RainbowDAO Protocol ink Phase 1.html index 446c79823f2..501ba613183 100644 --- a/applications/RainbowDAO Protocol ink Phase 1.html +++ b/applications/RainbowDAO Protocol ink Phase 1.html @@ -2,10 +2,10 @@ - + RainbowDAO Protocol ink! Phase 1 | Web3 Foundation Grants - - + +
    Skip to main content
    +

    We have not applied for other funds.

    \ No newline at end of file diff --git a/applications/RareLink.html b/applications/RareLink.html index f2c5da5e9f9..eb98158e46e 100644 --- a/applications/RareLink.html +++ b/applications/RareLink.html @@ -2,10 +2,10 @@ - + RareLink Protocol | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/RedStone Network.html b/applications/RedStone Network.html index b341d0b8a1f..76ef482b7d6 100644 --- a/applications/RedStone Network.html +++ b/applications/RedStone Network.html @@ -2,10 +2,10 @@ - + Redstone Network | Web3 Foundation Grants - - + +
    Skip to main content
    +How did you hear about the Grants Program? We heard about the Grants Program from the Web 3 Foundation Website, as well as personal recommendations from Polkadot community members.

    \ No newline at end of file diff --git a/applications/RegionX.html b/applications/RegionX.html index 0bb2d4dfa61..71d5ac08b7e 100644 --- a/applications/RegionX.html +++ b/applications/RegionX.html @@ -2,10 +2,10 @@ - + RegionX | Web3 Foundation Grants - - + +
    Skip to main content

    RegionX

    @@ -205,6 +205,6 @@

    Developer Hub<

    The developer hub will assist teams that have deployed tasks on Polkadot or Kusama in understanding their Coretime usage better. This is accomplished by providing a service of tracking Coretime consumption over time and presenting the data in graph form for the team. In the developer hub, users can register custom KPIs and use built-in ones. By utilizing KPIs along with previous months' data, we could potentially create an advisor to suggest the ideal Coretime allocation.

    Additional Information โž•โ€‹

    -

    How did you hear about the Grants Program? GitHub

    +

    How did you hear about the Grants Program? GitHub

    \ No newline at end of file diff --git a/applications/Relation-Graph.html b/applications/Relation-Graph.html index 2e2d4e3b6fc..112c8964ba0 100644 --- a/applications/Relation-Graph.html +++ b/applications/Relation-Graph.html @@ -2,10 +2,10 @@ - + Relation Graph | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/Roloi.html b/applications/Roloi.html index 325e093af1e..489abb657fa 100644 --- a/applications/Roloi.html +++ b/applications/Roloi.html @@ -2,10 +2,10 @@ - + Roloi | Web3 Foundation Grants - - + +
    Skip to main content

    Roloi

    @@ -217,6 +217,6 @@

    NeoPowerDigital platform: build teams to work on different projects and bring new ideas close to investors and ecosystems. We will leverage NeoPowerโ€™s experience and tools to easily provide a framework for builders to focus more on creating and less on methodology.

    Investors supporting Roloi would also be supporting NeoPower to help onboard local talent to Web3.

    -

    At NeoPower we focus on Security and User Experience (UX) to build the best products.

    +

    At NeoPower we focus on Security and User Experience (UX) to build the best products.

    \ No newline at end of file diff --git a/applications/RubeusKeeper.html b/applications/RubeusKeeper.html index 66b57bd3b33..5b5130f6ecd 100644 --- a/applications/RubeusKeeper.html +++ b/applications/RubeusKeeper.html @@ -2,10 +2,10 @@ - + Rubeus Keeper | Web3 Foundation Grants - - + +
    Skip to main content

    Rubeus Keeper

    @@ -113,6 +113,6 @@

    NumberDeliverableSpecification0a.LicenseApache 2.00b.DocumentationWe will provide both inline documentation of the code and a basic tutorial that explains how a user can run our smart contract and send test transactions, which will show how the functionality works.0c.Testing GuideCore functions will be fully covered by unit tests to ensure functionality and robustness under the Chrome browser. In the guide, we will describe how to run these tests.0d.ArticleWe will publish an article that explains what was achieved, how to use the new Dapp and what are the benefits of using the system1.Browser extensionA Chrome browser extension MVP for password management: a registration page (login with a Polkadot wallet private key and set a master-password); login page (using master-password); categories (get data from a blockchain, decrypt received data, unzip and get passwords, categories list render, passwords list render by categories); save password (data entry form, data serialization, zip data, data encryption, send transaction); password generation window, show balance. The extension will be developed using JavaScript.

    +
    NumberDeliverableSpecification
    0a.LicenseApache 2.0
    0b.DocumentationWe will provide both inline documentation of the code and a basic tutorial that explains how a user can run our smart contract and send test transactions, which will show how the functionality works.
    0c.Testing GuideCore functions will be fully covered by unit tests to ensure functionality and robustness under the Chrome browser. In the guide, we will describe how to run these tests.
    0d.ArticleWe will publish an article that explains what was achieved, how to use the new Dapp and what are the benefits of using the system
    1.Browser extensionA Chrome browser extension MVP for password management: a registration page (login with a Polkadot wallet private key and set a master-password); login page (using master-password); categories (get data from a blockchain, decrypt received data, unzip and get passwords, categories list render, passwords list render by categories); save password (data entry form, data serialization, zip data, data encryption, send transaction); password generation window, show balance. The extension will be developed using JavaScript.
    \ No newline at end of file diff --git a/applications/Rubeus_keeper_st2.html b/applications/Rubeus_keeper_st2.html index 175b45e04ba..1b290bdf59b 100644 --- a/applications/Rubeus_keeper_st2.html +++ b/applications/Rubeus_keeper_st2.html @@ -2,10 +2,10 @@ - + Rubeus Keeper stage 2 | Web3 Foundation Grants - - + +
    Skip to main content

    Rubeus Keeper stage 2

    @@ -127,6 +127,6 @@

    Future Plansโ€‹

    -

    In the future plans for Rubeus we see widening of its functionality: from remembering credit cards credentials to answers for recovery questions. Everything that should be remembered for a personal use and complies with GDPR could be stored with Rubeus. A 2FA feature is also in our plans. All this should be developed under a later stage of the project.

    +

    In the future plans for Rubeus we see widening of its functionality: from remembering credit cards credentials to answers for recovery questions. Everything that should be remembered for a personal use and complies with GDPR could be stored with Rubeus. A 2FA feature is also in our plans. All this should be developed under a later stage of the project.

    \ No newline at end of file diff --git a/applications/RubyProtocol.html b/applications/RubyProtocol.html index eba7b302ff9..5e1a214b4a4 100644 --- a/applications/RubyProtocol.html +++ b/applications/RubyProtocol.html @@ -2,10 +2,10 @@ - + Ruby Protocol | Web3 Foundation Grants - - + +
    Skip to main content
    +

    [TZLHJS2017] Florian Tramer, Fan Zhang, Huang Lin, Jean-Pierre Hubaux, Ari Juels, and Elaine Shi. โ€Sealed-glass proofs: Using transparent enclaves to prove and sell knowledge.โ€ In Security and Privacy (EuroS&P), 2017 IEEE European Symposium on, pp. 19-34. IEEE, 2017.

    \ No newline at end of file diff --git a/applications/SEOR-code-less-smart-contract-platform.html b/applications/SEOR-code-less-smart-contract-platform.html index 356b8d2fa19..857d2d854e1 100644 --- a/applications/SEOR-code-less-smart-contract-platform.html +++ b/applications/SEOR-code-less-smart-contract-platform.html @@ -2,10 +2,10 @@ - + SEOR code-less smart contract platform | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/SaaS3.html b/applications/SaaS3.html index f97a54f822a..fa9e16d332b 100644 --- a/applications/SaaS3.html +++ b/applications/SaaS3.html @@ -2,10 +2,10 @@ - + SaaS3 | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/ScoutCoinFabrik.html b/applications/ScoutCoinFabrik.html index 4a648aa50eb..22c9dbc5372 100644 --- a/applications/ScoutCoinFabrik.html +++ b/applications/ScoutCoinFabrik.html @@ -2,10 +2,10 @@ - + Scout CoinFabrik | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? Richard Casey from Parity brought this program to our attention. Our inquiries were addressed by David Hawig and Bhargav Bhatt, who also gently advised us on this presentation.

    \ No newline at end of file diff --git a/applications/ScoutCoinFabrik_2.html b/applications/ScoutCoinFabrik_2.html index ee351e9cf77..3f251124202 100644 --- a/applications/ScoutCoinFabrik_2.html +++ b/applications/ScoutCoinFabrik_2.html @@ -2,10 +2,10 @@ - + Scout CoinFabrik | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? Richard Casey from Parity brought this program to our attention. Our inquiries were addressed by David Hawig and Bhargav Bhatt, who also gently advised us on this presentation.

    \ No newline at end of file diff --git a/applications/Security_Marketplace.html b/applications/Security_Marketplace.html index e9dfae31fee..5c715377c34 100644 --- a/applications/Security_Marketplace.html +++ b/applications/Security_Marketplace.html @@ -2,10 +2,10 @@ - + Security Marketplace | Web3 Foundation Grants - - + +
    Skip to main content
    +Through RFP Portal.

    \ No newline at end of file diff --git a/applications/Shivarthu.html b/applications/Shivarthu.html index 752676c0fbc..1287813b85d 100644 --- a/applications/Shivarthu.html +++ b/applications/Shivarthu.html @@ -2,10 +2,10 @@ - + Shivarthu | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/Societal.html b/applications/Societal.html index ba1b5565d22..660247b4742 100644 --- a/applications/Societal.html +++ b/applications/Societal.html @@ -2,10 +2,10 @@ - + Societal - MVP - Phase 1 | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/Solang_Playground.html b/applications/Solang_Playground.html index 578d4577606..599f54734aa 100644 --- a/applications/Solang_Playground.html +++ b/applications/Solang_Playground.html @@ -2,10 +2,10 @@ - + Solang Playground | Web3 Foundation Grants - - + +
    Skip to main content
    +

    I have already completed a grant under this program. I was first introduced to it by my mentor Sean Young and the awesome Cyrill leutwiler.

    \ No newline at end of file diff --git a/applications/Solang_developer_experience_improvements.html b/applications/Solang_developer_experience_improvements.html index 61ce46b31de..06c6ccb07d5 100644 --- a/applications/Solang_developer_experience_improvements.html +++ b/applications/Solang_developer_experience_improvements.html @@ -2,10 +2,10 @@ - + Solang developer experience improvements. | Web3 Foundation Grants - - + +
    Skip to main content
    +

    Recommendation from Solang's maintainers Sean Young and Cyrill Leutwiler

    \ No newline at end of file diff --git a/applications/SpellRouter-proposal.html b/applications/SpellRouter-proposal.html index a3a1925eba9..2e67e0a5410 100644 --- a/applications/SpellRouter-proposal.html +++ b/applications/SpellRouter-proposal.html @@ -2,10 +2,10 @@ - + SpellRouter - XCM Router by ParaSpellโœจ | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/SpiderDAO.html b/applications/SpiderDAO.html index bf940761659..567cb36cdaa 100644 --- a/applications/SpiderDAO.html +++ b/applications/SpiderDAO.html @@ -2,10 +2,10 @@ - + SpiderDAO Grant Proposal | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/Standard_Protocol.html b/applications/Standard_Protocol.html index eb37038a85a..b6d8627780c 100644 --- a/applications/Standard_Protocol.html +++ b/applications/Standard_Protocol.html @@ -2,10 +2,10 @@ - + Standard Protocol | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/Starry_Network.html b/applications/Starry_Network.html index 2279153c10c..64c37dea990 100644 --- a/applications/Starry_Network.html +++ b/applications/Starry_Network.html @@ -2,10 +2,10 @@ - + Starry Protocol | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/StorageHub.html b/applications/StorageHub.html index ea2e14ce41a..7382fcefa8b 100644 --- a/applications/StorageHub.html +++ b/applications/StorageHub.html @@ -2,10 +2,10 @@ - + StorageHub Grant Application | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/Stylograph.html b/applications/Stylograph.html index 509e80a7f8b..fcee44db899 100644 --- a/applications/Stylograph.html +++ b/applications/Stylograph.html @@ -2,10 +2,10 @@ - + Pallet Stylograph | Web3 Foundation Grants - - + +
    Skip to main content
    +

    Our future plan is to include (and therefore maintain and extend) this pallet within our Genesis DAO Chain. The exact game plan is laid out here.

    \ No newline at end of file diff --git a/applications/SubDAO-Chrome-Extension.html b/applications/SubDAO-Chrome-Extension.html index 3ae543ec7d7..ca70fe9f14a 100644 --- a/applications/SubDAO-Chrome-Extension.html +++ b/applications/SubDAO-Chrome-Extension.html @@ -2,10 +2,10 @@ - + SubDAO Chrome Extension | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/SubDAO_Network.html b/applications/SubDAO_Network.html index dec8a4f96e7..434c8659cf3 100644 --- a/applications/SubDAO_Network.html +++ b/applications/SubDAO_Network.html @@ -2,10 +2,10 @@ - + SubDAO | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/SubDAO_PolkaSign.html b/applications/SubDAO_PolkaSign.html index 04676b5c4a4..e4e5a9d8ef6 100644 --- a/applications/SubDAO_PolkaSign.html +++ b/applications/SubDAO_PolkaSign.html @@ -2,10 +2,10 @@ - + PolkaSign | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/SubGame_Network.html b/applications/SubGame_Network.html index fa77960cc66..9a6515caf19 100644 --- a/applications/SubGame_Network.html +++ b/applications/SubGame_Network.html @@ -2,10 +2,10 @@ - + SubGame Network | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/SubGame_Network_m2.html b/applications/SubGame_Network_m2.html index b3599812260..fdb79afc3b8 100644 --- a/applications/SubGame_Network_m2.html +++ b/applications/SubGame_Network_m2.html @@ -2,10 +2,10 @@ - + SubGame Network m2 | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/SubIdentity.html b/applications/SubIdentity.html index 501b3ad522c..5e2baf282bc 100644 --- a/applications/SubIdentity.html +++ b/applications/SubIdentity.html @@ -2,10 +2,10 @@ - + SubIdentity | Web3 Foundation Grants - - + +
    Skip to main content
    +

    This is our first application for an open source project to innovate the web3 Ecosystem.

    \ No newline at end of file diff --git a/applications/Subcoin.html b/applications/Subcoin.html index 0c170ff9d98..73b7952cdea 100644 --- a/applications/Subcoin.html +++ b/applications/Subcoin.html @@ -2,10 +2,10 @@ - + Subcoin | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? Personal recommendation.

    \ No newline at end of file diff --git a/applications/SubsCrypt.html b/applications/SubsCrypt.html index 43bfc96ddb2..df0c7308b2c 100644 --- a/applications/SubsCrypt.html +++ b/applications/SubsCrypt.html @@ -2,10 +2,10 @@ - + SubsCrypt | Web3 Foundation Grants - - + +
    Skip to main content
    +UI dashboard
    \ No newline at end of file diff --git a/applications/Subsembly-GRANDPA.html b/applications/Subsembly-GRANDPA.html index 6322d30dbd5..a6fc2838b1d 100644 --- a/applications/Subsembly-GRANDPA.html +++ b/applications/Subsembly-GRANDPA.html @@ -2,10 +2,10 @@ - + Subsembly - Support for GRANDPA | Web3 Foundation Grants - - + +
    Skip to main content

    Subsembly - Support for GRANDPA

    @@ -179,6 +179,6 @@

    Future Plansโ€‹

    LimeChain will be resolving any critical bugs that may arise. We would like to extend the framework by adding new pallets in the future. Our plan is to continue the development of the framework with support for BABE and after that, having support for Parachains. The end goal of Subsembly is to support the full set of foundational features that enable developers to create Substrate networks (with the option for both Aura and BABE + GRANDPA's finality) as-well as Polkadot parathreads and parachains.

    Additional Information โž•โ€‹

    -

    LimeChain has been a long time contributor to the Substrate ecosystem mainly focused on developer tooling. Due to our involvement in the space we are working with various clients, developing smart contracts and working on parachains.

    +

    LimeChain has been a long time contributor to the Substrate ecosystem mainly focused on developer tooling. Due to our involvement in the space we are working with various clients, developing smart contracts and working on parachains.

    \ No newline at end of file diff --git a/applications/Substrate_Move_System_Pallet_1.html b/applications/Substrate_Move_System_Pallet_1.html index 99516e71f2c..02dd2799416 100644 --- a/applications/Substrate_Move_System_Pallet_1.html +++ b/applications/Substrate_Move_System_Pallet_1.html @@ -2,10 +2,10 @@ - + Substrate Move System Pallet (part 1) | Web3 Foundation Grants - - + +
    Skip to main content

    Substrate Move System Pallet (part 1)

    @@ -150,6 +150,6 @@

    Addi

    How did you hear about the Grants Program?

    We learned about it when looking at open RFPs by the web3 foundation on their website.

    We wanted to get back up to date on what is happening in the Polkadot ecosystem, and working on grants, specifically RFPs, has been a great way to do so.

    -

    Looking to apply to other RFPs currently open as well. Stay tuned!

    +

    Looking to apply to other RFPs currently open as well. Stay tuned!

    \ No newline at end of file diff --git a/applications/Substrate_Move_System_Pallet_2.html b/applications/Substrate_Move_System_Pallet_2.html index a221d242066..1e63d7c3f48 100644 --- a/applications/Substrate_Move_System_Pallet_2.html +++ b/applications/Substrate_Move_System_Pallet_2.html @@ -2,10 +2,10 @@ - + Substrate Move System Pallet (part 2) | Web3 Foundation Grants - - + +
    Skip to main content

    Substrate Move System Pallet (part 2)

    @@ -149,6 +149,6 @@

    Addi

    How did you hear about the Grants Program?

    We learned about it when looking at open RFPs by the web3 foundation on their website.

    We wanted to get back up to date on what is happening in the Polkadot ecosystem, and working on grants, specifically RFPs, has been a great way to do so.

    -

    Looking to apply to other RFPs currently open as well. Stay tuned!

    +

    Looking to apply to other RFPs currently open as well. Stay tuned!

    \ No newline at end of file diff --git a/applications/SydTek.html b/applications/SydTek.html index 6bc182c49dd..1d7af9ce8fa 100644 --- a/applications/SydTek.html +++ b/applications/SydTek.html @@ -2,10 +2,10 @@ - + Peer-Reviewed Academic Journal Article and Dissemination - Digital Inheritance in Web3: A Case Study of Soulbound Tokens and Social Recovery Pallets within the Polkadot and Kusama Ecosystems | Web3 Foundation Grants - - + +
    Skip to main content
    +

    https://docs.google.com/spreadsheets/d/1D6gmQcR7YP9PuHF0SKAKdlQzApzQwj7n/edit?usp=sharing&ouid=114750148283862506967&rtpof=true&sd=true

    \ No newline at end of file diff --git a/applications/Syncra.html b/applications/Syncra.html index 363867d10e0..a56bb0adc2b 100644 --- a/applications/Syncra.html +++ b/applications/Syncra.html @@ -2,10 +2,10 @@ - + Syncra x Web3 Foundation | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/TPScore.html b/applications/TPScore.html index 74f56a9fed4..7a4f992692f 100644 --- a/applications/TPScore.html +++ b/applications/TPScore.html @@ -2,10 +2,10 @@ - + TPScore | Web3 Foundation Grants - - + +
    Skip to main content

    TPScore

    @@ -138,6 +138,6 @@

    Future PlansAdditional Information โž•โ€‹

    How did you hear about the Grants Program?

    We learned about it via Web3 Foundation Website. We've been closely monitoring the DotSama ecosystem for more than a year, we've read documentation, tested various projects/parachains, and participated in staking. After getting a deeper understanding of the technology and the ecosystem we decided to test our own idea and build a POC of a data analytics website for the Polkadot ecosystem.

    -

    This application is a logical next step in our continued interest in Substrate-based chains and Polkadot in particular.

    +

    This application is a logical next step in our continued interest in Substrate-based chains and Polkadot in particular.

    \ No newline at end of file diff --git a/applications/TREX_Network.html b/applications/TREX_Network.html index c466ddf8050..5e8deede010 100644 --- a/applications/TREX_Network.html +++ b/applications/TREX_Network.html @@ -2,10 +2,10 @@ - + TREX - Timed Release Encryption Xing chains | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? Web3 Foundation Website and Twitter.

    \ No newline at end of file diff --git a/applications/Tellor.html b/applications/Tellor.html index 9ff6205b3a1..f7fbbddd0c3 100644 --- a/applications/Tellor.html +++ b/applications/Tellor.html @@ -2,10 +2,10 @@ - + Tellor | Web3 Foundation Grants - - + +
    Skip to main content

    Tellor

    @@ -149,6 +149,6 @@

    Additional Information โž•โ€‹

    How did you hear about the Grants Program?

    -

    We talked to Rohan at a few events about building on Polkadot and he recommended we apply! Weโ€™ve been in touch with Robin Ejsmond-Frey, Frank Bell, and Guatam from Parity who have done significant work with us in developing the specifications and design for the build.

    +

    We talked to Rohan at a few events about building on Polkadot and he recommended we apply! Weโ€™ve been in touch with Robin Ejsmond-Frey, Frank Bell, and Guatam from Parity who have done significant work with us in developing the specifications and design for the build.

    \ No newline at end of file diff --git a/applications/ThresholdSignature.html b/applications/ThresholdSignature.html index a7cd0966699..e9f7d47a9b8 100644 --- a/applications/ThresholdSignature.html +++ b/applications/ThresholdSignature.html @@ -2,10 +2,10 @@ - + Threshold Signature Implementation | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? I heard about it during the PBA Hong Kong cohort.

    \ No newline at end of file diff --git a/applications/Tokenguard.html b/applications/Tokenguard.html index bb816917bc7..7528ea8de3f 100644 --- a/applications/Tokenguard.html +++ b/applications/Tokenguard.html @@ -2,10 +2,10 @@ - + Tokenguard: Ultimate growth & data analytics tool for Substrate | Web3 Foundation Grants - - + +
    Skip to main content

    Tokenguard: Ultimate growth & data analytics tool for Substrate

    @@ -265,6 +265,6 @@

    Making web3 growโ€‹

    At the same time, continuing the current activities, Tokenguard will offer its services to provide custom dashboards with advanced features to subsequent parachains in order to improve their marketing and operational activities.

    -

    With backing up of well-known web3 investors, Tokenguard is on its path to help web3 ecosystems and dApps understand their user behavior and focus on product & marketing strategies that deliver organic growth.

    +

    With backing up of well-known web3 investors, Tokenguard is on its path to help web3 ecosystems and dApps understand their user behavior and focus on product & marketing strategies that deliver organic growth.

    \ No newline at end of file diff --git a/applications/Treasureland.html b/applications/Treasureland.html index 1506cde2cdf..06a7d04773c 100644 --- a/applications/Treasureland.html +++ b/applications/Treasureland.html @@ -2,10 +2,10 @@ - + Treasureland | Web3 Foundation Grants - - + +
    Skip to main content
    +
    \ No newline at end of file diff --git a/applications/TreasuryTracker.html b/applications/TreasuryTracker.html index dba7263a6a0..c91721144f2 100644 --- a/applications/TreasuryTracker.html +++ b/applications/TreasuryTracker.html @@ -2,10 +2,10 @@ - + TreasuryTracker | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? Web3 Foundation Website and personal recommendation

    \ No newline at end of file diff --git a/applications/TuxedoDapp.html b/applications/TuxedoDapp.html index 18228fc1473..71a1fa80cf7 100644 --- a/applications/TuxedoDapp.html +++ b/applications/TuxedoDapp.html @@ -2,10 +2,10 @@ - + TuxedoDApp | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? Meeting with the Web3 Foundation team at the beautiful Sub0 conference in Lisbon

    \ No newline at end of file diff --git a/applications/UMC-Tokenscribe.html b/applications/UMC-Tokenscribe.html index 5d5cd308c45..b118ec1e761 100644 --- a/applications/UMC-Tokenscribe.html +++ b/applications/UMC-Tokenscribe.html @@ -2,10 +2,10 @@ - + UMC - Tokenscribe | Web3 Foundation Grants - - + +
    Skip to main content
    +

    A draft idea of this specification was discussed with several other developers.

    \ No newline at end of file diff --git a/applications/Validator_Monitoring_Service.html b/applications/Validator_Monitoring_Service.html index 93644540042..202ab680fc7 100644 --- a/applications/Validator_Monitoring_Service.html +++ b/applications/Validator_Monitoring_Service.html @@ -2,10 +2,10 @@ - + Validator Monitoring Service | Web3 Foundation Grants - - + +
    Skip to main content
    +

    Web3 Foundation Website and previous grants: Multiblockchain ETL

    \ No newline at end of file diff --git a/applications/WeTEE_Network.html b/applications/WeTEE_Network.html index 318d4b6374a..894a820e3ff 100644 --- a/applications/WeTEE_Network.html +++ b/applications/WeTEE_Network.html @@ -2,10 +2,10 @@ - + WeTEE Network | Web3 Foundation Grants - - + + +

    The subproject DTIM of WeTEE won the first prize at the Polkadot Hackathon 2023 Summer.

    \ No newline at end of file diff --git a/applications/Web3Box.html b/applications/Web3Box.html index 2dbacafbf18..fd1887e0da0 100644 --- a/applications/Web3Box.html +++ b/applications/Web3Box.html @@ -2,10 +2,10 @@ - + Web3Box | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? Twitter

    \ No newline at end of file diff --git a/applications/Web3Go.html b/applications/Web3Go.html index 5029adc6798..d3cf985fb9b 100644 --- a/applications/Web3Go.html +++ b/applications/Web3Go.html @@ -2,10 +2,10 @@ - + Web3Go | Web3 Foundation Grants - - + + +

    Web3 Foundation Website and personal recommendation.

    \ No newline at end of file diff --git a/applications/Whiteflag-on-Fennel.html b/applications/Whiteflag-on-Fennel.html index 68bf5a2d680..7e11246b1b3 100644 --- a/applications/Whiteflag-on-Fennel.html +++ b/applications/Whiteflag-on-Fennel.html @@ -2,10 +2,10 @@ - + Fennel Protocol | Web3 Foundation Grants - - + +
    Skip to main content

    Fennel Protocol

    @@ -179,6 +179,6 @@

    Future PlansAdditional Information โž•โ€‹

    How did you hear about the Grants Program? We heard about the Grants Program from the Web 3 Foundation Website, as well as personal recommendations from Polkadot community members.

    -

    Our first grant was completed in the first quarter of 2022 and built out the basis for our blockchain and the first set of Whiteflag features.

    +

    Our first grant was completed in the first quarter of 2022 and built out the basis for our blockchain and the first set of Whiteflag features.

    \ No newline at end of file diff --git a/applications/XPredictMarket.html b/applications/XPredictMarket.html index 7ebf7662320..07055d19269 100644 --- a/applications/XPredictMarket.html +++ b/applications/XPredictMarket.html @@ -2,10 +2,10 @@ - + X Predict Market | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/Xcavate.html b/applications/Xcavate.html index d3f8eacdfd3..c09801ed23b 100644 --- a/applications/Xcavate.html +++ b/applications/Xcavate.html @@ -2,10 +2,10 @@ - + Xcavate | Web3 Foundation Grants - - + +
    Skip to main content

    Xcavate

    @@ -139,6 +139,6 @@

    Future Plansโ€‹

    We are talking to Subwallet about integrating the KILT protocol DIDs in to their wallet for a smoother and simpler user experience. Once we have built the initial POC then on to the MVP and GTM. We have already started the white paper as well as developed a pitch deck to demonstrate the potential of the system to; investors, partners and eventually XCAV coin holders. We have started a social media campaign in order to build a community now and through the dApp build & testing stages.

    Additional Information โž•โ€‹

    -

    We will be attending the 2023 Polkadot Decoded event. We are keen to network and expand our partnerships across the Dotsama Ecosystem, while helping to build much needed real estate investment opportunities to a global population.

    +

    We will be attending the 2023 Polkadot Decoded event. We are keen to network and expand our partnerships across the Dotsama Ecosystem, while helping to build much needed real estate investment opportunities to a global population.

    \ No newline at end of file diff --git a/applications/ZK-Snarks tutorial.html b/applications/ZK-Snarks tutorial.html index b81a37a79c7..daf98de2763 100644 --- a/applications/ZK-Snarks tutorial.html +++ b/applications/ZK-Snarks tutorial.html @@ -2,10 +2,10 @@ - + ZK-Snarks tutorial | Web3 Foundation Grants - - + +
    Skip to main content
    +
    NumberDeliverableSpecification
    0a.LicenseApache 2.0 / GPLv3 / MIT / Unlicense
    0b.DocumentationWe will provide both inline documentation of the code and a tutorial (which will be a part of the blog post) that explains how a user can (for example) spin up Substrate nodes and upload a verification key and the proof. This will show how the new functionality works.
    0c.Testing and Testing GuideWe will provide unit tests for the proof verification mechanism.
    0d.DockerWe will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone.
    1.Research notesMathematical calculations based on Groth16
    2.Groth16 proof verification methodImplement Groth16 proof verification method which will be used by pallet
    3.DemoCreate a demo, where we will use a 3-rd party tool to verify a solution & where we Alice could be rewarded for finding a solution.
    4.Circuits in circomPrepare a circuits in circom, which will describe our problem
    5.Blog post: Tutorial Groth16 (Part 1)describing the groth16 & running "circom proof" from previous post with the Rust Unit test / CMD
    6.Blog post: Tutorial Pallet (Part 2)updating the pallet with the groth16 & running an example from the previous tutorial with the PolkaJS
    7.Youtube videoYoutube video tutorial explaining the concepts from the blog posts
    \ No newline at end of file diff --git a/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.html b/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.html index cc278579202..cdcde005702 100644 --- a/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.html +++ b/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.html @@ -2,10 +2,10 @@ - + larch - Zombie-net Automation | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? Web3 Foundation Website / Parity team / a conversation with Richard Casey.

    \ No newline at end of file diff --git a/applications/ZeroDAO_Network.html b/applications/ZeroDAO_Network.html index f4f95bc7e3a..34ded8a6e1c 100644 --- a/applications/ZeroDAO_Network.html +++ b/applications/ZeroDAO_Network.html @@ -2,10 +2,10 @@ - + ZeroDAO Network | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/ZeroPool.html b/applications/ZeroPool.html index 88bcb29741a..25f13d37c7f 100644 --- a/applications/ZeroPool.html +++ b/applications/ZeroPool.html @@ -2,10 +2,10 @@ - + ZeroPool Phase 2 | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/Zombienet-Explorer.html b/applications/Zombienet-Explorer.html index a2f76702a94..477e40a2d46 100644 --- a/applications/Zombienet-Explorer.html +++ b/applications/Zombienet-Explorer.html @@ -2,10 +2,10 @@ - + Zombienet Explorer: Multi-Chain Substrate Block Explorer (based on Polkaholic.io) | Web3 Foundation Grants - - + +
    Skip to main content

    Zombienet Explorer: Multi-Chain Substrate Block Explorer (based on Polkaholic.io)

    @@ -155,6 +155,6 @@

    Multi-Chain Block Explorer
  • Colorful Notion submitted a Treasury Proposal to Kusama + Polkadot and would like to have Polkaholic.io supported by Treasury.
  • Colorful Notion welcomes active collaborations with parachains in Zombienet, especially in the area of distributed tracing, remote execution, XCM interoperability between EVM+WASM oriented shards, and chain-specific block explorers
  • -

    + \ No newline at end of file diff --git a/applications/ajuna_network_follow_up.html b/applications/ajuna_network_follow_up.html index cb6bed6faa7..aaeb2d53779 100644 Binary files a/applications/ajuna_network_follow_up.html and b/applications/ajuna_network_follow_up.html differ diff --git a/applications/anagolay-project-idiyanale-multi-token-community-contributions-for-verified-creators.html b/applications/anagolay-project-idiyanale-multi-token-community-contributions-for-verified-creators.html index fe29f6fd43a..f9d47660550 100644 --- a/applications/anagolay-project-idiyanale-multi-token-community-contributions-for-verified-creators.html +++ b/applications/anagolay-project-idiyanale-multi-token-community-contributions-for-verified-creators.html @@ -2,10 +2,10 @@ - + Project Idiyanale - Multi-token community contributions for verified creators | Web3 Foundation Grants - - + +
    Skip to main content

    Project Idiyanale - Multi-token community contributions for verified creators

    @@ -279,6 +279,6 @@

    Future Plans

    As the members of the SBP we have already solid understanding what we are building in next 1 year. Next improvements that are related to this grant are building more Strategies, a UI for the creators similar to OpenCollective. We will also improve the Extension integrating a DEX, ( Polkadex is a possibility ), and much more. All this goes hand-in-hand with our Mission and Vision to bring the decentralized Rights management, protect the creators IPs.

    Additional Information โž•

    How did you hear about the Grants Program?

    -

    We had successfully delivered previous grant PR-719.

    +

    We had successfully delivered previous grant PR-719.

    \ No newline at end of file diff --git a/applications/anagolay-project-idiyanale-phase-1.html b/applications/anagolay-project-idiyanale-phase-1.html index 32d340e16db..bbaf20cc553 100644 --- a/applications/anagolay-project-idiyanale-phase-1.html +++ b/applications/anagolay-project-idiyanale-phase-1.html @@ -2,10 +2,10 @@ - + Anagolay Project Idiyanale - Phase 1 | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/ares_protocol.html b/applications/ares_protocol.html index 221e309b9a8..39d29c7f7d9 100644 --- a/applications/ares_protocol.html +++ b/applications/ares_protocol.html @@ -2,10 +2,10 @@ - + Ares | Web3 Foundation Grants - - + + +

    We expect any developer who is interested in Ares protocol join us and build an efficient framework.

    \ No newline at end of file diff --git a/applications/assemblyscript-scale-codec.html b/applications/assemblyscript-scale-codec.html index c56c1cb3a36..02e1951efc2 100644 --- a/applications/assemblyscript-scale-codec.html +++ b/applications/assemblyscript-scale-codec.html @@ -2,10 +2,10 @@ - + SCALE Codec Implementation | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/asylum.html b/applications/asylum.html index 5b4ec745521..997b994ca91 100644 --- a/applications/asylum.html +++ b/applications/asylum.html @@ -2,10 +2,10 @@ - + Asylum | Web3 Foundation Grants - - + + +

    Personal recommendation from the Supercolony.

    \ No newline at end of file diff --git a/applications/asylum_follow_up_1.html b/applications/asylum_follow_up_1.html index 7138d3e876e..713055663ff 100644 --- a/applications/asylum_follow_up_1.html +++ b/applications/asylum_follow_up_1.html @@ -2,10 +2,10 @@ - + Asylum | Web3 Foundation Grants - - + + +

    Personal recommendation from the Supercolony.

    \ No newline at end of file diff --git a/applications/bdwallet.html b/applications/bdwallet.html index 473fe054fa0..41dfec8708c 100644 --- a/applications/bdwallet.html +++ b/applications/bdwallet.html @@ -2,10 +2,10 @@ - + BD Wallet | Web3 Foundation Grants - - + +
    Skip to main content
    +

    So far, we have completed the development of Black Diamond Wallet cloud wallet, which can provide users with multiple services, such as staking, social networking, rating, defi mining and others. Currently, it has fully supported for polkadot, at the same time we have been preparing for the creation of the polkadot (China) Technology Alliance.

    \ No newline at end of file diff --git a/applications/binary_merkle_tree.html b/applications/binary_merkle_tree.html index e4668c24a3b..e94236b7bd4 100644 --- a/applications/binary_merkle_tree.html +++ b/applications/binary_merkle_tree.html @@ -2,10 +2,10 @@ - + Binary Merkle Tree | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/bison.html b/applications/bison.html index bf5463a0050..5c0cfd3b758 100644 --- a/applications/bison.html +++ b/applications/bison.html @@ -2,10 +2,10 @@ - + **Bison** | Web3 Foundation Grants - - + +
    Skip to main content

    Bison

    @@ -130,6 +130,6 @@

    Future Plansโ€‹

    After this phase, the tool will be extended to fully support the JAM protocol, including its in-core execution model. Our goal is to establish Bison as a standard Solidity toolkit for Polkadot and JAM.

    Additional Information :heavy_plus_sign:โ€‹

    -

    We learned about the Web3 Foundation Grants Program through Polkadot developer community discussions and are eager to contribute by building tools that simplify Solidity development for Polkadot chains.

    +

    We learned about the Web3 Foundation Grants Program through Polkadot developer community discussions and are eager to contribute by building tools that simplify Solidity development for Polkadot chains.

    \ No newline at end of file diff --git a/applications/bit_country.html b/applications/bit_country.html index ec34675ff3b..48dcf1891f9 100644 --- a/applications/bit_country.html +++ b/applications/bit_country.html @@ -2,10 +2,10 @@ - + Bit.Country by MVP.STUDIO | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/bit_country_m2.html b/applications/bit_country_m2.html index 774122dab03..860523d44b0 100644 --- a/applications/bit_country_m2.html +++ b/applications/bit_country_m2.html @@ -2,10 +2,10 @@ - + Bit.Country Milestone 2 (Follow up grant after M1 delivered) by MVP.STUDIO | Web3 Foundation Grants - - + + +
    NumberDeliverableSpecification
    0a.LicenseApache 2.0
    0b.DocumentationWe will provide inline documentation, video, medium articles & creating more content in the lightpaper of the project.
    0c.Testing GuideThe code will have proper unit-test coverage for pallets.
    1.Substrate module: ContinuumThis pallet handles the Continuum protocols for shaping the map of the bit countries.
    1a.Spot Good Neighbor (Auction) ProtocolControls which users are able to participate in auctions for spots, allows existing neighboring spots to have their say on a potential occupier of the new spot.
    1b.Spot with fixed priceCreating more flexibility for the Continuum Slot by allowing governance to enable buy now option for Continuum Spot which allows Metaverse to occupy Continuum Spot through buying with fixed price instead of Auction.
    1c.Spot Good Neighbor (Governance) ProtocolGovernance voting only enabled when bit countries secured the spot on Continuum, once local governance enabled, residents in the local governance has the ability to raise disputes, change their local economic model which can be voted on and actioned. Designed to improve neighborhood quality.
    2.Substrate module: NftPromotionOur network is designed to support NFT and its promotion. This pallet manages NFT campaigns that we will create to incentivize NFT creators, traders and minters. (e.g. subsidies on costs or other incentive)
    3.Substrate: NFT Minting - ExtendedWhile using ORML trait as a base, we will be implementing co-creator, origin details, NFT-Future-Event (e.g. time capsule), Smart Contract Enabled NFT (e.g. give NFTs programmability).
    4.Substrate: NFT Sign Support - ExtendedThis will allow NFT get supported by their supporters who willing to sign with their signatures to show supports.
    5.Substrate: NFT BenchmarkingThis will ensure appropriate weights will apply based on number of NFTs minting and extrinsics.
    6.Substrate: Auction BenchmarkingThis will ensure appropriate weights will apply to auction extrinsics.
    7.Connected to RococoBecome a parachain on Rococo, requires frequent migrations to the newest version of pallets and reapplication for the parachain. Aim to be included as soon as possible.
    8.Local NFT MarketDevelop the local bit country marketplace (like a subset of the platform-wide marketplace) for local market and value creation. Some items will only be able within the local NFT market, encouraging users to belong to quality bit countries. Included functionality: listing items, searching, auctions, purchases, rentals
    9.Multi token in local NFT MarketAllow local bit country NFT market accepts their own token or using network token when listing, bidding, auctioning or interact with local Marketplace.
    10.Docker / UATWe will demonstrate the full functionality of our chain and our dapp on UAT / a dockerfile.
    \ No newline at end of file diff --git a/applications/blackprint-js.html b/applications/blackprint-js.html index 895adae1dd9..d9ec619bc45 100644 --- a/applications/blackprint-js.html +++ b/applications/blackprint-js.html @@ -2,10 +2,10 @@ - + Integrating Polkadot.js with Blackprint | Web3 Foundation Grants - - + +
    Skip to main content

    Integrating Polkadot.js with Blackprint

    @@ -152,6 +152,6 @@

    ethers.js as I already know how to use the library, but currently I more motivated to Polkadot because of this Grants Program.
  • When doing research about Arweave, I also created custom nodes for Arweave. It's already usable on Blackprint Editor and can be imported on Blackprint Editor together with other nodes. But currently it has no tests or documentation.
  • -

    + \ No newline at end of file diff --git a/applications/bldg_app.html b/applications/bldg_app.html index 67ad2b632df..243fc0ee831 100644 --- a/applications/bldg_app.html +++ b/applications/bldg_app.html @@ -2,10 +2,10 @@ - + BLDG App | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/blockchainia.html b/applications/blockchainia.html index 07af3dd1a5a..95f43d5c087 100644 --- a/applications/blockchainia.html +++ b/applications/blockchainia.html @@ -2,10 +2,10 @@ - + Blockchainia | Web3 Foundation Grants - - + +
    Skip to main content

    Blockchainia

    @@ -123,6 +123,6 @@

    Mile

    Future Plansโ€‹

    NumberDeliverableSpecification
    1.Oculus VR PortWe plan to port our PvPvE and JRPG to Oculus VR. This will be used to expand into a metaverse of gamers, lead by a community of streamers and industry leaders who moderate their servers and influence the direction of our development team through their position in our community DAO.
    2.Front End ExpansionOur initial browser will be embedded into the game client itself. We plan to expand this to an iOS and Android apps for viewing leader boards, displaying accomplishments, and trading collectibles.
    3.Community ExpansionUsers who are invited to the DAO will be encouraged to run their own reputable server/node to grow their community and earn money from the pay-to-play architecture. Owners will create a hierarchy of moderators called "admins" that will ensure fair, fun, and competitive game play throughout our ecosystem. Owners/Servers who do not fulfill their commitments to the greater community will have their influence slashed.
    4.Automate integration testingAutomated integration tests for all game server/blockchain interactions.
    5.Substrate module: DeathToll Game Events ExpansionWe will add new features to the DeathToll Game Events Substrate module in seasonal updates. The features added will be driven in part by the community that plays the game, in the form of the DAO created during Milestone

    Additional Information โž•โ€‹

    -

    How did you hear about the Grants Program? Web3 Foundation Website / LinkedIn

    +

    How did you hear about the Grants Program? Web3 Foundation Website / LinkedIn

    \ No newline at end of file diff --git a/applications/bounce-protocol.html b/applications/bounce-protocol.html index ec083716637..cd482c6f2a0 100644 --- a/applications/bounce-protocol.html +++ b/applications/bounce-protocol.html @@ -2,10 +2,10 @@ - + Bounce Protocol | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/bright_treasury.html b/applications/bright_treasury.html index 82c61e81dde..9233e7ee3d5 100644 --- a/applications/bright_treasury.html +++ b/applications/bright_treasury.html @@ -2,10 +2,10 @@ - + BrightTreasury | Web3 Foundation Grants - - + +
    Skip to main content

    BrightTreasury

    @@ -144,6 +144,6 @@

    Communi

    Future Plansโ€‹

    In future, we plan to include a Tips mechanism as well, with a similar intuitive approach.

    -

    What is more, we would like to further integrate with Polkassembly to allow a two-way communication. We plan to display proposals and bounties created using BirghtTreasury (along with their details and discussions) in Polkassembly as well and update any changes in both services.

    +

    What is more, we would like to further integrate with Polkassembly to allow a two-way communication. We plan to display proposals and bounties created using BirghtTreasury (along with their details and discussions) in Polkassembly as well and update any changes in both services.

    \ No newline at end of file diff --git a/applications/c++polkadot-light-client.html b/applications/c++polkadot-light-client.html index 4d7f675e187..6e69a7c1633 100644 --- a/applications/c++polkadot-light-client.html +++ b/applications/c++polkadot-light-client.html @@ -2,10 +2,10 @@ - + Polkadot Light Client in C++ | Web3 Foundation Grants - - + +
    Skip to main content

    Polkadot Light Client in C++

    @@ -92,6 +92,6 @@

    NumberDeliverableSpecification0a.LicenseApache 2.0 / MIT0b.FormatMarkdown (mdBook)0c.PublishedGitHub, GitHub Pages1.Cryptographysecurity advantages over connecting to 3rd-party node, limitations compared to full client2.Runtime environment requirementsfor browser and Node.js3.JSON-RPC APIsminimal run-time access interface4.Dependencieslibraries for cryptography, networking, build

    Future Plansโ€‹

    -

    From here we would move on to the implementation of the light client node in Phase 1. We expect Phase 1 to be completed by a larger team at Equilibrium.

    +

    From here we would move on to the implementation of the light client node in Phase 1. We expect Phase 1 to be completed by a larger team at Equilibrium.

    \ No newline at end of file diff --git a/applications/cScale.html b/applications/cScale.html index dc48d436f67..e9d8e4f38fb 100644 --- a/applications/cScale.html +++ b/applications/cScale.html @@ -2,10 +2,10 @@ - + cScale | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/candle_auction_ink.html b/applications/candle_auction_ink.html index aee35acae55..dff39c58892 100644 --- a/applications/candle_auction_ink.html +++ b/applications/candle_auction_ink.html @@ -2,10 +2,10 @@ - + Candle Auctions on Ink! | Web3 Foundation Grants - - + + +

    I came across its repository while surfing Parity's and W3F resources on Github.

    \ No newline at end of file diff --git a/applications/canyon_network.html b/applications/canyon_network.html index 05b26749b3d..8844d540ce4 100644 --- a/applications/canyon_network.html +++ b/applications/canyon_network.html @@ -2,10 +2,10 @@ - + Canyon Network | Web3 Foundation Grants - - + + +

    The earlier successful W3F grant name is Canyon Network, which is mainly about the early research problems on the decentralized storage network and can be considered the starting point of works afterward.

    \ No newline at end of file diff --git a/applications/centrifuge-gsrpc-v2.html b/applications/centrifuge-gsrpc-v2.html index cb7accf7b4d..301efd1cd31 100644 --- a/applications/centrifuge-gsrpc-v2.html +++ b/applications/centrifuge-gsrpc-v2.html @@ -2,10 +2,10 @@ - + Centrifuge Go-Substrate-RPC Client V2 | Web3 Foundation Grants - - + +
    Skip to main content

    Centrifuge Go-Substrate-RPC Client V2

    @@ -141,6 +141,6 @@

    Budget Summar

    This table provides a cost breakdown based on the milestones and deliverables above.

    Estimates
    MSDeliverableHoursBudget
    1Dynamic Type Loader200$30,000
    Subtotal Milestone 1200$30,000
    2Generic type registry Encoder/Decoder160$24,000
    Subtotal Milestone 2160$24,000
    Totals620$54,000

    Future Plansโ€‹

    -

    The Centrifuge Protocol is an active user of the GSRPC library and k/f is an active member maintaining it.

    +

    The Centrifuge Protocol is an active user of the GSRPC library and k/f is an active member maintaining it.

    \ No newline at end of file diff --git a/applications/centrifuge-twamm.html b/applications/centrifuge-twamm.html index 677e38a5f11..248ef579d93 100644 --- a/applications/centrifuge-twamm.html +++ b/applications/centrifuge-twamm.html @@ -2,10 +2,10 @@ - + Centrifuge On-Chain Automated Treasury Management | Web3 Foundation Grants - - + +
    Skip to main content

    Centrifuge On-Chain Automated Treasury Management

    @@ -142,6 +142,6 @@

    M
    NumberDeliverableSpecification
    0a.LicenseApache 2.0
    0b.DocumentationWe will provide both inline documentation of the code and a basic tutorial on how to load any metadata into its own registry of chain types.
    0c.Testing and Testing GuideCore functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests.
    0d.DockerWe will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone.
    1.pallet_twammConfig using pallet-conversion-rate as implementor of BasicAmm trait, Structs, Storage as above.
    2.pallet_twamm ExtrinsicsExtrinsics as described above.
    3.pallet_twamm runtime APIDefine trait and expose Claimable proceeds for an order as well as aggregated order data for a given asset.
    4.Benchmark pallet_twammAdd required mocks for Rewards and BasicAmm and do runtime benchmarks.
    5.TWAMM 2.0 articleOutline spec and implementation improvements over original version.

    Future Plansโ€‹

    -

    The Centrifuge Protocol aims to be an active user of the TWAMM protocol. If we dare to dream, we envision our proposed pallets being integrated into frame in the future.

    +

    The Centrifuge Protocol aims to be an active user of the TWAMM protocol. If we dare to dream, we envision our proposed pallets being integrated into frame in the future.

    \ No newline at end of file diff --git a/applications/ces_data_store.html b/applications/ces_data_store.html index 6b84ba2a357..5adc09c17ef 100644 --- a/applications/ces_data_store.html +++ b/applications/ces_data_store.html @@ -2,10 +2,10 @@ - + Data Store Pallet | Web3 Foundation Grants - - + +
    Skip to main content

    Data Store Pallet

    @@ -175,6 +175,6 @@

    Future PlansAdditional Information โž•โ€‹

    How did you hear about the Grants Program? We have heard from Parity Asia.

    What work has been done already? We have already implemented a design prototype.

    -

    Have you ever applied for other grants? We had applied a grant that had passed all the milestone deliveries on January 25, 2022.

    +

    Have you ever applied for other grants? We had applied a grant that had passed all the milestone deliveries on January 25, 2022.

    \ No newline at end of file diff --git a/applications/chainjs.html b/applications/chainjs.html index a968e49fc1b..70f9fcaa8f3 100644 --- a/applications/chainjs.html +++ b/applications/chainjs.html @@ -2,10 +2,10 @@ - + Polkadot & Kusama ChainJS plugin | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/chainviz.html b/applications/chainviz.html index 3219ab39407..3207c6fbf86 100644 --- a/applications/chainviz.html +++ b/applications/chainviz.html @@ -2,10 +2,10 @@ - + Chainviz v1 | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/cheersland.html b/applications/cheersland.html index faf0d50bce4..a78bc99f4fb 100644 --- a/applications/cheersland.html +++ b/applications/cheersland.html @@ -2,10 +2,10 @@ - + CheersLand-Multi-game Platform for Polkadot & Kusama | Web3 Foundation Grants - - + + +https://medium.com/cheersland/cheersland-redefine-a-cheerful-world-with-gamefi-448e1665ff76

    \ No newline at end of file diff --git a/applications/choko_wallet.html b/applications/choko_wallet.html index 2f8ce99a3f8..f66032e9a19 100644 --- a/applications/choko_wallet.html +++ b/applications/choko_wallet.html @@ -2,10 +2,10 @@ - + Choko Wallet | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/citadel.html b/applications/citadel.html index 0f881dd301e..a389babf598 100644 --- a/applications/citadel.html +++ b/applications/citadel.html @@ -2,10 +2,10 @@ - + Citadel.one integration of Polkadot | Web3 Foundation Grants - - + + +

    No

    \ No newline at end of file diff --git a/applications/clover_network.html b/applications/clover_network.html index b8c7c334619..ace0036affc 100644 --- a/applications/clover_network.html +++ b/applications/clover_network.html @@ -2,10 +2,10 @@ - + Clover | Web3 Foundation Grants - - + +
    Skip to main content

    Clover

    @@ -151,6 +151,6 @@

    March
    NumberDeliverableLanguage/FrameworkSpecification
    1.DocumentationTextDocumentation will be ready at 1.0 version to cover 100% of the current features
    2.Tulip EditorVue/NodeJS/SolidityDelivering alpha build for Tulip Editor with EVM support
    3.Clover Wallet AppAndroid/iOS NativeReleasing Clover wallet app on Google Play and Apple Store
    4.Clover OSNative/JSHaving Clover OS support for iOS/Android/Embedded by the end of Mar.
    5.Clover StoreVue/IPFS/Solidity/NodeJSDelivering the official release of Clover Store.
    6.Clover Developer PortalVue/Java/NodeJS/PostgreSQLRolling out Clover developer portal for the public with incentivize program
    7.Clover Wallet Firefox/Safari ExtensionJavascript/VueDelivering Clover Firefox/Safari extension
    8.Clover GovernanceSolidity/RustReleasing first build of Clover governance system
    9.StorageNodeJSAdding IPFS/AR/CRUST support as the Storage service

    Future Plansโ€‹

    We will start to build the developer community when TestNet is ready and SDKs are available in Q1 and Q2 2021. Detailed documentations will be provided and more contents about developing applications on Clover will be released by then. We will work with some existing developer community to hold events, as well as holding/supporting hackathons to acquire more developers once developer kits are ready in Q2/Q3 2021. Bug bounty programs will be held when Mainnet is launched. -For the user community, we plan to work with some industry media to release publications. Clover maintains its social media including Twitter, Youtube, Medium, and more to provide self-generated content, and covert followers and users to our Telegram, Discord, and Kakao groups. Marketing campaigns will be held to keep user activeness while Clover will focus on incentivizing users to participate in liquidity mining and governance activities. Key metrics of campaigns include the number of new user growth, the number of token holders, the number of members in the developer and the overall community, social media followers, total value locked (on liquidity mining applications), and number of votes.

    +For the user community, we plan to work with some industry media to release publications. Clover maintains its social media including Twitter, Youtube, Medium, and more to provide self-generated content, and covert followers and users to our Telegram, Discord, and Kakao groups. Marketing campaigns will be held to keep user activeness while Clover will focus on incentivizing users to participate in liquidity mining and governance activities. Key metrics of campaigns include the number of new user growth, the number of token holders, the number of members in the developer and the overall community, social media followers, total value locked (on liquidity mining applications), and number of votes.

    \ No newline at end of file diff --git a/applications/community-health-check.html b/applications/community-health-check.html index 19d832e6d4e..17588575702 100644 --- a/applications/community-health-check.html +++ b/applications/community-health-check.html @@ -2,10 +2,10 @@ - + Community Health Analytics and Benchmarking | Web3 Foundation Grants - - + +
    Skip to main content
    + \ No newline at end of file diff --git a/applications/contracts-tool.html b/applications/contracts-tool.html index e2c2296c084..6540b485d05 100644 --- a/applications/contracts-tool.html +++ b/applications/contracts-tool.html @@ -2,10 +2,10 @@ - + Contracts performance messurement tool | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Grants Program? Parity team

    \ No newline at end of file diff --git a/applications/coong_wallet.html b/applications/coong_wallet.html index f09ad39e275..4a7ce8d3a43 100644 --- a/applications/coong_wallet.html +++ b/applications/coong_wallet.html @@ -2,10 +2,10 @@ - + Coong Wallet | Web3 Foundation Grants - - + + +

    Web3 Foundation Website & Medium

    \ No newline at end of file diff --git a/applications/create-substrate-app.html b/applications/create-substrate-app.html index ef9993e1f87..42e89dba893 100644 --- a/applications/create-substrate-app.html +++ b/applications/create-substrate-app.html @@ -2,10 +2,10 @@ - + create-substrate-app | Web3 Foundation Grants - - + +
    Skip to main content

    create-substrate-app

    @@ -129,6 +129,6 @@

    NumberDeliverableSpecification0a.Documentation SiteWe will provide both inline documentation of the code and a basic tutorial that explains how a user can (for example) call the CLI0b.Testing and Testing GuideCore functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests.0c.ArticleWe will publish an article/workshop that explains how to run the CLI (what was done/achieved as part of the grant).1.Published Global CLI commandPublish the CLI command to npm registry

    Additional Information โž•โ€‹

    -

    How did you hear about the Grants Program? Web3 Foundation Website

    +

    How did you hear about the Grants Program? Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/cross-chain-wallet.html b/applications/cross-chain-wallet.html index 4d1d4e3e2ea..04037fafe21 100644 --- a/applications/cross-chain-wallet.html +++ b/applications/cross-chain-wallet.html @@ -2,10 +2,10 @@ - + Cross-chain Wallet - XCW | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/crossbow.html b/applications/crossbow.html index dc726c743c8..dfa9c03e4a1 100644 --- a/applications/crossbow.html +++ b/applications/crossbow.html @@ -2,10 +2,10 @@ - + Crossbow (formerly Creator) | Web3 Foundation Grants - - + +
    Skip to main content
    +

    How did you hear about the Maintenance Grants Program? Personal recommendation.

    \ No newline at end of file diff --git a/applications/crowdloan_frontend_template.html b/applications/crowdloan_frontend_template.html index de69dffe9ea..c77607a8b83 100644 --- a/applications/crowdloan_frontend_template.html +++ b/applications/crowdloan_frontend_template.html @@ -2,10 +2,10 @@ - + Crowdloan Front End Template | Web3 Foundation Grants - - + + +

    We contributed to Devnet support SLA for parachains.

    \ No newline at end of file diff --git a/applications/cryptex.html b/applications/cryptex.html index 5f3491e62ed..56f445ee68d 100644 --- a/applications/cryptex.html +++ b/applications/cryptex.html @@ -2,10 +2,10 @@ - + Cryptex: EtF Network with Aura | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/cryptolab-staking-reward-collector-front-end.html b/applications/cryptolab-staking-reward-collector-front-end.html index 32c9f482945..4504020d8dd 100644 --- a/applications/cryptolab-staking-reward-collector-front-end.html +++ b/applications/cryptolab-staking-reward-collector-front-end.html @@ -2,10 +2,10 @@ - + CryptoLab Staking Reward Collector | Web3 Foundation Grants - - + +
    Skip to main content

    CryptoLab Staking Reward Collector

    @@ -106,6 +106,6 @@

    Future Plansimage

    Additional Information โž•โ€‹

    How did you hear about the Grants Program?

    -

    We see the RFP on the github and think it is very similar to what we have already done. We think we are suitable for working on it because CryptoLab has provided tools for both validators and nominators. Thus current CryptoLab users can enjoy the benefit from the Staking Rewards Collector. The CryptoLab can also attract more Staking Rewards Collector users to use the site.

    +

    We see the RFP on the github and think it is very similar to what we have already done. We think we are suitable for working on it because CryptoLab has provided tools for both validators and nominators. Thus current CryptoLab users can enjoy the benefit from the Staking Rewards Collector. The CryptoLab can also attract more Staking Rewards Collector users to use the site.

    \ No newline at end of file diff --git a/applications/curve_amm.html b/applications/curve_amm.html index fd3eb5362b7..26b0cc12fe4 100644 --- a/applications/curve_amm.html +++ b/applications/curve_amm.html @@ -2,10 +2,10 @@ - + Curve AMM | Web3 Foundation Grants - - + +
    Skip to main content

    Curve AMM

    @@ -95,6 +95,6 @@

    Future Plansโ€‹

    Expand research in AMMs and possibly introduce Invariants based on economic model of rational economic agents who strive to maximize their representative utility function with a choice of varieties under the budget constraint. (e.g. Dixit-Stiglitz)

    Additional Informationโ€‹

    -

    The work under this application will be done under the supervision of the Curve team. The stable swap AMM will be delivered and launched under Curve's brand, Equilibrium will be responsible for tehcnical/dev support.

    +

    The work under this application will be done under the supervision of the Curve team. The stable swap AMM will be delivered and launched under Curve's brand, Equilibrium will be responsible for tehcnical/dev support.

    \ No newline at end of file diff --git a/applications/cyclops.html b/applications/cyclops.html index 94a7322e0d2..0a138b9ad7d 100644 --- a/applications/cyclops.html +++ b/applications/cyclops.html @@ -2,10 +2,10 @@ - + Cyclops Validator Dashboard | Web3 Foundation Grants - - + + +

    Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/dairdrop.html b/applications/dairdrop.html index 1df3b8cba24..f881d552d83 100644 --- a/applications/dairdrop.html +++ b/applications/dairdrop.html @@ -2,10 +2,10 @@ - + dairdrop | Web3 Foundation Grants - - + +
    Skip to main content

    dairdrop

    @@ -13,8 +13,8 @@
  • Team Name: dairdrop
  • Payment Details:
      -
    • Payment: 1H4GsGKaAv6VCwgx7gRgPm9AmCKqzEDjb2GyWoERj9xBRAH (Assethub USDC)
    • -
    • DOT: 1H4GsGKaAv6VCwgx7gRgPm9AmCKqzEDjb2GyWoERj9xBRAH (polkadot)
    • +
    • Payment: 12WygU75eKwg2y8TeyRTzWMVDC5GyYfC4KY1r5EKt5emGjek (Assethub USDC)
    • +
    • DOT: 12WygU75eKwg2y8TeyRTzWMVDC5GyYfC4KY1r5EKt5emGjek (polkadot)
  • Level: 2
  • @@ -262,6 +262,6 @@

    + \ No newline at end of file diff --git a/applications/dao-entrance-phase-1.html b/applications/dao-entrance-phase-1.html index 34e65e20843..047c38bd5ba 100644 --- a/applications/dao-entrance-phase-1.html +++ b/applications/dao-entrance-phase-1.html @@ -2,10 +2,10 @@ - + DAO-entrance phaseย 1 | Web3 Foundation Grants - - + +
    Skip to main content

    DAO-entrance phaseย 1

    @@ -153,6 +153,6 @@

    Future Plansโ€‹

    In the second phase, DAO-entrance is committed to combining block chains with privacy computing, providing cloud-like mode to provide secure and efficient privacy computing services. The mode of consensus on the chain and calculation under the chain ensures security while satisfying the operation of complex programs.

    img

    -

    At this stage, the Privacy Computing Node provides a public Privacy Computing Platform, while DAO/Enterprise can quickly build block-chain-based trust through our portal chain, and can book Privacy Computing Resources, run secure and trusted programs, and exchange data on the chain.

    +

    At this stage, the Privacy Computing Node provides a public Privacy Computing Platform, while DAO/Enterprise can quickly build block-chain-based trust through our portal chain, and can book Privacy Computing Resources, run secure and trusted programs, and exchange data on the chain.

    \ No newline at end of file diff --git a/applications/daos.html b/applications/daos.html index 8deccadf35d..5fb4c802506 100644 --- a/applications/daos.html +++ b/applications/daos.html @@ -2,10 +2,10 @@ - + daos | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/dapp_wallet_integration_native_mobile_libraries.html b/applications/dapp_wallet_integration_native_mobile_libraries.html index 092e42675f4..581d69d908d 100644 --- a/applications/dapp_wallet_integration_native_mobile_libraries.html +++ b/applications/dapp_wallet_integration_native_mobile_libraries.html @@ -2,10 +2,10 @@ - + Tesseract dApps/Wallet integration native mobile libraries | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/dart-scale-codec.html b/applications/dart-scale-codec.html index 29ab8f384e2..876deb19ad7 100644 --- a/applications/dart-scale-codec.html +++ b/applications/dart-scale-codec.html @@ -2,10 +2,10 @@ - + dart-scale-codec | Web3 Foundation Grants - - + + +

    Jadewallet

    \ No newline at end of file diff --git a/applications/data_platform_with_deep_indexed_data_and_staking_reports.html b/applications/data_platform_with_deep_indexed_data_and_staking_reports.html index b16a546d5e6..04e9fc0637f 100644 --- a/applications/data_platform_with_deep_indexed_data_and_staking_reports.html +++ b/applications/data_platform_with_deep_indexed_data_and_staking_reports.html @@ -2,10 +2,10 @@ - + Polkadot Data platform with deep indexed data and staking reports | Web3 Foundation Grants - - + + +

    Web3 Foundation Website and previous grants: Multiblockchain ETL

    \ No newline at end of file diff --git a/applications/dauth_network.html b/applications/dauth_network.html index 9792a70b2e3..c01c16cd847 100644 --- a/applications/dauth_network.html +++ b/applications/dauth_network.html @@ -2,10 +2,10 @@ - + DAuth Network | Web3 Foundation Grants - - + +
    Skip to main content

    DAuth Network

    @@ -137,6 +137,6 @@

    Future PlansAdditional Information โž•โ€‹

    How did you hear about the Grants Program? Announcement by another team

    Here you can also add any additional information that you think is relevant to this application but isn't part of it already, such as:

    -

    Dean's Crust Network and Mingshi's Astart Network are both projects of Web3 Grants.

    +

    Dean's Crust Network and Mingshi's Astart Network are both projects of Web3 Grants.

    \ No newline at end of file diff --git a/applications/decentral_ml.html b/applications/decentral_ml.html index 5338d970509..870787d5152 100644 --- a/applications/decentral_ml.html +++ b/applications/decentral_ml.html @@ -2,10 +2,10 @@ - + Decentral ML | Web3 Foundation Grants - - + +
    Skip to main content

    Decentral ML

    @@ -155,6 +155,6 @@

    NumberDeliverableSpecification0a.LicenseAPACHE 20b.DocumentationWe will provide both a Gitbook with basic tutorial and inline documentation of the code that explains how a user can (for example) work with governance and stake against a model and how the client interface works.0c.Testing and End-to-end (e2e) Testing GuideComprehensive unit tests to ensure core functionality and robustness of code. Instructions on how to run the tests will be included. End-to-end federated learning test using the MNIST dataset for classification0d.DockerWe will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone.0e.Robust Incentivisation SchemeIn response to the feedback received, we will implement a random role assignment mechanism as part of our example game logic. We also see the value in having some flexibility in role assignments, similar to the VBFL paper. This will be configurable using the strategy pattern, thereby addressing the "game theory" concerns. As in the VBFL paper, at every communication round, each device will be randomly appointed as one of the three roles defined as follows: (1) "Data Contributors" can occasionally take on the role of "machine learning worker," as described in the VBFL paper. (2) The role of "model validator" will be an extension of our existing validation processes. This role will employ advanced validation techniques like k-fold and stratified sampling to ensure the integrity and accuracy of model training. This role can be dynamically assigned as with the "machine leanring worker" and "blockchain miner" roles, adding an extra layer of robustness. (3) The "blockchain miner" role will be responsible for incorporating validated models into the blockchain.1.Collective EconomyWe plan to establish governance mechanisms related to the selection and training of models, specifically for Data Annotators and Model Engineers.

    For Model Engineers, we will implement the following logical methods:

    1. listMasterModels: This method returns a report listing the modelGUID, modelName, usageType, usageTypeCost, and costTokenAccept.
    2. getMasterModels(licenseUsage, quantityOfPaymentCoins): This method takes the type of usage and the payable amount for that usage, returning the master model. It operates on an element of trust, with users expected to pay the appropriate amount based on the associated licensing (MIT, Apache, etc. defined on-chain for the model). While we don't anticipate this being a problem for this grant, future releases may include more sophisticated whitelists or permissions.
    3. listModelEngineers(modelGUID): This method returns a list of Model Engineer (ME) wallet addresses approved to call the collectiveApprovesModel method.
    4. modelEngineerUpdate(modelGUID, model, senderWalletAddress): Anyone can send their version of the model, which will be stored on-chain for review and approval. We may add more permissions to this method but the idea is to keep it as open as possible.
    5. listModelEngineerUpdates(modelGUID): This method returns a report listing the senderWalletAddress, model version, block number, and updateID.
    6. collectiveApprovesModel(updateID, collective member or MC sender address, reward percentage:0-1): This method approves the model to replace the "Master" model and awards the Model Engineer a percentage (defined in the parameter 0-1) from the Model Engineer pool.
    7. addCollectiveMember(modelGUID, walletAddress): This method adds collective members to the approval list so updates to the model by MEs can be approved. Future expansions may support issues like jurisdiction, licensing, usage, as well as parameter settings for algorithm selection and more.

    For Data Annotators, we will implement similar logical methods:

    1. uploadDataForAnnotation(image, text, sound, testQuestionnaire:questionText, answerType, questionId, answerPoints:numberPointsRewarded, batchParameters): This method allows collective members to provide data that requires annotation. The solution design records the answer types as columns and the questions as rows, enabling a wide variety of annotation questions to be modelled depending on the model requirement.
    2. getDataAnnotationQuestionnaire(modelGUID): This method returns a list of required data annotations and associated questionnaire information with data types as columns, offering flexibility to build a wide variety of dApps that could harness and offer various rewards to DAs.
    3. submitDataAnnotationForReward(modelGUID, questionId, answer): This method implements a simple validation test for the submitted annotated data, with the potential for more sophisticated game theory algorithms to validate DA submissions in the future.
    4. reportDataAnnotationAwards(modelGUID): This method returns a report of pending and allocated rewards.2.Client InterfaceWe will focus on utilising Substrate api-client libraries, particularly the Python library. We won't be developing a user interface for Data Annotators or any other specific targetted party. Instead, our attention will be on integrating a Python library, which could potentially be used with applications like Jupyter Notebooks and other machine learning tools in the future. It's important to note that we anticipate commerical "Clients" will use the 'getMasterModel' method, as outlined in the Collective Economy section above.

    +
    NumberDeliverableSpecification
    0a.LicenseAPACHE 2
    0b.DocumentationWe will provide both a Gitbook with basic tutorial and inline documentation of the code that explains how a user can (for example) work with governance and stake against a model and how the client interface works.
    0c.Testing and End-to-end (e2e) Testing GuideComprehensive unit tests to ensure core functionality and robustness of code. Instructions on how to run the tests will be included. End-to-end federated learning test using the MNIST dataset for classification
    0d.DockerWe will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone.
    0e.Robust Incentivisation SchemeIn response to the feedback received, we will implement a random role assignment mechanism as part of our example game logic. We also see the value in having some flexibility in role assignments, similar to the VBFL paper. This will be configurable using the strategy pattern, thereby addressing the "game theory" concerns. As in the VBFL paper, at every communication round, each device will be randomly appointed as one of the three roles defined as follows: (1) "Data Contributors" can occasionally take on the role of "machine learning worker," as described in the VBFL paper. (2) The role of "model validator" will be an extension of our existing validation processes. This role will employ advanced validation techniques like k-fold and stratified sampling to ensure the integrity and accuracy of model training. This role can be dynamically assigned as with the "machine leanring worker" and "blockchain miner" roles, adding an extra layer of robustness. (3) The "blockchain miner" role will be responsible for incorporating validated models into the blockchain.
    1.Collective EconomyWe plan to establish governance mechanisms related to the selection and training of models, specifically for Data Annotators and Model Engineers.

    For Model Engineers, we will implement the following logical methods:

    1. listMasterModels: This method returns a report listing the modelGUID, modelName, usageType, usageTypeCost, and costTokenAccept.
    2. getMasterModels(licenseUsage, quantityOfPaymentCoins): This method takes the type of usage and the payable amount for that usage, returning the master model. It operates on an element of trust, with users expected to pay the appropriate amount based on the associated licensing (MIT, Apache, etc. defined on-chain for the model). While we don't anticipate this being a problem for this grant, future releases may include more sophisticated whitelists or permissions.
    3. listModelEngineers(modelGUID): This method returns a list of Model Engineer (ME) wallet addresses approved to call the collectiveApprovesModel method.
    4. modelEngineerUpdate(modelGUID, model, senderWalletAddress): Anyone can send their version of the model, which will be stored on-chain for review and approval. We may add more permissions to this method but the idea is to keep it as open as possible.
    5. listModelEngineerUpdates(modelGUID): This method returns a report listing the senderWalletAddress, model version, block number, and updateID.
    6. collectiveApprovesModel(updateID, collective member or MC sender address, reward percentage:0-1): This method approves the model to replace the "Master" model and awards the Model Engineer a percentage (defined in the parameter 0-1) from the Model Engineer pool.
    7. addCollectiveMember(modelGUID, walletAddress): This method adds collective members to the approval list so updates to the model by MEs can be approved. Future expansions may support issues like jurisdiction, licensing, usage, as well as parameter settings for algorithm selection and more.

    For Data Annotators, we will implement similar logical methods:

    1. uploadDataForAnnotation(image, text, sound, testQuestionnaire:questionText, answerType, questionId, answerPoints:numberPointsRewarded, batchParameters): This method allows collective members to provide data that requires annotation. The solution design records the answer types as columns and the questions as rows, enabling a wide variety of annotation questions to be modelled depending on the model requirement.
    2. getDataAnnotationQuestionnaire(modelGUID): This method returns a list of required data annotations and associated questionnaire information with data types as columns, offering flexibility to build a wide variety of dApps that could harness and offer various rewards to DAs.
    3. submitDataAnnotationForReward(modelGUID, questionId, answer): This method implements a simple validation test for the submitted annotated data, with the potential for more sophisticated game theory algorithms to validate DA submissions in the future.
    4. reportDataAnnotationAwards(modelGUID): This method returns a report of pending and allocated rewards.
    2.Client InterfaceWe will focus on utilising Substrate api-client libraries, particularly the Python library. We won't be developing a user interface for Data Annotators or any other specific targetted party. Instead, our attention will be on integrating a Python library, which could potentially be used with applications like Jupyter Notebooks and other machine learning tools in the future. It's important to note that we anticipate commerical "Clients" will use the 'getMasterModel' method, as outlined in the Collective Economy section above.
    \ No newline at end of file diff --git a/applications/decentralized_invoice.html b/applications/decentralized_invoice.html index e95f221bf91..0e11bb9be07 100644 --- a/applications/decentralized_invoice.html +++ b/applications/decentralized_invoice.html @@ -2,10 +2,10 @@ - + Decentralized Invoice | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/decentralized_well-being_game_api.html b/applications/decentralized_well-being_game_api.html index 9bf40df54e3..53b2e0da69c 100644 --- a/applications/decentralized_well-being_game_api.html +++ b/applications/decentralized_well-being_game_api.html @@ -2,10 +2,10 @@ - + Decentralized Well-being Game API | Web3 Foundation Grants - - + +
    Skip to main content

    Decentralized Well-being Game API

    @@ -142,6 +142,6 @@

    Purposed Di

    Architecture  Diagram

    State Channels Implementationโ€‹

    State Channels (2)

    -
    NumberDeliverableSpecification
    0aLicenseApache License 2.0
    0bDocumentationWe will provide both inline documentation of the code and a basic tutorial that explains how a user can run a local instance and / or fetch metrics using the application.
    0cTesting GuideCore functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests.
    0dDockerWe will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone.
    0ePress ReleaseWe will create a press release to inform the audience.
    1aInk Contract DevelopmentA contract with all required functions for service written in ink! In our ecosystem, smart contracts will be utilized in a variety of ways within the platform such as: To store user data smart contracts will need to be used via state channels for all aspects of the relationship between the data store and the user. Fitness games within the Ecosystem will utilize smart contracts to pay out and reward winners or games and challenges. A multi-signature smart contract will hold all DAO funds and payout based on milestones reached. Users will be rewarded for logging and tracking well-being through simple actions such as taking a picture of food, logging breakfast via smartwatches, or through slack.
    1bServices ImplementationAPI for developers to: 1. store user data to Postgres Database 2. serve API to users to collect the Health Data 3. interact with the Smart Contract 4. Written in Rust/TypeScript5. Rust/TypeScript unit tests
    1cState ChannelsWe will be implementing Perun Polkadot Pallet as a part of our Ink Smart Contract and will use RUST language for the backend implementing these state channels.These channels will allow us to make transactions to the users for their payouts from the treasury based on their authentic health data. As state channels will be established between treasury and users to handle frequently occurring transactions for their payouts
    +
    NumberDeliverableSpecification
    0aLicenseApache License 2.0
    0bDocumentationWe will provide both inline documentation of the code and a basic tutorial that explains how a user can run a local instance and / or fetch metrics using the application.
    0cTesting GuideCore functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests.
    0dDockerWe will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone.
    0ePress ReleaseWe will create a press release to inform the audience.
    1aInk Contract DevelopmentA contract with all required functions for service written in ink! In our ecosystem, smart contracts will be utilized in a variety of ways within the platform such as: To store user data smart contracts will need to be used via state channels for all aspects of the relationship between the data store and the user. Fitness games within the Ecosystem will utilize smart contracts to pay out and reward winners or games and challenges. A multi-signature smart contract will hold all DAO funds and payout based on milestones reached. Users will be rewarded for logging and tracking well-being through simple actions such as taking a picture of food, logging breakfast via smartwatches, or through slack.
    1bServices ImplementationAPI for developers to: 1. store user data to Postgres Database 2. serve API to users to collect the Health Data 3. interact with the Smart Contract 4. Written in Rust/TypeScript5. Rust/TypeScript unit tests
    1cState ChannelsWe will be implementing Perun Polkadot Pallet as a part of our Ink Smart Contract and will use RUST language for the backend implementing these state channels.These channels will allow us to make transactions to the users for their payouts from the treasury based on their authentic health data. As state channels will be established between treasury and users to handle frequently occurring transactions for their payouts
    \ No newline at end of file diff --git a/applications/deeper_network.html b/applications/deeper_network.html index 308d30529cc..e01df30980d 100644 --- a/applications/deeper_network.html +++ b/applications/deeper_network.html @@ -2,10 +2,10 @@ - + Deeper Chain | Web3 Foundation Grants - - + + +

    We have applied for Substrate Builder's program and got accepted.

    \ No newline at end of file diff --git a/applications/deip.html b/applications/deip.html index 4eebbff6f03..6e45c766b28 100644 --- a/applications/deip.html +++ b/applications/deip.html @@ -2,10 +2,10 @@ - + DEIP IP Management/Governance Module | Web3 Foundation Grants - - + + +

    We have not applied for any other grants with this exact project. But we have applied for multiple grants related to the application of our Decentralized Assessment System (a system we designed for crowdsourcing of domain expertise to assess various IP assets). We are currently implementing pilots as part of Blockchers program, as well as part of EOSC Digital Innovation Hub.

    \ No newline at end of file diff --git a/applications/delightfuldot.html b/applications/delightfuldot.html index 4331d620b01..02e63aec416 100644 --- a/applications/delightfuldot.html +++ b/applications/delightfuldot.html @@ -2,10 +2,10 @@ - + DelightfulDOT | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/delmonicos.html b/applications/delmonicos.html index 28756dcaedd..98fe6363de7 100644 --- a/applications/delmonicos.html +++ b/applications/delmonicos.html @@ -2,10 +2,10 @@ - + Delmonicos | Web3 Foundation Grants - - + + +access to the market.

    \ No newline at end of file diff --git a/applications/democratic-governance-1.html b/applications/democratic-governance-1.html index e4d0175c310..e1b1435c505 100644 --- a/applications/democratic-governance-1.html +++ b/applications/democratic-governance-1.html @@ -2,10 +2,10 @@ - + Democratic Governance 1 | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? I heard about it from Alain Brenzikofer.

    \ No newline at end of file diff --git a/applications/distributed_cryptography_for_polkadot_wallets.html b/applications/distributed_cryptography_for_polkadot_wallets.html index ddc2358f286..3b54b311f57 100644 --- a/applications/distributed_cryptography_for_polkadot_wallets.html +++ b/applications/distributed_cryptography_for_polkadot_wallets.html @@ -2,10 +2,10 @@ - + Distributed Cryptography for Polkadot Wallets | Web3 Foundation Grants - - + +
    Skip to main content
    +

    We were referred to the web3 grant program by web3 cryptographic researchers (Handan Kilinc Alper and Jeff Burdges). We have already successfully completed multiple web3 grants on the Perun state channel framework and are currently collaborating with Ajuna to build a second-layer solution for the Polkadot gaming industry.

    \ No newline at end of file diff --git a/applications/dora-factory-molochdao-v1-v2.html b/applications/dora-factory-molochdao-v1-v2.html index 9de188f7586..f6af31c757c 100644 --- a/applications/dora-factory-molochdao-v1-v2.html +++ b/applications/dora-factory-molochdao-v1-v2.html @@ -2,10 +2,10 @@ - + Quadratic Funding Pallet | Web3 Foundation Grants - - + +
    Skip to main content

    Quadratic Funding Pallet

    @@ -93,6 +93,6 @@

    Future Plansโ€‹

    The next step after completion of the milestone, we will consider to run a MolochDAO grant to support important projects from Polkadot and Kusama developer communities.

    -

    We will develop frontend solutions in parallel with the pallet. Eventually, we are providing an open source Moloch infrastructure to facilitate on-chain governance and support open source ventures in the Polkadot and Kusama ecosystem.

    +

    We will develop frontend solutions in parallel with the pallet. Eventually, we are providing an open source Moloch infrastructure to facilitate on-chain governance and support open source ventures in the Polkadot and Kusama ecosystem.

    \ No newline at end of file diff --git a/applications/dora-factory-multisig.html b/applications/dora-factory-multisig.html index ad526f7c5e3..8a5fbe024ae 100644 --- a/applications/dora-factory-multisig.html +++ b/applications/dora-factory-multisig.html @@ -2,10 +2,10 @@ - + Multisig Product on Substrate | Web3 Foundation Grants - - + +
    Skip to main content

    Multisig Product on Substrate

    @@ -65,6 +65,6 @@

    Future Plansโ€‹

    -

    Integrate the multisig MVP with the Dora Factory core pallet and allow any organization on the Dora Factory Substrate chain to create a multisig wallet and use it to manage funds and access the other dGov applications (e.g. Quadratic Funding, MolochDAO, etc.) in the ecosystem.

    +

    Integrate the multisig MVP with the Dora Factory core pallet and allow any organization on the Dora Factory Substrate chain to create a multisig wallet and use it to manage funds and access the other dGov applications (e.g. Quadratic Funding, MolochDAO, etc.) in the ecosystem.

    \ No newline at end of file diff --git a/applications/dorahacks-quadratic-funding.html b/applications/dorahacks-quadratic-funding.html index ee67b0a1330..a75c9e4368c 100644 --- a/applications/dorahacks-quadratic-funding.html +++ b/applications/dorahacks-quadratic-funding.html @@ -2,10 +2,10 @@ - + Quadratic Funding Pallet | Web3 Foundation Grants - - + +
    Skip to main content

    Quadratic Funding Pallet

    @@ -74,6 +74,6 @@

    Future PlansAdditional Informationโ€‹

    DoraHacks' blockchain developer platform HackerLink is currently hosting the Binance Smart Chain Quadratic Funding Grant Round-1. The BSC foundation donated $50,000 to this round to support BSC-based developer projects. This grant can be accessed at https://hackerlink.io/en/grant.

    There is a smart contract deployed on the BSC mainnet to process all quadratic voting and funding activities, and the smart contract has been audited by Certik. https://github.com/dorahacksglobal/BSCQuadraticFundingGrant

    -

    DoraHacks is an active hackathon organizer and developer community in the blockchain space. DoraHacks has been organizing blcokchain hackathons and developer communities in 8 countries and ~20 cities around the world (Boston, SF, San Jose, Beijing, Hangzhou, Bangalore, Berlin, Oxford, Tokyo, Seoul... etc.)

    +

    DoraHacks is an active hackathon organizer and developer community in the blockchain space. DoraHacks has been organizing blcokchain hackathons and developer communities in 8 countries and ~20 cities around the world (Boston, SF, San Jose, Beijing, Hangzhou, Bangalore, Berlin, Oxford, Tokyo, Seoul... etc.)

    \ No newline at end of file diff --git a/applications/dot-login.html b/applications/dot-login.html index 411a0d26ceb..08b20150b1d 100644 --- a/applications/dot-login.html +++ b/applications/dot-login.html @@ -2,10 +2,10 @@ - + DOT Login | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/dot_etl.html b/applications/dot_etl.html index 6f30ae89ffb..572128b70c3 100644 --- a/applications/dot_etl.html +++ b/applications/dot_etl.html @@ -2,10 +2,10 @@ - + DOT-ETL | Web3 Foundation Grants - - + + +

    By recommendation from someone who was already familiar with the Polkadot / Substrate / Kusama projects, as well as the Web3 Foundation's grants program.

    \ No newline at end of file diff --git a/applications/dot_marketplace-Phase3.html b/applications/dot_marketplace-Phase3.html index cf372879d67..c585bea5d75 100644 --- a/applications/dot_marketplace-Phase3.html +++ b/applications/dot_marketplace-Phase3.html @@ -2,10 +2,10 @@ - + Dot Marketplace v3 | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/dot_marketplace-phase2.html b/applications/dot_marketplace-phase2.html index 871c3c78c63..957dc014038 100644 --- a/applications/dot_marketplace-phase2.html +++ b/applications/dot_marketplace-phase2.html @@ -2,10 +2,10 @@ - + Dot Marketplace v2 | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/dot_marketplace.html b/applications/dot_marketplace.html index 41cc24b41eb..6ff530c851a 100644 --- a/applications/dot_marketplace.html +++ b/applications/dot_marketplace.html @@ -2,10 +2,10 @@ - + Dot Marketplace | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/dotly.html b/applications/dotly.html index 3276fa8200b..44f60d376bb 100644 --- a/applications/dotly.html +++ b/applications/dotly.html @@ -2,10 +2,10 @@ - + DOTLY: Revolutionizing Polkadot Account Statistics | Web3 Foundation Grants - - + + +

    I am grantee of Web3 Foundation Grants Program.

    \ No newline at end of file diff --git a/applications/dotmog.html b/applications/dotmog.html index 24eebe8c235..b5905e36cdd 100644 --- a/applications/dotmog.html +++ b/applications/dotmog.html @@ -2,10 +2,10 @@ - + DOTMog | Web3 Foundation Grants - - + +
    Skip to main content
    + \ No newline at end of file diff --git a/applications/dotnix.html b/applications/dotnix.html index c969d204252..3bf56588b1d 100644 --- a/applications/dotnix.html +++ b/applications/dotnix.html @@ -2,10 +2,10 @@ - + Dotnix | Web3 Foundation Grants - - + + +I have worked the following w3f granted projects in the past: https://github.com/Qrucial/QRUCIAL-DAO

    \ No newline at end of file diff --git a/applications/eightfish.html b/applications/eightfish.html index 4d6f4cfdb27..5c6cac15d43 100644 --- a/applications/eightfish.html +++ b/applications/eightfish.html @@ -2,10 +2,10 @@ - + EightFish | Web3 Foundation Grants - - + + +

    Daogang Tang developed a Rust MVC web framework sapper years ago, and the RustCC forum is running on it, so he will design the EightFish SDK interface by refering this work.

    \ No newline at end of file diff --git a/applications/epirus_substrate_explorer.html b/applications/epirus_substrate_explorer.html index 9a6adc1a256..65a33e10b05 100644 --- a/applications/epirus_substrate_explorer.html +++ b/applications/epirus_substrate_explorer.html @@ -2,10 +2,10 @@ - + Epirus Substrate Explorer | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/epirus_substrate_phase_2.html b/applications/epirus_substrate_phase_2.html index 5312f95d2fb..b599c526f8d 100644 --- a/applications/epirus_substrate_phase_2.html +++ b/applications/epirus_substrate_phase_2.html @@ -2,10 +2,10 @@ - + Epirus Substrate Explorer - Phase II | Web3 Foundation Grants - - + +
    Skip to main content

    Epirus Substrate Explorer - Phase II

    @@ -130,6 +130,6 @@

    Future PlansWith the baseline implementation of the Metadata Registry complete, there are many enhancements that can be built upon it. One such enhancement is to have different confidence indicators for verified contracts. Using the verification process outlined in the Source Code Verification section, we are only able to verify that the function of the code is the same as the uploaded source code. There is still the possibility for malicious actors to upload a "vandalised" source code with misleading function names and comments. We plan to circumvent this issue by allowing the user to sign the upload with his private key; source code uploaded and signed by the code owner will take prevalence over other uploaded sources. The contract code will also have the "signed by owner" badge, thus adding an additional layer of trust.

    With the verified metadata available, we are able to recognise when a contract is implementing a well-known interface. This will allow Epirus Substrate Explorer, or any other application using the Metadata Registry, to display and group contracts based on the interface that they are implementing. It will be similar to how ERC-20, ERC-721 and ERC-1155 tokens are distinguished in EVM contracts. We plan to support PSP-22 and 34 as standard contract-based token interfaces.

    We also plan to support EVM-compatible contracts in Substrate chains. This phase involves adding capabilities to index and decode messages and events from the EVM pallet.

    -

    Lastly, we aim to improve scalability to handle large volumes of users and contracts. We will potentially switch from the current PostgreSQL to a distributed database such as CockroachDB. We also intend to add monitoring and scalable deployment infrastructure.

    +

    Lastly, we aim to improve scalability to handle large volumes of users and contracts. We will potentially switch from the current PostgreSQL to a distributed database such as CockroachDB. We also intend to add monitoring and scalable deployment infrastructure.

    \ No newline at end of file diff --git a/applications/escrow_pallet.html b/applications/escrow_pallet.html index d226ac6a31f..d6d19c246e5 100644 --- a/applications/escrow_pallet.html +++ b/applications/escrow_pallet.html @@ -2,10 +2,10 @@ - + Escrow Pallet | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/evanesco_networks.html b/applications/evanesco_networks.html index 225e71b2fd4..49e1e22709e 100644 --- a/applications/evanesco_networks.html +++ b/applications/evanesco_networks.html @@ -2,10 +2,10 @@ - + Evanesco Network | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/faceless.html b/applications/faceless.html index eedb374c969..3ec66c4b586 100644 --- a/applications/faceless.html +++ b/applications/faceless.html @@ -2,10 +2,10 @@ - + Faceless Protocol | Web3 Foundation Grants - - + + +preserving mobile health monitoring. IEEE Trans. Inf. Forensics Secur., 8(6):985-997, 2013.

    \ No newline at end of file diff --git a/applications/fair_squares.html b/applications/fair_squares.html index d3d333ac898..5aa2cab7156 100644 --- a/applications/fair_squares.html +++ b/applications/fair_squares.html @@ -2,10 +2,10 @@ - + Fair Squares (FS) | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/faterium.html b/applications/faterium.html index 91ed571c42c..33eb3c39675 100644 --- a/applications/faterium.html +++ b/applications/faterium.html @@ -2,10 +2,10 @@ - + Faterium | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/faucet-bot.html b/applications/faucet-bot.html index 159fff9c0a1..3bdb4fc695d 100644 --- a/applications/faucet-bot.html +++ b/applications/faucet-bot.html @@ -2,10 +2,10 @@ - + Generic sybil-resistant chat based faucet bot | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/fidi-dotsight-analytics.html b/applications/fidi-dotsight-analytics.html index 55d6a8110fa..f399693df7e 100644 --- a/applications/fidi-dotsight-analytics.html +++ b/applications/fidi-dotsight-analytics.html @@ -2,10 +2,10 @@ - + FiDi DotSight: Analytics Data Platform for DotSama | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/fractapp.html b/applications/fractapp.html index 8549bed8fc6..6e9dc88ec5d 100644 --- a/applications/fractapp.html +++ b/applications/fractapp.html @@ -2,10 +2,10 @@ - + Fractapp | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/frontier-pos-template.html b/applications/frontier-pos-template.html index 172aa57bd88..7003f41fe3b 100644 --- a/applications/frontier-pos-template.html +++ b/applications/frontier-pos-template.html @@ -2,10 +2,10 @@ - + frontier-pos-template | Web3 Foundation Grants - - + +
    Skip to main content

    frontier-pos-template

    @@ -191,6 +191,6 @@

    PSPersonal views of Weimemeโ€‹

    In the past, the high cost of parachain slots forced many startup teams to abandon Polkadot when making technical choices. Coretime was introduced in this context, addressing the issue of slot auctions to some extent. Additionally, the development of the Tanssi network has shown the appeal of low technical barriers for initial teams. In summary, the above solutions address the technical and financial barriers for startup teams, all aimed at promoting the widespread adoption of Polkadot technology. However, all of this assumes that these projects have a centralized team (in reality, many community projects do not have such a team, such as the Dota Inscription project on Polkadot) and have the financial capability to pay for these services, as well as sufficient profitability or passion to support the long-term operation of the chain. This, to some extent, causes their users to lose long-term confidence. Essentially, it does not solve the dilemma of developers needing to pay for the project in advance and for the long term, nor the issue of reliance on centralized teams.I believe the best model should be the coexistence of solo chains and parachains. When a project has not yet found a profitable model and more users, it should use the solo chain approach. This way, it can fully utilize the technical advantages of Polkadot Substrate and have greater flexibility than parachains. In fact, staking can fully mobilize community activity and participation in new projects. When the business reaches a certain scale and there is a need for shared security, and there is funding, parachains can be considered. Therefore, the Polkadot ecosystem should focus on the development of solo chains, which are almost as important as parachains. They are more community-oriented and diverse, which is a necessary step for achieving the goals of Web3 and the widespread adoption of Polkadot technology. Sufficient inclusiveness can bring sufficient prosperity.

    -
    + \ No newline at end of file diff --git a/applications/galaxy.html b/applications/galaxy.html index d858206f64a..d00eb5fc98a 100644 --- a/applications/galaxy.html +++ b/applications/galaxy.html @@ -2,10 +2,10 @@ - + Galaxy: Three-dimensional Web for Polkadot Users | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/grantmaster.html b/applications/grantmaster.html index 85d5e264d49..d770d3ec848 100644 --- a/applications/grantmaster.html +++ b/applications/grantmaster.html @@ -2,10 +2,10 @@ - + GrantMaster: Web3 Grants Management Application | Web3 Foundation Grants - - + +
    Skip to main content

    GrantMaster: Web3 Grants Management Application

    @@ -102,6 +102,6 @@

    NumberDeliverableSpecification0a.LicenseApache 2.00b.DocumentationI will provide both inline documentation of the code and a basic tutorial that explains how a user can use the application and its various features.0c.Testing GuideCore functions will be fully covered by unit tests to ensure functionality and robustness. I will provide a guide describing how to run these tests.0d.DockerI will provide a Dockerfile that can be used to test all the functionality delivered with this milestone.0e.ArticleI will publish an article that explains the development process, the challenges faced and how I overcame them, and the functionalities of the GrantMaster application.1.Crawler & REST APII will extend the previously developed configurable (see Data Synchronization Approach chapter) crawler and REST API to facilitate interaction with the Grant-Milestone-Delivery GitHub repository.2.GitHub Actions IntegrationI will integrate GitHub Actions to trigger updates in the application for new comments, pull requests, or PR reviews in the Grant-Milestone-Delivery repository (see Data Synchronization Approach chapter).3.Frontend Module: Deliveries PageI will develop a Grant Deliveries Page that will display all the deliveries in a tabular format. They will be searchable by team name, application name as well as full text search. They will be filterable and sortable by pull request status, github label, last updated timestamp. It will include all deliveries - both active and inactive. Also, the deliveries will be included in the team and grant pages that were delivered in M1.4.Frontend Module: StatsA Stats module will be developed to provide statistics about the grant applications and deliveries.

    Additional Information โž•โ€‹

    -

    How did you hear about the Grants Program? personal recommendation

    +

    How did you hear about the Grants Program? personal recommendation

    \ No newline at end of file diff --git a/applications/halva_bootstrapping.html b/applications/halva_bootstrapping.html index 2807900098c..c4d35aa885c 100644 --- a/applications/halva_bootstrapping.html +++ b/applications/halva_bootstrapping.html @@ -2,10 +2,10 @@ - + Halva [Bootstrapping and Scaffolding] | Web3 Foundation Grants - - + + +
    NumberDeliverableSpecification
    1.Command initCreate a new Halva project within the existing substrate project directory or creating new substrate project with initialed halva within
    2.Command createHelper to create new test-cases
    3.TestingWrite unit-tests for implemented functions
    4.ExamplesUpdate halva-test-example
    5.TutorialWrite step by step tutorial and publish it
    6.DocumentationsWrite documentations for both commands
    \ No newline at end of file diff --git a/applications/halva_framework.html b/applications/halva_framework.html index 9b1607aeb7f..806794fed24 100644 --- a/applications/halva_framework.html +++ b/applications/halva_framework.html @@ -2,10 +2,10 @@ - + Halva | Web3 Foundation Grants - - + + +
    NumberDeliverableSpecification
    1.ConfigurationNetwork config for interacting with many public & private networks, keyring config for initializing test accounts and chain spec parser
    2.CoreImplement primitives, assertions, a high-order function for a test-cases
    3.TestingImplement scripts for command halva test. It run JavaScript tests with pre-initialized accounts.
    4.DocumentationsWrite documentations
    \ No newline at end of file diff --git a/applications/hamster.html b/applications/hamster.html index 1f58dc8a404..303c4108b1c 100644 --- a/applications/hamster.html +++ b/applications/hamster.html @@ -2,10 +2,10 @@ - + Hamster | Web3 Foundation Grants - - + +
    Skip to main content

    Hamster

    @@ -238,6 +238,6 @@

    Future Plansโ€‹

    Our current goal is to provide distributed shared computing power. After this milestone is completed, we will be able to build our own ecosystem based on resources. That is, when everyone is willing to add their free resources to the hamster network, it can be assumed that there are near-infinite computing resources in the network, and more quality services can be built and constructed in the hamster network. For example, service providers no longer need to rely on the support of a single cloud vendor, but only need to use the computing resources in the hamster network, and the system automatically schedules the resource arithmetic needed for the services to build their own services in the form of edge computing. In addition to this, we can also provide some toolkits so that these computing resources can participate in other services with one click, such as becoming a chain node of Thegraph, so that they can participate in other networks, and later on, we can also use incentives to encourage people to develop toolkits for different blockchain ecosystems. When more and more people and more service providers participate in the hamster network, maybe it can become a truly decentralized metaverse service cornerstone.

    Additional Information โž•โ€‹

    -

    So far, we are self-funded development. However, for our long-term vision, we will try to get support from investment institutions.

    +

    So far, we are self-funded development. However, for our long-term vision, we will try to get support from investment institutions.

    \ No newline at end of file diff --git a/applications/helixstreet.html b/applications/helixstreet.html index 2163055f157..9c1e2fcd018 100644 --- a/applications/helixstreet.html +++ b/applications/helixstreet.html @@ -2,10 +2,10 @@ - + helixstreet Module | Web3 Foundation Grants - - + +
    Skip to main content

    helixstreet Module

    @@ -71,6 +71,6 @@

    Future PlansSelling any private data is completely out of scope of this project. The focus is to keep private DNA data private. The purpose of the project is to enable all the possibilities of owning his own DNA ( firstly ancestry research ) without revealing the whole data ( zero knowledge processing). When the raw data goes through the process of variant calling ( DeepVariant / open source variant caller / https://github.com/google/deepvariant ) groups of variants will additionally be stored in the blockchain. Scope of the grant is a genomics pallet with the described basic functionality, which should be adaptable and extensible.

    Additional Information โž•โ€‹

    How did you hear about the Grants Program? Web3 Foundation Website

    -

    The project is a very long term project. Parallel to the Blockchain and decentralized governance development there is actually a game changing shift in the sequencing technology (SMRT Long Read Sequencing ) based on the availability of HiFi sequencing which allows the sequencing of human DNA ( and other species ) in a reference grade level quality.

    +

    The project is a very long term project. Parallel to the Blockchain and decentralized governance development there is actually a game changing shift in the sequencing technology (SMRT Long Read Sequencing ) based on the availability of HiFi sequencing which allows the sequencing of human DNA ( and other species ) in a reference grade level quality.

    \ No newline at end of file diff --git a/applications/hex.html b/applications/hex.html index 7f5403573b9..1dd965187c7 100644 --- a/applications/hex.html +++ b/applications/hex.html @@ -2,10 +2,10 @@ - + Five Degrees on Substrate | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/hs-web3.html b/applications/hs-web3.html index 9dc9864c521..aca20fa2ad1 100644 --- a/applications/hs-web3.html +++ b/applications/hs-web3.html @@ -2,10 +2,10 @@ - + Haskell Web3 library | Web3 Foundation Grants - - + + +
    NumberDeliverableSpecification
    1.Extrinsic abstractionsImplement structures and abstractions that makes extrinsics operations (serialize/deserialize, sign, send).
    2.Extrinsic signersUse ECDSA and Ed25519 cryptography libraries for signing extrinsics. (Unfortunately Sr25519 unavaliable for Haskell, it could be an idea for another grant.)
    3.TransactionsUsing Metadata and Extrinsics to make transactions into Substrate-based blockchains.
    4.API tx documentationDocument implemented functionality and extend hs-web3 documentation by adding Transactions section.
    5.Runtime transaction examplesAdd examples of using tx module into hs-web3 repository.
    6.Docker imagePack milestone results (unit tests) into docker image to make it's evaluation easy.
    \ No newline at end of file diff --git a/applications/hybrid.html b/applications/hybrid.html index 33dcf89dbba..f0a5efd0017 100644 --- a/applications/hybrid.html +++ b/applications/hybrid.html @@ -2,10 +2,10 @@ - + Hybrid Block Explorer | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/hybrid2.html b/applications/hybrid2.html index 479b7fafbf8..2d638eab572 100644 --- a/applications/hybrid2.html +++ b/applications/hybrid2.html @@ -2,10 +2,10 @@ - + Hybrid Indexer Follow-up | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/hybrid_node_research.html b/applications/hybrid_node_research.html index c8e9a2004a5..acfdbf4c1a8 100644 --- a/applications/hybrid_node_research.html +++ b/applications/hybrid_node_research.html @@ -2,10 +2,10 @@ - + hybrid_node_research | Web3 Foundation Grants - - + +
    Skip to main content

    hybrid_node_research

      @@ -106,6 +106,6 @@

      Future Plansโ€‹

      After this first research analysis we plan to apply for additional grant to cover a long-term commitment and full rework implementation of this alternative hybrid Polakdot host.

      Additional Information โž•โ€‹

      -

      Zondax has been contributing to the Polkadot ecosystem for several years, and has succesfully completed several grants.

    +

    Zondax has been contributing to the Polkadot ecosystem for several years, and has succesfully completed several grants.

    \ No newline at end of file diff --git a/applications/hyperfridge.html b/applications/hyperfridge.html index 7abace9fa1c..300bf2a926f 100644 --- a/applications/hyperfridge.html +++ b/applications/hyperfridge.html @@ -2,10 +2,10 @@ - + Hyperfridge: A Trustless Bidirectional Bridge to Banking Networks | Web3 Foundation Grants - - + +
    Skip to main content

    Hyperfridge: A Trustless Bidirectional Bridge to Banking Networks

    @@ -195,6 +195,6 @@

    FIAT-on-off-ramp.
  • There are no other financial contributions other than our own and the one from our first grant.
  • We did not apply to any other grant, but - if we are successful with this - we look into implementing a EVM validator based on SNARKs which are able to validate Receipts generated with the codebase and runtimes of this grant.
  • -

    + \ No newline at end of file diff --git a/applications/imbue_network.html b/applications/imbue_network.html index 6639aac5529..2720fd96a62 100644 --- a/applications/imbue_network.html +++ b/applications/imbue_network.html @@ -2,10 +2,10 @@ - + Imbue Network | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/infimum.html b/applications/infimum.html index cc82f42b27a..cabbe3c53fc 100644 --- a/applications/infimum.html +++ b/applications/infimum.html @@ -2,10 +2,10 @@ - + Infimum | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? Personal recommendation from a colleague.

    \ No newline at end of file diff --git a/applications/ink-analyzer-phase-2.html b/applications/ink-analyzer-phase-2.html index e795e741fbb..d8ad5a9cff6 100644 --- a/applications/ink-analyzer-phase-2.html +++ b/applications/ink-analyzer-phase-2.html @@ -2,10 +2,10 @@ - + ink! Analyzer (Phase 2) | Web3 Foundation Grants - - + +
    Skip to main content
    +

    Web3 Foundation Website.

    \ No newline at end of file diff --git a/applications/ink-analyzer.html b/applications/ink-analyzer.html index a58b2482b5d..e8d7ed48615 100644 --- a/applications/ink-analyzer.html +++ b/applications/ink-analyzer.html @@ -2,10 +2,10 @@ - + ink! Analyzer | Web3 Foundation Grants - - + + +

    Web3 Foundation Website.

    \ No newline at end of file diff --git a/applications/ink-boxes.html b/applications/ink-boxes.html index 58ce78caa40..215f0d6995c 100644 --- a/applications/ink-boxes.html +++ b/applications/ink-boxes.html @@ -2,10 +2,10 @@ - + Ink Boxes | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/ink-explorer.html b/applications/ink-explorer.html index d2516a060de..06db7fcecee 100644 --- a/applications/ink-explorer.html +++ b/applications/ink-explorer.html @@ -2,10 +2,10 @@ - + Ink Explorer | Web3 Foundation Grants - - + +
    Skip to main content

    Ink Explorer

    @@ -115,6 +115,6 @@

    User Interfac

    Future Plansโ€‹

    We plan to expose all the data throughout a Graphql application and add support for more languages.

    Licenseโ€‹

    -

    Apache license version 2.0

    +

    Apache license version 2.0

    \ No newline at end of file diff --git a/applications/ink-pallet-benchmarking-phase-2.html b/applications/ink-pallet-benchmarking-phase-2.html index 2b8883bf9b3..4a330f51f1f 100644 --- a/applications/ink-pallet-benchmarking-phase-2.html +++ b/applications/ink-pallet-benchmarking-phase-2.html @@ -2,10 +2,10 @@ - + ink!/pallet/solidity performance benchmarking phase 2 | Web3 Foundation Grants - - + +
    Skip to main content

    ink!/pallet/solidity performance benchmarking phase 2

    @@ -91,6 +91,6 @@

    Additional Information โž•โ€‹

    Gautam Dhameja told us about the Grants program and encouraged us to apply to the same. -We have already applied for and delivered Milestones 1 and 2 against implementation-benchmarking

    +We have already applied for and delivered Milestones 1 and 2 against implementation-benchmarking

    \ No newline at end of file diff --git a/applications/ink-pallet-benchmarking.html b/applications/ink-pallet-benchmarking.html index 4d7b29c9ec9..a7d806f8895 100644 --- a/applications/ink-pallet-benchmarking.html +++ b/applications/ink-pallet-benchmarking.html @@ -2,10 +2,10 @@ - + ink!/pallet/solidity performance benchmarking | Web3 Foundation Grants - - + +
    Skip to main content

    ink!/pallet/solidity performance benchmarking

    @@ -85,6 +85,6 @@

    NumberDeliverableSpecification0a.LicenseApache 2.00b.DocumentationWe will provide both inline documentation of the code and a live demo.0c.Testing GuideCore functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests.0e.ArticleWe will publish an article that explains how each implementation technique performs, and when to choose which.1.Solidity(native and WASM) Smart Contract: Basic Read & WriteWe will create some solidity smart contracts which expose simple methods for writing to storage and reading from on-chain storage.2.Adapt the benchmarking frameworkWe will adapt the benchmarking framework so it can handle WASM and native solidity code benchmarking.

    Additional Information:โ€‹

    -

    Gautam Dhameja told us about the Grants program and encouraged us to apply to the same.

    +

    Gautam Dhameja told us about the Grants program and encouraged us to apply to the same.

    \ No newline at end of file diff --git a/applications/ink-playground-ide-improvements.html b/applications/ink-playground-ide-improvements.html index 859a9800dc8..2f029dcca81 100644 --- a/applications/ink-playground-ide-improvements.html +++ b/applications/ink-playground-ide-improvements.html @@ -2,10 +2,10 @@ - + Ink Playground IDE Improvements Grant | Web3 Foundation Grants - - + + +

    [2]: ink/ARCHITECTURE.md at master ยท paritytech/ink ยท GitHub

    \ No newline at end of file diff --git a/applications/ink-smart-contract-wizard.html b/applications/ink-smart-contract-wizard.html index ec27a22e9c6..d4d2d363474 100644 --- a/applications/ink-smart-contract-wizard.html +++ b/applications/ink-smart-contract-wizard.html @@ -2,10 +2,10 @@ - + Ink Contracts Wizard | Web3 Foundation Grants - - + +
    Skip to main content
    +

    Once we are done with grants, we will be adding ink-boxes so that anyone can scaffold any ink-box using the same CLI.

    \ No newline at end of file diff --git a/applications/inkscope-fuzzer.html b/applications/inkscope-fuzzer.html index d7e30390767..eea09409995 100644 --- a/applications/inkscope-fuzzer.html +++ b/applications/inkscope-fuzzer.html @@ -2,10 +2,10 @@ - + Inkscope Fuzzer | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/ipfs_utilities.html b/applications/ipfs_utilities.html index 7ddc5c89672..c3d14460d7c 100644 --- a/applications/ipfs_utilities.html +++ b/applications/ipfs_utilities.html @@ -2,10 +2,10 @@ - + Substrate IPFS Utilities | Web3 Foundation Grants - - + +
    Skip to main content

    Substrate IPFS Utilities

    @@ -139,6 +139,6 @@

    NumberDeliverableSpecification0a.LicenseApache 2.0 / GPLv3 / MIT / Unlicense0b.DocumentationWe will provide both inline documentation of the code and a basic tutorial that explains how a developer can re-use the implementation.0c.TestingCore functions will be covered by unit tests as far as reasonably applicable to ensure functionality and robustness. In the documentation, we will describe how to run these tests.0d.CodeWe will provide the whole code in a public GitHub repository.0e.ArticleWe will write and publish a Medium article to spread the word and give developers an introduction to the project and how to use it.1.Fetch File ImplementationImplement the logic that allows clients to fetch a file from IPFS with the Substrate node. E.g. #[prg(name = "nft_getFileById")] will be designed and developed that allows users to redirect a request, which returns Result<String>, to a file server. The PRG mechanism is used to provide a RPC API that can redirect to a file server. The existing IPFS "get file" extrinsic will be obsolet as we provide this new RPC API.2.Web3 Client ExtensionThe web3 client will be extend to show the (PRG) redirect feature and retrieve corresponding files via a public IPFS gateway.3.Local Node Fetch ImplementationImplement a file fetch RPC API, that returns the file from the local embedded IPFS node instead of the public IPFS gateway. This is helpful when waiting for the file to be available on the public IPFS gateway.

    Additional Information โž•โ€‹

    -

    This is our second application for an open-source project to innovate the web3 Ecosystem.

    +

    This is our second application for an open-source project to innovate the web3 Ecosystem.

    \ No newline at end of file diff --git a/applications/iris.html b/applications/iris.html index 270385ee2c7..1aae4b0e044 100644 --- a/applications/iris.html +++ b/applications/iris.html @@ -2,10 +2,10 @@ - + Iris | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/iris_followup.html b/applications/iris_followup.html index cc70f3163a1..c4aa5eca74d 100644 --- a/applications/iris_followup.html +++ b/applications/iris_followup.html @@ -2,10 +2,10 @@ - + Iris | Web3 Foundation Grants - - + + +

    Previous work on Iris is known the W3F grants team.

    \ No newline at end of file diff --git a/applications/ismp.html b/applications/ismp.html index 33bb2f4e2da..11326f291ca 100644 --- a/applications/ismp.html +++ b/applications/ismp.html @@ -2,10 +2,10 @@ - + Interoperable State Machine Protocol | Web3 Foundation Grants - - + +
    Skip to main content

    Interoperable State Machine Protocol

    @@ -138,6 +138,6 @@

    Mil

    Future Plansโ€‹

    We recognize the significant benefits that pallet-ismp offers to the ecosystem, and therefore, after the grant completion we plan to continue providing maintenance with support from the Polkadot/Kusama treasury.

    Additional Information โž•โ€‹

    -

    Solidity Trie Verifier

    +

    Solidity Trie Verifier

    \ No newline at end of file diff --git a/applications/java-client.html b/applications/java-client.html index d43bdca6c4d..9737613f70f 100644 --- a/applications/java-client.html +++ b/applications/java-client.html @@ -2,10 +2,10 @@ - + polkadot-java-client | Web3 Foundation Grants - - + + +
    NumberDeliverableSpecification
    1.schnorrkel/sr25519 moduleWrapper around Rust crypto library
    2.Signing and signature validation moduleJava classes to sign data or verify an existing signature
    3.Example AppAn example app to create and broadcast an extrinsic
    4.Unit TestsUnit tests covering at least 75% of the code
    5.DocumentationA standalone document, describing usage
    \ No newline at end of file diff --git a/applications/keysafe_network.html b/applications/keysafe_network.html index 1bd586407ce..6b8e8efd911 100644 --- a/applications/keysafe_network.html +++ b/applications/keysafe_network.html @@ -2,10 +2,10 @@ - + Keysafe Network | Web3 Foundation Grants - - + +
    Skip to main content

    Keysafe Network

    @@ -154,6 +154,6 @@

    Future PlansAdditional Information โž•โ€‹

    How did you hear about the Grants Program? Announcement by another team

    Here you can also add any additional information that you think is relevant to this application but isn't part of it already, such as:

    -

    Dean's Crust Network and Mingshi's Astart Network are both projects of Web3 Grants.

    +

    Dean's Crust Network and Mingshi's Astart Network are both projects of Web3 Grants.

    \ No newline at end of file diff --git a/applications/klevoya_fuzzer.html b/applications/klevoya_fuzzer.html index 17489bfd87a..abef00da02c 100644 --- a/applications/klevoya_fuzzer.html +++ b/applications/klevoya_fuzzer.html @@ -2,10 +2,10 @@ - + Klevoya - Substrate WASM Smart Contract Fuzzer | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/kodadot_assethub_nft_indexer_statemine_statemint.html b/applications/kodadot_assethub_nft_indexer_statemine_statemint.html index 1787ba5f7c6..e2b3ba1722c 100644 --- a/applications/kodadot_assethub_nft_indexer_statemine_statemint.html +++ b/applications/kodadot_assethub_nft_indexer_statemine_statemint.html @@ -2,10 +2,10 @@ - + AssetHub NFT Indexer | Web3 Foundation Grants - - + +
    Skip to main content

    AssetHub NFT Indexer

    @@ -132,6 +132,6 @@

    Future Plans

    Additional Information โž•โ€‹

    The AssetHub Indexer project continues our team's various projects and implementations in the Polkadot ecosystem. We have already attracted interest from developers within the Polkadot and Kusama ecosystems. Notably, we have in 2019 previously received a grant from the W3F for creating Vue.js UI utilities, components, and libraries, details of which can be found here.

    This previous grant allowed us to reimplement keyring into Vue.js & TypeScript, demonstrating our hands-on experience with the polkadot.js.org/common utilities. The result of this work can be seen in the web-based Subkey tool.

    -

    We learned about the Grants Program through a personal recommendation. We believe that our project aligns well with the program's goals, and we are excited about the potential to further contribute to the Polkadot ecosystem.

    +

    We learned about the Grants Program through a personal recommendation. We believe that our project aligns well with the program's goals, and we are excited about the potential to further contribute to the Polkadot ecosystem.

    \ No newline at end of file diff --git a/applications/kodadot_assethub_nft_m2.html b/applications/kodadot_assethub_nft_m2.html index cdd9a19eb4d..9abcd0a8ead 100644 --- a/applications/kodadot_assethub_nft_m2.html +++ b/applications/kodadot_assethub_nft_m2.html @@ -2,10 +2,10 @@ - + AssetHub NFT Indexer (M2) | Web3 Foundation Grants - - + +
    Skip to main content

    AssetHub NFT Indexer (M2)

    @@ -136,6 +136,6 @@

    Future Plans

    Additional Information โž•โ€‹

    The AssetHub Indexer project continues our team's various projects and implementations in the Polkadot ecosystem. We have already attracted interest from developers within the Polkadot and Kusama ecosystems. Notably, we have in 2019 previously received a grant from the W3F for creating Vue.js UI utilities, components, and libraries, details of which can be found here.

    This previous grant allowed us to reimplement keyring into Vue.js & TypeScript, demonstrating our hands-on experience with the polkadot.js.org/common utilities. The result of this work can be seen in the web-based Subkey tool.

    -

    We learned about the Grants Program through a personal recommendation. We believe that our project aligns well with the program's goals, and we are excited about the potential to further contribute to the Polkadot ecosystem.

    +

    We learned about the Grants Program through a personal recommendation. We believe that our project aligns well with the program's goals, and we are excited about the potential to further contribute to the Polkadot ecosystem.

    \ No newline at end of file diff --git a/applications/konomi.html b/applications/konomi.html index 564e0fd270d..3de351cf3e0 100644 --- a/applications/konomi.html +++ b/applications/konomi.html @@ -2,10 +2,10 @@ - + Konomi | Web3 Foundation Grants - - + +
    Skip to main content
    +https://medium.com/konomi

    \ No newline at end of file diff --git a/applications/kylin_network.html b/applications/kylin_network.html index 89466a35bbd..c1e525bd4ae 100644 --- a/applications/kylin_network.html +++ b/applications/kylin_network.html @@ -2,10 +2,10 @@ - + Kylin Network | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/lastic-grant3.html b/applications/lastic-grant3.html index c6cc0bf7fef..f4ed632c554 100644 --- a/applications/lastic-grant3.html +++ b/applications/lastic-grant3.html @@ -2,10 +2,10 @@ - + Lastic - Grant 3 - Indexing Coretime Chain with Subsquid and Graph Implementation | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/lastic-price-simulation-2.html b/applications/lastic-price-simulation-2.html index 780ea05e89c..757274b2550 100644 --- a/applications/lastic-price-simulation-2.html +++ b/applications/lastic-price-simulation-2.html @@ -2,10 +2,10 @@ - + Coretime Sale Price Calculator by Lastic | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/leetcoin.html b/applications/leetcoin.html index 1c976173869..f12516c915a 100644 --- a/applications/leetcoin.html +++ b/applications/leetcoin.html @@ -2,10 +2,10 @@ - + LeetCoin | Web3 Foundation Grants - - + +
    Skip to main content

    LeetCoin

    @@ -204,6 +204,6 @@

    M with prospective applicants as well as receive feedback on the applicantโ€™s performance.

    NumberDeliverableSpecification
    0a.LicenseApache 2.0
    0b.DocumentationWe will provide the documentation for the repository code as well as a tutorial for publishing/designing a user-generated coding problem and test suites.
    0c.Testing GuideBest practices for developing test suites to run code against and a FAQ.
    0d.ArticleAnnouncement blog post explaining LeetCoin's hiring tools to help vet the candidates.
    1.Employer Problem Sets
    • Allow employers to search through database of existing problems and add them to problem set
    • Implement problem set timer
    • Implement employer problem set one-time-use link generator
    • Allow employers to optionally specify ethereum address to solve problem
    • Allow employers to create custom problems to mix and match
    2.Applicant AuthenticationApplicants must connect with their Polkadot wallet in order to start and view timed employer problem set
    3.Mailing NotifierMailing system that notifies specified email upon completion of problem set with applicantโ€™s answers

    Additional Information โž•โ€‹

    -

    How did you hear about the Grants Program? Web3 Foundation Website

    +

    How did you hear about the Grants Program? Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/liberland.html b/applications/liberland.html index 1079ba8cb2f..3a782cddc40 100644 --- a/applications/liberland.html +++ b/applications/liberland.html @@ -2,10 +2,10 @@ - + Liberland | Web3 Foundation Grants - - + +
    Skip to main content

    Liberland

    @@ -260,6 +260,6 @@

    Addit

    How did you hear about the Grants Program?โ€‹

    Our team is familiar with the Web3 Foundation and the works of Parity due to previous experience in substrates.

    Any other grants?โ€‹

    -

    Liberland's blockchain project has not asked for any previous grants before. We plan to launch another grant application by Parity for the decentralized justice system of Liberland soon.

    +

    Liberland's blockchain project has not asked for any previous grants before. We plan to launch another grant application by Parity for the decentralized justice system of Liberland soon.

    \ No newline at end of file diff --git a/applications/lip_payments.html b/applications/lip_payments.html index 656f4e0db4d..424474d652b 100644 --- a/applications/lip_payments.html +++ b/applications/lip_payments.html @@ -2,10 +2,10 @@ - + Payments Pallet | Web3 Foundation Grants - - + + +most part of 2021.

    \ No newline at end of file diff --git a/applications/logion_wallet.html b/applications/logion_wallet.html index 7343e47a268..805bb17e293 100644 --- a/applications/logion_wallet.html +++ b/applications/logion_wallet.html @@ -2,10 +2,10 @@ - + logion wallet - a wallet you can trust | Web3 Foundation Grants - - + + +

    Web3 Foundation Website / Medium / Announcement by another team / personal recommendation (all of these)

    \ No newline at end of file diff --git a/applications/lunie.html b/applications/lunie.html index 3c184710d4d..64fc80b28c1 100644 --- a/applications/lunie.html +++ b/applications/lunie.html @@ -2,10 +2,10 @@ - + Lunie | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/maintenance/Substratesnap_Maintenance.html b/applications/maintenance/Substratesnap_Maintenance.html index b81c71c0911..5ac1f6dd888 100644 --- a/applications/maintenance/Substratesnap_Maintenance.html +++ b/applications/maintenance/Substratesnap_Maintenance.html @@ -2,10 +2,10 @@ - + SubstrateSnap Maintainance Grant Proposal | Web3 Foundation Grants - - + +
    Skip to main content

    SubstrateSnap Maintainance Grant Proposal

    @@ -128,6 +128,6 @@

    Cur

    Additional Information โž•โ€‹

    How did you hear about the Grants Program? -ChainSafe is a long-standing friend of The Web3 Foundation and has collaborated on several projects over the past few years. It was through this relationship that ChainSafe was made aware of the Maintenance Grant program. It is also worth noting that ChainSafe has been awarded W3F grant funding for other projects in the past, one such being Gossamer.

    +ChainSafe is a long-standing friend of The Web3 Foundation and has collaborated on several projects over the past few years. It was through this relationship that ChainSafe was made aware of the Maintenance Grant program. It is also worth noting that ChainSafe has been awarded W3F grant funding for other projects in the past, one such being Gossamer.

    \ No newline at end of file diff --git a/applications/maintenance/Zondax-Support.html b/applications/maintenance/Zondax-Support.html index 5ba2d157f0d..c8db2260a6c 100644 --- a/applications/maintenance/Zondax-Support.html +++ b/applications/maintenance/Zondax-Support.html @@ -2,10 +2,10 @@ - + Zondax Support & Maintenance | Web3 Foundation Grants - - + +
    Skip to main content

    Zondax Support & Maintenance

    @@ -81,6 +81,6 @@

    Milesto
  • FTE: variable due to different skillset but approximately equivalent to 2.5-3.0 FTEs
  • Costs: 24000 DAI (+VAT when applicable)
  • -
    NumberDeliverableSpecification
    0a.LicenseApache 2.0
    0b.DocumentationWe will document any protocol level changes made as part of the runtime support upgrades
    0c.Testing GuideThe code will have both unit and integration (zemu based) tests as our previous deliverables.
    0d.Article/TutorialWe will write an article or tutorial that explains the work done as part of the grant.
    1.Polkadot App - Runtime Support UpdatesSimilar objective as the previous milestone
    2.Kusama App - Runtime Support UpdatesSimilar objective as the previous milestone
    3.Community Support

    +
    NumberDeliverableSpecification
    0a.LicenseApache 2.0
    0b.DocumentationWe will document any protocol level changes made as part of the runtime support upgrades
    0c.Testing GuideThe code will have both unit and integration (zemu based) tests as our previous deliverables.
    0d.Article/TutorialWe will write an article or tutorial that explains the work done as part of the grant.
    1.Polkadot App - Runtime Support UpdatesSimilar objective as the previous milestone
    2.Kusama App - Runtime Support UpdatesSimilar objective as the previous milestone
    3.Community Support
    \ No newline at end of file diff --git a/applications/maintenance/wasm-opt-for-rust.html b/applications/maintenance/wasm-opt-for-rust.html index e2de10e5595..131474ae897 100644 --- a/applications/maintenance/wasm-opt-for-rust.html +++ b/applications/maintenance/wasm-opt-for-rust.html @@ -2,10 +2,10 @@ - + wasm-opt for Rust Maintenance | Web3 Foundation Grants - - + + +

    How did you hear about the Maintenance Grants Program? personal recommendation

    \ No newline at end of file diff --git a/applications/manta_network.html b/applications/manta_network.html index 3d0b246177d..43c84db8426 100644 --- a/applications/manta_network.html +++ b/applications/manta_network.html @@ -2,10 +2,10 @@ - + Manta Network | Web3 Foundation Grants - - + + +

    WeChat Public Account: MantaNetwork

    \ No newline at end of file diff --git a/applications/massbit_route.html b/applications/massbit_route.html index 6c43989fb3c..0a7c6b52543 100644 --- a/applications/massbit_route.html +++ b/applications/massbit_route.html @@ -2,10 +2,10 @@ - + Massbit Route | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/mobile-game-framework.html b/applications/mobile-game-framework.html index d0936f1e47f..a35382d8a7c 100644 --- a/applications/mobile-game-framework.html +++ b/applications/mobile-game-framework.html @@ -2,10 +2,10 @@ - + Mobile Game Framework for Substrate | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/mobile_dapp_connection.html b/applications/mobile_dapp_connection.html index 6237d00786a..5d07a097248 100644 --- a/applications/mobile_dapp_connection.html +++ b/applications/mobile_dapp_connection.html @@ -2,10 +2,10 @@ - + Polkadot/Substrate dApps/Wallet Connection using Tesseract | Web3 Foundation Grants - - + + +

    Our previous proposal codebase: https://github.com/tesseract-one/Substrate.swift

    \ No newline at end of file diff --git a/applications/multichain_identity_indexer.html b/applications/multichain_identity_indexer.html index 66a40668faa..68135e8aff8 100644 --- a/applications/multichain_identity_indexer.html +++ b/applications/multichain_identity_indexer.html @@ -2,10 +2,10 @@ - + Multichain Identity Indexer - Identics | Web3 Foundation Grants - - + +
    Skip to main content

    Multichain Identity Indexer - Identics

    @@ -159,6 +159,6 @@

    here.

    We have a strong track record of delivering high-quality projects and have been actively contributing to the Polkadot ecosystem. Our team has a deep understanding of the Polkadot ecosystem. It is well-equipped to deliver the Identity Indexer project successfully.

    -

    We learned about the Grants Program through a personal recommendation. Our project aligns well with the program's goals, and we are excited about the potential to contribute further to the Polkadot ecosystem.

    +

    We learned about the Grants Program through a personal recommendation. Our project aligns well with the program's goals, and we are excited about the potential to contribute further to the Polkadot ecosystem.

    \ No newline at end of file diff --git a/applications/multisignature_management_tool.html b/applications/multisignature_management_tool.html index a3ee538a2c2..67ba56561e0 100644 --- a/applications/multisignature_management_tool.html +++ b/applications/multisignature_management_tool.html @@ -2,10 +2,10 @@ - + multisignature_management_tool | Web3 Foundation Grants - - + + +

    Total Budget: 2 BTC.

    \ No newline at end of file diff --git a/applications/mybank.html b/applications/mybank.html index df6ddffaa14..99cca933073 100644 --- a/applications/mybank.html +++ b/applications/mybank.html @@ -2,10 +2,10 @@ - + MyBank Network | Web3 Foundation Grants - - + + +

    We have just developed the first version of the MyBank Network and have not yet accepted external donations and financing.

    \ No newline at end of file diff --git a/applications/myriad_social.html b/applications/myriad_social.html index 4ba3590e672..548f28957bb 100644 --- a/applications/myriad_social.html +++ b/applications/myriad_social.html @@ -2,10 +2,10 @@ - + Myriad Social - Uncensorable, Decentralized Social Network | Web3 Foundation Grants - - + +
    Skip to main content

    Myriad Social - Uncensorable, Decentralized Social Network

    @@ -213,6 +213,6 @@

    Additional Information โž•โ€‹

    How did you hear about the Grants Program? We received an email invitation from a Parity representative to submit a grant proposal.

    -

    Myriad Social has performed fund raising activities, including a token sale on Skyward Finance in the NEAR Ecosystem, and has received financial backing from a couple private investors.

    +

    Myriad Social has performed fund raising activities, including a token sale on Skyward Finance in the NEAR Ecosystem, and has received financial backing from a couple private investors.

    \ No newline at end of file diff --git a/applications/native-bitcoin-vaults.html b/applications/native-bitcoin-vaults.html index b2c02a7309f..47267e12d8b 100644 --- a/applications/native-bitcoin-vaults.html +++ b/applications/native-bitcoin-vaults.html @@ -2,10 +2,10 @@ - + Native Bitcoin Vaults (NBV) | Web3 Foundation Grants - - + +
    Skip to main content

    Native Bitcoin Vaults (NBV)

    @@ -279,6 +279,6 @@

    The trade-offs, IMHO, are mostly around usability, composability, and designing idiomatically, which I find incredibly useful for re-usability by other developers (particularly in initial releases). As an example, the Identity pallet developer chose to store fields, including the registrars' judgments ๐Ÿง‘โ€โš–๏ธ , within the pallet rather than hashing them into a remark field. I tend to think of these as "first class" attributes because the architect decided they were worth the space and mind-share of being stored directly on chain. In a similar pattern, I think the xpubs ๐Ÿ”‘ are important enough to persist this way also.

    In the future, I expect there to be a quite complex many:many relationship between users, DAOs, and vaults. For example, within the Hypha DAO, there are team "circles" or quests (projects) that are allocated a budget to a vault. There may be many circles/quests per DAO. There may also be many DAOs and circles/quests for each user, and they will likely desire different xpubs in their profiles for these scenarios.

    We can use the remark pallet, and it would be valuable 'back-end' for NBV that works on the relay chains. I think there are likely privacy preserving benefits to this as well. But the functionality and logic of generating the output descriptors dynamically along with receiving addresses, the user experience, vault handling, managing the user flow, etc, still needs to be developed.

    -

    My suggestion would be that we implement the most vanilla, idiomatic way first, and then add compatibility to relay chain/remark as a future step. OP_RETURN compatibility is interesting too. A caution with that is, in my experience, the more complex/obfuscated the persisted state, the harder it is (more tooling/logic) for more casual users to verify and adopt. But there is absolutely value in pursuing these. Let me know what you think, and we would be happy to pivot or add this to the proposal.

    +

    My suggestion would be that we implement the most vanilla, idiomatic way first, and then add compatibility to relay chain/remark as a future step. OP_RETURN compatibility is interesting too. A caution with that is, in my experience, the more complex/obfuscated the persisted state, the harder it is (more tooling/logic) for more casual users to verify and adopt. But there is absolutely value in pursuing these. Let me know what you think, and we would be happy to pivot or add this to the proposal.

    \ No newline at end of file diff --git a/applications/new-order.html b/applications/new-order.html index 5741298f195..ddaf03bdd4b 100644 --- a/applications/new-order.html +++ b/applications/new-order.html @@ -2,10 +2,10 @@ - + New Order - a full onchain orderbook dex with indexers | Web3 Foundation Grants - - + + +I applied before.

    \ No newline at end of file diff --git a/applications/new_bls12_hash_function.html b/applications/new_bls12_hash_function.html index 24bc85ad96b..1e982f3fd2b 100644 --- a/applications/new_bls12_hash_function.html +++ b/applications/new_bls12_hash_function.html @@ -2,10 +2,10 @@ - + Implementation of the new hash function to BLS12 curves | Web3 Foundation Grants - - + + +

    An Ethereum Foundation grant called "fast hash-to-curve research" and represented on the web page https://blog.ethereum.org/2021/11/04/esp-allocation-update-q2-2021/

    \ No newline at end of file diff --git a/applications/newomega-m3m4.html b/applications/newomega-m3m4.html index 02f56590404..154431f480e 100644 --- a/applications/newomega-m3m4.html +++ b/applications/newomega-m3m4.html @@ -2,10 +2,10 @@ - + NewOmega (Milestone 3 and 4) | Web3 Foundation Grants - - + +
    Skip to main content

    NewOmega (Milestone 3 and 4)

    @@ -131,6 +131,6 @@

    Future Planshttps://www.newomega.online/

    The goal is to have a deployed, playable, and marketable test version on a public network at the end of Milestone 4. The combination of space exploration, leaving a permanent mark on an inifinite universe, combined with a tactical combat element, all delivered in a modern 3d web (hybrid) app, will provide a broader "reason" to enjoy the game, and the ranked combat (leaderboards + staking own ingame money on fights) will provide a competitive element to compliment.

    In time (after M4), the Universe will become more diverse; producing different minerals which will be used to craft Modules of certain parameters. The minerals/production system should offer the player an option creation of an "industry" used to produce Modules, and the mineral types should be randomly generated when discovering Systems, making control of some Systems more attractive than others and giving more reason to territory control.

    -

    Once released to test users, additional features will be driven by test user feedback, at which stage we will also trigger development on onboarding features (in game tutorials, starting resources, but also gas (weight => transaction cost) sponsoring model to remove the requirement of owning tokens for new players (to pay registration contract's gas fees, for example). And as the DOT ecosystem matures, new opportunities for technical improvements will present themselves.

    +

    Once released to test users, additional features will be driven by test user feedback, at which stage we will also trigger development on onboarding features (in game tutorials, starting resources, but also gas (weight => transaction cost) sponsoring model to remove the requirement of owning tokens for new players (to pay registration contract's gas fees, for example). And as the DOT ecosystem matures, new opportunities for technical improvements will present themselves.

    \ No newline at end of file diff --git a/applications/newomega.html b/applications/newomega.html index abe6845330f..7f90efc8e2a 100644 --- a/applications/newomega.html +++ b/applications/newomega.html @@ -2,10 +2,10 @@ - + NewOmega | Web3 Foundation Grants - - + +
    Skip to main content

    NewOmega

    @@ -112,6 +112,6 @@

    Future PlansAlliances

    Additional Informationโ€‹

    -

    A working frontend prototype and smart contracts on Ethereum Ropsten are available. No teams have already contributed (financially) to the project. No other grant applications have been made.

    +

    A working frontend prototype and smart contracts on Ethereum Ropsten are available. No teams have already contributed (financially) to the project. No other grant applications have been made.

    \ No newline at end of file diff --git a/applications/nft_collectibles_wallet.html b/applications/nft_collectibles_wallet.html index 17996407ef1..82a8124a845 100644 --- a/applications/nft_collectibles_wallet.html +++ b/applications/nft_collectibles_wallet.html @@ -2,10 +2,10 @@ - + NFT Collectibles Wallet | Web3 Foundation Grants - - + +
    Skip to main content
    +

    Currently we have no funding for this project or GamePower Network, we feel getting the NFT Collectibles Wallet off the ground will kick-start our GamePower Network development in a big way. We are excited to be part of the Substrate and Polkadot community and we will continue to contribute as much as we can. Thank you for your time and thank you for considering us for the Web3 Open Grant.

    \ No newline at end of file diff --git a/applications/nft_explorer.html b/applications/nft_explorer.html index 42c94c13370..3fd82f4abb4 100644 --- a/applications/nft_explorer.html +++ b/applications/nft_explorer.html @@ -2,10 +2,10 @@ - + Uniscan NFT Explorer | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/nft_product_analytics_suite.html b/applications/nft_product_analytics_suite.html index 9fb346bb1db..b81e8eb34b1 100644 --- a/applications/nft_product_analytics_suite.html +++ b/applications/nft_product_analytics_suite.html @@ -2,10 +2,10 @@ - + NFT Product Analytics Suite | Web3 Foundation Grants - - + +
    Skip to main content
    +

    We became aware of the Web-3 grants after our partnership with the Enjin team, which suggested that we should get in touch with the Web-3 Foundation. After discussing our main project with the team, they put us in touch with David Hawig given his previous experience in the healthcare space who then specifically went into the details regarding the grants and other types of support they can offer.

    \ No newline at end of file diff --git a/applications/nftaa.html b/applications/nftaa.html index 61d32604950..bb18e9ed4ab 100644 --- a/applications/nftaa.html +++ b/applications/nftaa.html @@ -2,10 +2,10 @@ - + NFT as an account (NFTAA) | Web3 Foundation Grants - - + + +ecosystem.

    \ No newline at end of file diff --git a/applications/ocelloids_monitoring_sdk.html b/applications/ocelloids_monitoring_sdk.html index 15e333a0d56..ecececbca6d 100644 --- a/applications/ocelloids_monitoring_sdk.html +++ b/applications/ocelloids_monitoring_sdk.html @@ -2,10 +2,10 @@ - + Ocelloids: Monitoring SDK | Web3 Foundation Grants - - + +
    Skip to main content

    Ocelloids: Monitoring SDK

    @@ -112,6 +112,6 @@

    Future PlansWe aim to expand the domain-logic components to other FRAME pallets like multisig, xcm and staking.
  • We aim to provide a comprehensive collection of Node-RED nodes. It will allow for easy integration with thousands of existing building blocks for visual flow programming.
  • Finally, we plan to support time series to aggregate data over time. This functionality will help users identify trends, such as when balance transfers exceed 100 DOT within a week.
  • -

    + \ No newline at end of file diff --git a/applications/ocelloids_xcm_monitoring_service.html b/applications/ocelloids_xcm_monitoring_service.html index dec8aa07fe7..e9f29ec2315 100644 --- a/applications/ocelloids_xcm_monitoring_service.html +++ b/applications/ocelloids_xcm_monitoring_service.html @@ -2,10 +2,10 @@ - + Ocelloids XCM Transfer Monitoring Service | Web3 Foundation Grants - - + + +

    In summary, our future plans encompass not only expanding the technical capabilities of the XCM monitoring service but also positioning as a central hub for monitoring and managing Substrate networks and smart contracts within the broader multi-chain ecosystem.

    \ No newline at end of file diff --git a/applications/odyssey_momentum.html b/applications/odyssey_momentum.html index 7027ca4a63e..92e962d4ab3 100644 --- a/applications/odyssey_momentum.html +++ b/applications/odyssey_momentum.html @@ -2,10 +2,10 @@ - + Odyssey - Momentum | Web3 Foundation Grants - - + +
    Skip to main content

    Odyssey - Momentum

    @@ -177,6 +177,6 @@

    Sovereign Nature Initiative organising a Hackathon in Momentum for the Kenya Wildlife Trust. Momentum enables true collaboration happening in real-time among 13 teams spread over 5+ countries. SNI has been hosting events in Momentum up to the 9th of November. Check it out on SNI World.

    +Last but not least, we are proud to we have the Sovereign Nature Initiative organising a Hackathon in Momentum for the Kenya Wildlife Trust. Momentum enables true collaboration happening in real-time among 13 teams spread over 5+ countries. SNI has been hosting events in Momentum up to the 9th of November. Check it out on SNI World.

    \ No newline at end of file diff --git a/applications/on-chain-cash.html b/applications/on-chain-cash.html index baba2be5e16..903996ec111 100644 --- a/applications/on-chain-cash.html +++ b/applications/on-chain-cash.html @@ -2,10 +2,10 @@ - + On-chain cash exchange | Web3 Foundation Grants - - + +
    Skip to main content

    On-chain cash exchange

    @@ -152,6 +152,6 @@

    Future Plans

    Additional Information โž•โ€‹

    How did you hear about the Grants Program? -Our team includes blockchain enthusiasts who have strong hi-tech experience and strive to implement their ideas and give maximum value to emerging blockchain and crypto markets. That's why the Grants Program is a self-evident knowledge for our team.

    +Our team includes blockchain enthusiasts who have strong hi-tech experience and strive to implement their ideas and give maximum value to emerging blockchain and crypto markets. That's why the Grants Program is a self-evident knowledge for our team.

    \ No newline at end of file diff --git a/applications/open-node-framework.html b/applications/open-node-framework.html index e8549e82fbe..3de8f47ad10 100644 --- a/applications/open-node-framework.html +++ b/applications/open-node-framework.html @@ -2,10 +2,10 @@ - + Open Node Framework | Web3 Foundation Grants - - + +
    Skip to main content

    Open Node Framework

    @@ -158,6 +158,6 @@

    NumberDeliverableSpecification0a.LicenseApache 2.00b.DocumentationWe will provide high availability and session key management design docs, inline documentation of the config files and a basic tutorial that explains how to add HA setup, backup nodes, and alerts to the basic configurations as in M1.0c.Testing GuideA guide describing how to run the tests covering the cases in 0b.0d.Article/TutorialWe will extend the workshop to show how to deploy a hardened node network.1.Backup node and recoveryAdd sync node type and database backup & recovery routines. Add scripts to trigger and minotor the process. (addition)2.Session key managementAdd the script to interact with the node and the blockchain to generate and rotate the session keys, and add routines to migrate keys between validators and collators (or mount the keystore db to the assigned validators) (addition)3.AlertsDefine the collator / validator related warnings and metrics from Prometheus and Loki and add them to the alerm manager. (integration)4.HPA scalingAutomatically scale the storage and the size of the cluster based on load of the nodes. (addition)5.Authenticated RPCAdd the authentication layer to the node RPC for node operation (integration)

    Future Plansโ€‹

    -

    Besides the future work we described in Project Details, the general plan is to make Open Node Framework an open and friendly open source project, lowering the barrier for Susbstrate developers to run their network. So we intend to use the project as a start point to build a developer community, and attract more contributors to sustain it.

    +

    Besides the future work we described in Project Details, the general plan is to make Open Node Framework an open and friendly open source project, lowering the barrier for Susbstrate developers to run their network. So we intend to use the project as a start point to build a developer community, and attract more contributors to sustain it.

    \ No newline at end of file diff --git a/applications/openPayroll.html b/applications/openPayroll.html index f44f42ac736..425b57568dc 100644 --- a/applications/openPayroll.html +++ b/applications/openPayroll.html @@ -2,10 +2,10 @@ - + Open Payroll | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? Polkadot Blockchain Academy

    \ No newline at end of file diff --git a/applications/openbrush-follow-up-2.html b/applications/openbrush-follow-up-2.html index 583d0c5ceee..44aa7d632c7 100644 --- a/applications/openbrush-follow-up-2.html +++ b/applications/openbrush-follow-up-2.html @@ -2,10 +2,10 @@ - + OpenBrush | Web3 Foundation Grants - - + + +

    Personal recommendation.

    \ No newline at end of file diff --git a/applications/openbrush-follow-up.html b/applications/openbrush-follow-up.html index b38bea5469b..035be68a0d2 100644 --- a/applications/openbrush-follow-up.html +++ b/applications/openbrush-follow-up.html @@ -2,10 +2,10 @@ - + OpenBrush | Web3 Foundation Grants - - + +
    Skip to main content

    OpenBrush

    @@ -214,6 +214,6 @@

    grant to cover 1 and 2 milestones. This grant is a follow-up grant.

    How did you hear about the Grants Program? Web3 Foundation Website / Medium / Twitter / Element / Announcement by another team / personal recommendation / etc.

    -

    Personal recommendation.

    +

    Personal recommendation.

    \ No newline at end of file diff --git a/applications/openbrush.html b/applications/openbrush.html index 7413973b28d..04949cdf377 100644 --- a/applications/openbrush.html +++ b/applications/openbrush.html @@ -2,10 +2,10 @@ - + OpenBrush | Web3 Foundation Grants - - + + +

    Personal recommendation.

    \ No newline at end of file diff --git a/applications/openrollup-mvp-phase-1.html b/applications/openrollup-mvp-phase-1.html index d7286d6e427..ff67a18bdc4 100644 --- a/applications/openrollup-mvp-phase-1.html +++ b/applications/openrollup-mvp-phase-1.html @@ -2,10 +2,10 @@ - + Open rollup - MVP - Phase 1 | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? Recommendation from a friend in the Bifrost team.

    \ No newline at end of file diff --git a/applications/orochi-network-orosign-part1.html b/applications/orochi-network-orosign-part1.html index 2b2e5a73761..329c0063072 100644 --- a/applications/orochi-network-orosign-part1.html +++ b/applications/orochi-network-orosign-part1.html @@ -2,10 +2,10 @@ - + Orochi Network's proposal for research and development MPC ECDSA | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/pacific_store.html b/applications/pacific_store.html index b53cb6238ca..f04f74f6134 100644 --- a/applications/pacific_store.html +++ b/applications/pacific_store.html @@ -2,10 +2,10 @@ - + OpenSea.js on polkadot | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/pallet-drand-client.html b/applications/pallet-drand-client.html index 29e64a229b3..2ae9bf5e25e 100644 --- a/applications/pallet-drand-client.html +++ b/applications/pallet-drand-client.html @@ -2,10 +2,10 @@ - + drand in substrate | Web3 Foundation Grants - - + + +

    Thank you for your time. We're looking forward to discussing this project with you.

    \ No newline at end of file diff --git a/applications/pallet-verifier.html b/applications/pallet-verifier.html index ebed543a288..bdf3a575971 100644 --- a/applications/pallet-verifier.html +++ b/applications/pallet-verifier.html @@ -2,10 +2,10 @@ - + Pallet Verifier | Web3 Foundation Grants - - + + +(a collection of modular and reusable libraries and tools for semantic analysis of ink! smart contracts).

    \ No newline at end of file diff --git a/applications/pallet_maci.html b/applications/pallet_maci.html index 5e268ba1207..af0d17fc8eb 100644 --- a/applications/pallet_maci.html +++ b/applications/pallet_maci.html @@ -2,10 +2,10 @@ - + pallet-maci | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/pallet_supersig.html b/applications/pallet_supersig.html index 22a2564a3eb..bf28908e802 100644 --- a/applications/pallet_supersig.html +++ b/applications/pallet_supersig.html @@ -2,10 +2,10 @@ - + Supersig | Web3 Foundation Grants - - + + +

    Who can vouch for Ramsey(Decentration)? Josh Muir (Kusama Council and Dat Dot), Bruno ล kvorc, Dan Shields, Will Chevdor, Sacha Lanski...

    \ No newline at end of file diff --git a/applications/panic.html b/applications/panic.html index dbac6d01ee7..5a1df82076a 100644 --- a/applications/panic.html +++ b/applications/panic.html @@ -2,10 +2,10 @@ - + PANIC | Web3 Foundation Grants - - + +
    Skip to main content

    PANIC

    @@ -164,6 +164,6 @@

    Work alrea
  • Out-of-the-box alert thresholds for metrics monitored and associated severity levels of alerts (Info, Warning, Major, and Critical), customisable by node operators.
  • A UI which consists of a high-level dashboard from which node operators can review all alerts together with a low-level dashboard which allows node operators to review the performance of their host infrastructure.
  • -

    May 2022 will see an additional release which will allow node operators to get alerted on high priority metrics for Cosmos based chains.

    +

    May 2022 will see an additional release which will allow node operators to get alerted on high priority metrics for Cosmos based chains.

    \ No newline at end of file diff --git a/applications/parachain-staking.html b/applications/parachain-staking.html index 7494a13bc48..a4536db21ba 100644 --- a/applications/parachain-staking.html +++ b/applications/parachain-staking.html @@ -2,10 +2,10 @@ - + Pallet-dPoS for Parachain Staking | Web3 Foundation Grants - - + +
    Skip to main content

    Pallet-dPoS for Parachain Staking

    @@ -68,6 +68,6 @@

    Additional Information โž•โ€‹

    -

    The current implementation has significant unit test coverage and this will be maintained throughout the changes listed in Milestone 1. There are also runtime integration tests written in Rust as well as TS integration tests. Maintenance is not explicitly included in the milestones because test coverage is already relatively comprehensive and we have an incentive to maintain it throughout the proposed changes.

    +

    The current implementation has significant unit test coverage and this will be maintained throughout the changes listed in Milestone 1. There are also runtime integration tests written in Rust as well as TS integration tests. Maintenance is not explicitly included in the milestones because test coverage is already relatively comprehensive and we have an incentive to maintain it throughout the proposed changes.

    \ No newline at end of file diff --git a/applications/parami-protocol.html b/applications/parami-protocol.html index 54a4d170e36..5ccec83683a 100644 --- a/applications/parami-protocol.html +++ b/applications/parami-protocol.html @@ -2,10 +2,10 @@ - + The Parami Protocol | Web3 Foundation Grants - - + + +

    Substrate Builder Program.

    \ No newline at end of file diff --git a/applications/patron.html b/applications/patron.html index 3074db19466..fccdbf0e214 100644 --- a/applications/patron.html +++ b/applications/patron.html @@ -2,10 +2,10 @@ - + Patron | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? Personal recommendation

    \ No newline at end of file diff --git a/applications/perun_app_channels.html b/applications/perun_app_channels.html index ef626a7d6c7..13a128ebccb 100644 --- a/applications/perun_app_channels.html +++ b/applications/perun_app_channels.html @@ -2,10 +2,10 @@ - + Perun App Channels | Web3 Foundation Grants - - + + +The Perun project receives funding from the German Ministry of Education and Science (BMBF) through the StartUpSecure grants program.

    \ No newline at end of file diff --git a/applications/perun_channels-integration.html b/applications/perun_channels-integration.html index 31dbb98198f..2b7d8779741 100644 --- a/applications/perun_channels-integration.html +++ b/applications/perun_channels-integration.html @@ -2,10 +2,10 @@ - + Perun Channels - Integration with go-perun | Web3 Foundation Grants - - + + +The Perun project is supported by the German Ministry of Education and Science (BMBF) through a Startup Secure grant.

    \ No newline at end of file diff --git a/applications/perun_channels.html b/applications/perun_channels.html index fcbba1bcb50..d2d56f2d362 100644 --- a/applications/perun_channels.html +++ b/applications/perun_channels.html @@ -2,10 +2,10 @@ - + Perun Channels | Web3 Foundation Grants - - + + +The project is partially supported by the the German Ministry of Education and Science (BMBF) through a Startup Secure grant.

    \ No newline at end of file diff --git a/applications/pesa_pallet.html b/applications/pesa_pallet.html index afdfc8b1d63..31eef4f4b7a 100644 --- a/applications/pesa_pallet.html +++ b/applications/pesa_pallet.html @@ -2,10 +2,10 @@ - + PESA - On-ramp/off-ramp to crypto/local currencies for Polkadot | Web3 Foundation Grants - - + +
    Skip to main content

    PESA - On-ramp/off-ramp to crypto/local currencies for Polkadot

    @@ -115,6 +115,6 @@

    Communi

    Future Plansโ€‹

    Our goal is to make telecom and financial services open and accessible to all. So we plan to continually increase the services that can be accessed using phone numbers (for eg: lend, borrow), aiming to unlock access to advanced financial services for the unbanked as well.

    Additional Information โž•โ€‹

    -

    We are going to use this pallet for building a borderless mobile money system but anyone can extend it to support address resolution for other non-fungible tokens.

    +

    We are going to use this pallet for building a borderless mobile money system but anyone can extend it to support address resolution for other non-fungible tokens.

    \ No newline at end of file diff --git a/applications/php-rpc-lib-follow-up.html b/applications/php-rpc-lib-follow-up.html index 7c39ec60dde..10f8af3e5eb 100644 --- a/applications/php-rpc-lib-follow-up.html +++ b/applications/php-rpc-lib-follow-up.html @@ -2,10 +2,10 @@ - + PHP RPC Lib Follow up | Web3 Foundation Grants - - + + +

    This milestone still lacks support for smart contract verification, there is no better solution at present, and will be supported after research

    \ No newline at end of file diff --git a/applications/php-rpc-lib.html b/applications/php-rpc-lib.html index 4cb92ee38b0..bb106195c1c 100644 --- a/applications/php-rpc-lib.html +++ b/applications/php-rpc-lib.html @@ -2,10 +2,10 @@ - + PHP RPC Lib | Web3 Foundation Grants - - + +
    Skip to main content

    PHP RPC Lib

    @@ -92,6 +92,6 @@

    Milestone 2Future Plansโ€‹

    1. Long-term support, Because I found that the underlying changes of the substrate are still very frequent, like metadata, I expect will be a long-term job in the future
    2. -
    + \ No newline at end of file diff --git a/applications/php-scale-lib.html b/applications/php-scale-lib.html index 12b27ee54fb..2cdbbc5fab9 100644 --- a/applications/php-scale-lib.html +++ b/applications/php-scale-lib.html @@ -2,10 +2,10 @@ - + PHP Scale Codec | Web3 Foundation Grants - - + +
    Skip to main content

    PHP Scale Codec

    @@ -51,6 +51,6 @@

    Future Plansโ€‹

    1. Long-term support, Because I found that the underlying changes of substrate are still very frequent, I expect scale lib will be a long-term job in the future
    2. -
    + \ No newline at end of file diff --git a/applications/php-substrate-api.html b/applications/php-substrate-api.html index 971af1d9a29..b6e659f26d9 100644 --- a/applications/php-substrate-api.html +++ b/applications/php-substrate-api.html @@ -2,10 +2,10 @@ - + php substrate api | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/plip.html b/applications/plip.html index 46f9d333d13..8a6fc451b7a 100644 --- a/applications/plip.html +++ b/applications/plip.html @@ -2,10 +2,10 @@ - + People Local Interactions Protocol (PLIP) | Web3 Foundation Grants - - + +
    Skip to main content

    People Local Interactions Protocol (PLIP)

    @@ -126,6 +126,6 @@

    Future PlansAdditional Information โž•โ€‹

    How did you hear about the Grants Program? Web3 Foundation Website, the Substrate Builder's Program, as well as a networking meeting with the Acala team.

    Previous Funding and Support

    -

    Valibre is the brainchild of Daniel Olano, and ultimately attracted the attention of Valiu, a stablecoin payments platform for users in Venezeula. Valibre was temporarily contracted by Valiu while also remaining an independent organization. We have created the basic foundation of PLIP with the required functionality of Valiu (remittances) as the basis of our inspiration, but now we are upgrading the foundations of PLIP to accomdate a broadend scope of use cases. This grant application is our first attempt seeking indepenent funding of any kind.

    +

    Valibre is the brainchild of Daniel Olano, and ultimately attracted the attention of Valiu, a stablecoin payments platform for users in Venezeula. Valibre was temporarily contracted by Valiu while also remaining an independent organization. We have created the basic foundation of PLIP with the required functionality of Valiu (remittances) as the basis of our inspiration, but now we are upgrading the foundations of PLIP to accomdate a broadend scope of use cases. This grant application is our first attempt seeking indepenent funding of any kind.

    \ No newline at end of file diff --git a/applications/polk-auction.html b/applications/polk-auction.html index e4188b4960b..7cc6f5a8935 100644 --- a/applications/polk-auction.html +++ b/applications/polk-auction.html @@ -2,10 +2,10 @@ - + Polk-Auction Website | Web3 Foundation Grants - - + + +I've started to work in the back-end (polk-auction-core) as well as deployed two running nodes (one on Polkadot, one on Kusama) and their respective side-car API instances. I've applied to no previous grants neither received contribution for this project.

    \ No newline at end of file diff --git a/applications/polkadart_extension.html b/applications/polkadart_extension.html index 228699a60fa..55491efcf87 100644 --- a/applications/polkadart_extension.html +++ b/applications/polkadart_extension.html @@ -2,10 +2,10 @@ - + Polkadart Extension | Web3 Foundation Grants - - + + +Excel

    \ No newline at end of file diff --git a/applications/polkadex.html b/applications/polkadex.html index 3ec252c3a2d..0fb676b4e4b 100644 --- a/applications/polkadex.html +++ b/applications/polkadex.html @@ -2,10 +2,10 @@ - + Polkadex: A fully decentralized, peer-peer, cryptocurrency exchange for DeFi ecosystem in Substrate. | Web3 Foundation Grants - - + +
    Skip to main content

    Polkadex: A fully decentralized, peer-peer, cryptocurrency exchange for DeFi ecosystem in Substrate.

    @@ -129,6 +129,6 @@

    Communi

    Future Plansโ€‹

    We will be registering an LLC for taking this project ahead. We intend to host a the Web UI provided here. We will also be developing a cloud service to analyse and aggregate the market data to provide a wide range of technical indicators like Bollinger bands, RSI etc. -We want to provide traders the maximum possible user experience compared to a centralized exchange.

    +We want to provide traders the maximum possible user experience compared to a centralized exchange.

    \ No newline at end of file diff --git a/applications/polkadot-contract-wizard.html b/applications/polkadot-contract-wizard.html index f8d95ef5d58..b36ba5d7720 100644 --- a/applications/polkadot-contract-wizard.html +++ b/applications/polkadot-contract-wizard.html @@ -2,10 +2,10 @@ - + Polkadot Contract Wizard | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/polkadot-desktop-app.html b/applications/polkadot-desktop-app.html index 0bb97466e1b..360f8c1e96c 100644 --- a/applications/polkadot-desktop-app.html +++ b/applications/polkadot-desktop-app.html @@ -2,10 +2,10 @@ - + Polkadot.\{js} Desktop Application | Web3 Foundation Grants - - + +
    Skip to main content

    Polkadot.{js} Desktop Application

    @@ -109,6 +109,6 @@

    Work done s

    Have you applied for other grants so far?โ€‹

    We have successfully applied for a grant on Polkadot.{js} Extension. We are now awaiting acceptance of the last milestone of this grant.

    Similar projectsโ€‹

    -

    We're aware of the SubstrateIDE project, which also uses Electron to package the Polkadot.{js} app. However, in case of this project the focus is on providing a developer environment, of which the Polkadot Apps is just a part. In our grant application we focus more on providing an end-user solution.

    +

    We're aware of the SubstrateIDE project, which also uses Electron to package the Polkadot.{js} app. However, in case of this project the focus is on providing a developer environment, of which the Polkadot Apps is just a part. In our grant application we focus more on providing an end-user solution.

    \ No newline at end of file diff --git a/applications/polkadot-js-extension-per-account-auth.html b/applications/polkadot-js-extension-per-account-auth.html index 7f09ac8be7b..19f7d696e3b 100644 --- a/applications/polkadot-js-extension-per-account-auth.html +++ b/applications/polkadot-js-extension-per-account-auth.html @@ -2,10 +2,10 @@ - + Privacy enhancement for Polkadot-js extension | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? Github RFP and personal recommendation

    \ No newline at end of file diff --git a/applications/polkadot-mempool-explorer-v2.html b/applications/polkadot-mempool-explorer-v2.html index 73a916a4152..eb6783b0360 100644 --- a/applications/polkadot-mempool-explorer-v2.html +++ b/applications/polkadot-mempool-explorer-v2.html @@ -2,10 +2,10 @@ - + polkadot-mempool-explorer-v2 | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/polkadot-runtime-releaser.html b/applications/polkadot-runtime-releaser.html index a9d20e500e6..54d92dec8c7 100644 --- a/applications/polkadot-runtime-releaser.html +++ b/applications/polkadot-runtime-releaser.html @@ -2,10 +2,10 @@ - + Polkadot Runtime Releaser | Web3 Foundation Grants - - + +
    Skip to main content

    Polkadot Runtime Releaser

    @@ -39,16 +39,6 @@

    OverviewEcosystem Fit<

    Details(spec)โ€‹

    For PRR's utilization, the chain team requires two repositories: one for their code and another for the release.

    Take foo-network as an example. -They should have two repositories, foo-network/foo and foo-network/foo-release.

    +They should have two repositories, foo-network/foo and foo-network/foo-runtime-overrides.

    foo-network/foo is the base Polkadot-SDK-based chain repository that everyone should have.

    -

    foo-network/foo-release is a new repository that PRR requires. +

    foo-network/foo-runtime-overrides is a new repository that PRR requires. It will have 2 branches, foo and bar if they have 2 networks, foo(mainnet) and bar(canary network). It will host the override WASMs and the release under the corresponding network branch.

    -

    For collator/validator nodes, they should monitor the foo-network/foo repository release as usual. -For RPC suppliers or service node, they should monitor the foo-network/foo-release repository release, it's a more stable version. It will only be published once the on-chain runtime upgrade get confirmed.

    PRR will supply these components, which will all be hosted in one repository.

      +
    • A specialized custom Docker image maintained by Hack-Ink for building Polkadot-SDK-based runtimes.
    • A GitHub Action to response the try-runtime. (Users can comment something like /bot try-runtime <network> under a release PR to trigger this action.)
    • A GitHub Action to build the release runtime.
    • A GitHub Action to notify release repository there is a new release that release repository can start preparing the override WASMs.
    • -
    • A GitHub Action and a tool to monitor the on-chain runtime version and compare it with the release runtime version to trigger the release on the release repository.
    • A tool to build and manage the override WASMs.
    • +
    • A tool to inspect the basic information from the WASM file.
    -
    GitHub ActionTriggerOutput
    try-runtimeComment /bot try-runtime <network> under the PR.Bot will comment the try-runtime result under the PR.
    Runtime releaseUsually by tag, this can be configured by users.Build and release the runtime files.
    WASM overrideRuntime release action will notify this action.Build and push the runtime files to the repository.
    Node releaseIt's a scheduled action that runs every hour by default.Retrieve the on-chain runtime version and compare it with the latest GitHub tag to determine if a release is necessary.
    +
    GitHub ActionTriggerOutput
    try-runtimeComment /bot try-runtime <network> under the PR.Bot will comment the try-runtime result under the PR.
    Runtime releaseUsually by tag, this can be configured by users.Build and release the runtime files.
    WASM overrideRuntime release action will notify this action.Build and push the runtime files to the repository.

    Each component will have a very detailed guide to help the chain team to set up.

    Team ๐Ÿ‘ฅโ€‹

    Team membersโ€‹

    @@ -110,7 +99,7 @@

    Team's
  • Actively at Substrate StackExchange.
  • Grants contributor, Subalfred, Slothunter.
  • -

    Team Code Reposโ€‹

    +

    Team Code Reposโ€‹

    • https://github.com/hack-ink
    • https://github.com/hack-ink/AiR
    • @@ -139,13 +128,13 @@

      NumberDeliverableSpecification0a.LicenseGPLv30b.DocumentationThere will be a guide to tell people how to use this and inline docs will cover core functionalities.0c.Testing guideThere will be a guide and a demo repository to tell the auditor how to run the tests. All components will be covered.1.Try-runtime CIComment on a release PR and see the try-runtime result.2.Release CIBuild and release the deterministic runtime and the node files.3.WASM override toolIt can build the specify feature WASM in one step and manage them well in the corresponding folder.4.WASM override CIListen for build requests from the release CI.5.Version compare toolIt can retrieve the on-chain runtime version and compare it with the latest GitHub tag.6.Release repository release CIBased on the version comparison tool result, proceed to release the new version in this repository.7.ReleasesGitHub release. +
      NumberDeliverableSpecification
      0a.LicenseGPLv3
      0b.DocumentationThere will be a guide to tell people how to use this and inline docs will cover core functionalities.
      0c.Testing guideThere will be a guide and a demo repository to tell the auditor how to run the tests. All components will be covered.
      1.Docker imageA well-maintained, long-term version Docker image for Polkadot-SDK-based runtime managed by Hack-Ink.
      2.Try-Runtime CIComment on a release PR and see the try-runtime result.
      3.Release CIBuild and release the deterministic runtime.
      4.WASM override toolIt can build the specify feature WASM in one step and manage them well in the corresponding folder.
      5.WASM override CIListen for build requests from the release CI.
      6.WASM info inspect toolUse it to inspect the WASM basic information and integrate the result into the release note.
      7.ReleasesPublish on GitHub release and crates.io release.
      8.WorkshopThere will be a workshop repository for teams to learn how to setup the release pipeline step by step.

      Future Plansโ€‹

      • Keep connected with the community/parity and make it better.

      Additional Information โž•โ€‹

      Since every component is connected closely, I prefer to finish them all in one milestone for easy auditing and testing.

      -

      How did you hear about the Grants Program? GitHub.

    +

    How did you hear about the Grants Program? GitHub.

    \ No newline at end of file diff --git a/applications/polkadot_analytics_platform.html b/applications/polkadot_analytics_platform.html index b679eb15d6f..c1903000ad1 100644 --- a/applications/polkadot_analytics_platform.html +++ b/applications/polkadot_analytics_platform.html @@ -2,10 +2,10 @@ - + Polkadot Analytics Platform: Stage 1 | Web3 Foundation Grants - - + + +

    https://github.com/w3f/Grants-Program/pull/1420

    \ No newline at end of file diff --git a/applications/polkadot_tests.html b/applications/polkadot_tests.html index 2fd2d9c81d7..8e4c15bbcd8 100644 --- a/applications/polkadot_tests.html +++ b/applications/polkadot_tests.html @@ -2,10 +2,10 @@ - + Polkadot Conformance Tests PoC | Web3 Foundation Grants - - + + +We have recently completed a grant on the research of an alternative host implementation. https://github.com/w3f/Grants-Program/pull/1324

    \ No newline at end of file diff --git a/applications/polkadotjs-ecdsa.html b/applications/polkadotjs-ecdsa.html index 3bd45aefccc..fb4bb6670e3 100644 --- a/applications/polkadotjs-ecdsa.html +++ b/applications/polkadotjs-ecdsa.html @@ -2,10 +2,10 @@ - + ECDSA for Polkadot JS | Web3 Foundation Grants - - + + +
    NumberDeliverableSpecification
    1.Polkadot JS ECDSA sign/verify supportIntroducing secp256k1 keypair into Polkadot-js/common repository as same as sr25519 type: https://github.com/polkadot-js/common/blob/master/packages/util-crypto/src/types.ts, implementing Sing/Verify interfaces.
    2.Polkadot JS sign/verify testsIntegration tests for secp256k1 keypair.
    3.Polkadot JS Apps ECDSA supportIntroducing secp256k1 key types for Apps account management widget. ECDSA account should be possible to send extrinsics as same as Sr25519 or Ed25519 account.
    4.Improve documentationAdd ECDSA description paragraph into Polkadot-js documentation.
    5.Polkadot JS Apps demo videoProvide demonstration how Polkadot Apps works with Ethereum (secp256k1) private keys.
    \ No newline at end of file diff --git a/applications/polkadotjs-hardware.html b/applications/polkadotjs-hardware.html index a58937fb63a..f27708108b1 100644 --- a/applications/polkadotjs-hardware.html +++ b/applications/polkadotjs-hardware.html @@ -2,10 +2,10 @@ - + Hardware ECDSA for Polkadot JS | Web3 Foundation Grants - - + + +
    NumberDeliverableSpecification
    1.Ledger API ECDSA signerIntroducing Ledger API based signed for Polkadot JS. Required API methods already exposed by standard Ledger API: getPublicKey, signMessage.
    2.Improve documentationAdd Ledger hardware wallet paragraph into Polkadot-js documentation.
    3.Demo videoProvide demo video of Polkadot Apps sign transaction with Trezor wallet.
    \ No newline at end of file diff --git a/applications/polkadotjs_no_code.html b/applications/polkadotjs_no_code.html index f62192e99a7..253a29d198f 100644 --- a/applications/polkadotjs_no_code.html +++ b/applications/polkadotjs_no_code.html @@ -2,10 +2,10 @@ - + Polkadot.js NoCode Plugin | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/polkaflow.html b/applications/polkaflow.html index 106097f91b8..abd7b7bfd4d 100644 --- a/applications/polkaflow.html +++ b/applications/polkaflow.html @@ -2,10 +2,10 @@ - + PolkaFlow | Web3 Foundation Grants - - + + +

    Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/polkaj_android_support.html b/applications/polkaj_android_support.html index 129bb57ae1b..3d0b853c7df 100644 --- a/applications/polkaj_android_support.html +++ b/applications/polkaj_android_support.html @@ -2,10 +2,10 @@ - + PolkaJ Android Support | Web3 Foundation Grants - - + + +

    I will continue to look for use cases where Android can be used in the polka dot network. I am excited to see the future and hope to remain involved.

    \ No newline at end of file diff --git a/applications/polkakeeper.html b/applications/polkakeeper.html index 94d38aae08d..33fdc625ee9 100644 --- a/applications/polkakeeper.html +++ b/applications/polkakeeper.html @@ -2,10 +2,10 @@ - + Polkakeeper Grant Proposal | Web3 Foundation Grants - - + + +Anyone looking to get involved with RAMP DEFI is welcomed to reach out to us at: team@polkakeeper.com

    \ No newline at end of file diff --git a/applications/polkamask.html b/applications/polkamask.html index 495a3e942d3..374472f4595 100644 --- a/applications/polkamask.html +++ b/applications/polkamask.html @@ -2,10 +2,10 @@ - + PolkaMask | Web3 Foundation Grants - - + +
    Skip to main content

    PolkaMask

    @@ -106,6 +106,6 @@

    OverviewMilestone 1 - Create PolkaMaskโ€‹

    NumberDeliverableSpecification
    0a.LicenseApache 2.0 / GPLv3 / MIT / Unlicense
    0b.DocumentationOur documentation will include both inline code explanations and a comprehensive tutorial to guide users on how to work with the Polkagate Signer and MetaMask Snaps. This tutorial will effectively showcase the functionality of Polkamask.
    0c.Testing and Testing GuideCore functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests.
    0d.DockerWe will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone.
    0e.ArticleWe will publish an article that explains what was done/achieved as part of the grant.
    1.Polkagate Signer (Metamask Snap)We will develop a MetaMask Snap that intercepts user interactions with dApps and provides a user-friendly interface for signing transactions.
    2.Upgrading Polkadot extension-dappWe will enhance the official Polkadot extension-dapp by adding Snap support to improve its functionality.
    3.Upgrading Polkadot-CloudWe will integrate Metamask as a connection option within Polkadot-Cloud, expanding its compatibility and accessibility.

    Future Plansโ€‹

    -

    Our future plans for the project involve gradual expansion in alignment with new features released by MetaMask for Snaps. Our short-term focus includes utilizing, enhancing, promoting, and supporting the existing functionality. In the long term, we intend to continue adapting and extending the project to encompass a broader range of features, ensuring it evolves into a full-featured extension as MetaMask introduces new capabilities for Snaps.

    +

    Our future plans for the project involve gradual expansion in alignment with new features released by MetaMask for Snaps. Our short-term focus includes utilizing, enhancing, promoting, and supporting the existing functionality. In the long term, we intend to continue adapting and extending the project to encompass a broader range of features, ensuring it evolves into a full-featured extension as MetaMask introduces new capabilities for Snaps.

    \ No newline at end of file diff --git a/applications/polkamusic.html b/applications/polkamusic.html index 87eea7bf358..7a5a596b539 100644 --- a/applications/polkamusic.html +++ b/applications/polkamusic.html @@ -2,10 +2,10 @@ - + PolkaMusic | Web3 Foundation Grants - - + + +

    We have attracted 3 open-source developers. Apart from this, we are well connected in the music industry and we have 100+ artists willing to upload their songs.

    \ No newline at end of file diff --git a/applications/polkanalysis.html b/applications/polkanalysis.html index c75ec3a541b..780f1ee901d 100644 --- a/applications/polkanalysis.html +++ b/applications/polkanalysis.html @@ -2,10 +2,10 @@ - + Polkanalysis | Web3 Foundation Grants - - + + +

    image

    \ No newline at end of file diff --git a/applications/polkasearch.html b/applications/polkasearch.html index 082fcf90e6f..006674b5e25 100644 --- a/applications/polkasearch.html +++ b/applications/polkasearch.html @@ -2,10 +2,10 @@ - + polkasearch.xyz | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/polkashots.html b/applications/polkashots.html index 38bfd3141b2..aaec1383194 100644 --- a/applications/polkashots.html +++ b/applications/polkashots.html @@ -2,10 +2,10 @@ - + polkashots.io | Web3 Foundation Grants - - + +
    Skip to main content

    polkashots.io

    @@ -116,6 +116,6 @@

    Communi

    Future Plansโ€‹

    We may be extending offers to various Substrate chains to have their snapshots hosted on our platform.

    Additional Information โž•โ€‹

    -

    Earlier we received a grant from the Tezos foundation, part of the purpose was to develop a similar snapshotting project for the Tezos blockchain.

    +

    Earlier we received a grant from the Tezos foundation, part of the purpose was to develop a similar snapshotting project for the Tezos blockchain.

    \ No newline at end of file diff --git a/applications/polkastarter.html b/applications/polkastarter.html index 262ab7a845a..2463b0a0ddb 100644 --- a/applications/polkastarter.html +++ b/applications/polkastarter.html @@ -2,10 +2,10 @@ - + Polkastarter | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/polkastats.html b/applications/polkastats.html index bfc7a605d54..cbd244cb92e 100644 --- a/applications/polkastats.html +++ b/applications/polkastats.html @@ -2,10 +2,10 @@ - + Polkastats | Web3 Foundation Grants - - + +
    Skip to main content

    Polkastats

    @@ -158,6 +158,6 @@

    Addit

    Remarkably, the other (and earlier only) Polkadot block explorer out there is Polkascan, by which Polkastats has been undoubtedly heavily inspired. Still, Polkastats brings in some nice specs that make it unique and, we also believe, better for certain kinds of use. -First of all, we find the interface to be much more user friendly.

    +First of all, we find the interface to be much more user friendly.

    \ No newline at end of file diff --git a/applications/polket_toearnfun.html b/applications/polket_toearnfun.html index 1b3a30b982e..403e855247f 100644 --- a/applications/polket_toearnfun.html +++ b/applications/polket_toearnfun.html @@ -2,10 +2,10 @@ - + ToEarnFun | Web3 Foundation Grants - - + + +

    Substrate website.

    \ No newline at end of file diff --git a/applications/pontem.html b/applications/pontem.html index 31c6376fde2..84411f742b1 100644 --- a/applications/pontem.html +++ b/applications/pontem.html @@ -2,10 +2,10 @@ - + Pontem Network (VM). | Web3 Foundation Grants - - + +
    Skip to main content

    Pontem Network (VM).

    @@ -123,6 +123,6 @@

    Future Plansโ€‹

    Wings Stiftung plans to continue supporting Move ecosystem. We want to build a bridge between Polkadot and Libra as Parachain, and launch our Parachain with Move VM pallet inside. Also, we going to proceed with further development of toolset (Move debugger, unit-testing framework, etc.) and extend our Wallet with Polkadot-specific features.

    Additional Informationโ€‹

    -

    Wings Stiftung will be as well supporting financially this project. We are going to apply to another Grant for the implementation of the Pontem network.

    +

    Wings Stiftung will be as well supporting financially this project. We are going to apply to another Grant for the implementation of the Pontem network.

    \ No newline at end of file diff --git a/applications/project_1001.html b/applications/project_1001.html index f1a635355ea..c5ba7f5ef00 100644 --- a/applications/project_1001.html +++ b/applications/project_1001.html @@ -2,10 +2,10 @@ - + Project 1001 - MVP - Phase 1 | Web3 Foundation Grants - - + +
    Skip to main content

    Project 1001 - MVP - Phase 1

    @@ -89,6 +89,6 @@

    Deliverablesโ€‹

    NumberDeliverableSpecification
    0a.LicenseApache 2.0
    0b.DocumentationWe will provide both inline documentation of the code and a basictutorial that explains how mint/buy/lend project 1001 NFT with story and models.
    0c.Testing GuideCore functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests.
    0d.DockerWe will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone.
    0e.ArticleWe will publish an article that explains the work done as part of the grant.
    1a.Pallet module: 1Create the assets pallet for models, story and assets. 1 Week
    1b.Pallet module: 2Complete RMRK2.0 compatible pallet development. 1 Week
    1c.Pallet module: 3Enable model and story transfer, creation, enable compose different models into a story. 1 Week
    1d.Wallet moduleConnect the wallet creation with the game login process. 1 Week
    1e.Frontend module: 1Generate the basic world of the game in Unity. 2 Weeks
    1f.Frontend module: 1Bind the in-game story creation with on-chain extrinsics. 2.5 Weeks
    2a.Land module: 1Adding land as NFT into protocol, enable story placed into land. 1.5 Weeks
    2b.Land module: 2Enable land lending and land auction. 1 Week
    2c.Land module: 3Integrate the story creation. 2 Weeks
    3a.Integrate phase: 1Bind the in-game story creation and land lending with on-chain extrinsics. 2 Weeks
    3b.Integrate phase: 2Create tutorial for play in the app, and create stories. 1 Week
    3c.Integrate phase: 3Deliver a iOS app on TestFlight which could be download and play. 1 Week

    So the total duration will be 12 weeks, which is approximately 3 months. We will use Rust for pallets code, Ink! for smart contracts and Unity/Typescript for frontend UI.

    -

    Additional Information โž•โ€‹

    +

    Additional Information โž•โ€‹

    \ No newline at end of file diff --git a/applications/project_aurras_mvp_phase_1.html b/applications/project_aurras_mvp_phase_1.html index 25344900598..3dea53ca8af 100644 --- a/applications/project_aurras_mvp_phase_1.html +++ b/applications/project_aurras_mvp_phase_1.html @@ -2,10 +2,10 @@ - + Project Aurras - MVP - Phase 1 | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/project_aurras_mvp_phase_2.html b/applications/project_aurras_mvp_phase_2.html index 9850bf8fc08..2826cf4abf9 100644 --- a/applications/project_aurras_mvp_phase_2.html +++ b/applications/project_aurras_mvp_phase_2.html @@ -2,10 +2,10 @@ - + Project Aurras - MVP - Phase 2 | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/project_bodhi.html b/applications/project_bodhi.html index bcc7bf1db98..02573cfcc88 100644 --- a/applications/project_bodhi.html +++ b/applications/project_bodhi.html @@ -2,10 +2,10 @@ - + Project Bodhi - A Composable & Innovative Stack for EVM on Substrate | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/project_silentdata.html b/applications/project_silentdata.html index 0fc8e9b43e9..2b50d570c22 100644 --- a/applications/project_silentdata.html +++ b/applications/project_silentdata.html @@ -2,10 +2,10 @@ - + Silent Data Polkadot Integration | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/prosopo.html b/applications/prosopo.html index 5d10f8b645b..b57ca6bc9af 100644 --- a/applications/prosopo.html +++ b/applications/prosopo.html @@ -2,10 +2,10 @@ - + Prosopo | Web3 Foundation Grants - - + + +

    Financing of this proposal and non-grant related development has been funded by Prosopo Limited. There are no other parties involved other than those listed in this document. No previous funding has been received.

    \ No newline at end of file diff --git a/applications/psc.html b/applications/psc.html index d589521d0e1..8cd85b8e77d 100644 --- a/applications/psc.html +++ b/applications/psc.html @@ -2,10 +2,10 @@ - + Polkadot Smart Chain | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/quadratic-funding.html b/applications/quadratic-funding.html index 10aef352104..10296799d88 100644 --- a/applications/quadratic-funding.html +++ b/applications/quadratic-funding.html @@ -2,10 +2,10 @@ - + Quadratic Funding Module | Web3 Foundation Grants - - + + +

    No

    \ No newline at end of file diff --git a/applications/quantum-guard.html b/applications/quantum-guard.html index 318c37efbf2..765697ae7b5 100644 --- a/applications/quantum-guard.html +++ b/applications/quantum-guard.html @@ -2,10 +2,10 @@ - + Quantum Guard MVP | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/quantumLock.html b/applications/quantumLock.html index e48c3bc710c..fd2ae50f833 100644 --- a/applications/quantumLock.html +++ b/applications/quantumLock.html @@ -2,10 +2,10 @@ - + Quantum Lock for QBITCOIN | Web3 Foundation Grants - - + +
    Skip to main content

    Quantum Lock for QBITCOIN

    @@ -211,6 +211,6 @@

    Future Plansโ€‹

    Our long-term plan is to implement the full blockchain based on the proof of quantum work. We use Substrate to be able to bridge to other protocols. The Quantum Lock can be used across different projects and we consider this is a first step to bring the quantum computation into the blockchain โ€“ utlimately, we envisage the creation of the Quantum Smart Contracts, where Quantum Computation will be available through the contract.

    Additional Information โž•โ€‹

    -

    How did you hear about the Grants Program? Meeting with Parity team, who recommended us to join this programme. We have been admitted to bootcamp programme organised by Outliers Venture.

    +

    How did you hear about the Grants Program? Meeting with Parity team, who recommended us to join this programme. We have been admitted to bootcamp programme organised by Outliers Venture.

    \ No newline at end of file diff --git a/applications/queryWeb3.html b/applications/queryWeb3.html index 3cf38fd8b0f..dc08b9b9b46 100644 --- a/applications/queryWeb3.html +++ b/applications/queryWeb3.html @@ -2,10 +2,10 @@ - + QueryWeb3 | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/rb_substrate_client.html b/applications/rb_substrate_client.html index c4448a3a112..8258e1f53c0 100644 --- a/applications/rb_substrate_client.html +++ b/applications/rb_substrate_client.html @@ -2,10 +2,10 @@ - + Ruby Substate Client | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/relaycode.html b/applications/relaycode.html index fb0c6420f8b..d016f023f4a 100644 --- a/applications/relaycode.html +++ b/applications/relaycode.html @@ -2,10 +2,10 @@ - + Relaycode: An Improved Extrinsics Builder for Polkadot | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/research-feasibility-go-runtime.html b/applications/research-feasibility-go-runtime.html index b93ee0c766c..ef50eaca24e 100644 --- a/applications/research-feasibility-go-runtime.html +++ b/applications/research-feasibility-go-runtime.html @@ -2,10 +2,10 @@ - + Research feasibility of a Go Runtime | Web3 Foundation Grants - - + + +

    LimeChain has been a long-time contributor to the Substrate ecosystem mainly focused on developer tooling. Due to our involvement in the space, we are working with various clients, developing smart contracts and working on parachains.

    \ No newline at end of file diff --git a/applications/research-feasibiliy-java-host.html b/applications/research-feasibiliy-java-host.html index e1d982b83fe..10061e47f18 100644 --- a/applications/research-feasibiliy-java-host.html +++ b/applications/research-feasibiliy-java-host.html @@ -2,10 +2,10 @@ - + Java Host Research Proposal | Web3 Foundation Grants - - + +
    Skip to main content

    Java Host Research Proposal

    @@ -211,6 +211,6 @@

    Future Plans

    after delivering this research.

    Additional Information โž•

    LimeChain has been a long-time contributor to the Substrate ecosystem mainly focused on developer tooling. Due to our -involvement in the space, we are working with various clients, developing smart contracts and working on parachains.

    +involvement in the space, we are working with various clients, developing smart contracts and working on parachains.

    \ No newline at end of file diff --git a/applications/research_wallets.html b/applications/research_wallets.html index 6bd4fbcca8f..b1dd569b695 100644 --- a/applications/research_wallets.html +++ b/applications/research_wallets.html @@ -2,10 +2,10 @@ - + User Account Access Security Analysis for Wallets | Web3 Foundation Grants - - + + +

    This project will conform the Bachelor Thesis in Mathematics of Carlo Sala.

    \ No newline at end of file diff --git a/applications/roloi-xcm-payment-automation.html b/applications/roloi-xcm-payment-automation.html index 9cf3950bf94..7959a2e6d0f 100644 --- a/applications/roloi-xcm-payment-automation.html +++ b/applications/roloi-xcm-payment-automation.html @@ -2,10 +2,10 @@ - + Roloi - XCM Payment Automation | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/rv-kmir.html b/applications/rv-kmir.html index 6d71802b9aa..f3a8a0db917 100644 --- a/applications/rv-kmir.html +++ b/applications/rv-kmir.html @@ -2,10 +2,10 @@ - + KMIR: the K semantics of MIR | Web3 Foundation Grants - - + + +We are confident that the tooling resulting from this project, should it be financed, will be an important contribution to the Rust community, being a sound, complete and effective approach to Rust program verification.

    \ No newline at end of file diff --git a/applications/saito-game-protocol-and-engine.html b/applications/saito-game-protocol-and-engine.html index 543068760c1..ad772b14a0a 100644 --- a/applications/saito-game-protocol-and-engine.html +++ b/applications/saito-game-protocol-and-engine.html @@ -2,10 +2,10 @@ - + Saito Gaming Protocol and Library | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/sandox.html b/applications/sandox.html index 50c7584360a..3406aec7dbb 100644 --- a/applications/sandox.html +++ b/applications/sandox.html @@ -2,10 +2,10 @@ - + SanDOx | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/sarp-basic-functionality.html b/applications/sarp-basic-functionality.html index 6a3512ff184..ab80eef8408 100644 --- a/applications/sarp-basic-functionality.html +++ b/applications/sarp-basic-functionality.html @@ -2,10 +2,10 @@ - + SARP - A Static Analysis Tool for Runtime Pallets | Web3 Foundation Grants - - + + +We have previously received grants by the Web3 Foundation for other projects (substratee and substrate-api-client).

    \ No newline at end of file diff --git a/applications/scale-codec-comparator.html b/applications/scale-codec-comparator.html index ecb553a7c9e..70c4e4ce2fa 100644 --- a/applications/scale-codec-comparator.html +++ b/applications/scale-codec-comparator.html @@ -2,10 +2,10 @@ - + SCALE Codec Comparator | Web3 Foundation Grants - - + + +

    I have been maintaining php scale code and php api lib for 2 years, and this application will continue to be maintained

    \ No newline at end of file diff --git a/applications/sensio_network.html b/applications/sensio_network.html index 022bd73a534..f0644218695 100644 --- a/applications/sensio_network.html +++ b/applications/sensio_network.html @@ -2,10 +2,10 @@ - + Sensio Network | Web3 Foundation Grants - - + +
    Skip to main content

    Sensio Network

    @@ -86,6 +86,6 @@

    People-2-People marketplace will allow publishers, marketers and other creatives to acquire quality content directly from its author. Thus, a fairer and more efficient market for all the actors.

    Signaturesโ€‹

    -

    All the assets have been signed with https://keybase.io/woss and standard GPG tools. For GPG, append .sig and for keybase .signed.saltpack to the end of any image URL within this document.

    +

    All the assets have been signed with https://keybase.io/woss and standard GPG tools. For GPG, append .sig and for keybase .signed.saltpack to the end of any image URL within this document.

    \ No newline at end of file diff --git a/applications/sequester.html b/applications/sequester.html index 592cbb61566..cada111b5c7 100644 --- a/applications/sequester.html +++ b/applications/sequester.html @@ -2,10 +2,10 @@ - + Sequester | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? Personal Recommendation

    \ No newline at end of file diff --git a/applications/setheum-launchpad-crowdsales-pallet.html b/applications/setheum-launchpad-crowdsales-pallet.html index 0ac4adf5abb..aae51602eff 100644 --- a/applications/setheum-launchpad-crowdsales-pallet.html +++ b/applications/setheum-launchpad-crowdsales-pallet.html @@ -2,10 +2,10 @@ - + Setheum HighEnd LaunchPad Crowdsales Module | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/setheum.html b/applications/setheum.html index 9ca4593ae53..d4272493944 100644 --- a/applications/setheum.html +++ b/applications/setheum.html @@ -2,10 +2,10 @@ - + Setheum | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/shadows-network.html b/applications/shadows-network.html index 0b750a6ba8f..2683f019d6e 100644 --- a/applications/shadows-network.html +++ b/applications/shadows-network.html @@ -2,10 +2,10 @@ - + Shadows Network | Web3 Foundation Grants - - + +
    Skip to main content

    Shadows Network

    @@ -124,6 +124,6 @@

    Future Plansโ€‹

    There are many different kinds of SyAs that can be added to the system to provide greater utility to Shadows.Exchange. These include leveraged assets that are not available on other platforms as well as indices like the S&P500 and equities like APPLE and TSLA.

    Additional Information โž•โ€‹

    -

    So far we have completed the project possibility verification evaluation, completed the Substrate-based architecture design, and released the project white paper.

    +

    So far we have completed the project possibility verification evaluation, completed the Substrate-based architecture design, and released the project white paper.

    \ No newline at end of file diff --git a/applications/si-front-end-template.html b/applications/si-front-end-template.html index 6528d840fc7..bd1788b0c04 100644 --- a/applications/si-front-end-template.html +++ b/applications/si-front-end-template.html @@ -2,10 +2,10 @@ - + FrontRevamp: A Material Design Makeover for Substrate Front-End Template | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/signac.html b/applications/signac.html index e0300a304a6..f6a0dadb4dd 100644 --- a/applications/signac.html +++ b/applications/signac.html @@ -2,10 +2,10 @@ - + Signac - a monorepo plugin for developing multiple Parity ink! smart contracts | Web3 Foundation Grants - - + + +I applied before.

    \ No newline at end of file diff --git a/applications/signet.html b/applications/signet.html index 8aacdba6737..e9bbc1abec6 100644 --- a/applications/signet.html +++ b/applications/signet.html @@ -2,10 +2,10 @@ - + Signet - Talisman | Web3 Foundation Grants - - + +
    Skip to main content

    Signet - Talisman

    @@ -186,6 +186,6 @@

    Previous Gra

    Polkadot Spending Proposal: Business-Friendly Polkadot Multisig

    This proposal is for a business-friendly multisig frontend to lower the difficulty for teams and businesses when running their financial operations on Polkadot. Teams currently face many difficulties when trying to perform these operations, risking mistakes along the way, and leading them to choose convenience over security. We will apply Talismanโ€™s UX and design philosophy to create improvements for standard workflows for Polkadot multisig usage (based on the current multisig pallet), and eventually integrate upgrades when improvements to the multisig pallet itself are available.

    -

    + \ No newline at end of file diff --git a/applications/sirato_substrate_phase3.html b/applications/sirato_substrate_phase3.html index aef772bfd1b..7eb89b3bd6c 100644 --- a/applications/sirato_substrate_phase3.html +++ b/applications/sirato_substrate_phase3.html @@ -2,10 +2,10 @@ - + Sirato (Epirus) Substrate Explorer - Phase III | Web3 Foundation Grants - - + +
    Skip to main content
    +

    Our goal is to support any WASM smart contracts and evolve the service to a multi-VM metadata registry that can scale up to cater for the entire Substrate and DotSama ecosystems.

    \ No newline at end of file diff --git a/applications/skyekiwi-protocol.html b/applications/skyekiwi-protocol.html index 48c5e991516..8dd2af32256 100644 --- a/applications/skyekiwi-protocol.html +++ b/applications/skyekiwi-protocol.html @@ -2,10 +2,10 @@ - + SkyeKiwi Protocol | Web3 Foundation Grants - - + + +

    The blockchain (SkyeKiwi Network) will be able to execute concealed smart contract executions.

    \ No newline at end of file diff --git a/applications/skyepass.html b/applications/skyepass.html index 6a13686f256..b0a03400584 100644 --- a/applications/skyepass.html +++ b/applications/skyepass.html @@ -2,10 +2,10 @@ - + SkyePass | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/skynet-substrate-integration.html b/applications/skynet-substrate-integration.html index 8a46770dd42..9d158d554f4 100644 --- a/applications/skynet-substrate-integration.html +++ b/applications/skynet-substrate-integration.html @@ -2,10 +2,10 @@ - + Pallet for Decentralized Off-Chain Storage on Skynet | Web3 Foundation Grants - - + +
    Skip to main content

    Pallet for Decentralized Off-Chain Storage on Skynet

    @@ -180,6 +180,6 @@

    Update &a

    02/25/2022โ€‹

    We grossly underestimated the number of blockers and competing priorities we'd encounter as a team, and the timeline has now been exceeded by several months. We are ready to submit our work, and will do so soon.

    As we better understood the ecosystem, we realized that a library for using Skynet in an off-chain worker was much more flexible for developing an application off-chain worker than was a proper pallet. As part of our deliverables, we now include the SDK library code skynet-substrate, along with a substrate example off-chain worker and front-end showing how to use various features of the SDK.

    -

    This amendment also updates our company name, URL, and payout address.

    +

    This amendment also updates our company name, URL, and payout address.

    \ No newline at end of file diff --git a/applications/slonigiraf.html b/applications/slonigiraf.html index cf1636904fa..d815e4aa684 100644 --- a/applications/slonigiraf.html +++ b/applications/slonigiraf.html @@ -2,10 +2,10 @@ - + SLON - a recommendation letter system | Web3 Foundation Grants - - + + +Checkout the paper version of this protocol that can be used in any educational process:

    \ No newline at end of file diff --git a/applications/slothunter.html b/applications/slothunter.html index bd3e929309b..ba77f67dab9 100644 --- a/applications/slothunter.html +++ b/applications/slothunter.html @@ -2,10 +2,10 @@ - + Slothunter | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? GitHub.

    \ No newline at end of file diff --git a/applications/social_recovery_wallet.html b/applications/social_recovery_wallet.html index 272cdf4e285..a91cffc050d 100644 --- a/applications/social_recovery_wallet.html +++ b/applications/social_recovery_wallet.html @@ -2,10 +2,10 @@ - + Social Recovery Wallet | Web3 Foundation Grants - - + +
    Skip to main content
    +Referral - Max Gravitt

    \ No newline at end of file diff --git a/applications/societal_grant2.html b/applications/societal_grant2.html index aa74d5e324b..9387f4b1619 100644 --- a/applications/societal_grant2.html +++ b/applications/societal_grant2.html @@ -2,10 +2,10 @@ - + Societal | Web3 Foundation Grants - - + +
    Skip to main content

    Societal

    @@ -109,6 +109,6 @@

    Future Plansโ€‹

    Societal plans to secure fundraising and expand the development team. After the completion of the milestones stated above, Societal plans to expand the product offering by implementing a DAO Dapp Market Place and a subscription pricing mechanisim. Societal has also applied to be a part of the Substrate Builders Program. Finally, Societal plans to launch its own parachain and be the go to DAO Creation and Mangament platofrm.

    Additional Information โž•โ€‹

    -

    All information already included in above.

    +

    All information already included in above.

    \ No newline at end of file diff --git a/applications/societal_saas_pricing.html b/applications/societal_saas_pricing.html index 44aad7d9ea6..82deb6fade8 100644 --- a/applications/societal_saas_pricing.html +++ b/applications/societal_saas_pricing.html @@ -2,10 +2,10 @@ - + Societal | Web3 Foundation Grants - - + +
    Skip to main content

    Societal

    @@ -132,6 +132,6 @@

    Future Plansโ€‹

    Societal plans to launch its own parachain and be the go-to DAO Creation and Management platform for Polkadot and all of web3. We believe that this subscription pricing system will be a great on-ramp of DAOs from other ecosystems into Polkadot, as the organization members do not have to purchase the Societal token to participate in on-chain transactions. This will reduce the barrier for these DAOs to use a governance scaling solution for their organization, such as Societal. This subscription payment system can also be used by many substrate chains to reduce this barrier adoption as well.

    Additional Information โž•โ€‹

    -

    All information already included in above.

    +

    All information already included in above.

    \ No newline at end of file diff --git a/applications/sol2ink-follow-up.html b/applications/sol2ink-follow-up.html index 9217e7a556c..9c55f69f943 100644 --- a/applications/sol2ink-follow-up.html +++ b/applications/sol2ink-follow-up.html @@ -2,10 +2,10 @@ - + Sol2Ink | Web3 Foundation Grants - - + +
    Skip to main content

    Sol2Ink

    @@ -199,6 +199,6 @@

    Future Plansโ€‹

    NumberDeliverableSpecification
    0.ArticleWe will publish an article which explains the advantages of using Sol2Ink
    1.Handle Solidity specific casesDelegate calls, assembly code, try/catch blocks etc.
    2.Sol2Ink web applicationWeb app for an even easier work with Sol2Ink
    3.MaintenanceKeeping up with new ecosystem standards, fixing issues from community

    Additional Information โž•โ€‹

    -

    How did you hear about the Grants Program? personal recommendation

    +

    How did you hear about the Grants Program? personal recommendation

    \ No newline at end of file diff --git a/applications/sol2ink.html b/applications/sol2ink.html index 592dbde3c27..6069eec01f3 100644 --- a/applications/sol2ink.html +++ b/applications/sol2ink.html @@ -2,10 +2,10 @@ - + Sol2Ink | Web3 Foundation Grants - - + +
    Skip to main content

    Sol2Ink

    @@ -187,6 +187,6 @@

    Future Plansโ€‹

    After this grant, we plan to upgrade the parser to handle more complicated Solidity codebases (e.g. generalization, storage manipulation, delegate calls), parsing of whole projects (multiple files) with dependencies and making a web application of this tool. We also plan to maintain the project to keep up with new emerging ecosystem standards and listen to issues from community and update the tool to make the process of transformation a nicer experience for the developers and teams.

    Additional Information โž•โ€‹

    -

    How did you hear about the Grants Program? personal recommendation

    +

    How did you hear about the Grants Program? personal recommendation

    \ No newline at end of file diff --git a/applications/solidity-trie-verifier.html b/applications/solidity-trie-verifier.html index 8353c11b6b8..f7808ca86a9 100644 --- a/applications/solidity-trie-verifier.html +++ b/applications/solidity-trie-verifier.html @@ -2,10 +2,10 @@ - + solidity-trie-verifier | Web3 Foundation Grants - - + +
    Skip to main content

    solidity-trie-verifier

    @@ -82,6 +82,6 @@

    M
    NumberDeliverableSpecification
    0a.LicenseApache 2.0
    0b.DocumentationA documentation on how to use this library in form of a README on the project repository.
    0c.Testing and Testing GuideCore functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests.
    0d.DockerWe will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone.
    0e.ArticleWe will publish an article that covers what was done/achieved as part of the grant.
    1Solidity SCALE CodecThis will include support for enum{option/result}, Vec<Vec<u8>> decoding and other types required for verifying state proofs as current implementations(Darwinia, Snowfork) don't support.
    2.KeyspacedDBProvide the solidity implementation of the following; https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/lib.rs#L426.
    3.MemoryDBProvide the solidity implementation of the following; https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/lib.rs#L163.
    4.NodeCodecProvide solidity implementation of the following; https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/node_codec.rs#L81.
    5.NodeProvide the solidity implementation of the following; https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/node.rs#L184.
    6.NodePlanProvide the solidity implementation of the following; https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/node.rs#L507.
    7.NodeHeaderProvide the solidity implementation of the following; https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/node_header.rs#L26.
    8.NibbleSlicePlanProvide the solidity implementation of the following; https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/node.rs#L454.
    9.NibbleSliceProvide the solidity implementation of the following; https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/nibble/mod.rs#L180.
    10.Layoutv0Provide the Solidity implementation of following; https://github.com/paritytech/substrate/blob/ece32a72e934f6fe6705a7d418bbf3e71b4931ad/primitives/trie/src/lib.rs#L60.
    11.Layoutv1Provide the Solidity implementation of the following; https://github.com/paritytech/substrate/blob/ece32a72e934f6fe6705a7d418bbf3e71b4931ad/primitives/trie/src/lib.rs#L63 .
    12.Trie VerifierProvide the Solidity implementation of the following; https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/triedb.rs#L233.

    Additional Information โž•โ€‹

    -

    How did you hear about the Grants Program? Web3 Foundation Website.

    +

    How did you hear about the Grants Program? Web3 Foundation Website.

    \ No newline at end of file diff --git a/applications/solidity-verifier-for-accountable-light-client.html b/applications/solidity-verifier-for-accountable-light-client.html index 38071ccac10..891f47cd06e 100644 --- a/applications/solidity-verifier-for-accountable-light-client.html +++ b/applications/solidity-verifier-for-accountable-light-client.html @@ -2,10 +2,10 @@ - + Solidity Verifier Implementation for Accountable Light Client | Web3 Foundation Grants - - + +
    Skip to main content

    Solidity Verifier Implementation for Accountable Light Client

    @@ -117,6 +117,6 @@

    Darwinia truth layer currently include Beacon light client, BSC light client and Darwinia light client.
  • Helix Bridge which have bridges based on Darwinia cross-chain messaging protocol.
  • -

    + \ No newline at end of file diff --git a/applications/spacewalk-bridge.html b/applications/spacewalk-bridge.html index 4591c3fdf50..f258dd54d2b 100644 --- a/applications/spacewalk-bridge.html +++ b/applications/spacewalk-bridge.html @@ -2,10 +2,10 @@ - + Spacewalk: a Stellar bridge | Web3 Foundation Grants - - + + +

    Any other grants? The Pendulum prototype was supported with a grant from the Stellar Development Foundation.

    \ No newline at end of file diff --git a/applications/spartan_poc_consensus_module.html b/applications/spartan_poc_consensus_module.html index f3182967823..1f783db6b4a 100644 --- a/applications/spartan_poc_consensus_module.html +++ b/applications/spartan_poc_consensus_module.html @@ -2,10 +2,10 @@ - + Spartan: PoC Consensus Module | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/sr25519_donna.html b/applications/sr25519_donna.html index 236303c978a..68dc3072314 100644 --- a/applications/sr25519_donna.html +++ b/applications/sr25519_donna.html @@ -2,10 +2,10 @@ - + sr25519-donna | Web3 Foundation Grants - - + +
    Skip to main content

    sr25519-donna

    @@ -68,6 +68,6 @@

    https://github.com/usetech-llc/sr25519 We will support all the features the rust version have, including HDKD, VRF and MulSig. -

    + \ No newline at end of file diff --git a/applications/ssal-commods-dex.html b/applications/ssal-commods-dex.html index 752f616742f..fa3b06355db 100644 --- a/applications/ssal-commods-dex.html +++ b/applications/ssal-commods-dex.html @@ -2,10 +2,10 @@ - + Ssal: Ink Commodities Exchange | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? personal recommendation: PBA team, Marta Carlaslake

    \ No newline at end of file diff --git a/applications/stable-asset.html b/applications/stable-asset.html index a7f421b7fcb..e300f5d1030 100644 --- a/applications/stable-asset.html +++ b/applications/stable-asset.html @@ -2,10 +2,10 @@ - + Stable Asset | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/staking-rewards-collector-front-end.html b/applications/staking-rewards-collector-front-end.html index 70286bb2d9e..bfbe620623d 100644 --- a/applications/staking-rewards-collector-front-end.html +++ b/applications/staking-rewards-collector-front-end.html @@ -2,10 +2,10 @@ - + Staking Rewards Viewer | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/stardust.html b/applications/stardust.html index 2f22a72a556..6b84d0806d1 100644 --- a/applications/stardust.html +++ b/applications/stardust.html @@ -2,10 +2,10 @@ - + Derivative Powered Uncollateralized Stablecoin Research and Design | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/starks_network.html b/applications/starks_network.html index e851518d573..59e37025d4c 100644 --- a/applications/starks_network.html +++ b/applications/starks_network.html @@ -2,10 +2,10 @@ - + Starks Network | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/stone-index-on-substrate.html b/applications/stone-index-on-substrate.html index 6966323284c..cdc445d8e90 100644 --- a/applications/stone-index-on-substrate.html +++ b/applications/stone-index-on-substrate.html @@ -2,10 +2,10 @@ - + Stone Index on Substrate | Web3 Foundation Grants - - + +
    Skip to main content

    Stone Index on Substrate

    @@ -122,6 +122,6 @@

    https://algorand.rockx.com/)
  • Oasis Web Wallet(https://oasis-wallet.rockx.com).
  • -

    RockX helps the Stone Team to build the Stone Platform and bring Stone Platform to multiple blockchain platforms, so that allow Stone Platform users with one stop investment solution and the best user experience.

    +

    RockX helps the Stone Team to build the Stone Platform and bring Stone Platform to multiple blockchain platforms, so that allow Stone Platform users with one stop investment solution and the best user experience.

    \ No newline at end of file diff --git a/applications/sub_consensus_mechanism.html b/applications/sub_consensus_mechanism.html index 7d358b9f42f..1e4f9d58945 100644 --- a/applications/sub_consensus_mechanism.html +++ b/applications/sub_consensus_mechanism.html @@ -2,10 +2,10 @@ - + Sub-consensus mechanism | Web3 Foundation Grants - - + + +

    N/A

    \ No newline at end of file diff --git a/applications/subalfred.html b/applications/subalfred.html index 9bc7b2cc7e9..36b42edec9a 100644 --- a/applications/subalfred.html +++ b/applications/subalfred.html @@ -2,10 +2,10 @@ - + Subalfred | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/subauction.html b/applications/subauction.html index 83d2f0c7f82..fd818da6ebf 100644 --- a/applications/subauction.html +++ b/applications/subauction.html @@ -2,10 +2,10 @@ - + Subauction | Web3 Foundation Grants - - + +
    Skip to main content

    Subauction

    @@ -162,6 +162,6 @@

    Communi
  • https://www.facebook.com/groups/232197797602358/
  • Future Plansโ€‹

    -

    We're huge fans of NFT space and we do believe that the Polkadot ecosystem will benefit from having the feature-specific auctino pallet that can be able easily integrated into other NFT solution standards developed on Polkadot. Our end result should be a feature-specific pallet that could be plugged into other blockchain applications and an NFT auction marketplace application with DAO curated exclusive content. But this is only beginning, we believe that huge innovations are going to happen in the NFT space and we want to follow those changes as closely as possible to make our auction system thrive!

    +

    We're huge fans of NFT space and we do believe that the Polkadot ecosystem will benefit from having the feature-specific auctino pallet that can be able easily integrated into other NFT solution standards developed on Polkadot. Our end result should be a feature-specific pallet that could be plugged into other blockchain applications and an NFT auction marketplace application with DAO curated exclusive content. But this is only beginning, we believe that huge innovations are going to happen in the NFT space and we want to follow those changes as closely as possible to make our auction system thrive!

    \ No newline at end of file diff --git a/applications/subdex.html b/applications/subdex.html index 620ff5343e5..0aea0041444 100644 --- a/applications/subdex.html +++ b/applications/subdex.html @@ -2,10 +2,10 @@ - + SubDEX | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/subquery.html b/applications/subquery.html index 8e1313b71e9..646caa4a985 100644 --- a/applications/subquery.html +++ b/applications/subquery.html @@ -2,10 +2,10 @@ - + SubQuery | Web3 Foundation Grants - - + + +

    Additional Information โž•โ€‹

    \ No newline at end of file diff --git a/applications/subrelay.html b/applications/subrelay.html index 753a7a491a9..cb8c574afd9 100644 --- a/applications/subrelay.html +++ b/applications/subrelay.html @@ -2,10 +2,10 @@ - + SubRelay | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/subscript_lang.html b/applications/subscript_lang.html index c731914cfba..e4de0ce0980 100644 --- a/applications/subscript_lang.html +++ b/applications/subscript_lang.html @@ -2,10 +2,10 @@ - + Subscript | Web3 Foundation Grants - - + + +

    We expect any developer who is interested in AssemblyScript smart contract join us and build efficient framework.

    \ No newline at end of file diff --git a/applications/subsmt.html b/applications/subsmt.html index 3e7b0e783a4..aa7f380d620 100644 --- a/applications/subsmt.html +++ b/applications/subsmt.html @@ -2,10 +2,10 @@ - + SubSMT | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? personal recommendation.

    \ No newline at end of file diff --git a/applications/substats.html b/applications/substats.html index 1ab04aae7d3..02db37487f4 100644 --- a/applications/substats.html +++ b/applications/substats.html @@ -2,10 +2,10 @@ - + Substats (The framework of lightweight block explorer) | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/substrate-evm-adapter.html b/applications/substrate-evm-adapter.html index 3c8ee7995dd..f4ffe2c6227 100644 --- a/applications/substrate-evm-adapter.html +++ b/applications/substrate-evm-adapter.html @@ -2,10 +2,10 @@ - + Substrate EVM Adapter | Web3 Foundation Grants - - + + +

    I have previously worked on several grant projects (listed above) and generally have been part of Polkadot ecosystem for the last 4 years.

    \ No newline at end of file diff --git a/applications/substrate-identity-directory.html b/applications/substrate-identity-directory.html index 818d0ce5a6c..b162c080d76 100644 --- a/applications/substrate-identity-directory.html +++ b/applications/substrate-identity-directory.html @@ -2,10 +2,10 @@ - + Substrate Identity Hub | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/substrate-parachain-PoS-template.html b/applications/substrate-parachain-PoS-template.html index 592b83ac9f7..644b6027b73 100644 --- a/applications/substrate-parachain-PoS-template.html +++ b/applications/substrate-parachain-PoS-template.html @@ -2,10 +2,10 @@ - + substrate-parachain-PoS-template | Web3 Foundation Grants - - + +
    Skip to main content

    substrate-parachain-PoS-template

    @@ -99,6 +99,6 @@

    Additional Information โž•โ€‹

    How did you hear about the Grants Program? Web3 Foundation Website / Medium / Twitter / Element / Announcement by another team / personal recommendation / etc.

    -

    personal recommendation

    +

    personal recommendation

    \ No newline at end of file diff --git a/applications/substrate-tutorials.html b/applications/substrate-tutorials.html index ce505046a07..69262ab3879 100644 --- a/applications/substrate-tutorials.html +++ b/applications/substrate-tutorials.html @@ -2,10 +2,10 @@ - + Substrate Tutorials | Web3 Foundation Grants - - + +
    Skip to main content

    Substrate Tutorials

    @@ -119,6 +119,6 @@

    https://github.com/rusty-crewmates/substrate-tutorials
    No other teams have contributed financially to this project.
    -No other grants have been apllied for at the moment, but we had several talks with people at Edgeware DAO whom were willing to support this project to apply for some funds of them.

    +No other grants have been apllied for at the moment, but we had several talks with people at Edgeware DAO whom were willing to support this project to apply for some funds of them.

    \ No newline at end of file diff --git a/applications/substrate_client_java.html b/applications/substrate_client_java.html index 7da698ed81f..2e8595ae82f 100644 --- a/applications/substrate_client_java.html +++ b/applications/substrate_client_java.html @@ -2,10 +2,10 @@ - + Substrate Client for Java | Web3 Foundation Grants - - + +
    Skip to main content

    Substrate Client for Java

    @@ -274,6 +274,6 @@

    Future PlansAdditional Information โž•โ€‹

    How did you hear about the Grants Program? We heard about the Grants Program by Web3 Foundation and we have been in contact with managers at parity.io who guided us towards this application.

    We have indicated the work we have already done in the section Features Roadmap above, where we indicated the already implemented features with [x].

    -

    There are no other teams who have already contributed to this project, not previoulsy grants we applied for.

    +

    There are no other teams who have already contributed to this project, not previoulsy grants we applied for.

    \ No newline at end of file diff --git a/applications/substrate_core_polywrapper.html b/applications/substrate_core_polywrapper.html index 53f06763c57..2e5d268e81c 100644 --- a/applications/substrate_core_polywrapper.html +++ b/applications/substrate_core_polywrapper.html @@ -2,10 +2,10 @@ - + Substrate Core Polywrapper | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? personal recommendation

    \ No newline at end of file diff --git a/applications/substrate_startkit_GUI.html b/applications/substrate_startkit_GUI.html index decbeeffc19..b358f7e945a 100644 --- a/applications/substrate_startkit_GUI.html +++ b/applications/substrate_startkit_GUI.html @@ -2,10 +2,10 @@ - + Substrate startkit GUI | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/subvt-telegram-bot.html b/applications/subvt-telegram-bot.html index 914cf87e9eb..c47d4bedee5 100644 --- a/applications/subvt-telegram-bot.html +++ b/applications/subvt-telegram-bot.html @@ -2,10 +2,10 @@ - + SubVT Telegram Bot for Kusama and Polkadot | Web3 Foundation Grants - - + +
    Skip to main content

    SubVT Telegram Bot for Kusama and Polkadot

    @@ -186,6 +186,6 @@

    Future PlansAdditional Information โž•โ€‹

    How did you hear about the Grants Program?

    I read about the program when I was initially researching into the Polkadot ecosystem in early 2021.

    -

    In October 2021 Marcin Gรณrny kindly offered support for the extension of the 1KV Bot to all Kusama and Polkadot validators in an issue he posted to the 1KV Bot repository.

    +

    In October 2021 Marcin Gรณrny kindly offered support for the extension of the 1KV Bot to all Kusama and Polkadot validators in an issue he posted to the 1KV Bot repository.

    \ No newline at end of file diff --git a/applications/subwallet.html b/applications/subwallet.html index 475ee2995a4..a7c178b453d 100644 --- a/applications/subwallet.html +++ b/applications/subwallet.html @@ -2,10 +2,10 @@ - + subwallet | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/subxt-python.html b/applications/subxt-python.html index 02695db680e..465c70a2ca7 100644 --- a/applications/subxt-python.html +++ b/applications/subxt-python.html @@ -2,10 +2,10 @@ - + subxt-python | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/sukhavati_poc_module.html b/applications/sukhavati_poc_module.html index 520f34b2026..24585937c8f 100644 --- a/applications/sukhavati_poc_module.html +++ b/applications/sukhavati_poc_module.html @@ -2,10 +2,10 @@ - + Sukhavati PoC Module | Web3 Foundation Grants - - + +
    Skip to main content

    Sukhavati PoC Module

    @@ -148,6 +148,6 @@

    Future Plans

    Additional Information โž•โ€‹

    Sukhavati Labs has raised a seed round of funding.

    -

    We are in contact with several PoC pools and the information we have received so far shows that PoC mining devices have a substantial amount of idle resources available, and most miners are very interested in being able to further upgrade their devices in order to provide real, meaningful use.

    +

    We are in contact with several PoC pools and the information we have received so far shows that PoC mining devices have a substantial amount of idle resources available, and most miners are very interested in being able to further upgrade their devices in order to provide real, meaningful use.

    \ No newline at end of file diff --git a/applications/sunrise-dex.html b/applications/sunrise-dex.html index cd4356d71d3..684c3f72846 100644 --- a/applications/sunrise-dex.html +++ b/applications/sunrise-dex.html @@ -2,10 +2,10 @@ - + Sunrise DEX | Web3 Foundation Grants - - + + +

    Sunrise Reference Protocols

    \ No newline at end of file diff --git a/applications/sunshine-keybase.html b/applications/sunshine-keybase.html index 372f1ae5220..6cc8a84abea 100644 --- a/applications/sunshine-keybase.html +++ b/applications/sunshine-keybase.html @@ -2,10 +2,10 @@ - + Sunshine Keybase | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/sup.html b/applications/sup.html index 9e46a02d84d..be782219781 100644 --- a/applications/sup.html +++ b/applications/sup.html @@ -2,10 +2,10 @@ - + Sup | Web3 Foundation Grants - - + +
    Skip to main content

    Sup

    @@ -56,6 +56,6 @@

    Community engagementโ€‹

    -

    The tutorials and Documentation that we provide will be published as articles in Medium, rust.cc and other social media platforms with due mention about Web3 grant.

    +

    The tutorials and Documentation that we provide will be published as articles in Medium, rust.cc and other social media platforms with due mention about Web3 grant.

    \ No newline at end of file diff --git a/applications/supersig_fellowship.html b/applications/supersig_fellowship.html index ec344fd92a2..f605c0e30bc 100644 --- a/applications/supersig_fellowship.html +++ b/applications/supersig_fellowship.html @@ -2,10 +2,10 @@ - + Supersig | Web3 Foundation Grants - - + + +

    Who can vouch for Ramsey(Decentration)? Josh Muir (Kusama Council and Dat Dot), Dan Shields, Will Chevdor, Sacha Lanski...

    \ No newline at end of file diff --git a/applications/swarm-nl.html b/applications/swarm-nl.html index 89b5fa64efb..a3494317d92 100644 --- a/applications/swarm-nl.html +++ b/applications/swarm-nl.html @@ -2,10 +2,10 @@ - + SwarmNL | Web3 Foundation Grants - - + +
    Skip to main content

    SwarmNL

    @@ -188,6 +188,6 @@

    4

    Future Plansโ€‹

    With milestones 1 and 2 completed, we plan to continue the development of SamaritanDB and launch an MVP that we will use to roll out the first wave of applications powered by SamaritanDB.

    Additional Information โž•โ€‹

    -

    How did you hear about the Grants Program? Personal recommendation.

    +

    How did you hear about the Grants Program? Personal recommendation.

    \ No newline at end of file diff --git a/applications/swush-dex-aggregator.html b/applications/swush-dex-aggregator.html index 47e36aad489..b5cf0e4f185 100644 --- a/applications/swush-dex-aggregator.html +++ b/applications/swush-dex-aggregator.html @@ -2,10 +2,10 @@ - + Swush Dex Aggregator | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/tdot.html b/applications/tdot.html index 341a6317779..a4602874913 100644 --- a/applications/tdot.html +++ b/applications/tdot.html @@ -2,10 +2,10 @@ - + tDOT | Web3 Foundation Grants - - + +
    Skip to main content

    tDOT

    @@ -131,6 +131,6 @@

    image

    NumberDeliverableSpecification
    0a.LicenseApache 2.0
    0b.DocumentationProvide documentation on the architecture of tDOT and flow diagrams of tDOT redeeming process.
    0c.TestingProvide comprehensive tests that covers redeeming tDOT to host chain or to guest chains.
    0d.DockerProvide a Docker image with Substrate chain that demonstrate this project.
    0e.ArticleWe will publish an article that explains the architecture of tDOT and how minting and redeeming tDOT works. The article will discuss potential attack vectors of tDOT and how does tDOT addresses it.
    1.Substrate module: Stable Asset XCM PalletHandles the aggregate LP redeeming request, eitehr in proportion or to a single asset. If redeeming to a local stable asset pool fails, the whole extrinsic is reverted. If redeeming to a remote stable asset pool fails, users will get local asset on the guest chain instead.

    Future Plansโ€‹

    -

    We will upgrade taiKSM to tKSM with similar architecture shortly after the launch of tDOT.

    +

    We will upgrade taiKSM to tKSM with similar architecture shortly after the launch of tDOT.

    \ No newline at end of file diff --git a/applications/tokenomics-survey-2022.html b/applications/tokenomics-survey-2022.html index 30d066fc089..b89bcfac0bc 100644 --- a/applications/tokenomics-survey-2022.html +++ b/applications/tokenomics-survey-2022.html @@ -2,10 +2,10 @@ - + Tokenomics Scoping Review: Annotated Bibliography | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/tracking_chain.html b/applications/tracking_chain.html index 92abd5e67a0..e483788097a 100644 --- a/applications/tracking_chain.html +++ b/applications/tracking_chain.html @@ -2,10 +2,10 @@ - + Tracking Chain | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/tribal_protocol.html b/applications/tribal_protocol.html index 565db498775..4dcd7e55800 100644 --- a/applications/tribal_protocol.html +++ b/applications/tribal_protocol.html @@ -2,10 +2,10 @@ - + Tribal Protocol Smart Contract Development - Phase 1 | Web3 Foundation Grants - - + +
    Skip to main content
    +

    Jason was seeking some mentorship and advise from Jeremiah Wagstaff, co-founder of SubSpace, who recommended that we seriously consider a web3 grant as a great way to enter the ecosystem. Very glad those two connected!

    \ No newline at end of file diff --git a/applications/tux0.html b/applications/tux0.html index 0643c7afed4..ad05ac78101 100644 --- a/applications/tux0.html +++ b/applications/tux0.html @@ -2,10 +2,10 @@ - + Tux0 | Web3 Foundation Grants - - + +
    Skip to main content

    Tux0

    @@ -164,6 +164,6 @@

    Future Plans

    Additional Information โž•โ€‹

    We have been part of the Substrate ecosystem since early 2022, so we had the chance to hear about the W3F Grants from various sources: Substrate Builders Program, Polkadot Blockchain Academy, Parity employees, Sub0 2022, and probably more.
    -However, it was Joshy the one who suggested us to ask for a grant for this idea, and he deserves a big thank you from both of us.

    +However, it was Joshy the one who suggested us to ask for a grant for this idea, and he deserves a big thank you from both of us.

    \ No newline at end of file diff --git a/applications/tuxedo.html b/applications/tuxedo.html index fe9f15fc0cd..f9e39fdcd7f 100644 --- a/applications/tuxedo.html +++ b/applications/tuxedo.html @@ -2,10 +2,10 @@ - + Tuxedo | Web3 Foundation Grants - - + + +

    The team has been in the Substrate ecosystem for a long time, so we have heard of the grants program in many ways. From colleagues, grant recipients speaking highly the program, and grant recipients looking for help understanding Substrate.

    \ No newline at end of file diff --git a/applications/tuxedo_parachain.html b/applications/tuxedo_parachain.html index 9b5ef9728c9..d8061ba25e5 100644 --- a/applications/tuxedo_parachain.html +++ b/applications/tuxedo_parachain.html @@ -2,10 +2,10 @@ - + Tuxedo Parachain | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/typechain-polkadot-follow-up-2.html b/applications/typechain-polkadot-follow-up-2.html index 27923254f67..779c81863ec 100644 --- a/applications/typechain-polkadot-follow-up-2.html +++ b/applications/typechain-polkadot-follow-up-2.html @@ -2,10 +2,10 @@ - + Typechain-Polkadot Follow-up-2 | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/typechain-polkadot-follow-up.html b/applications/typechain-polkadot-follow-up.html index df4bde7604a..271a2b89c33 100644 --- a/applications/typechain-polkadot-follow-up.html +++ b/applications/typechain-polkadot-follow-up.html @@ -2,10 +2,10 @@ - + Typechain-Polkadot Follow-up | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/typechain-polkadot.html b/applications/typechain-polkadot.html index 006e653c0ba..3e74f3e5e5d 100644 --- a/applications/typechain-polkadot.html +++ b/applications/typechain-polkadot.html @@ -2,10 +2,10 @@ - + Typechain-Polkadot | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/typechain_revived.html b/applications/typechain_revived.html index 5cba13e11a8..0cbb259d81e 100644 --- a/applications/typechain_revived.html +++ b/applications/typechain_revived.html @@ -2,10 +2,10 @@ - + Improve & Update Typechain Polkadot | Web3 Foundation Grants - - + +
    Skip to main content

    Improve & Update Typechain Polkadot

    @@ -123,6 +123,6 @@

    Additional Information โž•โ€‹

    How did you hear about the Grants Program? personal recommendation, we have developed a project that was funded by W3F - pendzl.

    Additionallyโ€‹

    -

    We want to explicitly acknowledge that the concept and previous groundwork were established by the 727-ventures team. At Abax, we relied on Typechain to write e2e tests for our smart contracts and interact with them in scripts/front-end. With our commitment to advancing smart contract development & tooling around it, we are decided to make Typechain a trusted, reliable go-to tool for typescript developers in the Polkadot ecosystem. We are aware of the challenges and limitations of the current Typechain implementation and are determined to address them. Our goal is to make Typechain a valuable asset for developers, enabling them to write smart contracts with ease and confidence.

    +

    We want to explicitly acknowledge that the concept and previous groundwork were established by the 727-ventures team. At Abax, we relied on Typechain to write e2e tests for our smart contracts and interact with them in scripts/front-end. With our commitment to advancing smart contract development & tooling around it, we are decided to make Typechain a trusted, reliable go-to tool for typescript developers in the Polkadot ecosystem. We are aware of the challenges and limitations of the current Typechain implementation and are determined to address them. Our goal is to make Typechain a valuable asset for developers, enabling them to write smart contracts with ease and confidence.

    \ No newline at end of file diff --git a/applications/typink.html b/applications/typink.html index 7039eb97fd1..e20e6a49351 100644 --- a/applications/typink.html +++ b/applications/typink.html @@ -2,10 +2,10 @@ - + typink | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/uke-protocol.html b/applications/uke-protocol.html index e4b473984cf..6d277a9cefa 100644 --- a/applications/uke-protocol.html +++ b/applications/uke-protocol.html @@ -2,10 +2,10 @@ - + Uke Protocol PoC & App (revised) | Web3 Foundation Grants - - + +
    Skip to main content
    + \ No newline at end of file diff --git a/applications/uke.html b/applications/uke.html index d2101adc519..1985811acbc 100644 --- a/applications/uke.html +++ b/applications/uke.html @@ -2,10 +2,10 @@ - + Uke Messaging - PoC - Phase 1 | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/unified_collator_node_deployment.html b/applications/unified_collator_node_deployment.html index 1a674f77814..b44c4559f73 100644 --- a/applications/unified_collator_node_deployment.html +++ b/applications/unified_collator_node_deployment.html @@ -2,10 +2,10 @@ - + Unified deployment for the collator node | Web3 Foundation Grants - - + + +

    Additional Information โž•โ€‹

    \ No newline at end of file diff --git a/applications/universaldot-me.html b/applications/universaldot-me.html index f5c1422b2d5..93113ed231b 100644 --- a/applications/universaldot-me.html +++ b/applications/universaldot-me.html @@ -2,10 +2,10 @@ - + universaldot.me | Web3 Foundation Grants - - + +
    Skip to main content

    universaldot.me

    @@ -190,6 +190,6 @@

    Addit
    HashMap Task <Key: hash, value: task> 

    task: {
    creator:
    requirements:
    budget:
    state:
    }

    RPC Methods:
    create_task(origin: OriginFor<T>, requirements: Vec<u8>, budget: u32) -> DispatchResult
    start_task(origin: OriginFor<T>, task_id: T::Hash) -> DispatchResult
    finish_task(origin: OriginFor<T>, task_id: T::Hash) -> DispatchResult

    DAO Pallet

    HashNMap Profile

    RPC Methods:
    create_organization(origin: OriginFor<T>, name: Vec<u8>) -> DispatchResult
    add_member(origin: OriginFor<T>, AccountID) -> DispatchResult
    remove_member(origin: OriginFor<T>, AccountID) -> DispatchResult
    add_task(origin: OriginFor<T>, AccountID) -> DispatchResult
    -

    How did you hear about the Grants Program? Web3 Foundation Website

    +

    How did you hear about the Grants Program? Web3 Foundation Website

    \ No newline at end of file diff --git a/applications/universaldot.me.html b/applications/universaldot.me.html index 9a7603907d6..1fd3e659c0c 100644 --- a/applications/universaldot.me.html +++ b/applications/universaldot.me.html @@ -2,10 +2,10 @@ - + universaldot.me | Web3 Foundation Grants - - + +
    Skip to main content

    universaldot.me

    @@ -232,6 +232,6 @@

    Profile Palle

    Task Palletโ€‹

    CharacteristicDescriptionTypeEntry
    TaskIDUnique Identifier for each taskHashAutomatic
    TitleTask Title that describes the taskStringManual, Mandatory
    RequirementsDefinition that specifies the requirements of the taskString (RichTextEditor?: JSON-Strigify)Manual, Mandatory
    BudgetThe budget for a taskNumberManual, Mandatory
    DeadlineExpected end time for the taskDatetimeManual, Mandatory
    AttachmentsAdditional information that is relevant to a task.File (Referenced by IPFS Hash)Manual, Optional
    KeywordsFew words used to filter the task (mainly used for the recommendation)Array of StringsManual, Optional
    FeedbackComments that are added to the task. Intermediary steps of communication between the initiator and volunteerStringManual, Optional
    Initiator?The User who created the taskAccoundIDAutomatic
    Volunteer?The User who Volunteered for the taskAccountIDAutomatic
    CurrentOwnerThe user who currently is working on the task and thus has ownership of it.AccountIDAutomatic
    RelatedGroup of tasks that are related to the current task.List of TasksManual
    StatusThe current status of the taskEnum [Created, InProgress, Closed] To be expanded?Automatic
    CreatedThe time the task was createdDateTimeAutomatic
    LastUpdatedTime when the task has been updatedDateTimeAutomatic
    CompletedTime when the task was completedDateTimeAutomatic

    DAO Palletโ€‹

    -
    IDUnique identifier for an organizationUUID or similarAutomatic
    NameThe name of the organizationStringManual, Mandatory
    DescriptionBasic description regarding the organization, industry, and goalsStringManual, Optional
    OwnerThe account that owns the organization. The initial owner is the founder. Ownership should be able to be transferred to other accounts.Account IDAutomatic, Mandatory
    VisionDocument that describes company VisionString (Hash to IPFS Document)Manual, Mandatory
    MembersMembers that belong to an organizationArray of AccountIDManual, Mandatory
    TasksTasks that belong to a certain OrganizationArray of TaskIDManual, Mandatory
    ApplicantsUsers that have applied to join to a certain organizationArray of AccountIDAutomatic
    CreatedThe date when the organization was createdDateTime, BlockAutomatic
    LastUpdatedThe date when the organization had an updateDateTime, BlockAutomatic
    PropertiesCustom collection of properties that can be added.An array of ObjectsManual, Optional
    +
    IDUnique identifier for an organizationUUID or similarAutomatic
    NameThe name of the organizationStringManual, Mandatory
    DescriptionBasic description regarding the organization, industry, and goalsStringManual, Optional
    OwnerThe account that owns the organization. The initial owner is the founder. Ownership should be able to be transferred to other accounts.Account IDAutomatic, Mandatory
    VisionDocument that describes company VisionString (Hash to IPFS Document)Manual, Mandatory
    MembersMembers that belong to an organizationArray of AccountIDManual, Mandatory
    TasksTasks that belong to a certain OrganizationArray of TaskIDManual, Mandatory
    ApplicantsUsers that have applied to join to a certain organizationArray of AccountIDAutomatic
    CreatedThe date when the organization was createdDateTime, BlockAutomatic
    LastUpdatedThe date when the organization had an updateDateTime, BlockAutomatic
    PropertiesCustom collection of properties that can be added.An array of ObjectsManual, Optional
    \ No newline at end of file diff --git a/applications/upgradeability-by-proxy.html b/applications/upgradeability-by-proxy.html index c7867a02dcc..3e88f70b8d6 100644 --- a/applications/upgradeability-by-proxy.html +++ b/applications/upgradeability-by-proxy.html @@ -2,10 +2,10 @@ - + ink! Smart Contract Upgradeability | Web3 Foundation Grants - - + + +

    This proposal is slightly research oriented.

    \ No newline at end of file diff --git a/applications/uplink.html b/applications/uplink.html index ea8cc02cde7..09b3111f395 100644 --- a/applications/uplink.html +++ b/applications/uplink.html @@ -2,10 +2,10 @@ - + UpLink | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? Web3 Foundation Website and personal recommendation.

    \ No newline at end of file diff --git a/applications/validated-streams.html b/applications/validated-streams.html index c00088f142f..c06879af115 100644 --- a/applications/validated-streams.html +++ b/applications/validated-streams.html @@ -2,10 +2,10 @@ - + Validated Streams | Web3 Foundation Grants - - + +
    Skip to main content

    Validated Streams

    @@ -124,6 +124,6 @@

    Future PlansAdditional Information โž•โ€‹

    How did you hear about the Grants Program? We found the grants program via GitHub Trending, while simultaneously discovering that Substrate would be a great fit for our project on accident. As that seemed like too good of a coincidence to pass up, we decided to apply.

    While our coop organization has received a previous grant from Aragon Nest for an unrelated project, this is the first grant we are applying to in regards to the Validated Streams project.

    -

    We have worked on the code and vision for Apocryph for a few years now, ever since we noticed that many of our Cooperative's projects were facing very similar issues around moving data and organizing code--and deciding we could do better. While not all of our attempts in bringing it about have been successful, we have been slowly coming to better solutions, and hope that it will all click one day.

    +

    We have worked on the code and vision for Apocryph for a few years now, ever since we noticed that many of our Cooperative's projects were facing very similar issues around moving data and organizing code--and deciding we could do better. While not all of our attempts in bringing it about have been successful, we have been slowly coming to better solutions, and hope that it will all click one day.

    \ No newline at end of file diff --git a/applications/validators_selection.html b/applications/validators_selection.html index 575292b1f09..5dd52e4baf0 100644 --- a/applications/validators_selection.html +++ b/applications/validators_selection.html @@ -2,10 +2,10 @@ - + Validators selection | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? Personal recommendation

    \ No newline at end of file diff --git a/applications/vanguard.html b/applications/vanguard.html index deb143a6287..addb0a8339c 100644 --- a/applications/vanguard.html +++ b/applications/vanguard.html @@ -2,10 +2,10 @@ - + Vanguard | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/ventur.html b/applications/ventur.html index 0e097fe5ff7..ffa5096853b 100644 --- a/applications/ventur.html +++ b/applications/ventur.html @@ -2,10 +2,10 @@ - + Ventur | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/vera_defi.html b/applications/vera_defi.html index 38988ad961c..727822b779c 100644 --- a/applications/vera_defi.html +++ b/applications/vera_defi.html @@ -2,10 +2,10 @@ - + Vera Defi Phase 1 | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/verida_network.html b/applications/verida_network.html index c1ecadeb88b..a6c17c80800 100644 --- a/applications/verida_network.html +++ b/applications/verida_network.html @@ -2,10 +2,10 @@ - + Verida | Web3 Foundation Grants - - + + +

    We have previously been successful in receiving grants from Open Web Collective and NEAR.

    \ No newline at end of file diff --git a/applications/visualize_rust_lifetime.html b/applications/visualize_rust_lifetime.html index 780ed4d703e..9a642b0e569 100644 --- a/applications/visualize_rust_lifetime.html +++ b/applications/visualize_rust_lifetime.html @@ -2,10 +2,10 @@ - + Avoiding Rust Deadlocks via Visualizing Lifetime | Web3 Foundation Grants - - + + +

    No

    \ No newline at end of file diff --git a/applications/vue-typescript-substrate-frontend-template.html b/applications/vue-typescript-substrate-frontend-template.html index 7d4d0c67762..daf6f827a16 100644 --- a/applications/vue-typescript-substrate-frontend-template.html +++ b/applications/vue-typescript-substrate-frontend-template.html @@ -2,10 +2,10 @@ - + Vue.js + TypeScript Substrate Front-End Template | Web3 Foundation Grants - - + +
    Skip to main content

    Vue.js + TypeScript Substrate Front-End Template

    @@ -124,6 +124,6 @@

    Future Plansโ€‹

    We plan to promote this project within the development community. In case of significant Substrate/Polkadot.js API changes in the future, the app should be upgraded to reflect those (out of scope for the grant, as mentioned above).

    Additional Information โž•โ€‹

    -

    How did you hear about the Grants Program? Via the Substrate Builders Program, networking with people from Parity/Web3 Foundation

    +

    How did you hear about the Grants Program? Via the Substrate Builders Program, networking with people from Parity/Web3 Foundation

    \ No newline at end of file diff --git a/applications/walt-id_nft-infra.html b/applications/walt-id_nft-infra.html index 91b30f62df3..964b79cd8a4 100644 --- a/applications/walt-id_nft-infra.html +++ b/applications/walt-id_nft-infra.html @@ -2,10 +2,10 @@ - + walt-id_nft-infra | Web3 Foundation Grants - - + +
    Skip to main content

    Any implementation that is EVM compatible (e.g. Moonriver or RMRK with EVM bridge). Furthermore we will look into NFT specific solutions like Uniques FRAME pallet & Efinity.

    @@ -227,6 +227,6 @@

    https://docs.google.com/presentation/d/1-105a2LaJVA0lzcQU9QrJx_GXzxAIf-BqCA0XqYzYBM/edit?usp=sharing
  • Docs https://docs.walt.id/
  • GitHub https://github.com/walt-id
  • -

    + \ No newline at end of file diff --git a/applications/wasm-opt-for-rust.html b/applications/wasm-opt-for-rust.html index e0a5f6472a6..4e5c54acfc9 100644 --- a/applications/wasm-opt-for-rust.html +++ b/applications/wasm-opt-for-rust.html @@ -2,10 +2,10 @@ - + wasm-opt for Rust | Web3 Foundation Grants - - + + +But the experience could be better.

    \ No newline at end of file diff --git a/applications/wasm_runtimes_fuzzing.html b/applications/wasm_runtimes_fuzzing.html index f1d6666730a..7807318ad6e 100644 --- a/applications/wasm_runtimes_fuzzing.html +++ b/applications/wasm_runtimes_fuzzing.html @@ -2,10 +2,10 @@ - + WebAssembly Runtimes Fuzzing (WARF) | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/wasmedge_substrate.html b/applications/wasmedge_substrate.html index 29aad973013..4e1361630a1 100644 --- a/applications/wasmedge_substrate.html +++ b/applications/wasmedge_substrate.html @@ -2,10 +2,10 @@ - + WasmEdge for Substrate | Web3 Foundation Grants - - + + +

    As discussed, the team has extensive experience with WebAssembly runtimes. We are the maintainers of CNCF's WasmEdge project, and had successfully completed past W3F grant projects in adopting WebAssembly for on-chain smart contracts.

    \ No newline at end of file diff --git a/applications/web3-association-open-source-contributor-funding-experiment-setup.html b/applications/web3-association-open-source-contributor-funding-experiment-setup.html index d9566b71381..66c3e392e2f 100644 --- a/applications/web3-association-open-source-contributor-funding-experiment-setup.html +++ b/applications/web3-association-open-source-contributor-funding-experiment-setup.html @@ -2,10 +2,10 @@ - + Open source contributor funding experiment setup | Web3 Foundation Grants - - + +
    Skip to main content
    +

    This previous grant was not funded, however we still continued with our open source analysis.

    \ No newline at end of file diff --git a/applications/web3-compatible-api.html b/applications/web3-compatible-api.html index 29a728b2ff1..e50c52c3918 100644 --- a/applications/web3-compatible-api.html +++ b/applications/web3-compatible-api.html @@ -2,10 +2,10 @@ - + Web3 Compatible API for Substrate EVM Chains | Web3 Foundation Grants - - + +
    Skip to main content

    Web3 Compatible API for Substrate EVM Chains

    @@ -36,6 +36,6 @@

    Additional Information โž•โ€‹

    -

    We intend to use the developed module as part of our Moonbeam parachain project, however the functionality will not be Moonbeam-specific. We plan to first deploy Moonbeam to the Westend testnet, then to the Kusama network, and finally to the Polkadot mainnet.

    +

    We intend to use the developed module as part of our Moonbeam parachain project, however the functionality will not be Moonbeam-specific. We plan to first deploy Moonbeam to the Westend testnet, then to the Kusama network, and finally to the Polkadot mainnet.

    \ No newline at end of file diff --git a/applications/wika_network.html b/applications/wika_network.html index d83fe5bc11d..5b7b698cc90 100644 --- a/applications/wika_network.html +++ b/applications/wika_network.html @@ -2,10 +2,10 @@ - + wika.network | Web3 Foundation Grants - - + + +and as we learn, we are very open to re-visiting this request's scope and form together.

    \ No newline at end of file diff --git a/applications/workflow_testing.html b/applications/workflow_testing.html index 83c77761e58..367674b4114 100644 --- a/applications/workflow_testing.html +++ b/applications/workflow_testing.html @@ -2,10 +2,10 @@ - + DuoSwap Module | Web3 Foundation Grants - - + +
    Skip to main content
    + \ No newline at end of file diff --git a/applications/xNFT.html b/applications/xNFT.html index 4e03c151f8b..d2dd5c906be 100644 --- a/applications/xNFT.html +++ b/applications/xNFT.html @@ -2,10 +2,10 @@ - + xNFT | Web3 Foundation Grants - - + +
    Skip to main content

    xNFT

    @@ -125,6 +125,6 @@

    Mil

    Future Plansโ€‹

    Currently this project is solely to transfer NFT between Substrate based chains. In future we plan to extend this functionality to non-substrate chains like Ethereum, Solana etc. We also plan to extend the functionality of this pallet to substrate based solo-chains as well(solo to solo). We will also add support to transfer NFT deployed to the chains as smart contracts.

    Additional Information โž•โ€‹

    -

    How did you hear about the Grants Program? A friend recommended

    +

    How did you hear about the Grants Program? A friend recommended

    \ No newline at end of file diff --git a/applications/xbi-format-psp-t3rn.html b/applications/xbi-format-psp-t3rn.html index ab4bc3a08b0..dbb11bbc5a9 100644 --- a/applications/xbi-format-psp-t3rn.html +++ b/applications/xbi-format-psp-t3rn.html @@ -2,10 +2,10 @@ - + XBI - xcm-based high-level standard and interface (ABI) for smart contracts | Web3 Foundation Grants - - + +
    Skip to main content
    +This is our second Web3 Foundation grant, having delivered on our first grant back in December 2020. We having been working tirelessly within the Polkadot ecosystem ever since, as part of the Substrate Builders Program and intend to launch as a Polkadot parachain in summer 2022.

    \ No newline at end of file diff --git a/applications/xcNFT.html b/applications/xcNFT.html index cbf3245ed47..9dde04352be 100644 --- a/applications/xcNFT.html +++ b/applications/xcNFT.html @@ -2,10 +2,10 @@ - + ParaSpell xcNFT pallet | Web3 Foundation Grants - - + +
    Skip to main content

    ParaSpell xcNFT pallet

    @@ -143,6 +143,6 @@

    Future PlansAdditional Information โž•โ€‹

    How did you hear about the Grants Program? Personal recommendation

    We have already established a proof-of-concept solution that can share simple non-fungible assets. This solution is designed to be easily improved and upgraded. The next goals are outlined in the milestones section.

    -

    We previously applied for funding with ParaSpell on the XCM Tool stack in 5 separate Grants Phase1, Phase2, Phase3, Phase4, Phase5. The tools are now successfully established and continually improve the cross-chain experience for many projects that now implement them. The XCM Tool stack remains (and will remain) completely open source and common good. The project receives maintenance support from the Kusama Treasury.

    +

    We previously applied for funding with ParaSpell on the XCM Tool stack in 5 separate Grants Phase1, Phase2, Phase3, Phase4, Phase5. The tools are now successfully established and continually improve the cross-chain experience for many projects that now implement them. The XCM Tool stack remains (and will remain) completely open source and common good. The project receives maintenance support from the Kusama Treasury.

    \ No newline at end of file diff --git a/applications/xcm-domain-service.html b/applications/xcm-domain-service.html index 56c736977a9..e8546565e45 100644 --- a/applications/xcm-domain-service.html +++ b/applications/xcm-domain-service.html @@ -2,10 +2,10 @@ - + XCM Domain Name Service | Web3 Foundation Grants - - + + +

    The initial development and audit of the first version of the AZERO.ID platform has been financed via a grant from the Aleph Zero Foundation. AZERO.ID (via Scio Labs) is a member of the Aleph Zero Ecosystem Funding Program. The project has not yet received any additional grant funding beyond that.

    \ No newline at end of file diff --git a/applications/xcm-sdk.html b/applications/xcm-sdk.html index fcdbd567b6c..dfe3e6ab4fc 100644 --- a/applications/xcm-sdk.html +++ b/applications/xcm-sdk.html @@ -2,10 +2,10 @@ - + Cross-Consensus Messaging Software Development Kit | Web3 Foundation Grants - - + +
    Skip to main content

    Cross-Consensus Messaging Software Development Kit

    @@ -111,6 +111,6 @@

    Future Plansโ€‹

    We plan to share our expertise creating workshops online, handling all relevant forums and social networks.

    Licenseโ€‹

    -

    Apache license version 2.0

    +

    Apache license version 2.0

    \ No newline at end of file diff --git a/applications/xcm-tools-follow-up-2.html b/applications/xcm-tools-follow-up-2.html index fd7e157048d..4e9067589d5 100644 --- a/applications/xcm-tools-follow-up-2.html +++ b/applications/xcm-tools-follow-up-2.html @@ -2,10 +2,10 @@ - + XCM Tools follow-up-2 | Web3 Foundation Grants - - + +
    Skip to main content
    +

    There are currently many configuration items. I will add a configuration file in future updates to make it easier for users to use. The CLI will also be adjusted to an interactive command-line tool.

    \ No newline at end of file diff --git a/applications/xcm-tools-follow-up.html b/applications/xcm-tools-follow-up.html index f455274126b..586d57a0d78 100644 --- a/applications/xcm-tools-follow-up.html +++ b/applications/xcm-tools-follow-up.html @@ -2,10 +2,10 @@ - + XCM Tools follow-up | Web3 Foundation Grants - - + + +users to use.

    \ No newline at end of file diff --git a/applications/xcm-tools.html b/applications/xcm-tools.html index 1c2ae2dc109..195245a5efc 100644 --- a/applications/xcm-tools.html +++ b/applications/xcm-tools.html @@ -2,10 +2,10 @@ - + XCM Tools | Web3 Foundation Grants - - + + +be maintained continuously

    \ No newline at end of file diff --git a/applications/xcmsend.html b/applications/xcmsend.html index bb7a3d3ca6f..c7fe4e2e6f4 100644 --- a/applications/xcmsend.html +++ b/applications/xcmsend.html @@ -2,10 +2,10 @@ - + XCMSend | Web3 Foundation Grants - - + + +

    How did you hear about the Grants Program? The team is familiar with the web3 foundation from previous projects.

    \ No newline at end of file diff --git a/applications/xtokens.html b/applications/xtokens.html index b740fca8b88..29a9c9a11f6 100644 --- a/applications/xtokens.html +++ b/applications/xtokens.html @@ -2,10 +2,10 @@ - + xtokens - XCM Implementation for Fungible Assets | Web3 Foundation Grants - - + +
    Skip to main content

    xtokens - XCM Implementation for Fungible Assets

    @@ -104,6 +104,6 @@

    here is the article describing it.
  • Are there are any teams who have already contributed (financially) to the project? Just Acala.
  • Have you applied for other grants so far? Yes, we have a grant for stablecoin that has been completed. We also have a grant for a Substrate composable EVM, of which the first milestone has been delivered.
  • -

    + \ No newline at end of file diff --git a/applications/yatima.html b/applications/yatima.html index fb770833fb9..2552da9a466 100644 --- a/applications/yatima.html +++ b/applications/yatima.html @@ -2,10 +2,10 @@ - + Yatima | Web3 Foundation Grants - - + + +from the Ethereum Foundation and the IOTA Foundation.

    \ No newline at end of file diff --git a/applications/yiban_chen1.html b/applications/yiban_chen1.html index 318a4f5b18e..7e9963dddfa 100644 --- a/applications/yiban_chen1.html +++ b/applications/yiban_chen1.html @@ -2,10 +2,10 @@ - + Yiban Chen (General chain) | Web3 Foundation Grants - - + +
    Skip to main content
    +

    Currently we have no funding for the YibanChen system, we feel getting the general web3 use-cases off the ground will kick-start the substrate ecosystem in a big way. We are excited to be part of the Substrate and Polkadot community and we will continue to contribute as much as we can. Thank you for your time and thank you for considering us for the Web3 Open Grant.

    \ No newline at end of file diff --git a/applications/yieldscan_phase_2.html b/applications/yieldscan_phase_2.html index cc61cb4bfa8..30a27724d3f 100644 --- a/applications/yieldscan_phase_2.html +++ b/applications/yieldscan_phase_2.html @@ -2,10 +2,10 @@ - + YieldScan | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/zenlink-cross-chain-dex.html b/applications/zenlink-cross-chain-dex.html index 8f0cc27c35d..32ef1ac30c9 100644 --- a/applications/zenlink-cross-chain-dex.html +++ b/applications/zenlink-cross-chain-dex.html @@ -2,10 +2,10 @@ - + Zenlink DEX Smart Contract | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/zenlink-smart-contract.html b/applications/zenlink-smart-contract.html index 7ae6c85d9bc..b96e28178ab 100644 --- a/applications/zenlink-smart-contract.html +++ b/applications/zenlink-smart-contract.html @@ -2,10 +2,10 @@ - + Zenlink DEX Smart Contract | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/zenlink.html b/applications/zenlink.html index 971deb1ddcd..2a237f85de6 100644 --- a/applications/zenlink.html +++ b/applications/zenlink.html @@ -2,10 +2,10 @@ - + Zenlink | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/zero-network.html b/applications/zero-network.html index 79040d4fc75..6b734d5d834 100644 --- a/applications/zero-network.html +++ b/applications/zero-network.html @@ -2,10 +2,10 @@ - + Zero Network | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/zk-plonk.html b/applications/zk-plonk.html index 942008270aa..d402474e19e 100644 --- a/applications/zk-plonk.html +++ b/applications/zk-plonk.html @@ -2,10 +2,10 @@ - + zk plonk | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/zk-rollups.html b/applications/zk-rollups.html index 71b0f8db9f0..a6b97a81eda 100644 --- a/applications/zk-rollups.html +++ b/applications/zk-rollups.html @@ -2,10 +2,10 @@ - + ZK Rollup on Polkadot/Substrate | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/zkverse.html b/applications/zkverse.html index 99e6451f798..9a46b0c7d5e 100644 --- a/applications/zkverse.html +++ b/applications/zkverse.html @@ -2,10 +2,10 @@ - + Zkverse | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/applications/zkwasm-rollups-transfer.html b/applications/zkwasm-rollups-transfer.html index 436c913ce94..91ecc2e4744 100644 --- a/applications/zkwasm-rollups-transfer.html +++ b/applications/zkwasm-rollups-transfer.html @@ -2,10 +2,10 @@ - + Zkwasm Rollups Transfer | Web3 Foundation Grants - - + + + \ No newline at end of file diff --git a/assets/js/003507fd.ac497bc7.js b/assets/js/003507fd.ac497bc7.js new file mode 100644 index 00000000000..094ea79796c --- /dev/null +++ b/assets/js/003507fd.ac497bc7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[26518],{65287:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"applications/polkadex","title":"Polkadex: A fully decentralized, peer-peer, cryptocurrency exchange for DeFi ecosystem in Substrate.","description":"Proposer:* Gauthamastro","source":"@site/applications/polkadex.md","sourceDirName":"applications","slug":"/applications/polkadex","permalink":"/applications/polkadex","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/polkadex.md","tags":[],"version":"current","frontMatter":{}}');var r=n(74848),s=n(28453);const a={},o="Polkadex: A fully decentralized, peer-peer, cryptocurrency exchange for DeFi ecosystem in Substrate.",d={},l=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"An indication of how you will integrate this project into Substrate / Polkadot / Kusama.",id:"an-indication-of-how-you-will-integrate-this-project-into-substrate--polkadot--kusama",level:3},{value:"An indication of why your team is interested in creating this project.",id:"an-indication-of-why-your-team-is-interested-in-creating-this-project",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Team Website",id:"team-website",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 - Optimize Trading algorithm & Check for data errors",id:"milestone-1----optimize-trading-algorithm--check-for-data-errors",level:3},{value:"Milestone 2: Web UI, Documentation & Tutorials",id:"milestone-2-web-ui-documentation--tutorials",level:3},{value:"Community engagement",id:"community-engagement",level:3},{value:"Future Plans",id:"future-plans",level:2}];function c(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"polkadex-a-fully-decentralized-peer-peer-cryptocurrency-exchange-for-defi-ecosystem-in-substrate",children:"Polkadex: A fully decentralized, peer-peer, cryptocurrency exchange for DeFi ecosystem in Substrate."})}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Proposer:"})," ",(0,r.jsx)(t.a,{href:"https://github.com/Gauthamastro",children:"Gauthamastro"})]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Payment Address:"})," 34agZfxE1SSGxXgTQQvVGv1RcEEFCX9mEy"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Status:"})," Terminated via email"]}),"\n"]}),"\n",(0,r.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,r.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,r.jsx)(t.p,{children:"There are many decentralized exchanges/protocols available in the market for traders but they still prefer to use centralized solutions for their convenience and ease of use knowing very well that their funds are at risk. This is because decentralized solutions are still not user friendly to an average trader. Some of them also have no proper decentralization and also got hacked in the process. We cannot call an exchange decentralized if it can lose or freeze customer funds."}),"\n",(0,r.jsx)(t.p,{children:"The problems faced by decentralized exchanges are:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Inadequate UI/UX experience."}),"\n",(0,r.jsx)(t.li,{children:"Low liquidity"}),"\n",(0,r.jsx)(t.li,{children:"Lack of advanced trading features, high-frequency trading, and bots."}),"\n",(0,r.jsx)(t.li,{children:"Lack of proper decentralization and interoperability."}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"To solve the above problems, our goal is to build a fully decentralized, peer-peer, cryptocurrency exchange for the Defi ecosystem in Substrate. The project envisages the creation of a fully decentralized platform for exchanging tokens in a peer-peer, trustless environment, that enables high-frequency trading, high-liquidity, and lightning-fast transaction speed for supporting Defi applications."}),"\n",(0,r.jsxs)(t.p,{children:["In order to address the first problem, we needed to enable features that attract users into the exchange which includes a fast, responsive UI and trading features. It is mainly to attract day traders and retail investors who prefer centralized exchanges due to convenience and speed of execution. The block time of 3s given by the Babe/Grandpa consensus algorithm allows transaction speeds of up to 400/s under test conditions which is more than sufficient to compete with any centralized solutions in the market today. Please check our analysis ",(0,r.jsx)(t.a,{href:"https://github.com/Polkadex-Substrate/Documentation/tree/master/Analysis",children:"here"}),". Since Substrate hot-swapping of Consensus algorithm, we think a platform like Substrate will support the future growth of the exchange by changing consensus to accommodate more transactions per second as better ones emerge."]}),"\n",(0,r.jsx)(t.p,{children:"Secondly, the lack of liquidity is addressed by enabling,"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"High-frequency trading using feeless transactions."}),"\n",(0,r.jsx)(t.li,{children:"APIs that enable trading/AMM bots to observe market changes and submit trades."}),"\n",(0,r.jsx)(t.li,{children:"Advanced trading features like stop limit, market limit, Stop loss, Fill/Kill, Post only, TWAP, etc."}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Finally, proper decentralization and Interoperability are achieved by having a parachain in Polkadot that brings in liquidity from other blockchains and also using ChainBridge protocol that connects directly to the Ethereum network. Hence, traders have two different mechanisms to bring in liquidity."}),"\n",(0,r.jsx)(t.p,{children:"The value we provide to the Substrate community is,"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"They can build custom UI/UX to connect to our network and create their own custom exchange experience."}),"\n",(0,r.jsx)(t.li,{children:"Traders can contribute their own custom trading algorithms by making use of market data provided by our full nodes."}),"\n",(0,r.jsx)(t.li,{children:"They get a decentralized trading platform to trade Polkadot & Ethereum tokens."}),"\n",(0,r.jsx)(t.li,{children:"This will be one of the first Decentralized exchanges to have High-Frequency Trading bot support using APIs directly from full nodes."}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"an-indication-of-how-you-will-integrate-this-project-into-substrate--polkadot--kusama",children:"An indication of how you will integrate this project into Substrate / Polkadot / Kusama."}),"\n",(0,r.jsx)(t.p,{children:"Polkadex is a decentralized exchange platform. It will have three high-level components."}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"An independent substrate chain for high-speed consensus secured and governed by network participants."}),"\n",(0,r.jsx)(t.li,{children:"A Parachain on Polkadot for bringing liquidity from Polkadot\u2019s interoperability community."}),"\n",(0,r.jsx)(t.li,{children:"A set of decentralized relayer set that use Substrate's ChainBridge pallet to allow interoperability with Ethereum."}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"an-indication-of-why-your-team-is-interested-in-creating-this-project",children:"An indication of why your team is interested in creating this project."}),"\n",(0,r.jsx)(t.p,{children:"We are amused by the plethora of centralized institutions cropping up around the decentralized idea of open, peer to peer, programmable internet of value. Decentralized Exchanges are built on the idea of non-custodial interoperability. Polkadot and Substrate are the most promising blockchain interoperability platforms. We want to provide our users with maximum liquidity, security, and world-class user experience. Hence, we are excited and confident that building a DEX on Substrate, supported by Polkadot\u2019s interoperability, will increase user engagement and overall trading experience when combined with our trading expertise over the years."}),"\n",(0,r.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Mockups of exchange UI Components"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Login In Page\n",(0,r.jsx)(t.img,{src:"https://github.com/Polkadex-Substrate/Documentation/blob/master/images/Login_mockup.png",alt:"Login Mockup"})]}),"\n",(0,r.jsxs)(t.li,{children:["Dashboard\n",(0,r.jsx)(t.img,{src:"https://github.com/Polkadex-Substrate/Documentation/blob/master/images/Dashboard_mockup.png",alt:"DashBoard Mockup"})]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["We have created a proof of concept of the idea. ",(0,r.jsx)(t.a,{href:"https://github.com/Polkadex-Substrate/Polkadex.git",children:"check here"})]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,r.jsx)(t.p,{children:"We have provided a comparison chart against two famous DEXs"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Features"}),(0,r.jsx)(t.th,{children:"Polkadex"}),(0,r.jsx)(t.th,{children:"BinanceDex"}),(0,r.jsx)(t.th,{children:"BitsharesDex"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Decentralized Orderbook"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"Yes"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Block time"}),(0,r.jsx)(t.td,{children:"3 sec"}),(0,r.jsx)(t.td,{children:"2 sec"}),(0,r.jsx)(t.td,{children:"3 sec"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Custom Trading bot"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"No"}),(0,r.jsx)(t.td,{children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Network Size"}),(0,r.jsx)(t.td,{children:"Dynamic"}),(0,r.jsx)(t.td,{children:"100"}),(0,r.jsx)(t.td,{children:"Dynamic"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Responsive UI"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Upgradable State Transition Function"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"No"}),(0,r.jsx)(t.td,{children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Automated Market Making Support"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"No"}),(0,r.jsx)(t.td,{children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Custom UI/UX Support"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"No"}),(0,r.jsx)(t.td,{children:"Yes"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Peer-Peer Blockchain Interoperability"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"No"}),(0,r.jsx)(t.td,{children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Advanced Order types (Stop limit, Stop loss, etc)"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"No"}),(0,r.jsx)(t.td,{children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"High Frequency Trading Support"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"No"}),(0,r.jsx)(t.td,{children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Margin Trading"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"No"}),(0,r.jsx)(t.td,{children:"No"})]})]})]}),"\n",(0,r.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,r.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Vivek Prasannan (Btech Computer Engineering) is passionate about Decentralized computing and has been actively following the crypto/blockchain community since 2013. He has researched and worked on a new ",(0,r.jsx)(t.a,{href:"https://github.com/bitshares/bsips/pull/119",children:"BSIP"})," for Bitshares that will enable off-chain activities that can be settled transparently on the blockchain, and implicitly enables the creation of savings accounts for the users that are locked a certain time period to enhance fund security. He has successfully exited two startups in cloud computing, infrastructure support, and fintech space."]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Experience: C++, RUST & Substrate Framework"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Gautham J, a 3rd-year B.Tech undergrad student at National Institute of Technology, Calicut, India. He has been at the forefront of distributed ledger technology by launching his own version of a consensus algorithm known as Pebble using Lamport\u2019s vector clocks which is still in progress. The team received a blockchain innovation award from the BFSI sector by Banking Frontier. He has also co-authored an academic paper for Supply Chain management and predictions using machine learning models and ethereum network which is currently being peer-reviewed."}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Experienced in GoLang, RUST, Python, C++, and Substrate Framework."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Deepansh Singh, a 4th-year B.Tech undergrad student at National Institute of Technology, Calicut, India. worked with multiple early-stage startups for developing business strategies and exited after making those startups a success. One of the startups that he worked got the Best Startup award in the National Institute of Technology Startup Conclave. He is also part of the Innovation Council for universities in Kerala under the Government of India. He along with Gautham received an award for their innovative consensus algorithm that enables high throughput transactions in permissionless networks."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"team-website",children:"Team Website"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/Polkadex-Substrate",children:"https://github.com/Polkadex-Substrate"})}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,r.jsx)(t.p,{children:"Individual"}),"\n",(0,r.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/Polkadex-Substrate/Polkadex",children:"https://github.com/Polkadex-Substrate/Polkadex"})}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/vivek-prasannan-4050489/",children:"https://www.linkedin.com/in/vivek-prasannan-4050489/"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/gautham-j-a4a559133/",children:"https://www.linkedin.com/in/gautham-j-a4a559133/"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/deepanshconnect/",children:"https://www.linkedin.com/in/deepanshconnect/"})}),"\n"]}),"\n",(0,r.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,r.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Total Estimated Duration:"})," 7 weeks"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Full-time equivalent (FTE):"})," 3.5 FTE"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Total Costs:"})," 1.5 BTC"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"milestone-1----optimize-trading-algorithm--check-for-data-errors",children:"Milestone 1 - Optimize Trading algorithm & Check for data errors"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Estimated Duration:"})," 5 weeks"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"FTE:"})," 2"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Costs:"})," 1.2 BTC"]}),"\n"]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Number"}),(0,r.jsx)(t.th,{children:"Deliverable"}),(0,r.jsx)(t.th,{children:"Specification"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"1."}),(0,r.jsx)(t.td,{children:"Refactor Trading Engine in DEX pallet"}),(0,r.jsx)(t.td,{children:"Refactoring the limit and market order algorithms for efficiency and high-speed trading."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"2."}),(0,r.jsx)(t.td,{children:"Optimize Storage access"}),(0,r.jsx)(t.td,{children:"Optimize the storage and efficiency of reads and writes to substrate storage."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"3."}),(0,r.jsx)(t.td,{children:"Check for Data errors"}),(0,r.jsx)(t.td,{children:"Checking the security for buffer overflows or any other type of data errors that may affect exchange transactions."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"4."}),(0,r.jsx)(t.td,{children:"Market Data API"}),(0,r.jsx)(t.td,{children:"Save closing_bid, closing_ask, and volume for each trading pair at each block on the chain."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"5."}),(0,r.jsx)(t.td,{children:"Enable Market Data RPC"}),(0,r.jsx)(t.td,{children:"Implement RPC for retrieving Market data from full nodes for technical analysis."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"6."}),(0,r.jsx)(t.td,{children:"Unit tests"}),(0,r.jsx)(t.td,{children:"Integration of Unit tests for Limit, Market Orders & Market Data API."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"7."}),(0,r.jsx)(t.td,{children:"Documentation"}),(0,r.jsx)(t.td,{children:"Proper documentation to submit Limit, Market orders or retrieve Market Data using Polkadotjs API."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"8."}),(0,r.jsx)(t.td,{children:"Docker Container"}),(0,r.jsx)(t.td,{children:"Provide a docker container"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"milestone-2-web-ui-documentation--tutorials",children:"Milestone 2: Web UI, Documentation & Tutorials"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Estimated Duration:"})," 2 weeks"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"FTE:"})," 1.5"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Costs:"})," 0.3 BTC"]}),"\n"]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Number"}),(0,r.jsx)(t.th,{children:"Deliverable"}),(0,r.jsx)(t.th,{children:"Specification"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"1."}),(0,r.jsx)(t.td,{children:"Provide our Web UI"}),(0,r.jsx)(t.td,{children:"Convert mockups into working websites and connect them to full nodes using polkdotjs API. (Includes Dashboard, Login using Polkadot browser extension)."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"2."}),(0,r.jsx)(t.td,{children:"Custom Trading Bot Tutorial"}),(0,r.jsx)(t.td,{children:"A simple implementation trading bot based on moving average enabled using market data from full nodes."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"3."}),(0,r.jsx)(t.td,{children:"API Documentation"}),(0,r.jsx)(t.td,{children:"Documentation of APIs provided by a full node for developing custom UI/UX."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"4."}),(0,r.jsx)(t.td,{children:"Basic Trading Tutorial"}),(0,r.jsx)(t.td,{children:"Basic trading tutorial for submitting limit & market orders based on our UI design."})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"community-engagement",children:"Community engagement"}),"\n",(0,r.jsx)(t.p,{children:"The tutorials and Documentation that we provide will be published as articles in Medium and other social media platforms with due mention about Web3 grant.\nWe also intend to engage community by providing grants in our tokens to add more support and improve our codebase."}),"\n",(0,r.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,r.jsx)(t.p,{children:"We will be registering an LLC for taking this project ahead.\nWe intend to host a the Web UI provided here. We will also be developing a cloud service to analyse and aggregate the market data to provide a wide range of technical indicators like Bollinger bands, RSI etc.\nWe want to provide traders the maximum possible user experience compared to a centralized exchange."})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>o});var i=n(96540);const r={},s=i.createContext(r);function a(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/003507fd.be917751.js b/assets/js/003507fd.be917751.js deleted file mode 100644 index a2102c663a5..00000000000 --- a/assets/js/003507fd.be917751.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[26518],{70518:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"applications/polkadex","title":"Polkadex: A fully decentralized, peer-peer, cryptocurrency exchange for DeFi ecosystem in Substrate.","description":"Proposer:* Gauthamastro","source":"@site/applications/polkadex.md","sourceDirName":"applications","slug":"/applications/polkadex","permalink":"/applications/polkadex","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/polkadex.md","tags":[],"version":"current","frontMatter":{}}');var r=n(74848),s=n(28453);const a={},o="Polkadex: A fully decentralized, peer-peer, cryptocurrency exchange for DeFi ecosystem in Substrate.",d={},l=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"An indication of how you will integrate this project into Substrate / Polkadot / Kusama.",id:"an-indication-of-how-you-will-integrate-this-project-into-substrate--polkadot--kusama",level:3},{value:"An indication of why your team is interested in creating this project.",id:"an-indication-of-why-your-team-is-interested-in-creating-this-project",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Team Website",id:"team-website",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 - Optimize Trading algorithm & Check for data errors",id:"milestone-1----optimize-trading-algorithm--check-for-data-errors",level:3},{value:"Milestone 2: Web UI, Documentation & Tutorials",id:"milestone-2-web-ui-documentation--tutorials",level:3},{value:"Community engagement",id:"community-engagement",level:3},{value:"Future Plans",id:"future-plans",level:2}];function c(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"polkadex-a-fully-decentralized-peer-peer-cryptocurrency-exchange-for-defi-ecosystem-in-substrate",children:"Polkadex: A fully decentralized, peer-peer, cryptocurrency exchange for DeFi ecosystem in Substrate."})}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Proposer:"})," ",(0,r.jsx)(t.a,{href:"https://github.com/Gauthamastro",children:"Gauthamastro"})]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Payment Address:"})," 34agZfxE1SSGxXgTQQvVGv1RcEEFCX9mEy"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Status:"})," Terminated via email"]}),"\n"]}),"\n",(0,r.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,r.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,r.jsx)(t.p,{children:"There are many decentralized exchanges/protocols available in the market for traders but they still prefer to use centralized solutions for their convenience and ease of use knowing very well that their funds are at risk. This is because decentralized solutions are still not user friendly to an average trader. Some of them also have no proper decentralization and also got hacked in the process. We cannot call an exchange decentralized if it can lose or freeze customer funds."}),"\n",(0,r.jsx)(t.p,{children:"The problems faced by decentralized exchanges are:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Inadequate UI/UX experience."}),"\n",(0,r.jsx)(t.li,{children:"Low liquidity"}),"\n",(0,r.jsx)(t.li,{children:"Lack of advanced trading features, high-frequency trading, and bots."}),"\n",(0,r.jsx)(t.li,{children:"Lack of proper decentralization and interoperability."}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"To solve the above problems, our goal is to build a fully decentralized, peer-peer, cryptocurrency exchange for the Defi ecosystem in Substrate. The project envisages the creation of a fully decentralized platform for exchanging tokens in a peer-peer, trustless environment, that enables high-frequency trading, high-liquidity, and lightning-fast transaction speed for supporting Defi applications."}),"\n",(0,r.jsxs)(t.p,{children:["In order to address the first problem, we needed to enable features that attract users into the exchange which includes a fast, responsive UI and trading features. It is mainly to attract day traders and retail investors who prefer centralized exchanges due to convenience and speed of execution. The block time of 3s given by the Babe/Grandpa consensus algorithm allows transaction speeds of up to 400/s under test conditions which is more than sufficient to compete with any centralized solutions in the market today. Please check our analysis ",(0,r.jsx)(t.a,{href:"https://github.com/Polkadex-Substrate/Documentation/tree/master/Analysis",children:"here"}),". Since Substrate hot-swapping of Consensus algorithm, we think a platform like Substrate will support the future growth of the exchange by changing consensus to accommodate more transactions per second as better ones emerge."]}),"\n",(0,r.jsx)(t.p,{children:"Secondly, the lack of liquidity is addressed by enabling,"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"High-frequency trading using feeless transactions."}),"\n",(0,r.jsx)(t.li,{children:"APIs that enable trading/AMM bots to observe market changes and submit trades."}),"\n",(0,r.jsx)(t.li,{children:"Advanced trading features like stop limit, market limit, Stop loss, Fill/Kill, Post only, TWAP, etc."}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Finally, proper decentralization and Interoperability are achieved by having a parachain in Polkadot that brings in liquidity from other blockchains and also using ChainBridge protocol that connects directly to the Ethereum network. Hence, traders have two different mechanisms to bring in liquidity."}),"\n",(0,r.jsx)(t.p,{children:"The value we provide to the Substrate community is,"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"They can build custom UI/UX to connect to our network and create their own custom exchange experience."}),"\n",(0,r.jsx)(t.li,{children:"Traders can contribute their own custom trading algorithms by making use of market data provided by our full nodes."}),"\n",(0,r.jsx)(t.li,{children:"They get a decentralized trading platform to trade Polkadot & Ethereum tokens."}),"\n",(0,r.jsx)(t.li,{children:"This will be one of the first Decentralized exchanges to have High-Frequency Trading bot support using APIs directly from full nodes."}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"an-indication-of-how-you-will-integrate-this-project-into-substrate--polkadot--kusama",children:"An indication of how you will integrate this project into Substrate / Polkadot / Kusama."}),"\n",(0,r.jsx)(t.p,{children:"Polkadex is a decentralized exchange platform. It will have three high-level components."}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"An independent substrate chain for high-speed consensus secured and governed by network participants."}),"\n",(0,r.jsx)(t.li,{children:"A Parachain on Polkadot for bringing liquidity from Polkadot\u2019s interoperability community."}),"\n",(0,r.jsx)(t.li,{children:"A set of decentralized relayer set that use Substrate's ChainBridge pallet to allow interoperability with Ethereum."}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"an-indication-of-why-your-team-is-interested-in-creating-this-project",children:"An indication of why your team is interested in creating this project."}),"\n",(0,r.jsx)(t.p,{children:"We are amused by the plethora of centralized institutions cropping up around the decentralized idea of open, peer to peer, programmable internet of value. Decentralized Exchanges are built on the idea of non-custodial interoperability. Polkadot and Substrate are the most promising blockchain interoperability platforms. We want to provide our users with maximum liquidity, security, and world-class user experience. Hence, we are excited and confident that building a DEX on Substrate, supported by Polkadot\u2019s interoperability, will increase user engagement and overall trading experience when combined with our trading expertise over the years."}),"\n",(0,r.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Mockups of exchange UI Components"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Login In Page\n",(0,r.jsx)(t.img,{src:"https://github.com/Polkadex-Substrate/Documentation/blob/master/images/Login_mockup.png",alt:"Login Mockup"})]}),"\n",(0,r.jsxs)(t.li,{children:["Dashboard\n",(0,r.jsx)(t.img,{src:"https://github.com/Polkadex-Substrate/Documentation/blob/master/images/Dashboard_mockup.png",alt:"DashBoard Mockup"})]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["We have created a proof of concept of the idea. ",(0,r.jsx)(t.a,{href:"https://github.com/Polkadex-Substrate/Polkadex.git",children:"check here"})]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,r.jsx)(t.p,{children:"We have provided a comparison chart against two famous DEXs"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Features"}),(0,r.jsx)(t.th,{children:"Polkadex"}),(0,r.jsx)(t.th,{children:"BinanceDex"}),(0,r.jsx)(t.th,{children:"BitsharesDex"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Decentralized Orderbook"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"Yes"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Block time"}),(0,r.jsx)(t.td,{children:"3 sec"}),(0,r.jsx)(t.td,{children:"2 sec"}),(0,r.jsx)(t.td,{children:"3 sec"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Custom Trading bot"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"No"}),(0,r.jsx)(t.td,{children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Network Size"}),(0,r.jsx)(t.td,{children:"Dynamic"}),(0,r.jsx)(t.td,{children:"100"}),(0,r.jsx)(t.td,{children:"Dynamic"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Responsive UI"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Upgradable State Transition Function"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"No"}),(0,r.jsx)(t.td,{children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Automated Market Making Support"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"No"}),(0,r.jsx)(t.td,{children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Custom UI/UX Support"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"No"}),(0,r.jsx)(t.td,{children:"Yes"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Peer-Peer Blockchain Interoperability"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"No"}),(0,r.jsx)(t.td,{children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Advanced Order types (Stop limit, Stop loss, etc)"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"No"}),(0,r.jsx)(t.td,{children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"High Frequency Trading Support"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"No"}),(0,r.jsx)(t.td,{children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Margin Trading"}),(0,r.jsx)(t.td,{children:"Yes"}),(0,r.jsx)(t.td,{children:"No"}),(0,r.jsx)(t.td,{children:"No"})]})]})]}),"\n",(0,r.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,r.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Vivek Prasannan (Btech Computer Engineering) is passionate about Decentralized computing and has been actively following the crypto/blockchain community since 2013. He has researched and worked on a new ",(0,r.jsx)(t.a,{href:"https://github.com/bitshares/bsips/pull/119",children:"BSIP"})," for Bitshares that will enable off-chain activities that can be settled transparently on the blockchain, and implicitly enables the creation of savings accounts for the users that are locked a certain time period to enhance fund security. He has successfully exited two startups in cloud computing, infrastructure support, and fintech space."]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Experience: C++, RUST & Substrate Framework"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Gautham J, a 3rd-year B.Tech undergrad student at National Institute of Technology, Calicut, India. He has been at the forefront of distributed ledger technology by launching his own version of a consensus algorithm known as Pebble using Lamport\u2019s vector clocks which is still in progress. The team received a blockchain innovation award from the BFSI sector by Banking Frontier. He has also co-authored an academic paper for Supply Chain management and predictions using machine learning models and ethereum network which is currently being peer-reviewed."}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Experienced in GoLang, RUST, Python, C++, and Substrate Framework."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Deepansh Singh, a 4th-year B.Tech undergrad student at National Institute of Technology, Calicut, India. worked with multiple early-stage startups for developing business strategies and exited after making those startups a success. One of the startups that he worked got the Best Startup award in the National Institute of Technology Startup Conclave. He is also part of the Innovation Council for universities in Kerala under the Government of India. He along with Gautham received an award for their innovative consensus algorithm that enables high throughput transactions in permissionless networks."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"team-website",children:"Team Website"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/Polkadex-Substrate",children:"https://github.com/Polkadex-Substrate"})}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,r.jsx)(t.p,{children:"Individual"}),"\n",(0,r.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/Polkadex-Substrate/Polkadex",children:"https://github.com/Polkadex-Substrate/Polkadex"})}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/vivek-prasannan-4050489/",children:"https://www.linkedin.com/in/vivek-prasannan-4050489/"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/gautham-j-a4a559133/",children:"https://www.linkedin.com/in/gautham-j-a4a559133/"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/deepanshconnect/",children:"https://www.linkedin.com/in/deepanshconnect/"})}),"\n"]}),"\n",(0,r.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,r.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Total Estimated Duration:"})," 7 weeks"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Full-time equivalent (FTE):"})," 3.5 FTE"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Total Costs:"})," 1.5 BTC"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"milestone-1----optimize-trading-algorithm--check-for-data-errors",children:"Milestone 1 - Optimize Trading algorithm & Check for data errors"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Estimated Duration:"})," 5 weeks"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"FTE:"})," 2"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Costs:"})," 1.2 BTC"]}),"\n"]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Number"}),(0,r.jsx)(t.th,{children:"Deliverable"}),(0,r.jsx)(t.th,{children:"Specification"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"1."}),(0,r.jsx)(t.td,{children:"Refactor Trading Engine in DEX pallet"}),(0,r.jsx)(t.td,{children:"Refactoring the limit and market order algorithms for efficiency and high-speed trading."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"2."}),(0,r.jsx)(t.td,{children:"Optimize Storage access"}),(0,r.jsx)(t.td,{children:"Optimize the storage and efficiency of reads and writes to substrate storage."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"3."}),(0,r.jsx)(t.td,{children:"Check for Data errors"}),(0,r.jsx)(t.td,{children:"Checking the security for buffer overflows or any other type of data errors that may affect exchange transactions."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"4."}),(0,r.jsx)(t.td,{children:"Market Data API"}),(0,r.jsx)(t.td,{children:"Save closing_bid, closing_ask, and volume for each trading pair at each block on the chain."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"5."}),(0,r.jsx)(t.td,{children:"Enable Market Data RPC"}),(0,r.jsx)(t.td,{children:"Implement RPC for retrieving Market data from full nodes for technical analysis."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"6."}),(0,r.jsx)(t.td,{children:"Unit tests"}),(0,r.jsx)(t.td,{children:"Integration of Unit tests for Limit, Market Orders & Market Data API."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"7."}),(0,r.jsx)(t.td,{children:"Documentation"}),(0,r.jsx)(t.td,{children:"Proper documentation to submit Limit, Market orders or retrieve Market Data using Polkadotjs API."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"8."}),(0,r.jsx)(t.td,{children:"Docker Container"}),(0,r.jsx)(t.td,{children:"Provide a docker container"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"milestone-2-web-ui-documentation--tutorials",children:"Milestone 2: Web UI, Documentation & Tutorials"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Estimated Duration:"})," 2 weeks"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"FTE:"})," 1.5"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Costs:"})," 0.3 BTC"]}),"\n"]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Number"}),(0,r.jsx)(t.th,{children:"Deliverable"}),(0,r.jsx)(t.th,{children:"Specification"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"1."}),(0,r.jsx)(t.td,{children:"Provide our Web UI"}),(0,r.jsx)(t.td,{children:"Convert mockups into working websites and connect them to full nodes using polkdotjs API. (Includes Dashboard, Login using Polkadot browser extension)."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"2."}),(0,r.jsx)(t.td,{children:"Custom Trading Bot Tutorial"}),(0,r.jsx)(t.td,{children:"A simple implementation trading bot based on moving average enabled using market data from full nodes."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"3."}),(0,r.jsx)(t.td,{children:"API Documentation"}),(0,r.jsx)(t.td,{children:"Documentation of APIs provided by a full node for developing custom UI/UX."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"4."}),(0,r.jsx)(t.td,{children:"Basic Trading Tutorial"}),(0,r.jsx)(t.td,{children:"Basic trading tutorial for submitting limit & market orders based on our UI design."})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"community-engagement",children:"Community engagement"}),"\n",(0,r.jsx)(t.p,{children:"The tutorials and Documentation that we provide will be published as articles in Medium and other social media platforms with due mention about Web3 grant.\nWe also intend to engage community by providing grants in our tokens to add more support and improve our codebase."}),"\n",(0,r.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,r.jsx)(t.p,{children:"We will be registering an LLC for taking this project ahead.\nWe intend to host a the Web UI provided here. We will also be developing a cloud service to analyse and aggregate the market data to provide a wide range of technical indicators like Bollinger bands, RSI etc.\nWe want to provide traders the maximum possible user experience compared to a centralized exchange."})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>o});var i=n(96540);const r={},s=i.createContext(r);function a(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/00b945b6.ddc25109.js b/assets/js/00b945b6.ddc25109.js new file mode 100644 index 00000000000..14dd7b09c47 --- /dev/null +++ b/assets/js/00b945b6.ddc25109.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[11425],{50349:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>c});const r=JSON.parse('{"id":"docs/RFPs/wallet-aggregator-library","title":"Wallet Aggregator Library","description":"This Request for Proposals is closed, meaning we are not looking for any more proposals on this topic at the moment.","source":"@site/docs/RFPs/wallet-aggregator-library.md","sourceDirName":"docs/RFPs","slug":"/docs/RFPs/wallet-aggregator-library","permalink":"/docs/RFPs/wallet-aggregator-library","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/docs/RFPs/wallet-aggregator-library.md","tags":[],"version":"current","frontMatter":{},"sidebar":"docs","previous":{"title":"polkadot-validator-setup maintenance","permalink":"/docs/RFPs/validator-setup-maintenance"},"next":{"title":"XCM library & tools","permalink":"/docs/RFPs/xcm-tool"}}');var o=n(74848),s=n(28453);const a={},i="Wallet Aggregator Library",l={},c=[{value:"Project Description \ud83d\udcc4",id:"project-description-page_facing_up",level:2},{value:"Deliverables \ud83d\udd29",id:"deliverables-nut_and_bolt",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"wallet-aggregator-library",children:"Wallet Aggregator Library"})}),"\n",(0,o.jsx)(t.admonition,{type:"danger",children:(0,o.jsxs)(t.p,{children:["This Request for Proposals is ",(0,o.jsx)(t.em,{children:"closed"}),", meaning we are not looking for any more proposals on this topic at the moment."]})}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Status:"})," ",(0,o.jsx)(t.a,{href:"https://github.com/Koniverse/SubConnect",children:"Implemented: SubConnect"}),", ",(0,o.jsx)(t.a,{href:"https://github.com/TalismanSociety/talisman-connect",children:"Implemented: talisman-connect"})]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Proposer:"})," ",(0,o.jsx)(t.a,{href:"https://github.com/0xCaso",children:"Matteo Casonato"})]}),"\n"]}),"\n",(0,o.jsxs)(t.h2,{id:"project-description-page_facing_up",children:["Project Description ","\ud83d\udcc4"]}),"\n",(0,o.jsxs)(t.p,{children:["Users of Polkadot and Substrate-based projects need to connect their wallet to a front-end when using a dApp. At the moment, there are ",(0,o.jsx)(t.a,{href:"https://wiki.polkadot.network/docs/build-wallets",children:"several wallets and browser extensions"})," that can be used (Polkadot-JS, Talisman, Fearless, just to name a few). However, it's common that the frontends don't support all of them, and the users need to install a new wallet or browser extension to connect to the frontend."]}),"\n",(0,o.jsxs)(t.p,{children:["This project aims to create a ",(0,o.jsx)(t.strong,{children:"React library"})," that allows users to connect with any wallet or browser extension to the frontends that adopts it. This way, the users can use the wallet they prefer, and the frontends can support all of them without the need to implement the connection logic for each wallet, just integrating one library (making life easier for developers). Though we would prefer a React library, we would also consider implementations for other libraries as well."]}),"\n",(0,o.jsxs)(t.h2,{id:"deliverables-nut_and_bolt",children:["Deliverables ","\ud83d\udd29"]}),"\n",(0,o.jsx)(t.p,{children:"The following items could be the initial deliverables of the project. Of course, improvements and additions are more than welcome."}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:["Initial ",(0,o.jsx)(t.strong,{children:"research"}),":","\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:["study from the ",(0,o.jsx)(t.a,{href:"https://www.rainbowkit.com/docs/introduction",children:"RainbowKit"})," library (which is the same thing, already developed for EVM chains);"]}),"\n",(0,o.jsx)(t.li,{children:"understand which wallets/extensions can be integrated, what is needed to connect to them, etc.;"}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["Library ",(0,o.jsx)(t.strong,{children:"development"}),":","\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"various connectors for each wallet;"}),"\n",(0,o.jsx)(t.li,{children:"UI components (connect button, account and chain selector, etc.);"}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["UI/UX (for both users/devs) ",(0,o.jsx)(t.strong,{children:"improvement"}),":","\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:["addition of a tool that scaffolds a new project with the wallet connection library (firable, for example, with ",(0,o.jsx)(t.code,{children:"npm init @user/wallet-aggregator@latest"}),");"]}),"\n",(0,o.jsxs)(t.li,{children:["selective account disclosure implementation (view ",(0,o.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/privacy-enhancement-polkadot-extension.md",children:"this"})," RFP)."]}),"\n"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>i});var r=n(96540);const o={},s=r.createContext(o);function a(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/00b945b6.e892d584.js b/assets/js/00b945b6.e892d584.js deleted file mode 100644 index 0d762b1e66d..00000000000 --- a/assets/js/00b945b6.e892d584.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[11425],{60651:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>c});const r=JSON.parse('{"id":"docs/RFPs/wallet-aggregator-library","title":"Wallet Aggregator Library","description":"This Request for Proposals is closed, meaning we are not looking for any more proposals on this topic at the moment.","source":"@site/docs/RFPs/wallet-aggregator-library.md","sourceDirName":"docs/RFPs","slug":"/docs/RFPs/wallet-aggregator-library","permalink":"/docs/RFPs/wallet-aggregator-library","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/docs/RFPs/wallet-aggregator-library.md","tags":[],"version":"current","frontMatter":{},"sidebar":"docs","previous":{"title":"polkadot-validator-setup maintenance","permalink":"/docs/RFPs/validator-setup-maintenance"},"next":{"title":"XCM library & tools","permalink":"/docs/RFPs/xcm-tool"}}');var o=n(74848),s=n(28453);const a={},i="Wallet Aggregator Library",l={},c=[{value:"Project Description \ud83d\udcc4",id:"project-description-page_facing_up",level:2},{value:"Deliverables \ud83d\udd29",id:"deliverables-nut_and_bolt",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"wallet-aggregator-library",children:"Wallet Aggregator Library"})}),"\n",(0,o.jsx)(t.admonition,{type:"danger",children:(0,o.jsxs)(t.p,{children:["This Request for Proposals is ",(0,o.jsx)(t.em,{children:"closed"}),", meaning we are not looking for any more proposals on this topic at the moment."]})}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Status:"})," ",(0,o.jsx)(t.a,{href:"https://github.com/Koniverse/SubConnect",children:"Implemented: SubConnect"}),", ",(0,o.jsx)(t.a,{href:"https://github.com/TalismanSociety/talisman-connect",children:"Implemented: talisman-connect"})]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Proposer:"})," ",(0,o.jsx)(t.a,{href:"https://github.com/0xCaso",children:"Matteo Casonato"})]}),"\n"]}),"\n",(0,o.jsxs)(t.h2,{id:"project-description-page_facing_up",children:["Project Description ","\ud83d\udcc4"]}),"\n",(0,o.jsxs)(t.p,{children:["Users of Polkadot and Substrate-based projects need to connect their wallet to a front-end when using a dApp. At the moment, there are ",(0,o.jsx)(t.a,{href:"https://wiki.polkadot.network/docs/build-wallets",children:"several wallets and browser extensions"})," that can be used (Polkadot-JS, Talisman, Fearless, just to name a few). However, it's common that the frontends don't support all of them, and the users need to install a new wallet or browser extension to connect to the frontend."]}),"\n",(0,o.jsxs)(t.p,{children:["This project aims to create a ",(0,o.jsx)(t.strong,{children:"React library"})," that allows users to connect with any wallet or browser extension to the frontends that adopts it. This way, the users can use the wallet they prefer, and the frontends can support all of them without the need to implement the connection logic for each wallet, just integrating one library (making life easier for developers). Though we would prefer a React library, we would also consider implementations for other libraries as well."]}),"\n",(0,o.jsxs)(t.h2,{id:"deliverables-nut_and_bolt",children:["Deliverables ","\ud83d\udd29"]}),"\n",(0,o.jsx)(t.p,{children:"The following items could be the initial deliverables of the project. Of course, improvements and additions are more than welcome."}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:["Initial ",(0,o.jsx)(t.strong,{children:"research"}),":","\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:["study from the ",(0,o.jsx)(t.a,{href:"https://www.rainbowkit.com/docs/introduction",children:"RainbowKit"})," library (which is the same thing, already developed for EVM chains);"]}),"\n",(0,o.jsx)(t.li,{children:"understand which wallets/extensions can be integrated, what is needed to connect to them, etc.;"}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["Library ",(0,o.jsx)(t.strong,{children:"development"}),":","\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"various connectors for each wallet;"}),"\n",(0,o.jsx)(t.li,{children:"UI components (connect button, account and chain selector, etc.);"}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["UI/UX (for both users/devs) ",(0,o.jsx)(t.strong,{children:"improvement"}),":","\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:["addition of a tool that scaffolds a new project with the wallet connection library (firable, for example, with ",(0,o.jsx)(t.code,{children:"npm init @user/wallet-aggregator@latest"}),");"]}),"\n",(0,o.jsxs)(t.li,{children:["selective account disclosure implementation (view ",(0,o.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/privacy-enhancement-polkadot-extension.md",children:"this"})," RFP)."]}),"\n"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>i});var r=n(96540);const o={},s=r.createContext(o);function a(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/00c2b2a8.698ba882.js b/assets/js/00c2b2a8.698ba882.js new file mode 100644 index 00000000000..c734ab45480 --- /dev/null +++ b/assets/js/00c2b2a8.698ba882.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[76719],{27172:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>a,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange","title":"Protocol for NFT Migration and Data Exchange","description":"- Team Name: Perpetual Altruism","source":"@site/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md","sourceDirName":"applications","slug":"/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange","permalink":"/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md","tags":[],"version":"current","frontMatter":{}}');var s=i(74848),r=i(28453);const a={},o="Protocol for NFT Migration and Data Exchange",l={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 Desirable Protocol Features",id:"milestone-1--desirable-protocol-features",level:3},{value:"Milestone 2 \u2014 Checked Migration Process",id:"milestone-2--checked-migration-process",level:3},{value:"Milestone 3 \u2014 Trustless Migration Process",id:"milestone-3--trustless-migration-process",level:3},{value:"Milestone 4 \u2014 Standard and Documentation for Cross-universe Migration",id:"milestone-4--standard-and-documentation-for-cross-universe-migration",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function h(e){const n={a:"a",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"protocol-for-nft-migration-and-data-exchange",children:"Protocol for NFT Migration and Data Exchange"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Team Name:"})," Perpetual Altruism"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Payment Address:"}),"\nBTC : 1B6AHziiBvE28Lg74n23V3dYXbxcVLGKYi\nETH/DAI : 0xA7427d0D45e8dd969049872F9cDE383716A39B23"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Status:"})," ",(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/pull/809#issuecomment-1160448332",children:"Terminated"})]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(n.p,{children:"This proposal is in response to Polkadot Bridge RFP."}),"\n",(0,s.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(n.p,{children:"In this proposal, we use the following terms and definitions:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"NFT:"})," Intangible asset that is compatible with the ERC-721 standard (i.e. the unique intangible asset is abstracted from the concept of token, which is how the asset is represented on a blockchain). An NFT always exists in a world, which is itself in a universe."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Universe"})," e.g. a blockchain or parachain, the Web2.0 internet, a private company\u2019s database\u2026"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"World (within a universe)"})," e.g. a smart contract or smart contract ecosystem, a website, a private company project\u2026"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Migration:"})," The movement of an NFT from an origin universe to a destination universe."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"IOU migration:"})," An NFT migration where the original token is put in escrow in the origin universe bridge, and a deed that allows the bearer to redeem that original token in the origin universe is created in the destination universe."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Full migration:"})," An NFT migration which is handled by the publisher of the NFT, who controls the destination world, and thus can allow the NFT\u2019s features and intellectual property rights to be transferred to the new token in the destination universe."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Digital Rights Management:"})," The systematic approach to prevent unauthorized redistribution of digital rights and intellectual property rights infringement during a full NFT migration."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"The aim of this proposal is to standardize what information is sufficient and which are necessary to allow the migration of an NFT from an arbitrary universe to another. Both of the endpoints (origin universe/world and destination universe/world) must be ERC-721 compatible, but they do not have to be blockchains (e.g : domain name tokenization using an ERC-721 compatible API)."}),"\n",(0,s.jsx)(n.p,{children:"There are already Polkadot bridges under development for ERC-20 tokens and other arbitrary data. However, there is no consensus yet on how to bridge NFTs across chains. This project aim is to create a standard to do so at the messaging level."}),"\n",(0,s.jsxs)(n.p,{children:["Our team is building NFT.com, a marketplace for the world\u2019s tokenized assets and we need this infrastructure for our marketplace to work effectively on the Polkadot Network. Previous to this we also developed ",(0,s.jsx)(n.a,{href:"https://cryptograph.co",children:"Cryptograph"}),", an NFT publisher and marketplace on Ethereum."]}),"\n",(0,s.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(n.p,{children:"The deliverable of this proposal is a standardized protocol specification."}),"\n",(0,s.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsx)(n.p,{children:"To our knowledge, there is currently no work being done on a standardized, universal bridge protocol for cross-chain NFT migration."}),"\n",(0,s.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Guillaume Gonnaud"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Edouard Bessire"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Guillaume Gonnaud"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"mailto:g.gonnaud@perpetual-altruism.org",children:"g.gonnaud@perpetual-altruism.org"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"http://NFT.com",children:"NFT.com"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Perpetual Altruism Ltd"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"2 Ordnance Mews, London NW86PF, United Kingdom"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsxs)(n.strong,{children:[(0,s.jsx)(n.a,{href:"https://github.com/Nokhal",children:"Guillaume Gonnaud"}),":"]})," Co-Founder and CTO of Perpetual Altruism Ltd, the developer of NFT publisher and marketplace Cryptograph. Previously co-founded two other companies as CTO, and worked as a researcher and developer for Japan\u2019s National Institute of Informatics in Tokyo. He holds a MSc Computer Science from France\u2019s National Polytechnic Institute and a MSc Research in Artificial Intelligence from Paul Sabatier University. He is the main author of the ",(0,s.jsx)(n.a,{href:"https://medium.com/cryptograph/incentivised-bidding-the-gbm-auction-c6dae5a756e5",children:"GBM auction mechanism"})," as well as of the ERC-2665 standard."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsxs)(n.strong,{children:[(0,s.jsx)(n.a,{href:"https://github.com/edouardru",children:"Edouard Bessire"}),":"]})," Co-Founder of Perpetual Altruism Ltd, the developer of NFT publisher and marketplace Cryptograph. Computer science Engineer with extensive product development and project management experience. Edouard holds an MSc in Applied Mathematics from France\u2019s National Polytechnic Institute, and an MSc in Innovation, Entrepreneurship and Management from the Imperial College Business School. He is also a co-author of the ",(0,s.jsx)(n.a,{href:"https://medium.com/cryptograph/incentivised-bidding-the-gbm-auction-c6dae5a756e5",children:"GBM auction mechanism"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://github.com/Nokhal/Cryptograph_Project",children:"https://github.com/Nokhal/Cryptograph_Project"}),"\n",(0,s.jsx)(n.a,{href:"https://github.com/ethereum/EIPs/issues/2665",children:"https://github.com/ethereum/EIPs/issues/2665"})]}),"\n",(0,s.jsx)(n.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/guillaume-gonnaud/",children:"https://www.linkedin.com/in/guillaume-gonnaud/"}),"\n",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/edouardbessire/",children:"https://www.linkedin.com/in/edouardbessire/"})]}),"\n",(0,s.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Total Estimated Duration:"})," Less than 7 weeks"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Full-time equivalent (FTE):"})," 2 FTE"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Total Work Days:"})," 66 days"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Cost per work day:"})," \xa3300"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Total Costs:"})," \xa319,800 (26862.66 USD/DAI)"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-1--desirable-protocol-features",children:"Milestone 1 \u2014 Desirable Protocol Features"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Estimated Duration:"})," ~2 weeks"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 2 FTE"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Work Days:"})," 21 days"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Cost per work day:"})," \xa3300"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," \xa36,300 (8558.05 USD/DAI)"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Deliverable:"})," A list of clearly defined, measurable features that the final bridges built using this vision should support, as well as how to test them using pseudocode."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"We will write up and engage with the community to determine the desirable features of a NFT migration and data exchange messaging protocol.\nSo far, we have determined that the protocol must allow for the following features:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Migrate any ERC-721 token between EVM-compatible chains"}),"\n",(0,s.jsx)(n.li,{children:"Migrate an NFT back and forth to get the original token back."}),"\n",(0,s.jsx)(n.li,{children:"Be ERC-1155 compatible"}),"\n",(0,s.jsx)(n.li,{children:"Migrate an NFT outside of an EVM universe and redeem the same token back"}),"\n",(0,s.jsx)(n.li,{children:"Migrate an NFT to an arbitrary world (as the owner of an NFT, you should be able to choose where you want the NFT to be migrated to and who will mint it i.e. the protocol is not restricted to a specific project)"}),"\n",(0,s.jsx)(n.li,{children:"Have built-in protections against \u201cbad\u201d migration by preventing migration to non-registered destination worlds."}),"\n",(0,s.jsx)(n.li,{children:"Allowing polkadot parachains to trustlessly migrate NFTs from one parachain to an another using SPREE."}),"\n",(0,s.jsx)(n.li,{children:"Perform both IOU migration (no Digital Rights Management requirement) and Full migration (which requires Digital Rights Management at the bridge level)"}),"\n",(0,s.jsx)(n.li,{children:"Migrate an NFT with either a \u2018checked\u2019 migration (need to be acknowledged by both the sender and the receiver of a token) or \u2018unchecked\u2019 migration (the token in the original world needs to first be attributed to a tokenID on the destination chain, then it is simply put in escrow with the bridge on the origin chain). NB: Checked migrations are fully trutless and decentralized and optimised for security, whilst unchecked migrations are optimised for gas costs."}),"\n",(0,s.jsxs)(n.li,{children:["Licensed under the ",(0,s.jsx)(n.a,{href:"https://unlicense.org",children:"Unlicense"})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-2--checked-migration-process",children:"Milestone 2 \u2014 Checked Migration Process"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Estimated Duration:"})," ~2 weeks"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 2"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Work Days:"})," 20 days"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Cost per work day:"})," \xa3300"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," \xa36,000 (8150.52 USD/DAI)"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Deliverable:"})," A documented step by step process that would allow a trusted relayer to perform efficient migrations of NFTs."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"We will write up the \u2018Checked Migration\u2019 process which includes a security protocol to ensure that both the sender and the receiver are satisfied with the migration outcome.\nThis is especially important if NFT's are migrating from/to a trustless universe (eg : a public decentralized blockchain) toward/from a centralized/private universe.\nThis process is NOT a fully decentralized trustless process itself in order to accomodate for a wide array of possible origin and destinations, but it does allow decentralized trustless outcomes while guaranteeing authenticity and ownership of the NFT at every step."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"A checked migration process mean there is an acknowledgment of the migration on the destination universe by the sender."}),"\n",(0,s.jsx)(n.li,{children:"A checked migration process mean there is an acknowledgment of the migration on the origin universe by the receiver"}),"\n",(0,s.jsx)(n.li,{children:"The migration is complete only once both the sender and receiver have acknowledged the migration. Before that, the migrated token cannot be used."}),"\n",(0,s.jsx)(n.li,{children:"If after a time-limit, either of those acknowledgement are missing, the migration is reverted : the original token can be withdrawn freely by the sender, and the migrated token is burned."}),"\n",(0,s.jsxs)(n.li,{children:["Checked migrations need to be possible for either EVM => EVM, ",(0,s.jsx)(n.em,{children:"=> EVM or EVM =>"})," migrations."]}),"\n",(0,s.jsx)(n.li,{children:'Checked migrations need to allow any third party to "check" the migration and publish a standardized signed message that the migration did indeed happen.'}),"\n",(0,s.jsx)(n.li,{children:"NB : This only cover the migration of NFTs to a new universe, not the redemption of the the NFT back to it's origin universe."}),"\n",(0,s.jsxs)(n.li,{children:["Licensed under the ",(0,s.jsx)(n.a,{href:"https://unlicense.org",children:"Unlicense"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"The main purpose of this migration process is for NFT publishers to allow their users to effortlessly migrate their tokens with the least amount of efforts required. NFT publishers could offer users to do the whole migration with a single gas spending approve() from an NFT owner and the rest trough meta-transactions by the publisher. The publisher would then sign the migration as properly done after having minted and transferred the token on the destination blockchain. By essence, most NFTs are not trustless assets as their publishers own real world IP rights to them, and it is hence acceptable to use said publishers as relayers. This is standardizing a process that would otherwise require the publisher to update their original NFT smart contracts or NFT owners to burn their original NFT token in order to get a new one minted on the destination universe."})}),"\n",(0,s.jsx)(n.h3,{id:"milestone-3--trustless-migration-process",children:"Milestone 3 \u2014 Trustless Migration Process"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Estimated Duration:"})," ~1 week"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 2"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Work Days:"})," 10 days"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Cost per work day:"})," \xa3300"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," \xa33,000 (4075.26 USD/DAI)"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Deliverable:"})," A documented step by step process that would allow a trust-minimized relayer to perform migrations of NFTs."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"We will write up the \u2018Trustless Migration\u2019 process which is designed to be used when the destination universe have trutsless state reading capabilities of the origin universe."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Snowfork is already building a substrate module allowing specifically for Ethereum Smart contract reading. If a Substrate-built parachain implement those reading capacities, then implementation of this process should be straightforward."}),"\n",(0,s.jsx)(n.li,{children:"In the case of EVM => EVM ERC-721 migration without trustless reading, Chainbridge already exist. However, their contracts requires administrator input for new contract registration as well as lacking features that are NFT specific, such as preventing minting technically correct but legally counterfeit tokens."}),"\n",(0,s.jsx)(n.li,{children:"NB : This only cover the migration of NFTs to a new universe, not the redemption of the the NFT back to it's origin universe."}),"\n",(0,s.jsxs)(n.li,{children:["Licensed under the ",(0,s.jsx)(n.a,{href:"https://unlicense.org",children:"Unlicense"})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-4--standard-and-documentation-for-cross-universe-migration",children:"Milestone 4 \u2014 Standard and Documentation for Cross-universe Migration"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Estimated Duration:"})," ~1 week"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 2"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Work Days:"})," 15 days"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Cost per work day:"})," \xa3300"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," \xa34,500 (6112.89 USD/DAI)"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Deliverables:"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"A generic Standard written in pseudocode including predicate and postulate for each function and events that would allow for either checked or trustless migrations to be performed for the same asset, from the same bridge : only one endpoint should be sufficient to know about all of the migrations. This standard is the most generic version and allows the most diverse universes, and henceforth is the least constrained. It will have it's own dedicated decentralized webpage explaining the standard as well as a documentation and links to both the EIP and the PSP. This decentralized webpage will also have a centralized, cached version that NFT.com will host."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"An EIP standard written in Solidity including predicate and postulate for each function and events that would allow for either checked or trustless migrations to be performed for the same asset, from the same bridge."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"A PSP standard written in ink! including predicate and postulate for each function and events that would allow a smart contract for either checked or trustless migrations to be performed for the same asset, from the same bridge. This would allow third parties to integrate an NFT bridge on any Smart contract supporting parachain, even if said parachain does not explicitely support a trustless communication channel with other parachains at the substrate level. As a separate module of this PSP we will also provide a standard for parachain NFT migrations using SPREE provided that both parachains implement this standard."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Those standards must allow an EVM bridge following the EIP on ethereum mainnet/moonbeam to migrate an NFT to a WASM bridge following the PSP standard on a parachain and vice versa."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"We will write up the standard and documentation for cross-universe migration, which includes \u201cnecessary\u201d and \u201coptional\u201d data for optimization. This is a summarized write up of both the previous milestones but writen as specifications for implementations, including the predicate and postulate of each message and what they mean in term of state on the source and destination universe."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Challenge: Establishing predicate and postulate on what are the allowed pair of source/destination worlds. Those allowed pairs could be designed in any fashion, from centralized trusted to decentralized and trust minimized."}),"\n",(0,s.jsxs)(n.li,{children:["Licensed under the ",(0,s.jsx)(n.a,{href:"https://unlicense.org",children:"Unlicense"})," or when required under the license requirements of EIP and PSP."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsx)(n.p,{children:"We will implement this standard for EVM-compatible chains. Our main goal is the ability for any Ethereum mainnet NFT to be painlessly migrated to Moonbeam on the Polkadot network."}),"\n",(0,s.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsx)(n.p,{children:"This proposal is a part of the wider NFT.com venture."}),"\n",(0,s.jsxs)(n.p,{children:["Learn more about our vision for the bridge here: ",(0,s.jsx)(n.a,{href:"https://docs.google.com/document/d/1mhSKmC_4Hg7GqJuSLZk5Tu1hNjJlqo6O5TNwFx-e6vw/edit?usp=sharing",children:"link"})]})]})}function c(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>a,x:()=>o});var t=i(96540);const s={},r=t.createContext(s);function a(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/00c2b2a8.c678515e.js b/assets/js/00c2b2a8.c678515e.js deleted file mode 100644 index c350ee9994f..00000000000 --- a/assets/js/00c2b2a8.c678515e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[76719],{47002:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>a,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange","title":"Protocol for NFT Migration and Data Exchange","description":"- Team Name: Perpetual Altruism","source":"@site/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md","sourceDirName":"applications","slug":"/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange","permalink":"/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md","tags":[],"version":"current","frontMatter":{}}');var s=i(74848),r=i(28453);const a={},o="Protocol for NFT Migration and Data Exchange",l={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 Desirable Protocol Features",id:"milestone-1--desirable-protocol-features",level:3},{value:"Milestone 2 \u2014 Checked Migration Process",id:"milestone-2--checked-migration-process",level:3},{value:"Milestone 3 \u2014 Trustless Migration Process",id:"milestone-3--trustless-migration-process",level:3},{value:"Milestone 4 \u2014 Standard and Documentation for Cross-universe Migration",id:"milestone-4--standard-and-documentation-for-cross-universe-migration",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function h(e){const n={a:"a",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"protocol-for-nft-migration-and-data-exchange",children:"Protocol for NFT Migration and Data Exchange"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Team Name:"})," Perpetual Altruism"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Payment Address:"}),"\nBTC : 1B6AHziiBvE28Lg74n23V3dYXbxcVLGKYi\nETH/DAI : 0xA7427d0D45e8dd969049872F9cDE383716A39B23"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Status:"})," ",(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/pull/809#issuecomment-1160448332",children:"Terminated"})]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(n.p,{children:"This proposal is in response to Polkadot Bridge RFP."}),"\n",(0,s.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(n.p,{children:"In this proposal, we use the following terms and definitions:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"NFT:"})," Intangible asset that is compatible with the ERC-721 standard (i.e. the unique intangible asset is abstracted from the concept of token, which is how the asset is represented on a blockchain). An NFT always exists in a world, which is itself in a universe."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Universe"})," e.g. a blockchain or parachain, the Web2.0 internet, a private company\u2019s database\u2026"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"World (within a universe)"})," e.g. a smart contract or smart contract ecosystem, a website, a private company project\u2026"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Migration:"})," The movement of an NFT from an origin universe to a destination universe."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"IOU migration:"})," An NFT migration where the original token is put in escrow in the origin universe bridge, and a deed that allows the bearer to redeem that original token in the origin universe is created in the destination universe."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Full migration:"})," An NFT migration which is handled by the publisher of the NFT, who controls the destination world, and thus can allow the NFT\u2019s features and intellectual property rights to be transferred to the new token in the destination universe."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Digital Rights Management:"})," The systematic approach to prevent unauthorized redistribution of digital rights and intellectual property rights infringement during a full NFT migration."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"The aim of this proposal is to standardize what information is sufficient and which are necessary to allow the migration of an NFT from an arbitrary universe to another. Both of the endpoints (origin universe/world and destination universe/world) must be ERC-721 compatible, but they do not have to be blockchains (e.g : domain name tokenization using an ERC-721 compatible API)."}),"\n",(0,s.jsx)(n.p,{children:"There are already Polkadot bridges under development for ERC-20 tokens and other arbitrary data. However, there is no consensus yet on how to bridge NFTs across chains. This project aim is to create a standard to do so at the messaging level."}),"\n",(0,s.jsxs)(n.p,{children:["Our team is building NFT.com, a marketplace for the world\u2019s tokenized assets and we need this infrastructure for our marketplace to work effectively on the Polkadot Network. Previous to this we also developed ",(0,s.jsx)(n.a,{href:"https://cryptograph.co",children:"Cryptograph"}),", an NFT publisher and marketplace on Ethereum."]}),"\n",(0,s.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(n.p,{children:"The deliverable of this proposal is a standardized protocol specification."}),"\n",(0,s.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsx)(n.p,{children:"To our knowledge, there is currently no work being done on a standardized, universal bridge protocol for cross-chain NFT migration."}),"\n",(0,s.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Guillaume Gonnaud"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Edouard Bessire"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Guillaume Gonnaud"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"mailto:g.gonnaud@perpetual-altruism.org",children:"g.gonnaud@perpetual-altruism.org"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"http://NFT.com",children:"NFT.com"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Perpetual Altruism Ltd"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"2 Ordnance Mews, London NW86PF, United Kingdom"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsxs)(n.strong,{children:[(0,s.jsx)(n.a,{href:"https://github.com/Nokhal",children:"Guillaume Gonnaud"}),":"]})," Co-Founder and CTO of Perpetual Altruism Ltd, the developer of NFT publisher and marketplace Cryptograph. Previously co-founded two other companies as CTO, and worked as a researcher and developer for Japan\u2019s National Institute of Informatics in Tokyo. He holds a MSc Computer Science from France\u2019s National Polytechnic Institute and a MSc Research in Artificial Intelligence from Paul Sabatier University. He is the main author of the ",(0,s.jsx)(n.a,{href:"https://medium.com/cryptograph/incentivised-bidding-the-gbm-auction-c6dae5a756e5",children:"GBM auction mechanism"})," as well as of the ERC-2665 standard."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsxs)(n.strong,{children:[(0,s.jsx)(n.a,{href:"https://github.com/edouardru",children:"Edouard Bessire"}),":"]})," Co-Founder of Perpetual Altruism Ltd, the developer of NFT publisher and marketplace Cryptograph. Computer science Engineer with extensive product development and project management experience. Edouard holds an MSc in Applied Mathematics from France\u2019s National Polytechnic Institute, and an MSc in Innovation, Entrepreneurship and Management from the Imperial College Business School. He is also a co-author of the ",(0,s.jsx)(n.a,{href:"https://medium.com/cryptograph/incentivised-bidding-the-gbm-auction-c6dae5a756e5",children:"GBM auction mechanism"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://github.com/Nokhal/Cryptograph_Project",children:"https://github.com/Nokhal/Cryptograph_Project"}),"\n",(0,s.jsx)(n.a,{href:"https://github.com/ethereum/EIPs/issues/2665",children:"https://github.com/ethereum/EIPs/issues/2665"})]}),"\n",(0,s.jsx)(n.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/guillaume-gonnaud/",children:"https://www.linkedin.com/in/guillaume-gonnaud/"}),"\n",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/edouardbessire/",children:"https://www.linkedin.com/in/edouardbessire/"})]}),"\n",(0,s.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Total Estimated Duration:"})," Less than 7 weeks"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Full-time equivalent (FTE):"})," 2 FTE"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Total Work Days:"})," 66 days"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Cost per work day:"})," \xa3300"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Total Costs:"})," \xa319,800 (26862.66 USD/DAI)"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-1--desirable-protocol-features",children:"Milestone 1 \u2014 Desirable Protocol Features"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Estimated Duration:"})," ~2 weeks"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 2 FTE"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Work Days:"})," 21 days"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Cost per work day:"})," \xa3300"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," \xa36,300 (8558.05 USD/DAI)"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Deliverable:"})," A list of clearly defined, measurable features that the final bridges built using this vision should support, as well as how to test them using pseudocode."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"We will write up and engage with the community to determine the desirable features of a NFT migration and data exchange messaging protocol.\nSo far, we have determined that the protocol must allow for the following features:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Migrate any ERC-721 token between EVM-compatible chains"}),"\n",(0,s.jsx)(n.li,{children:"Migrate an NFT back and forth to get the original token back."}),"\n",(0,s.jsx)(n.li,{children:"Be ERC-1155 compatible"}),"\n",(0,s.jsx)(n.li,{children:"Migrate an NFT outside of an EVM universe and redeem the same token back"}),"\n",(0,s.jsx)(n.li,{children:"Migrate an NFT to an arbitrary world (as the owner of an NFT, you should be able to choose where you want the NFT to be migrated to and who will mint it i.e. the protocol is not restricted to a specific project)"}),"\n",(0,s.jsx)(n.li,{children:"Have built-in protections against \u201cbad\u201d migration by preventing migration to non-registered destination worlds."}),"\n",(0,s.jsx)(n.li,{children:"Allowing polkadot parachains to trustlessly migrate NFTs from one parachain to an another using SPREE."}),"\n",(0,s.jsx)(n.li,{children:"Perform both IOU migration (no Digital Rights Management requirement) and Full migration (which requires Digital Rights Management at the bridge level)"}),"\n",(0,s.jsx)(n.li,{children:"Migrate an NFT with either a \u2018checked\u2019 migration (need to be acknowledged by both the sender and the receiver of a token) or \u2018unchecked\u2019 migration (the token in the original world needs to first be attributed to a tokenID on the destination chain, then it is simply put in escrow with the bridge on the origin chain). NB: Checked migrations are fully trutless and decentralized and optimised for security, whilst unchecked migrations are optimised for gas costs."}),"\n",(0,s.jsxs)(n.li,{children:["Licensed under the ",(0,s.jsx)(n.a,{href:"https://unlicense.org",children:"Unlicense"})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-2--checked-migration-process",children:"Milestone 2 \u2014 Checked Migration Process"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Estimated Duration:"})," ~2 weeks"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 2"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Work Days:"})," 20 days"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Cost per work day:"})," \xa3300"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," \xa36,000 (8150.52 USD/DAI)"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Deliverable:"})," A documented step by step process that would allow a trusted relayer to perform efficient migrations of NFTs."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"We will write up the \u2018Checked Migration\u2019 process which includes a security protocol to ensure that both the sender and the receiver are satisfied with the migration outcome.\nThis is especially important if NFT's are migrating from/to a trustless universe (eg : a public decentralized blockchain) toward/from a centralized/private universe.\nThis process is NOT a fully decentralized trustless process itself in order to accomodate for a wide array of possible origin and destinations, but it does allow decentralized trustless outcomes while guaranteeing authenticity and ownership of the NFT at every step."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"A checked migration process mean there is an acknowledgment of the migration on the destination universe by the sender."}),"\n",(0,s.jsx)(n.li,{children:"A checked migration process mean there is an acknowledgment of the migration on the origin universe by the receiver"}),"\n",(0,s.jsx)(n.li,{children:"The migration is complete only once both the sender and receiver have acknowledged the migration. Before that, the migrated token cannot be used."}),"\n",(0,s.jsx)(n.li,{children:"If after a time-limit, either of those acknowledgement are missing, the migration is reverted : the original token can be withdrawn freely by the sender, and the migrated token is burned."}),"\n",(0,s.jsxs)(n.li,{children:["Checked migrations need to be possible for either EVM => EVM, ",(0,s.jsx)(n.em,{children:"=> EVM or EVM =>"})," migrations."]}),"\n",(0,s.jsx)(n.li,{children:'Checked migrations need to allow any third party to "check" the migration and publish a standardized signed message that the migration did indeed happen.'}),"\n",(0,s.jsx)(n.li,{children:"NB : This only cover the migration of NFTs to a new universe, not the redemption of the the NFT back to it's origin universe."}),"\n",(0,s.jsxs)(n.li,{children:["Licensed under the ",(0,s.jsx)(n.a,{href:"https://unlicense.org",children:"Unlicense"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"The main purpose of this migration process is for NFT publishers to allow their users to effortlessly migrate their tokens with the least amount of efforts required. NFT publishers could offer users to do the whole migration with a single gas spending approve() from an NFT owner and the rest trough meta-transactions by the publisher. The publisher would then sign the migration as properly done after having minted and transferred the token on the destination blockchain. By essence, most NFTs are not trustless assets as their publishers own real world IP rights to them, and it is hence acceptable to use said publishers as relayers. This is standardizing a process that would otherwise require the publisher to update their original NFT smart contracts or NFT owners to burn their original NFT token in order to get a new one minted on the destination universe."})}),"\n",(0,s.jsx)(n.h3,{id:"milestone-3--trustless-migration-process",children:"Milestone 3 \u2014 Trustless Migration Process"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Estimated Duration:"})," ~1 week"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 2"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Work Days:"})," 10 days"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Cost per work day:"})," \xa3300"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," \xa33,000 (4075.26 USD/DAI)"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Deliverable:"})," A documented step by step process that would allow a trust-minimized relayer to perform migrations of NFTs."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"We will write up the \u2018Trustless Migration\u2019 process which is designed to be used when the destination universe have trutsless state reading capabilities of the origin universe."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Snowfork is already building a substrate module allowing specifically for Ethereum Smart contract reading. If a Substrate-built parachain implement those reading capacities, then implementation of this process should be straightforward."}),"\n",(0,s.jsx)(n.li,{children:"In the case of EVM => EVM ERC-721 migration without trustless reading, Chainbridge already exist. However, their contracts requires administrator input for new contract registration as well as lacking features that are NFT specific, such as preventing minting technically correct but legally counterfeit tokens."}),"\n",(0,s.jsx)(n.li,{children:"NB : This only cover the migration of NFTs to a new universe, not the redemption of the the NFT back to it's origin universe."}),"\n",(0,s.jsxs)(n.li,{children:["Licensed under the ",(0,s.jsx)(n.a,{href:"https://unlicense.org",children:"Unlicense"})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-4--standard-and-documentation-for-cross-universe-migration",children:"Milestone 4 \u2014 Standard and Documentation for Cross-universe Migration"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Estimated Duration:"})," ~1 week"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 2"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Work Days:"})," 15 days"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Cost per work day:"})," \xa3300"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," \xa34,500 (6112.89 USD/DAI)"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Deliverables:"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"A generic Standard written in pseudocode including predicate and postulate for each function and events that would allow for either checked or trustless migrations to be performed for the same asset, from the same bridge : only one endpoint should be sufficient to know about all of the migrations. This standard is the most generic version and allows the most diverse universes, and henceforth is the least constrained. It will have it's own dedicated decentralized webpage explaining the standard as well as a documentation and links to both the EIP and the PSP. This decentralized webpage will also have a centralized, cached version that NFT.com will host."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"An EIP standard written in Solidity including predicate and postulate for each function and events that would allow for either checked or trustless migrations to be performed for the same asset, from the same bridge."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"A PSP standard written in ink! including predicate and postulate for each function and events that would allow a smart contract for either checked or trustless migrations to be performed for the same asset, from the same bridge. This would allow third parties to integrate an NFT bridge on any Smart contract supporting parachain, even if said parachain does not explicitely support a trustless communication channel with other parachains at the substrate level. As a separate module of this PSP we will also provide a standard for parachain NFT migrations using SPREE provided that both parachains implement this standard."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Those standards must allow an EVM bridge following the EIP on ethereum mainnet/moonbeam to migrate an NFT to a WASM bridge following the PSP standard on a parachain and vice versa."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"We will write up the standard and documentation for cross-universe migration, which includes \u201cnecessary\u201d and \u201coptional\u201d data for optimization. This is a summarized write up of both the previous milestones but writen as specifications for implementations, including the predicate and postulate of each message and what they mean in term of state on the source and destination universe."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Challenge: Establishing predicate and postulate on what are the allowed pair of source/destination worlds. Those allowed pairs could be designed in any fashion, from centralized trusted to decentralized and trust minimized."}),"\n",(0,s.jsxs)(n.li,{children:["Licensed under the ",(0,s.jsx)(n.a,{href:"https://unlicense.org",children:"Unlicense"})," or when required under the license requirements of EIP and PSP."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsx)(n.p,{children:"We will implement this standard for EVM-compatible chains. Our main goal is the ability for any Ethereum mainnet NFT to be painlessly migrated to Moonbeam on the Polkadot network."}),"\n",(0,s.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsx)(n.p,{children:"This proposal is a part of the wider NFT.com venture."}),"\n",(0,s.jsxs)(n.p,{children:["Learn more about our vision for the bridge here: ",(0,s.jsx)(n.a,{href:"https://docs.google.com/document/d/1mhSKmC_4Hg7GqJuSLZk5Tu1hNjJlqo6O5TNwFx-e6vw/edit?usp=sharing",children:"link"})]})]})}function c(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>a,x:()=>o});var t=i(96540);const s={},r=t.createContext(s);function a(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/018c90df.50745081.js b/assets/js/018c90df.50745081.js deleted file mode 100644 index 5872ae666e7..00000000000 --- a/assets/js/018c90df.50745081.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[64784],{87010:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>r,default:()=>h,frontMatter:()=>l,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"applications/substrate-evm-adapter","title":"Substrate EVM Adapter","description":"- Team Name: Dastanbek Samatov","source":"@site/applications/substrate-evm-adapter.md","sourceDirName":"applications","slug":"/applications/substrate-evm-adapter","permalink":"/applications/substrate-evm-adapter","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/substrate-evm-adapter.md","tags":[],"version":"current","frontMatter":{}}');var n=i(74848),a=i(28453);const l={},r="Substrate EVM Adapter",o={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Rationale",id:"rationale",level:4},{value:"Substrate ETH-RPC Adapter",id:"substrate-eth-rpc-adapter",level:4},{value:"Substrate EVM Adapter Pallet",id:"substrate-evm-adapter-pallet",level:4},{value:"Full flow",id:"full-flow",level:4},{value:"Limitations and challenges",id:"limitations-and-challenges",level:4},{value:"Inspirations",id:"inspirations",level:4},{value:"Tech stack",id:"tech-stack",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles (if available)",id:"team-linkedin-profiles-if-available",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 ETH RPC Adapter",id:"milestone-1--eth-rpc-adapter",level:3},{value:"Milestone 2 \u2014 EVM Adapter Pallet",id:"milestone-2--evm-adapter-pallet",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information",id:"additional-information",level:2}];function c(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"substrate-evm-adapter",children:"Substrate EVM Adapter"})}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Team Name:"})," Dastanbek Samatov"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Payment Details:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"DOT"}),": 16FqwPZ8GRC5U5D4Fu7W33nA55ZXzXGWHwmbnE1eT6pxuqcT"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Payment"}),": 16FqwPZ8GRC5U5D4Fu7W33nA55ZXzXGWHwmbnE1eT6pxuqcT (USDT)"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsxs)(t.strong,{children:[(0,n.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 2"]}),"\n"]}),"\n",(0,n.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,n.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,n.jsx)(t.p,{children:"This project aims to present an alternative approach to EVM compatibility for Substrate chains. The main goals are to improve developer experience and introduce an approach that requires the least amount of changes to the runtime and client. It does so by leveraging the best parts of multiple existing compatibility solutions and other awesome ecosystem tools."}),"\n",(0,n.jsx)(t.p,{children:"The main components of the project are:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"a standalone ETH RPC adapter that will enable a partial EVM compatibility for Substrate chains"}),"\n",(0,n.jsx)(t.li,{children:"a pallet responsible for bridging ETH RPC adapter with the Substrate chain"}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,n.jsx)(t.p,{children:"As stated above, main requirements are:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"provide opt-in partial or full EVM compatibility for Substrate chains"}),"\n",(0,n.jsx)(t.li,{children:"minimal changes to the runtime and client"}),"\n"]}),"\n",(0,n.jsx)(t.h4,{id:"rationale",children:"Rationale"}),"\n",(0,n.jsx)(t.p,{children:"In its essence, EVM compatibility means that a Substrate chain can be interacted with using Ethereum tools and workflows. It is obvious that EVM compatibility solutions are important for the ecosystem to attract more developers and users. Therefore, it is imperative to provide as many solutions as possible to cater to different needs and requirements."}),"\n",(0,n.jsxs)(t.p,{children:["Imagine being able to read the state of any Substrate chain using web3.js without making fundamental changes to the chain or tools. And what if we could extend this to ",(0,n.jsx)(t.em,{children:"almost"})," full EVM compatibility (read and write) by adding a single pallet to the chain? This is basically what we aim to achieve with this project."]}),"\n",(0,n.jsx)(t.h4,{id:"substrate-eth-rpc-adapter",children:"Substrate ETH-RPC Adapter"}),"\n",(0,n.jsxs)(t.p,{children:["The cornerstone of this project is an adapter service that emulates an Ethereum RPC. It translates any incoming Ethereum JSON-RPC calls into their Substrate equivalent RPC calls in real-time, basically forwarding it to the local ",(0,n.jsx)(t.code,{children:"smoldot"})," light client or remote Substrate RPC node. From the perspective of external tools, the adapter will look like a regular ETH RPC node. Adapter will implement the necessary mapping logic for the most essential Ethereum RPC calls like ",(0,n.jsx)(t.code,{children:"eth_getBlockByNumber"})," and ",(0,n.jsx)(t.code,{children:"eth_getStorageAt"}),", etc. For the sake of simplicity each pallet will be given a unique, deterministic address, much similar to precompiles in Frontier (probably a name of the pallet in byte form). However, unlike Frontier, there will be no need to write custom precompile for each pallet or embed an ETH RPC to Substrate client."]}),"\n",(0,n.jsx)(t.p,{children:"By default, the adapter runs an embedded light client to ensure fast access to the chain state. By going this route, we will avoid the need to run a full node or make any changes to the client itself. It will be possible to not run the light client and connect to a remote Substrate node instead, but users will have to be aware of latency issues and well-known security risks of trusting a remote node."}),"\n",(0,n.jsx)(t.p,{children:"The list of supported RPC calls will be limited to the most essential ones, to keep the adapter lightweight and generic:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"eth_chainId"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"eth_getBalance"})}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"eth_getCode"})," - some dummy code for all pallets"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"eth_call"})," (stateless, could be forwarded to either storage query or runtime API calls)"]}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"eth_blockNumber"})}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"eth_getBlock*"})," (by number/hash, receipts, transaction count)"]}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"eth_gasPrice"})}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"eth_getTransaction*"})," (by hash, by block, count, receipt)"]}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"eth_getLogs"})}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"eth_getStorageAt"})," - similar to ",(0,n.jsx)(t.code,{children:"eth_call"}),", but more generic and operates with raw keys"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"eth_subscribe"})," - only ",(0,n.jsx)(t.code,{children:"newHeads"})," and ",(0,n.jsx)(t.code,{children:"logs"})," for now"]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["There has been some talk about reading the chain state of Substrate node using tools like Metamask or ",(0,n.jsx)(t.code,{children:"web3.js"}),". And this is exactly what we will achieve by implementing this adapter. For tools that only need read access, be it for data analysis, explorers or other purposes, this module will be sufficient. Therefore, accomplishment of at least this part of the project will already meet the demands of some users."]}),"\n",(0,n.jsx)(t.h4,{id:"substrate-evm-adapter-pallet",children:"Substrate EVM Adapter Pallet"}),"\n",(0,n.jsxs)(t.p,{children:["The second part of the project is to provide both the read and write access to the chain. Unfortunately, due to some fundamental differences between Ethereum and Substrate chains, it is not possible to achieve this out of the box. This is why it is necessary to have at least ",(0,n.jsx)(t.code,{children:"pallet-evm"})," to provide and some other module that verifies ECDSA signatures and has some account mapping logic. This pallet will loosely couple with ",(0,n.jsx)(t.code,{children:"pallet-evm"})," to access the EVM runner, executing bytecode if necessary. And will utilise ",(0,n.jsx)(t.code,{children:"frontier"}),"'s ",(0,n.jsx)(t.code,{children:"dispatch"})," ",(0,n.jsx)(t.a,{href:"https://github.com/polkadot-evm/frontier/tree/master/frame/evm/precompile/dispatch",children:"precompile"})," to dispatch FRAME calls originating from the ETH RPC adapter. This part of the project can be opt-in feature that can be added to the runtime if close to full EVM compatibility is desired."]}),"\n",(0,n.jsxs)(t.p,{children:["For account mapping, we will follow the ",(0,n.jsx)(t.a,{href:"https://forum.polkadot.network/t/wrappedevm-eth-rpc-compatibility-layer/2775/6",children:"approach"})," of ",(0,n.jsx)(t.code,{children:"Unique"}),": hashing ",(0,n.jsx)(t.code,{children:"AccountId20"})," to get ",(0,n.jsx)(t.code,{children:"AccountId32"})," and truncating ",(0,n.jsx)(t.code,{children:"AccountId32"})," to get ",(0,n.jsx)(t.code,{children:"AccountId20"}),". This way, users will have to first deposit to their corresponding, deterministic Substrate style accounts before interacting with the chain with their EVM style account."]}),"\n",(0,n.jsx)(t.p,{children:"This pallet will complete the full ETH RPC compatibility by enabling the write access to the chain. In other words, at least these RPC calls will be supported by ETH-RPC adapter:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"eth_sendTransaction"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"eth_sendRawTransaction"})}),"\n"]}),"\n",(0,n.jsx)(t.h4,{id:"full-flow",children:"Full flow"}),"\n",(0,n.jsx)(t.p,{children:"The following diagram is a high-level illustration of how the project will work:"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:"https://github.com/dastansam/Grants-Program/assets/22231829/4a1be51b-17b0-43a4-b42f-6f5694d3911f",alt:"Untitled-2024-03-27-2305"})}),"\n",(0,n.jsx)(t.h4,{id:"limitations-and-challenges",children:"Limitations and challenges"}),"\n",(0,n.jsxs)(t.p,{children:['Some limitations arise from the fact that Substrate and Ethereum are fundamentally different. For example, transaction hashes are not unique in Substrate, dust accounts issue is handled in Substrate, but not in Ethereum, etc. Therefore, it should be noted that it is extremely difficult to provide "full" EVM compatibility. And during the course of the development, there will certainly be some decisions that won\'t align with true EVM experience. However, the goal is to provide a ',(0,n.jsx)(t.em,{children:"good enough"})," compatibility that will be agnostic to the chain and tools used. Most importantly, in some cases it would be even better to default to Substrate-like behaviour, since Substrate was, in some sense, originally designed to fix some of the limitations that Ethereum still has."]}),"\n",(0,n.jsx)(t.h4,{id:"inspirations",children:"Inspirations"}),"\n",(0,n.jsxs)(t.p,{children:["In general, it was inspired by working with the current EVM compatibility solutions and the need to provide a more lightweight and flexible solution. But there are some notable ",(0,n.jsx)(t.a,{href:"https://forum.polkadot.network/t/wrappedevm-eth-rpc-compatibility-layer/2775",children:"discussions"})," and ",(0,n.jsx)(t.a,{href:"https://substrate.stackexchange.com/questions/8983/read-pallet-state-using-metamask",children:"questions"})," in the community that also gave some validations and inspirations to this project."]}),"\n",(0,n.jsx)(t.h4,{id:"tech-stack",children:"Tech stack"}),"\n",(0,n.jsx)(t.p,{children:"The project will be implemented completly in Rust. The ETH RPC adapter will be a standalone service that will be run as a separate process. The EVM adapter pallet will be a part of the Substrate runtime. There will be some other primitives and components included in the runtime that will make it easier to interact with the pallet."}),"\n",(0,n.jsxs)(t.p,{children:["DApp demo is a simple web application that will interact with the Substrate chain using the ETH RPC adapter. It will be written in JavaScript and will use ",(0,n.jsx)(t.code,{children:"web3.js"})," to interact with the adapter."]}),"\n",(0,n.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,n.jsx)(t.p,{children:"These are the existing solutions that aim to provide EVM compatibility for Substrate chains. The most notable ones are:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Frontier"}),": Offers full EVM compatibility by incorporating an EVM execution engine into the runtime and EVM RPC in the client. It demands significant changes to both the node and runtime, potentially introducing complexity and performance overhead."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:(0,n.jsx)(t.code,{children:"ethink!"})}),": Aims to add EVM ",(0,n.jsx)(t.a,{href:"https://sasha.ink/proposals/ethink-01/#stage-0-proof-of-concept--done",children:"compatibility"})," to ",(0,n.jsx)(t.code,{children:"ink!"})," smart contracts. While innovative, it mainly focuses on a specific use case and does not provide a comprehensive solution for general EVM compatibility. It also requires embedding ETH RPC to the client. However, it is only similar to our project in how it uses a custom pallet as a middleman between the bytecode execution engine and EVM calls."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Polkamask"}),": A MetaMask snap designed to connect MetaMask with Substrate chains. Though it provides an easy-to-use solution for end-users, it relies on trusting an external plugin, raising concerns about security and trustlessness. It also doesn't provide a way to interact with the chain state outside of MetaMask."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Acala EVM+"}),": An EVM compatibility solution for Acala Network. It is important to note that, among other solutions, this one is the closest to what we aim to achieve, however, it is tailored to Acala Network and requires some changes to existing developer tools (custom ",(0,n.jsx)(t.code,{children:"bodhi.js"})," instead of ",(0,n.jsx)(t.code,{children:"web3.js"}),") to work. Moreover, it uses modified ",(0,n.jsx)(t.code,{children:"pallet-evm"}),", rpc adapter only works with remote Acala node, and it has some additional runtime APIs, etc."]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["Our solution aims to use the best parts of these existing solutions while attempting to address some of their limitations. By providing a standalone ETH RPC adapter and an EVM adapter pallet, we offer a flexible and lightweight approach to EVM compatibility that can be easily integrated into any Substrate chain without imposing heavy requirements on the client and the runtime. By embedding the light client, we achieve faster and more reliable access to blockchain data, reducing latency and avoiding dependencies on external nodes. With a custom pallet that is loosely coupled with ",(0,n.jsx)(t.code,{children:"pallet-evm"}),", we ensure keypair compatibility and a way to dispatch FRAME calls from the ETH RPC adapter. And most importantly, the goal is to be as generic as possible, so that it can be easily integrated into any Substrate chain."]}),"\n",(0,n.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,n.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Dastanbek Samatov"}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Contact Name:"})," Dastanbek Samatov"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Contact Email:"})," ",(0,n.jsx)(t.a,{href:"mailto:dastanbeksamatov@gmail.com",children:"dastanbeksamatov@gmail.com"})]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Website:"})," ",(0,n.jsx)(t.a,{href:"https://dastansam.github.io/",children:"https://dastansam.github.io/"})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Registered Address:"})," No registered entity"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Registered Legal Entity:"})," No registered entity"]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,n.jsxs)(t.p,{children:["Dastanbek Samatov is a Rust Engineer with extensive experience in Substrate. For the past 3 years he has been working as a Protocol Engineer in various projects (all EVM compatible) in the Polkadot ecosystem. He periodically contributes to ",(0,n.jsx)(t.code,{children:"polkadot-sdk"}),", active in the community and has contributed to several Web3 Foundation grants before. Some relevent links to projects and contributions:"]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"Framework for Substrate Runtimes in AssemblyScript"})," - ",(0,n.jsx)(t.a,{href:"https://github.com/LimeChain/subsembly",children:"https://github.com/LimeChain/subsembly"})]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"Hyperfridge"})," - ",(0,n.jsx)(t.a,{href:"https://github.com/element36-io/ocw-ebics",children:"https://github.com/element36-io/ocw-ebics"})]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"ISO-8583 POC"})," - ",(0,n.jsx)(t.a,{href:"https://github.com/subclone/iso8583-chain",children:"https://github.com/subclone/iso8583-chain"})]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"polkadot-sdk"})," - ",(0,n.jsx)(t.a,{href:"https://github.com/paritytech/polkadot-sdk/pulls/dastansam",children:"https://github.com/paritytech/polkadot-sdk/pulls/dastansam"})]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"Substrate StackExchange"})," - ",(0,n.jsx)(t.a,{href:"https://substrate.stackexchange.com/users/2005/dastansam",children:"https://substrate.stackexchange.com/users/2005/dastansam"})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/subclone/subeth",children:"https://github.com/subclone/subeth"})}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Team members:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/dastansam",children:"https://github.com/dastansam"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/dastanbeksamatov",children:"https://github.com/dastanbeksamatov"})}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"team-linkedin-profiles-if-available",children:"Team LinkedIn Profiles (if available)"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://linkedin.com/in/dastanbek-samatov",children:"https://linkedin.com/in/dastanbek-samatov"})}),"\n"]}),"\n",(0,n.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,n.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Total Estimated Duration:"})," 15 weeks"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Full-Time Equivalent (FTE):"})," 1 FTE"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Total Costs:"})," 30,000 USDT"]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"milestone-1--eth-rpc-adapter",children:"Milestone 1 \u2014 ETH RPC Adapter"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Estimated duration:"})," 6 weeks"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"FTE:"})," 1"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Costs:"})," 12,000 USD"]}),"\n"]}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,n.jsx)(t.th,{children:"Deliverable"}),(0,n.jsx)(t.th,{children:"Specification"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:(0,n.jsx)(t.strong,{children:"0a."})}),(0,n.jsx)(t.td,{children:"License"}),(0,n.jsx)(t.td,{children:"MIT"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:(0,n.jsx)(t.strong,{children:"0b."})}),(0,n.jsx)(t.td,{children:"Documentation"}),(0,n.jsxs)(t.td,{children:["We will provide both ",(0,n.jsx)(t.strong,{children:"inline documentation"})," of the code and a basic ",(0,n.jsx)(t.strong,{children:"tutorial"})," that explains how a user can (for example) spin up the adapter and connect it to the familiar developer tools."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:(0,n.jsx)(t.strong,{children:"0c."})}),(0,n.jsx)(t.td,{children:"Testing and Testing Guide"}),(0,n.jsx)(t.td,{children:"Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:(0,n.jsx)(t.strong,{children:"0d."})}),(0,n.jsx)(t.td,{children:"Docker"}),(0,n.jsx)(t.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"1."}),(0,n.jsx)(t.td,{children:"ETH-RPC Adapter"}),(0,n.jsxs)(t.td,{children:["We will create a generic ETH-RPC Adapter service for Substrate chains. It will support the most essential ETH RPC calls to make it work with the existing tools. Main goals here will be ability to connect to Metamask, ",(0,n.jsx)(t.code,{children:"web3.js"}),", read Substrate chain's pallets' state and support subscriptions. Adapter will have option of running local ",(0,n.jsx)(t.code,{children:"smoldot"})," instance or connecting to remote RPC node."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"2."}),(0,n.jsx)(t.td,{children:"Deno module"}),(0,n.jsx)(t.td,{children:"We will create a Deno module that can connect to Substrate chain as an ETH-RPC adapter + light client."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,n.jsx)(t.td,{children:"Javascript package"}),(0,n.jsx)(t.td,{children:"We will provide a javascript package that can connect to Substrate chain as an ETH-RPC adapter + light client."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"4."}),(0,n.jsx)(t.td,{children:"End-to-end tests"}),(0,n.jsx)(t.td,{children:"We will provide comprehensive end-to-end tests for the adapter."})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"milestone-2--evm-adapter-pallet",children:"Milestone 2 \u2014 EVM Adapter Pallet"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Estimated duration:"})," 9 weeks"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"FTE:"})," 1"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Costs:"})," 18,000 USD"]}),"\n"]}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,n.jsx)(t.th,{children:"Deliverable"}),(0,n.jsx)(t.th,{children:"Specification"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:(0,n.jsx)(t.strong,{children:"0a."})}),(0,n.jsx)(t.td,{children:"License"}),(0,n.jsx)(t.td,{children:"MIT"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:(0,n.jsx)(t.strong,{children:"0b."})}),(0,n.jsx)(t.td,{children:"Documentation"}),(0,n.jsxs)(t.td,{children:["We will provide both ",(0,n.jsx)(t.strong,{children:"inline documentation"})," of the code and a basic ",(0,n.jsx)(t.strong,{children:"tutorial"})," that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:(0,n.jsx)(t.strong,{children:"0c."})}),(0,n.jsx)(t.td,{children:"Testing and Testing Guide"}),(0,n.jsx)(t.td,{children:"Core functions will be fully covered by comprehensive unit and integration tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:(0,n.jsx)(t.strong,{children:"0d."})}),(0,n.jsx)(t.td,{children:"Docker"}),(0,n.jsx)(t.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:(0,n.jsx)(t.strong,{children:"0e."})}),(0,n.jsx)(t.td,{children:"Article"}),(0,n.jsx)(t.td,{children:"I will publish an article that explains the complete lifecycle and future plans of the project"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"1."}),(0,n.jsx)(t.td,{children:"EVM Adapter Pallet"}),(0,n.jsxs)(t.td,{children:["We will create a pallet that will be responsible for bridging the gap between the ETH RPC adapter and the Substrate chain. It will have the ability to dispatch FRAME calls, opt-in possibility to execute EVM bytecode, and handle account mapping. Another main responsibility of the pallet will be handling signature verification. Some parts of this pallet can be inspired from ",(0,n.jsx)(t.code,{children:"frontier"}),"'s pallet ",(0,n.jsx)(t.code,{children:"pallet-ethereum"})," but needs refinement and some modification."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"2."}),(0,n.jsx)(t.td,{children:"Substrate Node"}),(0,n.jsxs)(t.td,{children:["We will create a Substrate node that has two runtimes: with and without the ",(0,n.jsx)(t.code,{children:"pallet-evm"}),". Both will contain ",(0,n.jsx)(t.code,{children:"evm-adapter"})," pallet, but only the one with ",(0,n.jsx)(t.code,{children:"pallet-evm"})," will be able to execute EVM bytecode. This will demonstrate two main use-cases of this pallet."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,n.jsx)(t.td,{children:"MVP Demo DApp"}),(0,n.jsx)(t.td,{children:"We will provide a small EVM DApp that demonstrates the integration of the pallet and RPC adapter. This will be a basic web page that can sign and send custom extrinsic with Metamask, read the state of Substrate pallets."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"4."}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"docker-compose"})}),(0,n.jsxs)(t.td,{children:["We will provide a ",(0,n.jsx)(t.code,{children:"docker-compose"})," file that will run the whole project."]})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,n.jsxs)(t.p,{children:["In the future, we plan to explore if we can make the adapter pallet optional and have the account mapping and transaction converting logic completely in the RPC adapter. This will allow us to have even more lightweight and generic solution, however could present more challenges. We will explore the ways of securely sharing the same private key for two chains without sacrificing any benefits that the ",(0,n.jsx)(t.code,{children:"evm-adapter"})," pallet offers, but this needs time for research."]}),"\n",(0,n.jsx)(t.h2,{id:"additional-information",children:"Additional Information"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"How did you hear about the Grants Program?"})}),"\n",(0,n.jsx)(t.p,{children:"I have previously worked on several grant projects (listed above) and generally have been part of Polkadot ecosystem for the last 4 years."})]})}function h(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},28453:(e,t,i)=>{i.d(t,{R:()=>l,x:()=>r});var s=i(96540);const n={},a=s.createContext(n);function l(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:l(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/018c90df.c6261266.js b/assets/js/018c90df.c6261266.js new file mode 100644 index 00000000000..9be5a676073 --- /dev/null +++ b/assets/js/018c90df.c6261266.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[64784],{33386:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>r,default:()=>h,frontMatter:()=>l,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"applications/substrate-evm-adapter","title":"Substrate EVM Adapter","description":"- Team Name: Dastanbek Samatov","source":"@site/applications/substrate-evm-adapter.md","sourceDirName":"applications","slug":"/applications/substrate-evm-adapter","permalink":"/applications/substrate-evm-adapter","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/substrate-evm-adapter.md","tags":[],"version":"current","frontMatter":{}}');var n=i(74848),a=i(28453);const l={},r="Substrate EVM Adapter",o={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Rationale",id:"rationale",level:4},{value:"Substrate ETH-RPC Adapter",id:"substrate-eth-rpc-adapter",level:4},{value:"Substrate EVM Adapter Pallet",id:"substrate-evm-adapter-pallet",level:4},{value:"Full flow",id:"full-flow",level:4},{value:"Limitations and challenges",id:"limitations-and-challenges",level:4},{value:"Inspirations",id:"inspirations",level:4},{value:"Tech stack",id:"tech-stack",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles (if available)",id:"team-linkedin-profiles-if-available",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 ETH RPC Adapter",id:"milestone-1--eth-rpc-adapter",level:3},{value:"Milestone 2 \u2014 EVM Adapter Pallet",id:"milestone-2--evm-adapter-pallet",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information",id:"additional-information",level:2}];function c(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"substrate-evm-adapter",children:"Substrate EVM Adapter"})}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Team Name:"})," Dastanbek Samatov"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Payment Details:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"DOT"}),": 16FqwPZ8GRC5U5D4Fu7W33nA55ZXzXGWHwmbnE1eT6pxuqcT"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Payment"}),": 16FqwPZ8GRC5U5D4Fu7W33nA55ZXzXGWHwmbnE1eT6pxuqcT (USDT)"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsxs)(t.strong,{children:[(0,n.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 2"]}),"\n"]}),"\n",(0,n.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,n.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,n.jsx)(t.p,{children:"This project aims to present an alternative approach to EVM compatibility for Substrate chains. The main goals are to improve developer experience and introduce an approach that requires the least amount of changes to the runtime and client. It does so by leveraging the best parts of multiple existing compatibility solutions and other awesome ecosystem tools."}),"\n",(0,n.jsx)(t.p,{children:"The main components of the project are:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"a standalone ETH RPC adapter that will enable a partial EVM compatibility for Substrate chains"}),"\n",(0,n.jsx)(t.li,{children:"a pallet responsible for bridging ETH RPC adapter with the Substrate chain"}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,n.jsx)(t.p,{children:"As stated above, main requirements are:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"provide opt-in partial or full EVM compatibility for Substrate chains"}),"\n",(0,n.jsx)(t.li,{children:"minimal changes to the runtime and client"}),"\n"]}),"\n",(0,n.jsx)(t.h4,{id:"rationale",children:"Rationale"}),"\n",(0,n.jsx)(t.p,{children:"In its essence, EVM compatibility means that a Substrate chain can be interacted with using Ethereum tools and workflows. It is obvious that EVM compatibility solutions are important for the ecosystem to attract more developers and users. Therefore, it is imperative to provide as many solutions as possible to cater to different needs and requirements."}),"\n",(0,n.jsxs)(t.p,{children:["Imagine being able to read the state of any Substrate chain using web3.js without making fundamental changes to the chain or tools. And what if we could extend this to ",(0,n.jsx)(t.em,{children:"almost"})," full EVM compatibility (read and write) by adding a single pallet to the chain? This is basically what we aim to achieve with this project."]}),"\n",(0,n.jsx)(t.h4,{id:"substrate-eth-rpc-adapter",children:"Substrate ETH-RPC Adapter"}),"\n",(0,n.jsxs)(t.p,{children:["The cornerstone of this project is an adapter service that emulates an Ethereum RPC. It translates any incoming Ethereum JSON-RPC calls into their Substrate equivalent RPC calls in real-time, basically forwarding it to the local ",(0,n.jsx)(t.code,{children:"smoldot"})," light client or remote Substrate RPC node. From the perspective of external tools, the adapter will look like a regular ETH RPC node. Adapter will implement the necessary mapping logic for the most essential Ethereum RPC calls like ",(0,n.jsx)(t.code,{children:"eth_getBlockByNumber"})," and ",(0,n.jsx)(t.code,{children:"eth_getStorageAt"}),", etc. For the sake of simplicity each pallet will be given a unique, deterministic address, much similar to precompiles in Frontier (probably a name of the pallet in byte form). However, unlike Frontier, there will be no need to write custom precompile for each pallet or embed an ETH RPC to Substrate client."]}),"\n",(0,n.jsx)(t.p,{children:"By default, the adapter runs an embedded light client to ensure fast access to the chain state. By going this route, we will avoid the need to run a full node or make any changes to the client itself. It will be possible to not run the light client and connect to a remote Substrate node instead, but users will have to be aware of latency issues and well-known security risks of trusting a remote node."}),"\n",(0,n.jsx)(t.p,{children:"The list of supported RPC calls will be limited to the most essential ones, to keep the adapter lightweight and generic:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"eth_chainId"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"eth_getBalance"})}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"eth_getCode"})," - some dummy code for all pallets"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"eth_call"})," (stateless, could be forwarded to either storage query or runtime API calls)"]}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"eth_blockNumber"})}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"eth_getBlock*"})," (by number/hash, receipts, transaction count)"]}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"eth_gasPrice"})}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"eth_getTransaction*"})," (by hash, by block, count, receipt)"]}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"eth_getLogs"})}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"eth_getStorageAt"})," - similar to ",(0,n.jsx)(t.code,{children:"eth_call"}),", but more generic and operates with raw keys"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"eth_subscribe"})," - only ",(0,n.jsx)(t.code,{children:"newHeads"})," and ",(0,n.jsx)(t.code,{children:"logs"})," for now"]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["There has been some talk about reading the chain state of Substrate node using tools like Metamask or ",(0,n.jsx)(t.code,{children:"web3.js"}),". And this is exactly what we will achieve by implementing this adapter. For tools that only need read access, be it for data analysis, explorers or other purposes, this module will be sufficient. Therefore, accomplishment of at least this part of the project will already meet the demands of some users."]}),"\n",(0,n.jsx)(t.h4,{id:"substrate-evm-adapter-pallet",children:"Substrate EVM Adapter Pallet"}),"\n",(0,n.jsxs)(t.p,{children:["The second part of the project is to provide both the read and write access to the chain. Unfortunately, due to some fundamental differences between Ethereum and Substrate chains, it is not possible to achieve this out of the box. This is why it is necessary to have at least ",(0,n.jsx)(t.code,{children:"pallet-evm"})," to provide and some other module that verifies ECDSA signatures and has some account mapping logic. This pallet will loosely couple with ",(0,n.jsx)(t.code,{children:"pallet-evm"})," to access the EVM runner, executing bytecode if necessary. And will utilise ",(0,n.jsx)(t.code,{children:"frontier"}),"'s ",(0,n.jsx)(t.code,{children:"dispatch"})," ",(0,n.jsx)(t.a,{href:"https://github.com/polkadot-evm/frontier/tree/master/frame/evm/precompile/dispatch",children:"precompile"})," to dispatch FRAME calls originating from the ETH RPC adapter. This part of the project can be opt-in feature that can be added to the runtime if close to full EVM compatibility is desired."]}),"\n",(0,n.jsxs)(t.p,{children:["For account mapping, we will follow the ",(0,n.jsx)(t.a,{href:"https://forum.polkadot.network/t/wrappedevm-eth-rpc-compatibility-layer/2775/6",children:"approach"})," of ",(0,n.jsx)(t.code,{children:"Unique"}),": hashing ",(0,n.jsx)(t.code,{children:"AccountId20"})," to get ",(0,n.jsx)(t.code,{children:"AccountId32"})," and truncating ",(0,n.jsx)(t.code,{children:"AccountId32"})," to get ",(0,n.jsx)(t.code,{children:"AccountId20"}),". This way, users will have to first deposit to their corresponding, deterministic Substrate style accounts before interacting with the chain with their EVM style account."]}),"\n",(0,n.jsx)(t.p,{children:"This pallet will complete the full ETH RPC compatibility by enabling the write access to the chain. In other words, at least these RPC calls will be supported by ETH-RPC adapter:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"eth_sendTransaction"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"eth_sendRawTransaction"})}),"\n"]}),"\n",(0,n.jsx)(t.h4,{id:"full-flow",children:"Full flow"}),"\n",(0,n.jsx)(t.p,{children:"The following diagram is a high-level illustration of how the project will work:"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:"https://github.com/dastansam/Grants-Program/assets/22231829/4a1be51b-17b0-43a4-b42f-6f5694d3911f",alt:"Untitled-2024-03-27-2305"})}),"\n",(0,n.jsx)(t.h4,{id:"limitations-and-challenges",children:"Limitations and challenges"}),"\n",(0,n.jsxs)(t.p,{children:['Some limitations arise from the fact that Substrate and Ethereum are fundamentally different. For example, transaction hashes are not unique in Substrate, dust accounts issue is handled in Substrate, but not in Ethereum, etc. Therefore, it should be noted that it is extremely difficult to provide "full" EVM compatibility. And during the course of the development, there will certainly be some decisions that won\'t align with true EVM experience. However, the goal is to provide a ',(0,n.jsx)(t.em,{children:"good enough"})," compatibility that will be agnostic to the chain and tools used. Most importantly, in some cases it would be even better to default to Substrate-like behaviour, since Substrate was, in some sense, originally designed to fix some of the limitations that Ethereum still has."]}),"\n",(0,n.jsx)(t.h4,{id:"inspirations",children:"Inspirations"}),"\n",(0,n.jsxs)(t.p,{children:["In general, it was inspired by working with the current EVM compatibility solutions and the need to provide a more lightweight and flexible solution. But there are some notable ",(0,n.jsx)(t.a,{href:"https://forum.polkadot.network/t/wrappedevm-eth-rpc-compatibility-layer/2775",children:"discussions"})," and ",(0,n.jsx)(t.a,{href:"https://substrate.stackexchange.com/questions/8983/read-pallet-state-using-metamask",children:"questions"})," in the community that also gave some validations and inspirations to this project."]}),"\n",(0,n.jsx)(t.h4,{id:"tech-stack",children:"Tech stack"}),"\n",(0,n.jsx)(t.p,{children:"The project will be implemented completly in Rust. The ETH RPC adapter will be a standalone service that will be run as a separate process. The EVM adapter pallet will be a part of the Substrate runtime. There will be some other primitives and components included in the runtime that will make it easier to interact with the pallet."}),"\n",(0,n.jsxs)(t.p,{children:["DApp demo is a simple web application that will interact with the Substrate chain using the ETH RPC adapter. It will be written in JavaScript and will use ",(0,n.jsx)(t.code,{children:"web3.js"})," to interact with the adapter."]}),"\n",(0,n.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,n.jsx)(t.p,{children:"These are the existing solutions that aim to provide EVM compatibility for Substrate chains. The most notable ones are:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Frontier"}),": Offers full EVM compatibility by incorporating an EVM execution engine into the runtime and EVM RPC in the client. It demands significant changes to both the node and runtime, potentially introducing complexity and performance overhead."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:(0,n.jsx)(t.code,{children:"ethink!"})}),": Aims to add EVM ",(0,n.jsx)(t.a,{href:"https://sasha.ink/proposals/ethink-01/#stage-0-proof-of-concept--done",children:"compatibility"})," to ",(0,n.jsx)(t.code,{children:"ink!"})," smart contracts. While innovative, it mainly focuses on a specific use case and does not provide a comprehensive solution for general EVM compatibility. It also requires embedding ETH RPC to the client. However, it is only similar to our project in how it uses a custom pallet as a middleman between the bytecode execution engine and EVM calls."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Polkamask"}),": A MetaMask snap designed to connect MetaMask with Substrate chains. Though it provides an easy-to-use solution for end-users, it relies on trusting an external plugin, raising concerns about security and trustlessness. It also doesn't provide a way to interact with the chain state outside of MetaMask."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Acala EVM+"}),": An EVM compatibility solution for Acala Network. It is important to note that, among other solutions, this one is the closest to what we aim to achieve, however, it is tailored to Acala Network and requires some changes to existing developer tools (custom ",(0,n.jsx)(t.code,{children:"bodhi.js"})," instead of ",(0,n.jsx)(t.code,{children:"web3.js"}),") to work. Moreover, it uses modified ",(0,n.jsx)(t.code,{children:"pallet-evm"}),", rpc adapter only works with remote Acala node, and it has some additional runtime APIs, etc."]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["Our solution aims to use the best parts of these existing solutions while attempting to address some of their limitations. By providing a standalone ETH RPC adapter and an EVM adapter pallet, we offer a flexible and lightweight approach to EVM compatibility that can be easily integrated into any Substrate chain without imposing heavy requirements on the client and the runtime. By embedding the light client, we achieve faster and more reliable access to blockchain data, reducing latency and avoiding dependencies on external nodes. With a custom pallet that is loosely coupled with ",(0,n.jsx)(t.code,{children:"pallet-evm"}),", we ensure keypair compatibility and a way to dispatch FRAME calls from the ETH RPC adapter. And most importantly, the goal is to be as generic as possible, so that it can be easily integrated into any Substrate chain."]}),"\n",(0,n.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,n.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Dastanbek Samatov"}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Contact Name:"})," Dastanbek Samatov"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Contact Email:"})," ",(0,n.jsx)(t.a,{href:"mailto:dastanbeksamatov@gmail.com",children:"dastanbeksamatov@gmail.com"})]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Website:"})," ",(0,n.jsx)(t.a,{href:"https://dastansam.github.io/",children:"https://dastansam.github.io/"})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Registered Address:"})," No registered entity"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Registered Legal Entity:"})," No registered entity"]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,n.jsxs)(t.p,{children:["Dastanbek Samatov is a Rust Engineer with extensive experience in Substrate. For the past 3 years he has been working as a Protocol Engineer in various projects (all EVM compatible) in the Polkadot ecosystem. He periodically contributes to ",(0,n.jsx)(t.code,{children:"polkadot-sdk"}),", active in the community and has contributed to several Web3 Foundation grants before. Some relevent links to projects and contributions:"]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"Framework for Substrate Runtimes in AssemblyScript"})," - ",(0,n.jsx)(t.a,{href:"https://github.com/LimeChain/subsembly",children:"https://github.com/LimeChain/subsembly"})]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"Hyperfridge"})," - ",(0,n.jsx)(t.a,{href:"https://github.com/element36-io/ocw-ebics",children:"https://github.com/element36-io/ocw-ebics"})]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"ISO-8583 POC"})," - ",(0,n.jsx)(t.a,{href:"https://github.com/subclone/iso8583-chain",children:"https://github.com/subclone/iso8583-chain"})]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"polkadot-sdk"})," - ",(0,n.jsx)(t.a,{href:"https://github.com/paritytech/polkadot-sdk/pulls/dastansam",children:"https://github.com/paritytech/polkadot-sdk/pulls/dastansam"})]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"Substrate StackExchange"})," - ",(0,n.jsx)(t.a,{href:"https://substrate.stackexchange.com/users/2005/dastansam",children:"https://substrate.stackexchange.com/users/2005/dastansam"})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/subclone/subeth",children:"https://github.com/subclone/subeth"})}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Team members:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/dastansam",children:"https://github.com/dastansam"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/dastanbeksamatov",children:"https://github.com/dastanbeksamatov"})}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"team-linkedin-profiles-if-available",children:"Team LinkedIn Profiles (if available)"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://linkedin.com/in/dastanbek-samatov",children:"https://linkedin.com/in/dastanbek-samatov"})}),"\n"]}),"\n",(0,n.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,n.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Total Estimated Duration:"})," 15 weeks"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Full-Time Equivalent (FTE):"})," 1 FTE"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Total Costs:"})," 30,000 USDT"]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"milestone-1--eth-rpc-adapter",children:"Milestone 1 \u2014 ETH RPC Adapter"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Estimated duration:"})," 6 weeks"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"FTE:"})," 1"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Costs:"})," 12,000 USD"]}),"\n"]}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,n.jsx)(t.th,{children:"Deliverable"}),(0,n.jsx)(t.th,{children:"Specification"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:(0,n.jsx)(t.strong,{children:"0a."})}),(0,n.jsx)(t.td,{children:"License"}),(0,n.jsx)(t.td,{children:"MIT"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:(0,n.jsx)(t.strong,{children:"0b."})}),(0,n.jsx)(t.td,{children:"Documentation"}),(0,n.jsxs)(t.td,{children:["We will provide both ",(0,n.jsx)(t.strong,{children:"inline documentation"})," of the code and a basic ",(0,n.jsx)(t.strong,{children:"tutorial"})," that explains how a user can (for example) spin up the adapter and connect it to the familiar developer tools."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:(0,n.jsx)(t.strong,{children:"0c."})}),(0,n.jsx)(t.td,{children:"Testing and Testing Guide"}),(0,n.jsx)(t.td,{children:"Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:(0,n.jsx)(t.strong,{children:"0d."})}),(0,n.jsx)(t.td,{children:"Docker"}),(0,n.jsx)(t.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"1."}),(0,n.jsx)(t.td,{children:"ETH-RPC Adapter"}),(0,n.jsxs)(t.td,{children:["We will create a generic ETH-RPC Adapter service for Substrate chains. It will support the most essential ETH RPC calls to make it work with the existing tools. Main goals here will be ability to connect to Metamask, ",(0,n.jsx)(t.code,{children:"web3.js"}),", read Substrate chain's pallets' state and support subscriptions. Adapter will have option of running local ",(0,n.jsx)(t.code,{children:"smoldot"})," instance or connecting to remote RPC node."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"2."}),(0,n.jsx)(t.td,{children:"Deno module"}),(0,n.jsx)(t.td,{children:"We will create a Deno module that can connect to Substrate chain as an ETH-RPC adapter + light client."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,n.jsx)(t.td,{children:"Javascript package"}),(0,n.jsx)(t.td,{children:"We will provide a javascript package that can connect to Substrate chain as an ETH-RPC adapter + light client."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"4."}),(0,n.jsx)(t.td,{children:"End-to-end tests"}),(0,n.jsx)(t.td,{children:"We will provide comprehensive end-to-end tests for the adapter."})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"milestone-2--evm-adapter-pallet",children:"Milestone 2 \u2014 EVM Adapter Pallet"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Estimated duration:"})," 9 weeks"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"FTE:"})," 1"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Costs:"})," 18,000 USD"]}),"\n"]}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,n.jsx)(t.th,{children:"Deliverable"}),(0,n.jsx)(t.th,{children:"Specification"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:(0,n.jsx)(t.strong,{children:"0a."})}),(0,n.jsx)(t.td,{children:"License"}),(0,n.jsx)(t.td,{children:"MIT"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:(0,n.jsx)(t.strong,{children:"0b."})}),(0,n.jsx)(t.td,{children:"Documentation"}),(0,n.jsxs)(t.td,{children:["We will provide both ",(0,n.jsx)(t.strong,{children:"inline documentation"})," of the code and a basic ",(0,n.jsx)(t.strong,{children:"tutorial"})," that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:(0,n.jsx)(t.strong,{children:"0c."})}),(0,n.jsx)(t.td,{children:"Testing and Testing Guide"}),(0,n.jsx)(t.td,{children:"Core functions will be fully covered by comprehensive unit and integration tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:(0,n.jsx)(t.strong,{children:"0d."})}),(0,n.jsx)(t.td,{children:"Docker"}),(0,n.jsx)(t.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:(0,n.jsx)(t.strong,{children:"0e."})}),(0,n.jsx)(t.td,{children:"Article"}),(0,n.jsx)(t.td,{children:"I will publish an article that explains the complete lifecycle and future plans of the project"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"1."}),(0,n.jsx)(t.td,{children:"EVM Adapter Pallet"}),(0,n.jsxs)(t.td,{children:["We will create a pallet that will be responsible for bridging the gap between the ETH RPC adapter and the Substrate chain. It will have the ability to dispatch FRAME calls, opt-in possibility to execute EVM bytecode, and handle account mapping. Another main responsibility of the pallet will be handling signature verification. Some parts of this pallet can be inspired from ",(0,n.jsx)(t.code,{children:"frontier"}),"'s pallet ",(0,n.jsx)(t.code,{children:"pallet-ethereum"})," but needs refinement and some modification."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"2."}),(0,n.jsx)(t.td,{children:"Substrate Node"}),(0,n.jsxs)(t.td,{children:["We will create a Substrate node that has two runtimes: with and without the ",(0,n.jsx)(t.code,{children:"pallet-evm"}),". Both will contain ",(0,n.jsx)(t.code,{children:"evm-adapter"})," pallet, but only the one with ",(0,n.jsx)(t.code,{children:"pallet-evm"})," will be able to execute EVM bytecode. This will demonstrate two main use-cases of this pallet."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,n.jsx)(t.td,{children:"MVP Demo DApp"}),(0,n.jsx)(t.td,{children:"We will provide a small EVM DApp that demonstrates the integration of the pallet and RPC adapter. This will be a basic web page that can sign and send custom extrinsic with Metamask, read the state of Substrate pallets."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"4."}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"docker-compose"})}),(0,n.jsxs)(t.td,{children:["We will provide a ",(0,n.jsx)(t.code,{children:"docker-compose"})," file that will run the whole project."]})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,n.jsxs)(t.p,{children:["In the future, we plan to explore if we can make the adapter pallet optional and have the account mapping and transaction converting logic completely in the RPC adapter. This will allow us to have even more lightweight and generic solution, however could present more challenges. We will explore the ways of securely sharing the same private key for two chains without sacrificing any benefits that the ",(0,n.jsx)(t.code,{children:"evm-adapter"})," pallet offers, but this needs time for research."]}),"\n",(0,n.jsx)(t.h2,{id:"additional-information",children:"Additional Information"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"How did you hear about the Grants Program?"})}),"\n",(0,n.jsx)(t.p,{children:"I have previously worked on several grant projects (listed above) and generally have been part of Polkadot ecosystem for the last 4 years."})]})}function h(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},28453:(e,t,i)=>{i.d(t,{R:()=>l,x:()=>r});var s=i(96540);const n={},a=s.createContext(n);function l(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:l(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0211cf38.3f1b8545.js b/assets/js/0211cf38.3f1b8545.js new file mode 100644 index 00000000000..7f2a8ddd060 --- /dev/null +++ b/assets/js/0211cf38.3f1b8545.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[28529],{35545:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"applications/Syncra","title":"Syncra x Web3 Foundation","description":"- Team Name: Syncra","source":"@site/applications/Syncra.md","sourceDirName":"applications","slug":"/applications/Syncra","permalink":"/applications/Syncra","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/Syncra.md","tags":[],"version":"current","frontMatter":{}}');var s=t(74848),r=t(28453);const a={},o="Syncra x Web3 Foundation",l={},c=[{value:"Project Overview",id:"project-overview",level:2},{value:"Intro",id:"intro",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Product overview",id:"product-overview",level:3},{value:"Key Functionalities",id:"key-functionalities",level:3},{value:"Architecture and overview of common interfaces",id:"architecture-and-overview-of-common-interfaces",level:2},{value:"What is it?",id:"what-is-it",level:3},{value:"How does it work?",id:"how-does-it-work",level:3},{value:"How does voting work?",id:"how-does-voting-work",level:3},{value:"How does on-chain automation work?",id:"how-does-on-chain-automation-work",level:3},{value:"Data Model",id:"data-model",level:3},{value:"Project Details",id:"project-details-1",level:2},{value:"MVP (Pre-Grant)",id:"mvp-pre-grant",level:3},{value:"Scope of W3F Grant",id:"scope-of-w3f-grant",level:3},{value:"Technology stack",id:"technology-stack",level:4},{value:"Hosting and Infrastructure",id:"hosting-and-infrastructure",level:4},{value:"Risks",id:"risks",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:2},{value:"Team",id:"team",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team GitHub Profiles",id:"team-github-profiles",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Status",id:"development-status",level:2},{value:"Development Roadmap",id:"development-roadmap",level:2},{value:"Overview",id:"overview",level:3},{value:"Milestone 1",id:"milestone-1",level:3},{value:"Milestone 2",id:"milestone-2",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information",id:"additional-information",level:2},{value:"How did you hear about the Grants Program?",id:"how-did-you-hear-about-the-grants-program",level:3},{value:"Work you have already done",id:"work-you-have-already-done",level:3},{value:"Previous grants you may have applied for",id:"previous-grants-you-may-have-applied-for",level:3}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"syncra-x-web3-foundation",children:"Syncra x Web3 Foundation"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Team Name:"})," Syncra"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Payment Address:"})," 15Geo1RfLLM1PmPsD4uggts1Ht5LrWUChBDruLPqt5EgFKPB (PolkaDOT - USDT)"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Level:"})," 2"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Status:"})," ",(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/pull/1762#issuecomment-1769273868",children:"Terminated"})]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"project-overview",children:"Project Overview"}),"\n",(0,s.jsx)(n.h3,{id:"intro",children:"Intro"}),"\n",(0,s.jsx)(n.p,{children:"Building DAOs requires a lot of heavy, complex work and commitment to create a solution, even when using templates such as OpenZeppelin. As a protocols owner, the cost of development, voting mechanisms, and legal structure can be significant. On substrate such templates like ones in OpenZeppelin aren\u2019t even available yet for DAO development. This means even more time required for research and development in this technology."}),"\n",(0,s.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(n.p,{children:"Syncra simplifies this process. We're working on a no-code solution to create, manage, and build your decentralized organization. Our goal is to provide a seamless process where protocol owners can launch the DAO within 5 minutes or even less."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{src:"https://i.imgur.com/Pe1Z26r.png",alt:""})}),"\n",(0,s.jsx)(n.p,{children:"Transparency is inherent in blockchain technology, but many situations require privacy, especially in DAOs when it comes to tough decisions. Also in times when connecting particular wallet address to a person or entity can by relatively easy, or even required (KYC, ID verification, Identity providers). With Syncra, we want to provide a solution for confidential voting where votes are hidden by default, but everything happens on-chain. Leveraging a modular approach, we want to enhance privacy, provide an easy way for treasury management, and offer on-chain automation, ultimately providing this service for the entire Substrate ecosystem."}),"\n",(0,s.jsx)(n.p,{children:"Having Syncra in the PolkaDOT ecosystem is a necessary piece of the puzzle. Just as Tally, Aragon, and Snapshot exist on EVM, Syncra exists on Substrate."}),"\n",(0,s.jsx)(n.h3,{id:"product-overview",children:"Product overview"}),"\n",(0,s.jsx)(n.p,{children:"We've already prepared and begun implementing some of our product designs. Our team is hard at work on product development, constantly refining and streamlining flows through research and product fit."}),"\n",(0,s.jsx)(n.p,{children:"Our goal is to make everything as simple as possible, while maintaining modularity and providing an excellent user experience."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{src:"https://i.imgur.com/GXzugeC.png",alt:""})}),"\n",(0,s.jsx)(n.h3,{id:"key-functionalities",children:"Key Functionalities"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"DAO management,"}),"\n",(0,s.jsx)(n.li,{children:"On and off-chain voting,"}),"\n",(0,s.jsx)(n.li,{children:"Treasury management,"}),"\n",(0,s.jsx)(n.li,{children:"Prepared and custom strategies,"}),"\n",(0,s.jsx)(n.li,{children:"Undisclosed voting,"}),"\n",(0,s.jsx)(n.li,{children:"Modular approach,"}),"\n",(0,s.jsx)(n.li,{children:"Software Development Kit."}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"architecture-and-overview-of-common-interfaces",children:"Architecture and overview of common interfaces"}),"\n",(0,s.jsx)(n.p,{children:"Syncra implements modular-dao concept."}),"\n",(0,s.jsx)(n.h3,{id:"what-is-it",children:"What is it?"}),"\n",(0,s.jsxs)(n.p,{children:["Modular-dao is a set of traits with default implementations built using ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink",children:"ink!"})," and ",(0,s.jsx)(n.a,{href:"https://github.com/727-Ventures/openbrush-contracts",children:"OpenBrush"})," that can be used to create customized DAOs. Be aware that this is just a concept, none of the contracts have been properly tested and/or audited, and all the work is still experimental."]}),"\n",(0,s.jsx)(n.h3,{id:"how-does-it-work",children:"How does it work?"}),"\n",(0,s.jsx)(n.p,{children:"The traits with default implementations consists of:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Votes"})," - trait that provides 3 basic methods that allow to get voting power for of an address and delegate votes. The default implementation is done with combination of PSP22 token. However, ",(0,s.jsx)(n.strong,{children:"Votes"}),' can represent any type of the "strategy" (for example PSP34-based).']}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Governor"})," - extends ",(0,s.jsx)(n.strong,{children:"Votes"})," and ",(0,s.jsx)(n.strong,{children:"AccessControl"}),". The base for the DAO. Provides proposal creation and execution functionalities."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Timelock"})," - extends ",(0,s.jsx)(n.strong,{children:"Governor"}),". Allows scheduling operations, for example to allow some time between voting end-time and proposal execution."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"ShieldedVoting"})," - extends ",(0,s.jsx)(n.strong,{children:"Governor"}),'. Allows to represent the "votes" by PSP22 token that can be shielded using Shielder contract.']}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{src:"https://i.imgur.com/aRwOgbR.png",alt:""})}),"\n",(0,s.jsx)(n.p,{children:"In the future, we plan to develop multi-chain treasury module to increase functionality and customisability."}),"\n",(0,s.jsx)(n.h3,{id:"how-does-voting-work",children:"How does voting work?"}),"\n",(0,s.jsxs)(n.p,{children:["For not shielded voting process, users can simply call ",(0,s.jsx)(n.code,{children:"cast_vote(proposal_id)"})," method on the ",(0,s.jsx)(n.strong,{children:"Governor"})," contract. The vote power is calculated by ",(0,s.jsx)(n.code,{children:"get_votes(account)"}),"."]}),"\n",(0,s.jsx)(n.p,{children:'For shielded voting, users have to first "register" for voting to mint the PSP22 tokens representing their votes. Then, the tokens representing the votes can be simply transferred to an address representing one of the voting options or the transaction can be "shielded" using the Shielder contract.'}),"\n",(0,s.jsx)(n.h3,{id:"how-does-on-chain-automation-work",children:"How does on-chain automation work?"}),"\n",(0,s.jsx)(n.p,{children:"Smart Contracts, Blockchain, and DAOs are very often promoted as Autonomous solutions. However, there is still a need for a manual trigger from user, to execute a given action onchain."}),"\n",(0,s.jsxs)(n.p,{children:["At Syncra, we aim to deliver a complete automation with automatic Smart Contracts call execution. For this purposes we have started working a tool called Polkadot Smart Contracts Caller, which source code can be found here: ",(0,s.jsx)(n.a,{href:"https://github.com/KowalewskiPawel/Substrate-Polkadot-Smart-Contracts-Caller",children:"https://github.com/KowalewskiPawel/Substrate-Polkadot-Smart-Contracts-Caller"})]}),"\n",(0,s.jsx)(n.p,{children:"With Polkadot Smart Contracts Caller, we can easily create a relayer service, for delegating Smart Contracts calls. In this scope, we are planning to add scheduler, and frontend implementation, so that tasks such as execution of the proposal can be scheduled, and called automatically after the end of voting period."}),"\n",(0,s.jsx)(n.p,{children:'Moreover, we are also planning to integrate this tool in the Private Voting feature, so that "withdraw" function can be called from a neutral account, without revealing any sensitive info about the original caller.'}),"\n",(0,s.jsx)(n.p,{children:"Known drawbacks are the security concerns, related with storing private keys on the cloud. We are currently conducting the Security research, on a possible solution to this problem. Therefore, for the scope of the grant, we treat this feature rather more like a Proof of Concept, than final product or even MVP."}),"\n",(0,s.jsx)(n.h3,{id:"data-model",children:"Data Model"}),"\n",(0,s.jsx)(n.p,{children:"Syncra uses IPFS as well as MongoDB for storing additional data about DAOs, proposals, and user stats. The purpose is to minimise the data footprint on the blockchain itself, as storing data onchain is costly, and not very performant. Only the critical data is stored inside of the the DAO Smart Contract\u2019s."}),"\n",(0,s.jsx)(n.p,{children:"DAOs, Proposals titles, and descriptions are stored on the IPFS, and then corresponding IPFS hashes are set on the DAO contract's storage. In this way, users can be sure that the data about the given DAO or Proposal won\u2019t be modified, nor fade-away if the server ever goes down. The same applies to storing images, as we use web3 storage for image upload."}),"\n",(0,s.jsx)(n.p,{children:"To sum up, on the Syncra MongoDB side, general info about user/platform stats are stored, such as number of DAOs created, DAOs that the given user is involved in, etc. In this way, everyone can use our SDK or even connect directly with the DAO previously deployed via Syncra platform, and build own frontend dedicated to the given DAO, without losing the critical data, and need to connect with Syncra's database."}),"\n",(0,s.jsx)(n.h2,{id:"project-details-1",children:"Project Details"}),"\n",(0,s.jsx)(n.p,{children:"In the scope of this grant, several core parts will be implemented, as the extension of the pre-grant MVP product, built under AlephZero grant."}),"\n",(0,s.jsx)(n.h3,{id:"mvp-pre-grant",children:"MVP (Pre-Grant)"}),"\n",(0,s.jsx)(n.p,{children:"The MVP of the Syncra Platform, that we are going to start with, will consist the following parts:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Frontend Application with the connection to Wallet, Smart Contracts, and Backend"}),"\n",(0,s.jsx)(n.li,{children:"Set of Smart Contracts based on PSP22 voting strategy"}),"\n",(0,s.jsx)(n.li,{children:"Backend for storing off-chain data, such as DAO and proposal's additional info stored on IPFS. It's done for the purpose of minimizing storage footprint on-chain"}),"\n",(0,s.jsx)(n.li,{children:"Complete workflow of DAO creation, that allows users to create DAO, manage it, as well as create proposal and vote directly from the web application"}),"\n",(0,s.jsx)(n.li,{children:"Proof of Concept for Private voting, using AlephZero's Liminal Shielder - This one will require to start up a local custom AlephZero node, with ZK Verifier pallet implemented, as currently this functionally is not available on any AlephZero live chain"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"scope-of-w3f-grant",children:"Scope of W3F Grant"}),"\n",(0,s.jsx)(n.p,{children:"Based on the MVP described above, our team will deliver several extensions that will make our solution more universal, accessible, and possibly transferable to other Polkadot based chains, that implement Contract pallet."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"OpenZeppelins\u2019 like Governance Standards"}),'\nIdeally, we plan to split the possible functionalities of a DAO into separate Rust traits, so that one can "bootstrap" the desired modules/functionalities and easily customize them. Moreover, our goal is to keep the project open for extension so in the future new modues/features could be added without the need to change existing standard. We will refactor the Smart Contracts code for creating DAOs and voting strategies, improve them, make more universal, and customizable so that they can be easily implemented. Additionally, we will prepare a documentation of each part, so that custom DAO contracts can be easily build from the ready puzzles. OpenZeppelins standards are the inspiration for this part, as there isn\'t any similar standard on Polkadot ecosystem yet.']}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"On-chain Automation System Template"}),"\nSmart contracts, even though considered autonomous, require a manual trigger from the user to execute certain functions. In ecosystems such as DAO, automatic execution of the proposals is something that is still missing. For this part we will create a template tool, that will work as off-chain worker for scheduling Smart Contracts calls. It will work as a simple application, with the Scheduler, and some relayer accounts, that contain tokens for covering gas costs. Scheduling certain actions, like for example mentioned above - executing proposal once they reach the deadline, will be possible by simply setting the call on the Smart Contract. The off-chain relayer, will read the state from the given smart contract, and then schedule the Smart Contract call."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"SDK"}),"\nOur platform Syncra, is just one of the examples of how our infrastructure can be used, that is why we will create a set of ready solutions, so that a new platform (ex. frontend, mobile app, etc.) can be build, upon the pillars created by Syncra. In this part, a bundle for NPM and Yarn will be created, wrapping all core functionalities of Syncra. Developer will be able to simply install the SDK library in their project, setup the endpoints, and API KEYs for accessing our backend services, and then simply call given functions inside of their custom application."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"SDK Documentation"})}),"\n",(0,s.jsx)(n.p,{children:"Dedicated documentation for the SDK will be created, so that the whole tool can be implemented with ease. We will also provide instructions for obtaining the necessary configuration keys, and other variables necessary to connect with our services."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"technology-stack",children:"Technology stack"}),"\n",(0,s.jsx)(n.p,{children:"Each of the core elements will be developed with certain set of technologies, and programming languages."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Smart Contracts as Governance Standards"}),"\nWritten in Rust with the use of ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink",children:"ink!"})," framework and ",(0,s.jsx)(n.a,{href:"https://github.com/727-Ventures/openbrush-contracts",children:"OpenBrush"})," library for PSP22 standard of tokens, as well as additional helper functions, such as modifier for checking the roles. The documentation will be developed using ",(0,s.jsx)(n.a,{href:"https://docusaurus.io/",children:"Docusaurus"})," framework, that leverages JavaScript and TypeScript."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"On-chain Automation System Template"}),"\nMain technology stack here will be TypeScript, and Node.js Express for creating a server that can be deployed and hosted on most of the available hosting services. The reason behind this is the ease of implementation, and the availability of various libraries and technologies that can be added on top of it. This service won't receive many calls, rather act as a relayer that reads data on-chain, and then submits data/send calls to Smart Contracts on-chain, without further need for external calls. As a core tool for creating calls to Smart Contracts, we will leverage ",(0,s.jsx)(n.a,{href:"https://polkadot.js.org/docs/api-contract",children:"Polkadot.js Contracts API"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"SDK"}),"\nJavaScript and TypeScript will be fundamental programming languages of this part, while ",(0,s.jsx)(n.a,{href:"npmjs.com",children:"NPM"})," registry will be used for publishing the package itself. The SDK will be basically a wrapper of the certain functions that call Smart Contracts, and Backend. It will require the developer to add configuration, such as API Key to access our backend, Smart Contract Factory address, as well as the ABI files, that will serve as an instruction for calling each Smart Contract. We are not going to hardcode those in the SDK, as in the future, the platform may be deployed on different chains in the Polkadot ecosystem. Moreover, the Smart Contracts can be upgraded, or created with different set of rules and methods."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"SDK Documentation"}),"\nThe entire documentation for implementing SDK in the given project, will be built using ",(0,s.jsx)(n.a,{href:"https://docusaurus.io/",children:"Docusaurus"})," that leverages JavaScript and TypeScript."]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"hosting-and-infrastructure",children:"Hosting and Infrastructure"}),"\n",(0,s.jsx)(n.p,{children:"All of the code will be open-source, and available under our organizational repositories address"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/orgs/SyncraDAO/repositories",children:"Syncra Repositories"})}),"\n",(0,s.jsx)(n.p,{children:"Frontend application from the MVP part will be available under the address below"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://syncra.xyz/",children:"syncra.xyz"})}),"\n",(0,s.jsxs)(n.p,{children:["Example demo of on-chain automation service is going to be hosted most probably on the ",(0,s.jsx)(n.a,{href:"https://railway.app/",children:"Railway"})," service, and it will connect with one of the instances of Data Base, hosted on the ",(0,s.jsx)(n.a,{href:"https://www.mongodb.com/atlas/database",children:"Atlas MongoDB"})," service. The files stored on IPFS will leverage ",(0,s.jsx)(n.a,{href:"https://web3.storage/",children:"Web3 Storage"})," services."]}),"\n",(0,s.jsxs)(n.p,{children:["SDK bundle on the other hand, will be published on the ",(0,s.jsx)(n.a,{href:"npmjs.com",children:"official npmjs registry"})]}),"\n",(0,s.jsxs)(n.p,{children:["Documentation will published on the ",(0,s.jsx)(n.a,{href:"https://pages.github.com/",children:"GH Pages"})]}),"\n",(0,s.jsx)(n.h4,{id:"risks",children:"Risks"}),"\n",(0,s.jsx)(n.p,{children:"There are several known risk that we are aware of, and will try our best to find solutions to prevent those scenarios from happening. Nevertheless, it is worth noticing those potential fields, which could have been improved for better safety."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Storing Account Private Keys for Off-Chain Automation Relayer - since for sending transactions to the Smart Contracts, we need an actual on-chain Address, the seeds for that account, has to be stored somewhere on the Cloud. In this way, no human interaction is needed to create a signature. In our solution, we have no other option then just store those keys on one of the Cloud services. In such scenarios, there is always a risk of a data breach, that could compromise the access to the account, with the access to the funds stored for covering gas fees on it."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Smart Contracts Security Hole - we expect our Smart Contracts to be initially audited by ",(0,s.jsx)(n.a,{href:"https://kudelskisecurity.com/",children:"Kudelski Security"})," as a part of AlephZero grant. However, there is still a risk that something will not be caught during the audit, and we will also extend those Smart Contracts during this Project as for the purpose of creating OpenZeppelins like standards. During the development, some additional security issues may occur."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Off-Chain Automation Relayer Operational Failure - Automation relayer work as a centralized service for executing the calls, if for some reason, it will stop operating, the scheduled action may not be executed. For that reason, we are considering deploying several instances of this relayer, on multiple services, with multiple accounts. In this way we should minimize the risk of the scheduled action, not being executed due to the relayer's operational failure."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsx)(n.p,{children:"Given the importance of scalable, and customisable DAO infrastructure, which many protocols needs, we want to introduce Syncra. As a easy to use, modular, reliable, and customisable platform we believe, that is crucial element of the ecosystem. Leveraging undisclosed voting, treasury management, on-chain automation, and many others we might bring a real value."}),"\n",(0,s.jsx)(n.p,{children:"Our project aim to be the ecosystem standard for DAOs on Polkadot, Kusama, Aleph Zero and any Subsrate based ecosystem."}),"\n",(0,s.jsx)(n.h2,{id:"team",children:"Team"}),"\n",(0,s.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Name of team leader:"})," Przemys\u0142aw Paczoski"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Names of team members:"})," Pawe\u0142 Kowalewski, Krzysztof Kuczma, Jan Kuczma"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Name:"})," Przemys\u0142aw Paczoski"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Email:"})," ",(0,s.jsx)(n.a,{href:"mailto:przemek@syncra.xyz",children:"przemek@syncra.xyz"})]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsxs)(n.strong,{children:["Website: ",(0,s.jsx)(n.a,{href:"https://syncra.xyz",children:"https://syncra.xyz"})]})}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Registered Address:"})," TBD"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Registered Legal Entity:"})," TBD"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Przemys\u0142aw Paczoski"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"Lead, front-end, and quality engineer with more than 6 years of experience in the field. Working on numerous projects with companies like XTB, Docplanner, Dfns, and others. He participated in a few NFT initiatives in addition to his professional activities, where he received practical expertise in creating projects from the ground up. He actively participate in hackathons and won awards in various categories."})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Krzysztof Kuczma"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"Software engineer with over than 5 years of experience. Knowledgeable in front-end, and backend technologies, alongside Azure and GCP ecosystems. Working on projects for large financial institutions. Since 2020, exploring web3 projects, participating in hackathons in which winning awards. Passionate about knowledge sharing, in which he is running the YouTube channel about programming."})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Pawe\u0142 Kowalewski"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"Software Engineer, with experience in several blockchain technologies including projects based on Lightning Network. Prior to his software engineering career, he was an Academician and an Automotive Technician. The co-host of the YouTube channel \u201cDevs in Chains\u201d, focused on topics related to web3, web development, and Blockchain. He has attended numerous hackathons and won awards in various categories."})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Jan Kuczma"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"An Alumni of the University of Sussex with Bachelor\u2019s at Computer Sciences with focus on AI and Computer Architectures. In the academic course, he participated in several hacking events and I developed various software projects including developing a 3D game in Unity and designing and implementing Machine Learning models in Python. His final year he become interested in Blockchain technologies and started learning smart contracts development. He quickly become proficient in this matter."})}),"\n",(0,s.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(n.p,{children:["Syncra Organization: ",(0,s.jsx)(n.a,{href:"https://github.com/SyncraDAO",children:"https://github.com/SyncraDAO"})]}),"\n",(0,s.jsxs)(n.p,{children:["Smart Contracts: ",(0,s.jsx)(n.a,{href:"https://github.com/SyncraDAO/modular-dao",children:"https://github.com/SyncraDAO/modular-dao"})]}),"\n",(0,s.jsxs)(n.p,{children:["Backend: ",(0,s.jsx)(n.a,{href:"https://github.com/SyncraDAO/Liberum-Backend",children:"https://github.com/SyncraDAO/Liberum-Backend"})]}),"\n",(0,s.jsx)(n.p,{children:"All developments within the Web3 Foundation Grants Program will be open-sourced from day one on GitHub."}),"\n",(0,s.jsx)(n.h3,{id:"team-github-profiles",children:"Team GitHub Profiles"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Przemys\u0142aw Paczoski: ",(0,s.jsx)(n.a,{href:"https://github.com/Kodziak",children:"https://github.com/Kodziak"})]}),"\n",(0,s.jsxs)(n.li,{children:["Krzysztof Kuczma: ",(0,s.jsx)(n.a,{href:"https://github.com/KrzysiekKuczma",children:"https://github.com/KrzysiekKuczma"})]}),"\n",(0,s.jsxs)(n.li,{children:["Pawe\u0142 Kowalewski: ",(0,s.jsx)(n.a,{href:"https://github.com/KowalewskiPawel",children:"https://github.com/KowalewskiPawel"})]}),"\n",(0,s.jsxs)(n.li,{children:["Jan Kuczma: ",(0,s.jsx)(n.a,{href:"https://github.com/jsk28",children:"https://github.com/jsk28"})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Przemys\u0142aw Paczoski: ",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/ppaczoski/",children:"https://www.linkedin.com/in/ppaczoski/"})]}),"\n",(0,s.jsxs)(n.li,{children:["Krzysztof Kuczma: ",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/krzysztof-kuczma/",children:"https://www.linkedin.com/in/krzysztof-kuczma/"})]}),"\n",(0,s.jsxs)(n.li,{children:["Pawe\u0142 Kowalewski: ",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/kowalewskipawel/",children:"https://www.linkedin.com/in/kowalewskipawel/"})]}),"\n",(0,s.jsxs)(n.li,{children:["Jan Kuczma: ",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/kowalewskipawel/",children:"https://www"}),(0,s.jsx)(n.a,{href:"http://www.linkedin.com/in/jkuczma",children:".linkedin.com/in/jkuczma"})]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"development-status",children:"Development Status"}),"\n",(0,s.jsx)(n.p,{children:"The project is currently in early-stage development. We achieved a proof-of-concept solution during the HackOnChain hackathon in Berlin, and then decided to rebuild it from scratch, aiming for a minimum viable product soon."}),"\n",(0,s.jsx)(n.p,{children:"Part of the MVP is almost finished. We aim to deploy the solution on the Aleph Zero testnet within a couple of weeks. The landing page, designs, and part of the application are almost complete."}),"\n",(0,s.jsx)(n.p,{children:"We are currently focusing on legalising the entity, marketing, pitch decks, whitepapers, and many other things."}),"\n",(0,s.jsx)(n.h2,{id:"development-roadmap",children:"Development Roadmap"}),"\n",(0,s.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Estimated Duration:"})," 12 weeks"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Full-Time Equivalent (FTE):"})," 2 FTE"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Costs:"})," Requested amount in USD for the whole project 30,000 USD."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-1",children:"Milestone 1"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated duration:"})," 6 weeks"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 2"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," 15,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"Apache 2.0"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"A clear overview of the software's architecture and components, as well as its main functions and capabilities. Technical details, including programming language, technologies, frameworks, libraries, and services."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0c."}),(0,s.jsx)(n.td,{children:"Testing Guide"}),(0,s.jsx)(n.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0d."}),(0,s.jsx)(n.td,{children:"Article"}),(0,s.jsx)(n.td,{children:"We will publish an article that introduces to the solution with all the guidelines included."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"1."}),(0,s.jsx)(n.td,{children:"DAO Smart Contracts (OpenZeppelins\u2019 like) Governance Standards"}),(0,s.jsx)(n.td,{children:"Set of traits with default implementation for basic DAO feature such as voting power mechanisms based on psp22 and psp34, proposal creation and execution, quorum, proposal creation threshold and role-based proposal creation and execution. Both Smart Contracts written in ink! with OpenBrush will be provided, as well as the documentation explaining each part, with the tutorial of creating a new custom Governance Smart Contract."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"2."}),(0,s.jsx)(n.td,{children:"On-chain Automation Tool"}),(0,s.jsx)(n.td,{children:"Source code as a Template with the Scheduler, and Smart Contracts caller will be provided. Moreover, as an example at least one instance of such a relayer will be deployed, and prepared for testing."})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-2",children:"Milestone 2"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated duration:"})," 6 weeks"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 2"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," 15,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"Apache 2.0"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"A clear overview of the software's architecture and components, as well as its main functions and capabilities. Technical details, including programming language, technologies, frameworks, libraries, and services."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0c."}),(0,s.jsx)(n.td,{children:"Testing Guide"}),(0,s.jsx)(n.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0d."}),(0,s.jsx)(n.td,{children:"Article"}),(0,s.jsx)(n.td,{children:"We will publish an article that introduces to the solution with all the guidelines included."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"1."}),(0,s.jsx)(n.td,{children:"SDK"}),(0,s.jsx)(n.td,{children:"NPM package with ready wrapped functions, for creating custom GUI for the DAO platform based on Syncra will be provided. The package will be also published on the NPM registry. It will cover the workflow of connecting with our services, and creating the whole workflow, from creating the DAO, to adding proposals, and voting on them."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"2."}),(0,s.jsx)(n.td,{children:"SDK Documentation"}),(0,s.jsx)(n.td,{children:"Clear overview, instructions, and explanation of each SDK's part will be documented in the documentation that will be available publicly for everyone."})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsx)(n.p,{children:"After completing the grant, our goal is to establish a seamless process for creating and managing DAOs, with a great user experience. Additionally, we aim to enable protocols to integrate our solution into their systems using an SDK."}),"\n",(0,s.jsx)(n.p,{children:"Our next steps include:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Providing para-chain support, with the goal of allowing protocols across all Substrate-based blockchains to use Syncra's solution."}),"\n",(0,s.jsx)(n.li,{children:"Improving the security of the solutions provided in the scope of this grant"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"additional-information",children:"Additional Information"}),"\n",(0,s.jsx)(n.h3,{id:"how-did-you-hear-about-the-grants-program",children:(0,s.jsx)(n.strong,{children:"How did you hear about the Grants Program?"})}),"\n",(0,s.jsx)(n.p,{children:"Web3 Foundation Website, and Personal Recommendation."}),"\n",(0,s.jsx)(n.h3,{id:"work-you-have-already-done",children:"Work you have already done"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Platform MVP"}),"\n",(0,s.jsx)(n.li,{children:"Designs"}),"\n",(0,s.jsx)(n.li,{children:"Started to build brand recognition on Twitter and Discord community"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"previous-grants-you-may-have-applied-for",children:"Previous grants you may have applied for"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Aleph Zero Grants program"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>o});var i=t(96540);const s={},r=i.createContext(s);function a(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0211cf38.47189c8a.js b/assets/js/0211cf38.47189c8a.js deleted file mode 100644 index 3a689e785a8..00000000000 --- a/assets/js/0211cf38.47189c8a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[28529],{57934:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"applications/Syncra","title":"Syncra x Web3 Foundation","description":"- Team Name: Syncra","source":"@site/applications/Syncra.md","sourceDirName":"applications","slug":"/applications/Syncra","permalink":"/applications/Syncra","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/Syncra.md","tags":[],"version":"current","frontMatter":{}}');var s=t(74848),r=t(28453);const a={},o="Syncra x Web3 Foundation",l={},c=[{value:"Project Overview",id:"project-overview",level:2},{value:"Intro",id:"intro",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Product overview",id:"product-overview",level:3},{value:"Key Functionalities",id:"key-functionalities",level:3},{value:"Architecture and overview of common interfaces",id:"architecture-and-overview-of-common-interfaces",level:2},{value:"What is it?",id:"what-is-it",level:3},{value:"How does it work?",id:"how-does-it-work",level:3},{value:"How does voting work?",id:"how-does-voting-work",level:3},{value:"How does on-chain automation work?",id:"how-does-on-chain-automation-work",level:3},{value:"Data Model",id:"data-model",level:3},{value:"Project Details",id:"project-details-1",level:2},{value:"MVP (Pre-Grant)",id:"mvp-pre-grant",level:3},{value:"Scope of W3F Grant",id:"scope-of-w3f-grant",level:3},{value:"Technology stack",id:"technology-stack",level:4},{value:"Hosting and Infrastructure",id:"hosting-and-infrastructure",level:4},{value:"Risks",id:"risks",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:2},{value:"Team",id:"team",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team GitHub Profiles",id:"team-github-profiles",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Status",id:"development-status",level:2},{value:"Development Roadmap",id:"development-roadmap",level:2},{value:"Overview",id:"overview",level:3},{value:"Milestone 1",id:"milestone-1",level:3},{value:"Milestone 2",id:"milestone-2",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information",id:"additional-information",level:2},{value:"How did you hear about the Grants Program?",id:"how-did-you-hear-about-the-grants-program",level:3},{value:"Work you have already done",id:"work-you-have-already-done",level:3},{value:"Previous grants you may have applied for",id:"previous-grants-you-may-have-applied-for",level:3}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"syncra-x-web3-foundation",children:"Syncra x Web3 Foundation"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Team Name:"})," Syncra"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Payment Address:"})," 15Geo1RfLLM1PmPsD4uggts1Ht5LrWUChBDruLPqt5EgFKPB (PolkaDOT - USDT)"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Level:"})," 2"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Status:"})," ",(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/pull/1762#issuecomment-1769273868",children:"Terminated"})]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"project-overview",children:"Project Overview"}),"\n",(0,s.jsx)(n.h3,{id:"intro",children:"Intro"}),"\n",(0,s.jsx)(n.p,{children:"Building DAOs requires a lot of heavy, complex work and commitment to create a solution, even when using templates such as OpenZeppelin. As a protocols owner, the cost of development, voting mechanisms, and legal structure can be significant. On substrate such templates like ones in OpenZeppelin aren\u2019t even available yet for DAO development. This means even more time required for research and development in this technology."}),"\n",(0,s.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(n.p,{children:"Syncra simplifies this process. We're working on a no-code solution to create, manage, and build your decentralized organization. Our goal is to provide a seamless process where protocol owners can launch the DAO within 5 minutes or even less."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{src:"https://i.imgur.com/Pe1Z26r.png",alt:""})}),"\n",(0,s.jsx)(n.p,{children:"Transparency is inherent in blockchain technology, but many situations require privacy, especially in DAOs when it comes to tough decisions. Also in times when connecting particular wallet address to a person or entity can by relatively easy, or even required (KYC, ID verification, Identity providers). With Syncra, we want to provide a solution for confidential voting where votes are hidden by default, but everything happens on-chain. Leveraging a modular approach, we want to enhance privacy, provide an easy way for treasury management, and offer on-chain automation, ultimately providing this service for the entire Substrate ecosystem."}),"\n",(0,s.jsx)(n.p,{children:"Having Syncra in the PolkaDOT ecosystem is a necessary piece of the puzzle. Just as Tally, Aragon, and Snapshot exist on EVM, Syncra exists on Substrate."}),"\n",(0,s.jsx)(n.h3,{id:"product-overview",children:"Product overview"}),"\n",(0,s.jsx)(n.p,{children:"We've already prepared and begun implementing some of our product designs. Our team is hard at work on product development, constantly refining and streamlining flows through research and product fit."}),"\n",(0,s.jsx)(n.p,{children:"Our goal is to make everything as simple as possible, while maintaining modularity and providing an excellent user experience."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{src:"https://i.imgur.com/GXzugeC.png",alt:""})}),"\n",(0,s.jsx)(n.h3,{id:"key-functionalities",children:"Key Functionalities"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"DAO management,"}),"\n",(0,s.jsx)(n.li,{children:"On and off-chain voting,"}),"\n",(0,s.jsx)(n.li,{children:"Treasury management,"}),"\n",(0,s.jsx)(n.li,{children:"Prepared and custom strategies,"}),"\n",(0,s.jsx)(n.li,{children:"Undisclosed voting,"}),"\n",(0,s.jsx)(n.li,{children:"Modular approach,"}),"\n",(0,s.jsx)(n.li,{children:"Software Development Kit."}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"architecture-and-overview-of-common-interfaces",children:"Architecture and overview of common interfaces"}),"\n",(0,s.jsx)(n.p,{children:"Syncra implements modular-dao concept."}),"\n",(0,s.jsx)(n.h3,{id:"what-is-it",children:"What is it?"}),"\n",(0,s.jsxs)(n.p,{children:["Modular-dao is a set of traits with default implementations built using ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink",children:"ink!"})," and ",(0,s.jsx)(n.a,{href:"https://github.com/727-Ventures/openbrush-contracts",children:"OpenBrush"})," that can be used to create customized DAOs. Be aware that this is just a concept, none of the contracts have been properly tested and/or audited, and all the work is still experimental."]}),"\n",(0,s.jsx)(n.h3,{id:"how-does-it-work",children:"How does it work?"}),"\n",(0,s.jsx)(n.p,{children:"The traits with default implementations consists of:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Votes"})," - trait that provides 3 basic methods that allow to get voting power for of an address and delegate votes. The default implementation is done with combination of PSP22 token. However, ",(0,s.jsx)(n.strong,{children:"Votes"}),' can represent any type of the "strategy" (for example PSP34-based).']}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Governor"})," - extends ",(0,s.jsx)(n.strong,{children:"Votes"})," and ",(0,s.jsx)(n.strong,{children:"AccessControl"}),". The base for the DAO. Provides proposal creation and execution functionalities."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Timelock"})," - extends ",(0,s.jsx)(n.strong,{children:"Governor"}),". Allows scheduling operations, for example to allow some time between voting end-time and proposal execution."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"ShieldedVoting"})," - extends ",(0,s.jsx)(n.strong,{children:"Governor"}),'. Allows to represent the "votes" by PSP22 token that can be shielded using Shielder contract.']}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{src:"https://i.imgur.com/aRwOgbR.png",alt:""})}),"\n",(0,s.jsx)(n.p,{children:"In the future, we plan to develop multi-chain treasury module to increase functionality and customisability."}),"\n",(0,s.jsx)(n.h3,{id:"how-does-voting-work",children:"How does voting work?"}),"\n",(0,s.jsxs)(n.p,{children:["For not shielded voting process, users can simply call ",(0,s.jsx)(n.code,{children:"cast_vote(proposal_id)"})," method on the ",(0,s.jsx)(n.strong,{children:"Governor"})," contract. The vote power is calculated by ",(0,s.jsx)(n.code,{children:"get_votes(account)"}),"."]}),"\n",(0,s.jsx)(n.p,{children:'For shielded voting, users have to first "register" for voting to mint the PSP22 tokens representing their votes. Then, the tokens representing the votes can be simply transferred to an address representing one of the voting options or the transaction can be "shielded" using the Shielder contract.'}),"\n",(0,s.jsx)(n.h3,{id:"how-does-on-chain-automation-work",children:"How does on-chain automation work?"}),"\n",(0,s.jsx)(n.p,{children:"Smart Contracts, Blockchain, and DAOs are very often promoted as Autonomous solutions. However, there is still a need for a manual trigger from user, to execute a given action onchain."}),"\n",(0,s.jsxs)(n.p,{children:["At Syncra, we aim to deliver a complete automation with automatic Smart Contracts call execution. For this purposes we have started working a tool called Polkadot Smart Contracts Caller, which source code can be found here: ",(0,s.jsx)(n.a,{href:"https://github.com/KowalewskiPawel/Substrate-Polkadot-Smart-Contracts-Caller",children:"https://github.com/KowalewskiPawel/Substrate-Polkadot-Smart-Contracts-Caller"})]}),"\n",(0,s.jsx)(n.p,{children:"With Polkadot Smart Contracts Caller, we can easily create a relayer service, for delegating Smart Contracts calls. In this scope, we are planning to add scheduler, and frontend implementation, so that tasks such as execution of the proposal can be scheduled, and called automatically after the end of voting period."}),"\n",(0,s.jsx)(n.p,{children:'Moreover, we are also planning to integrate this tool in the Private Voting feature, so that "withdraw" function can be called from a neutral account, without revealing any sensitive info about the original caller.'}),"\n",(0,s.jsx)(n.p,{children:"Known drawbacks are the security concerns, related with storing private keys on the cloud. We are currently conducting the Security research, on a possible solution to this problem. Therefore, for the scope of the grant, we treat this feature rather more like a Proof of Concept, than final product or even MVP."}),"\n",(0,s.jsx)(n.h3,{id:"data-model",children:"Data Model"}),"\n",(0,s.jsx)(n.p,{children:"Syncra uses IPFS as well as MongoDB for storing additional data about DAOs, proposals, and user stats. The purpose is to minimise the data footprint on the blockchain itself, as storing data onchain is costly, and not very performant. Only the critical data is stored inside of the the DAO Smart Contract\u2019s."}),"\n",(0,s.jsx)(n.p,{children:"DAOs, Proposals titles, and descriptions are stored on the IPFS, and then corresponding IPFS hashes are set on the DAO contract's storage. In this way, users can be sure that the data about the given DAO or Proposal won\u2019t be modified, nor fade-away if the server ever goes down. The same applies to storing images, as we use web3 storage for image upload."}),"\n",(0,s.jsx)(n.p,{children:"To sum up, on the Syncra MongoDB side, general info about user/platform stats are stored, such as number of DAOs created, DAOs that the given user is involved in, etc. In this way, everyone can use our SDK or even connect directly with the DAO previously deployed via Syncra platform, and build own frontend dedicated to the given DAO, without losing the critical data, and need to connect with Syncra's database."}),"\n",(0,s.jsx)(n.h2,{id:"project-details-1",children:"Project Details"}),"\n",(0,s.jsx)(n.p,{children:"In the scope of this grant, several core parts will be implemented, as the extension of the pre-grant MVP product, built under AlephZero grant."}),"\n",(0,s.jsx)(n.h3,{id:"mvp-pre-grant",children:"MVP (Pre-Grant)"}),"\n",(0,s.jsx)(n.p,{children:"The MVP of the Syncra Platform, that we are going to start with, will consist the following parts:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Frontend Application with the connection to Wallet, Smart Contracts, and Backend"}),"\n",(0,s.jsx)(n.li,{children:"Set of Smart Contracts based on PSP22 voting strategy"}),"\n",(0,s.jsx)(n.li,{children:"Backend for storing off-chain data, such as DAO and proposal's additional info stored on IPFS. It's done for the purpose of minimizing storage footprint on-chain"}),"\n",(0,s.jsx)(n.li,{children:"Complete workflow of DAO creation, that allows users to create DAO, manage it, as well as create proposal and vote directly from the web application"}),"\n",(0,s.jsx)(n.li,{children:"Proof of Concept for Private voting, using AlephZero's Liminal Shielder - This one will require to start up a local custom AlephZero node, with ZK Verifier pallet implemented, as currently this functionally is not available on any AlephZero live chain"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"scope-of-w3f-grant",children:"Scope of W3F Grant"}),"\n",(0,s.jsx)(n.p,{children:"Based on the MVP described above, our team will deliver several extensions that will make our solution more universal, accessible, and possibly transferable to other Polkadot based chains, that implement Contract pallet."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"OpenZeppelins\u2019 like Governance Standards"}),'\nIdeally, we plan to split the possible functionalities of a DAO into separate Rust traits, so that one can "bootstrap" the desired modules/functionalities and easily customize them. Moreover, our goal is to keep the project open for extension so in the future new modues/features could be added without the need to change existing standard. We will refactor the Smart Contracts code for creating DAOs and voting strategies, improve them, make more universal, and customizable so that they can be easily implemented. Additionally, we will prepare a documentation of each part, so that custom DAO contracts can be easily build from the ready puzzles. OpenZeppelins standards are the inspiration for this part, as there isn\'t any similar standard on Polkadot ecosystem yet.']}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"On-chain Automation System Template"}),"\nSmart contracts, even though considered autonomous, require a manual trigger from the user to execute certain functions. In ecosystems such as DAO, automatic execution of the proposals is something that is still missing. For this part we will create a template tool, that will work as off-chain worker for scheduling Smart Contracts calls. It will work as a simple application, with the Scheduler, and some relayer accounts, that contain tokens for covering gas costs. Scheduling certain actions, like for example mentioned above - executing proposal once they reach the deadline, will be possible by simply setting the call on the Smart Contract. The off-chain relayer, will read the state from the given smart contract, and then schedule the Smart Contract call."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"SDK"}),"\nOur platform Syncra, is just one of the examples of how our infrastructure can be used, that is why we will create a set of ready solutions, so that a new platform (ex. frontend, mobile app, etc.) can be build, upon the pillars created by Syncra. In this part, a bundle for NPM and Yarn will be created, wrapping all core functionalities of Syncra. Developer will be able to simply install the SDK library in their project, setup the endpoints, and API KEYs for accessing our backend services, and then simply call given functions inside of their custom application."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"SDK Documentation"})}),"\n",(0,s.jsx)(n.p,{children:"Dedicated documentation for the SDK will be created, so that the whole tool can be implemented with ease. We will also provide instructions for obtaining the necessary configuration keys, and other variables necessary to connect with our services."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"technology-stack",children:"Technology stack"}),"\n",(0,s.jsx)(n.p,{children:"Each of the core elements will be developed with certain set of technologies, and programming languages."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Smart Contracts as Governance Standards"}),"\nWritten in Rust with the use of ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink",children:"ink!"})," framework and ",(0,s.jsx)(n.a,{href:"https://github.com/727-Ventures/openbrush-contracts",children:"OpenBrush"})," library for PSP22 standard of tokens, as well as additional helper functions, such as modifier for checking the roles. The documentation will be developed using ",(0,s.jsx)(n.a,{href:"https://docusaurus.io/",children:"Docusaurus"})," framework, that leverages JavaScript and TypeScript."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"On-chain Automation System Template"}),"\nMain technology stack here will be TypeScript, and Node.js Express for creating a server that can be deployed and hosted on most of the available hosting services. The reason behind this is the ease of implementation, and the availability of various libraries and technologies that can be added on top of it. This service won't receive many calls, rather act as a relayer that reads data on-chain, and then submits data/send calls to Smart Contracts on-chain, without further need for external calls. As a core tool for creating calls to Smart Contracts, we will leverage ",(0,s.jsx)(n.a,{href:"https://polkadot.js.org/docs/api-contract",children:"Polkadot.js Contracts API"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"SDK"}),"\nJavaScript and TypeScript will be fundamental programming languages of this part, while ",(0,s.jsx)(n.a,{href:"npmjs.com",children:"NPM"})," registry will be used for publishing the package itself. The SDK will be basically a wrapper of the certain functions that call Smart Contracts, and Backend. It will require the developer to add configuration, such as API Key to access our backend, Smart Contract Factory address, as well as the ABI files, that will serve as an instruction for calling each Smart Contract. We are not going to hardcode those in the SDK, as in the future, the platform may be deployed on different chains in the Polkadot ecosystem. Moreover, the Smart Contracts can be upgraded, or created with different set of rules and methods."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"SDK Documentation"}),"\nThe entire documentation for implementing SDK in the given project, will be built using ",(0,s.jsx)(n.a,{href:"https://docusaurus.io/",children:"Docusaurus"})," that leverages JavaScript and TypeScript."]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"hosting-and-infrastructure",children:"Hosting and Infrastructure"}),"\n",(0,s.jsx)(n.p,{children:"All of the code will be open-source, and available under our organizational repositories address"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/orgs/SyncraDAO/repositories",children:"Syncra Repositories"})}),"\n",(0,s.jsx)(n.p,{children:"Frontend application from the MVP part will be available under the address below"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://syncra.xyz/",children:"syncra.xyz"})}),"\n",(0,s.jsxs)(n.p,{children:["Example demo of on-chain automation service is going to be hosted most probably on the ",(0,s.jsx)(n.a,{href:"https://railway.app/",children:"Railway"})," service, and it will connect with one of the instances of Data Base, hosted on the ",(0,s.jsx)(n.a,{href:"https://www.mongodb.com/atlas/database",children:"Atlas MongoDB"})," service. The files stored on IPFS will leverage ",(0,s.jsx)(n.a,{href:"https://web3.storage/",children:"Web3 Storage"})," services."]}),"\n",(0,s.jsxs)(n.p,{children:["SDK bundle on the other hand, will be published on the ",(0,s.jsx)(n.a,{href:"npmjs.com",children:"official npmjs registry"})]}),"\n",(0,s.jsxs)(n.p,{children:["Documentation will published on the ",(0,s.jsx)(n.a,{href:"https://pages.github.com/",children:"GH Pages"})]}),"\n",(0,s.jsx)(n.h4,{id:"risks",children:"Risks"}),"\n",(0,s.jsx)(n.p,{children:"There are several known risk that we are aware of, and will try our best to find solutions to prevent those scenarios from happening. Nevertheless, it is worth noticing those potential fields, which could have been improved for better safety."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Storing Account Private Keys for Off-Chain Automation Relayer - since for sending transactions to the Smart Contracts, we need an actual on-chain Address, the seeds for that account, has to be stored somewhere on the Cloud. In this way, no human interaction is needed to create a signature. In our solution, we have no other option then just store those keys on one of the Cloud services. In such scenarios, there is always a risk of a data breach, that could compromise the access to the account, with the access to the funds stored for covering gas fees on it."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Smart Contracts Security Hole - we expect our Smart Contracts to be initially audited by ",(0,s.jsx)(n.a,{href:"https://kudelskisecurity.com/",children:"Kudelski Security"})," as a part of AlephZero grant. However, there is still a risk that something will not be caught during the audit, and we will also extend those Smart Contracts during this Project as for the purpose of creating OpenZeppelins like standards. During the development, some additional security issues may occur."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Off-Chain Automation Relayer Operational Failure - Automation relayer work as a centralized service for executing the calls, if for some reason, it will stop operating, the scheduled action may not be executed. For that reason, we are considering deploying several instances of this relayer, on multiple services, with multiple accounts. In this way we should minimize the risk of the scheduled action, not being executed due to the relayer's operational failure."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsx)(n.p,{children:"Given the importance of scalable, and customisable DAO infrastructure, which many protocols needs, we want to introduce Syncra. As a easy to use, modular, reliable, and customisable platform we believe, that is crucial element of the ecosystem. Leveraging undisclosed voting, treasury management, on-chain automation, and many others we might bring a real value."}),"\n",(0,s.jsx)(n.p,{children:"Our project aim to be the ecosystem standard for DAOs on Polkadot, Kusama, Aleph Zero and any Subsrate based ecosystem."}),"\n",(0,s.jsx)(n.h2,{id:"team",children:"Team"}),"\n",(0,s.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Name of team leader:"})," Przemys\u0142aw Paczoski"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Names of team members:"})," Pawe\u0142 Kowalewski, Krzysztof Kuczma, Jan Kuczma"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Name:"})," Przemys\u0142aw Paczoski"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Email:"})," ",(0,s.jsx)(n.a,{href:"mailto:przemek@syncra.xyz",children:"przemek@syncra.xyz"})]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsxs)(n.strong,{children:["Website: ",(0,s.jsx)(n.a,{href:"https://syncra.xyz",children:"https://syncra.xyz"})]})}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Registered Address:"})," TBD"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Registered Legal Entity:"})," TBD"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Przemys\u0142aw Paczoski"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"Lead, front-end, and quality engineer with more than 6 years of experience in the field. Working on numerous projects with companies like XTB, Docplanner, Dfns, and others. He participated in a few NFT initiatives in addition to his professional activities, where he received practical expertise in creating projects from the ground up. He actively participate in hackathons and won awards in various categories."})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Krzysztof Kuczma"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"Software engineer with over than 5 years of experience. Knowledgeable in front-end, and backend technologies, alongside Azure and GCP ecosystems. Working on projects for large financial institutions. Since 2020, exploring web3 projects, participating in hackathons in which winning awards. Passionate about knowledge sharing, in which he is running the YouTube channel about programming."})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Pawe\u0142 Kowalewski"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"Software Engineer, with experience in several blockchain technologies including projects based on Lightning Network. Prior to his software engineering career, he was an Academician and an Automotive Technician. The co-host of the YouTube channel \u201cDevs in Chains\u201d, focused on topics related to web3, web development, and Blockchain. He has attended numerous hackathons and won awards in various categories."})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Jan Kuczma"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"An Alumni of the University of Sussex with Bachelor\u2019s at Computer Sciences with focus on AI and Computer Architectures. In the academic course, he participated in several hacking events and I developed various software projects including developing a 3D game in Unity and designing and implementing Machine Learning models in Python. His final year he become interested in Blockchain technologies and started learning smart contracts development. He quickly become proficient in this matter."})}),"\n",(0,s.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(n.p,{children:["Syncra Organization: ",(0,s.jsx)(n.a,{href:"https://github.com/SyncraDAO",children:"https://github.com/SyncraDAO"})]}),"\n",(0,s.jsxs)(n.p,{children:["Smart Contracts: ",(0,s.jsx)(n.a,{href:"https://github.com/SyncraDAO/modular-dao",children:"https://github.com/SyncraDAO/modular-dao"})]}),"\n",(0,s.jsxs)(n.p,{children:["Backend: ",(0,s.jsx)(n.a,{href:"https://github.com/SyncraDAO/Liberum-Backend",children:"https://github.com/SyncraDAO/Liberum-Backend"})]}),"\n",(0,s.jsx)(n.p,{children:"All developments within the Web3 Foundation Grants Program will be open-sourced from day one on GitHub."}),"\n",(0,s.jsx)(n.h3,{id:"team-github-profiles",children:"Team GitHub Profiles"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Przemys\u0142aw Paczoski: ",(0,s.jsx)(n.a,{href:"https://github.com/Kodziak",children:"https://github.com/Kodziak"})]}),"\n",(0,s.jsxs)(n.li,{children:["Krzysztof Kuczma: ",(0,s.jsx)(n.a,{href:"https://github.com/KrzysiekKuczma",children:"https://github.com/KrzysiekKuczma"})]}),"\n",(0,s.jsxs)(n.li,{children:["Pawe\u0142 Kowalewski: ",(0,s.jsx)(n.a,{href:"https://github.com/KowalewskiPawel",children:"https://github.com/KowalewskiPawel"})]}),"\n",(0,s.jsxs)(n.li,{children:["Jan Kuczma: ",(0,s.jsx)(n.a,{href:"https://github.com/jsk28",children:"https://github.com/jsk28"})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Przemys\u0142aw Paczoski: ",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/ppaczoski/",children:"https://www.linkedin.com/in/ppaczoski/"})]}),"\n",(0,s.jsxs)(n.li,{children:["Krzysztof Kuczma: ",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/krzysztof-kuczma/",children:"https://www.linkedin.com/in/krzysztof-kuczma/"})]}),"\n",(0,s.jsxs)(n.li,{children:["Pawe\u0142 Kowalewski: ",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/kowalewskipawel/",children:"https://www.linkedin.com/in/kowalewskipawel/"})]}),"\n",(0,s.jsxs)(n.li,{children:["Jan Kuczma: ",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/kowalewskipawel/",children:"https://www"}),(0,s.jsx)(n.a,{href:"http://www.linkedin.com/in/jkuczma",children:".linkedin.com/in/jkuczma"})]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"development-status",children:"Development Status"}),"\n",(0,s.jsx)(n.p,{children:"The project is currently in early-stage development. We achieved a proof-of-concept solution during the HackOnChain hackathon in Berlin, and then decided to rebuild it from scratch, aiming for a minimum viable product soon."}),"\n",(0,s.jsx)(n.p,{children:"Part of the MVP is almost finished. We aim to deploy the solution on the Aleph Zero testnet within a couple of weeks. The landing page, designs, and part of the application are almost complete."}),"\n",(0,s.jsx)(n.p,{children:"We are currently focusing on legalising the entity, marketing, pitch decks, whitepapers, and many other things."}),"\n",(0,s.jsx)(n.h2,{id:"development-roadmap",children:"Development Roadmap"}),"\n",(0,s.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Estimated Duration:"})," 12 weeks"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Full-Time Equivalent (FTE):"})," 2 FTE"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Costs:"})," Requested amount in USD for the whole project 30,000 USD."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-1",children:"Milestone 1"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated duration:"})," 6 weeks"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 2"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," 15,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"Apache 2.0"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"A clear overview of the software's architecture and components, as well as its main functions and capabilities. Technical details, including programming language, technologies, frameworks, libraries, and services."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0c."}),(0,s.jsx)(n.td,{children:"Testing Guide"}),(0,s.jsx)(n.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0d."}),(0,s.jsx)(n.td,{children:"Article"}),(0,s.jsx)(n.td,{children:"We will publish an article that introduces to the solution with all the guidelines included."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"1."}),(0,s.jsx)(n.td,{children:"DAO Smart Contracts (OpenZeppelins\u2019 like) Governance Standards"}),(0,s.jsx)(n.td,{children:"Set of traits with default implementation for basic DAO feature such as voting power mechanisms based on psp22 and psp34, proposal creation and execution, quorum, proposal creation threshold and role-based proposal creation and execution. Both Smart Contracts written in ink! with OpenBrush will be provided, as well as the documentation explaining each part, with the tutorial of creating a new custom Governance Smart Contract."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"2."}),(0,s.jsx)(n.td,{children:"On-chain Automation Tool"}),(0,s.jsx)(n.td,{children:"Source code as a Template with the Scheduler, and Smart Contracts caller will be provided. Moreover, as an example at least one instance of such a relayer will be deployed, and prepared for testing."})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-2",children:"Milestone 2"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated duration:"})," 6 weeks"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 2"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," 15,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"Apache 2.0"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"A clear overview of the software's architecture and components, as well as its main functions and capabilities. Technical details, including programming language, technologies, frameworks, libraries, and services."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0c."}),(0,s.jsx)(n.td,{children:"Testing Guide"}),(0,s.jsx)(n.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0d."}),(0,s.jsx)(n.td,{children:"Article"}),(0,s.jsx)(n.td,{children:"We will publish an article that introduces to the solution with all the guidelines included."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"1."}),(0,s.jsx)(n.td,{children:"SDK"}),(0,s.jsx)(n.td,{children:"NPM package with ready wrapped functions, for creating custom GUI for the DAO platform based on Syncra will be provided. The package will be also published on the NPM registry. It will cover the workflow of connecting with our services, and creating the whole workflow, from creating the DAO, to adding proposals, and voting on them."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"2."}),(0,s.jsx)(n.td,{children:"SDK Documentation"}),(0,s.jsx)(n.td,{children:"Clear overview, instructions, and explanation of each SDK's part will be documented in the documentation that will be available publicly for everyone."})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsx)(n.p,{children:"After completing the grant, our goal is to establish a seamless process for creating and managing DAOs, with a great user experience. Additionally, we aim to enable protocols to integrate our solution into their systems using an SDK."}),"\n",(0,s.jsx)(n.p,{children:"Our next steps include:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Providing para-chain support, with the goal of allowing protocols across all Substrate-based blockchains to use Syncra's solution."}),"\n",(0,s.jsx)(n.li,{children:"Improving the security of the solutions provided in the scope of this grant"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"additional-information",children:"Additional Information"}),"\n",(0,s.jsx)(n.h3,{id:"how-did-you-hear-about-the-grants-program",children:(0,s.jsx)(n.strong,{children:"How did you hear about the Grants Program?"})}),"\n",(0,s.jsx)(n.p,{children:"Web3 Foundation Website, and Personal Recommendation."}),"\n",(0,s.jsx)(n.h3,{id:"work-you-have-already-done",children:"Work you have already done"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Platform MVP"}),"\n",(0,s.jsx)(n.li,{children:"Designs"}),"\n",(0,s.jsx)(n.li,{children:"Started to build brand recognition on Twitter and Discord community"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"previous-grants-you-may-have-applied-for",children:"Previous grants you may have applied for"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Aleph Zero Grants program"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>o});var i=t(96540);const s={},r=i.createContext(s);function a(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/026f8a43.78599c21.js b/assets/js/026f8a43.78599c21.js new file mode 100644 index 00000000000..2a9e2b53b37 --- /dev/null +++ b/assets/js/026f8a43.78599c21.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[54531],{27327:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>a});const s=JSON.parse('{"id":"applications/workflow_testing","title":"DuoSwap Module","description":"Team Name:* Duo","source":"@site/applications/workflow_testing.md","sourceDirName":"applications","slug":"/applications/workflow_testing","permalink":"/applications/workflow_testing","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/workflow_testing.md","tags":[],"version":"current","frontMatter":{}}');var r=t(74848),o=t(28453);const i={},l="DuoSwap Module",c={},a=[{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Overview",id:"overview",level:3}];function d(e){const n={a:"a",h1:"h1",h3:"h3",header:"header",li:"li",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"duoswap-module",children:"DuoSwap Module"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Team Name:"})," Duo"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Payment Address:"})," 123mp123"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Contact Name:"})," John Brown"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Contact Email:"})," ",(0,r.jsx)(n.a,{href:"mailto:john@duo.com",children:"john@duo.com"})]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Registered Address:"})," High Street 1, London LK1 234, UK"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Registered Legal Entity:"})," Duo Ltd."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Total Estimated Duration:"})," 2 months"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Total Costs:"})," 0.80 btc"]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>l});var s=t(96540);const r={},o=s.createContext(r);function i(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/026f8a43.b02e0b62.js b/assets/js/026f8a43.b02e0b62.js deleted file mode 100644 index 61596980c67..00000000000 --- a/assets/js/026f8a43.b02e0b62.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[54531],{8649:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>a});const s=JSON.parse('{"id":"applications/workflow_testing","title":"DuoSwap Module","description":"Team Name:* Duo","source":"@site/applications/workflow_testing.md","sourceDirName":"applications","slug":"/applications/workflow_testing","permalink":"/applications/workflow_testing","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/workflow_testing.md","tags":[],"version":"current","frontMatter":{}}');var r=t(74848),o=t(28453);const i={},l="DuoSwap Module",c={},a=[{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Overview",id:"overview",level:3}];function d(e){const n={a:"a",h1:"h1",h3:"h3",header:"header",li:"li",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"duoswap-module",children:"DuoSwap Module"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Team Name:"})," Duo"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Payment Address:"})," 123mp123"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Contact Name:"})," John Brown"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Contact Email:"})," ",(0,r.jsx)(n.a,{href:"mailto:john@duo.com",children:"john@duo.com"})]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Registered Address:"})," High Street 1, London LK1 234, UK"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Registered Legal Entity:"})," Duo Ltd."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Total Estimated Duration:"})," 2 months"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Total Costs:"})," 0.80 btc"]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>l});var s=t(96540);const r={},o=s.createContext(r);function i(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/030c705f.32df7303.js b/assets/js/030c705f.32df7303.js new file mode 100644 index 00000000000..cf14d9a85c8 --- /dev/null +++ b/assets/js/030c705f.32df7303.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[53907],{47705:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"applications/xtokens","title":"xtokens - XCM Implementation for Fungible Assets","description":"This document is referenced in the terms and conditions and therefore needs to contain all the required information. Don\'t remove any of the mandatory parts presented in bold letters or as headlines! See the Open Grants Program Process on how to submit a proposal.","source":"@site/applications/xtokens.md","sourceDirName":"applications","slug":"/applications/xtokens","permalink":"/applications/xtokens","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/xtokens.md","tags":[],"version":"current","frontMatter":{}}');var i=t(74848),r=t(28453);const a={},o="xtokens - XCM Implementation for Fungible Assets",l={},c=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team Github",id:"team-github",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone \u2014 Implement xtokens PoC",id:"milestone--implement-xtokens-poc",level:3},{value:"Milestone \u2014 Further Implement xtokens according to the XCM Fungible Asset Implementation Guide",id:"milestone--further-implement-xtokens-according-to-the-xcm-fungible-asset-implementation-guide",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function d(e){const n={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"xtokens---xcm-implementation-for-fungible-assets",children:"xtokens - XCM Implementation for Fungible Assets"})}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["This document is referenced in the terms and conditions and therefore needs to contain all the required information. Don't remove any of the mandatory parts presented in bold letters or as headlines! See the ",(0,i.jsx)(n.a,{href:"https://github.com/w3f/Open-Grants-Program/blob/master/README_2.md",children:"Open Grants Program Process"})," on how to submit a proposal."]}),"\n"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Team Name:"})," Acala"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Payment Address:"})," ",(0,i.jsx)(n.code,{children:"1Q88PtW866r4bfv2eMphobP78QnsDrRKfY"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"The above combination of your GitHub account submitting the application and payment address will be your unique identifier during the program. Please keep them safe."})}),"\n",(0,i.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,i.jsx)(n.p,{children:"We are creating a XCM Implementation for Fungible Assets - xtokens."}),"\n",(0,i.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsxs)(n.p,{children:["Polkadot Cross-Consensus Message Format (XCM) is a generic message format that is very flexible but loosly defined. Therefore, we need to provide an implementation of required use case e.g. cross-chain transfer, for parachains to be interoperable with the same context, namely send/receive fungible assets between parachains, and between relay chain and parachains. We have developed an implementation guide, as well as a reference implementation ",(0,i.jsx)(n.code,{children:"xtokens"})," that has been used by Acala, Laminar, Plasm, and HydraDX successfully completing cross-chain fungible token transfers on Rococo parachain testnet. We are supporting many more projects including Moonbeam, Centrifuge, PolkaBTC, Darwinia, Kilt, Crust and Snowfork to implement this and enable our chains to be composable with each other."]}),"\n",(0,i.jsx)(n.p,{children:"We believe all chains on Polkadot/Kusama shall be composable with each other, from exchanging values to exchanging and altering states. The cross-chain fungible asset implementation is the first step towards this goal."}),"\n",(0,i.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,i.jsxs)(n.p,{children:["We have already delivered the work we outlined in a PoC state, we will continue the development to meet the ",(0,i.jsx)(n.code,{children:"best practice"})," outlined in the implementation guide at a production-grade standard, and this grant is applied partially in retrospect."]}),"\n",(0,i.jsx)(n.p,{children:"Below are deliverables:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["XCM Fungible Asset Implementation Guide that outlines fungible asset design considerations and discussions, serving as a draft ",(0,i.jsx)(n.code,{children:"best practice"}),". (see ",(0,i.jsx)(n.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library/discussions/385",children:"here"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["A reference implementation of cross-chain fungible assets - xtokens PoC (see xtokens ",(0,i.jsx)(n.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library/tree/master/xtokens",children:"here"})," and xcm-support ",(0,i.jsx)(n.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library/tree/master/xcm-support",children:"here"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["A detailed documentation for other parachains to use these pallets, configure cross-chain assets, open HRMP channels on Rococo to test the cross-chain transfer etc. (see docs ",(0,i.jsx)(n.a,{href:"https://wiki.acala.network/build/development-guide/composable-chains",children:"here"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Further develop xtokens to implement parachain and fungible asset identifier to handle asset conversion, assetId conversion, and multi-location conversion etc in a more generic and extensible way as described in the ",(0,i.jsx)(n.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library/discussions/385",children:"implementation guide"})]}),"\n",(0,i.jsxs)(n.li,{children:["We will contribute the ",(0,i.jsx)(n.code,{children:"xtokens"})," code to the ",(0,i.jsx)(n.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library",children:"orml (open-runtime-module-library)"})," so anyone can use and further extend it."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,i.jsxs)(n.p,{children:["This is another common-good implementation that would be useful to any parachains who want to send and receive fungible assets from other parachains, as well as send/receive relay chain token between relay chain and parachain. We have tackled many XCM and HRMP caveats while implementing ",(0,i.jsx)(n.code,{children:"xtokens"}),", which would save much time for many other projects and accelerate innovations on top of cross-chain value exchange. We also foresee this work will inspire more collaboration and discussion within the parachain ecosystem, and could also inspire similar development for non-fungible assets."]}),"\n",(0,i.jsx)(n.p,{children:"We are not aware of other implementations at this stage, but hope to inspire more."}),"\n",(0,i.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,i.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Shaun Wang (Lead Developer)"}),"\n",(0,i.jsx)(n.li,{children:"Bryan Chen (Architect)"}),"\n",(0,i.jsx)(n.li,{children:"Bette Chen (Product Manager)"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Contact Name:"})," Bette Chen"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Contact Email:"})," ",(0,i.jsx)(n.a,{href:"mailto:bette@acala.network",children:"bette@acala.network"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://acala.network/",children:"Acala Website"})}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Registered Address:"})," 462 Crawford Lane #02-39 Singapore 190462"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Registered Legal Entity:"})," ACALA PTE. LTD."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,i.jsx)(n.p,{children:"The team is made of experienced Substrate builders, various members are contributors to substrate, polkadot-js and other core libraries."}),"\n",(0,i.jsx)(n.p,{children:"Shaun Wang has been contributing to several Polkadot ecosystem open source libraries, including Substrate, parity-common, type-metadata, etc. He has worked extensively on launching Acala on Rococo testnet, implementing xtokens, helping various teams installing xtokens and successfully completing cross-chain transfers."}),"\n",(0,i.jsx)(n.p,{children:"Bryan Chen is one of the most active contributors to substrate codebase outside of Parity, a Polkadot community ambassador, and substrate/polkadot lecturer. He's the architect and technical brainpower behind the Laminar & Acala project."}),"\n",(0,i.jsx)(n.p,{children:"Bette Chen has more than a decade product/program/project management experience with background in Software Engineering and MBA from Otago and Duke. She's in charge of product and operation for Laminar & Acala."}),"\n",(0,i.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["xtokens: ",(0,i.jsx)(n.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library/tree/master/xtokens",children:"https://github.com/open-web3-stack/open-runtime-module-library/tree/master/xtokens"})]}),"\n",(0,i.jsxs)(n.li,{children:["xcm-support: ",(0,i.jsx)(n.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library/tree/master/xcm-support",children:"https://github.com/open-web3-stack/open-runtime-module-library/tree/master/xcm-support"})]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"team-github",children:"Team Github"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Shaun: ",(0,i.jsx)(n.a,{href:"https://github.com/orgs/laminar-protocol/people/shaopengw",children:"https://github.com/orgs/laminar-protocol/people/shaopengw"})]}),"\n",(0,i.jsxs)(n.li,{children:["Bryan: ",(0,i.jsx)(n.a,{href:"https://github.com/orgs/laminar-protocol/people/xlc",children:"https://github.com/orgs/laminar-protocol/people/xlc"})]}),"\n",(0,i.jsxs)(n.li,{children:["Bette: ",(0,i.jsx)(n.a,{href:"https://github.com/orgs/laminar-protocol/people/bette7",children:"https://github.com/orgs/laminar-protocol/people/bette7"})]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.linkedin.com/in/bryan-chen-1ba8ba52/",children:"https://www.linkedin.com/in/bryan-chen-1ba8ba52/"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.linkedin.com/in/bette-chen/",children:"https://www.linkedin.com/in/bette-chen/"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.linkedin.com/in/shaopeng-wang/",children:"https://www.linkedin.com/in/shaopeng-wang/"})}),"\n"]}),"\n",(0,i.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,i.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Total Estimated Duration:"})," 2 month"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Full-time equivalent (FTE):"})," 1.5 FTE"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Total Costs:"})," USD 25k (Payable in BTC)"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"milestone--implement-xtokens-poc",children:"Milestone \u2014 Implement xtokens PoC"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Estimated Duration:"})," 1 month"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"FTE:"})," 1.5"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Costs:"})," USD 15k"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Number"}),(0,i.jsx)(n.th,{children:"Deliverable"}),(0,i.jsx)(n.th,{children:"Specification"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0a."}),(0,i.jsx)(n.td,{children:"License"}),(0,i.jsx)(n.td,{children:"Apache 2.0"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0b."}),(0,i.jsx)(n.td,{children:"Documentation"}),(0,i.jsx)(n.td,{children:"We will provide both inline documentation of the code and a basic tutorial that explains how to use xtokens"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0c."}),(0,i.jsx)(n.td,{children:"Testing Guide"}),(0,i.jsx)(n.td,{children:"The code will have proper unit-test coverage to ensure functionality and robustness. In the guide we will describe how to run these tests"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1."}),(0,i.jsxs)(n.td,{children:["Substrate module: ",(0,i.jsx)(n.code,{children:"xtokens"})]}),(0,i.jsx)(n.td,{children:"We will create a Substrate module that will handle cross-chain Account and balance transfers: transfer relay chain token e.g. DOT, transfer parachain tokens to parachain etc."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2."}),(0,i.jsxs)(n.td,{children:["Substrate module: ",(0,i.jsx)(n.code,{children:"xcm-support"})]}),(0,i.jsx)(n.td,{children:"We will create a Substrate module that will provide support functionalities for XCM e.g. convert relay chain decimals to parachain decimals, supports multi-currency, and converts relay chain currencyId to parachain etc."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3."}),(0,i.jsx)(n.td,{children:"Support parachain installing xtoken"}),(0,i.jsx)(n.td,{children:"We will support other parachains to install and test cross-chain fungible token transfer using xtoken, by providing necessary documentation, direct technical support, and trouble shooting."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"4."}),(0,i.jsx)(n.td,{children:"Article/Tutorial"}),(0,i.jsx)(n.td,{children:"We will write a tutorial that explains the work done as part of the grant."})]})]})]}),"\n",(0,i.jsxs)(n.h3,{id:"milestone--further-implement-xtokens-according-to-the-xcm-fungible-asset-implementation-guide",children:["Milestone \u2014 Further Implement ",(0,i.jsx)(n.code,{children:"xtokens"})," according to the XCM Fungible Asset Implementation Guide"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Estimated Duration:"})," 1 month"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"FTE:"})," 1.5"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Costs:"})," USD 10k"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Number"}),(0,i.jsx)(n.th,{children:"Deliverable"}),(0,i.jsx)(n.th,{children:"Specification"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0a."}),(0,i.jsx)(n.td,{children:"License"}),(0,i.jsx)(n.td,{children:"Apache 2.0"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0b."}),(0,i.jsx)(n.td,{children:"Documentation"}),(0,i.jsx)(n.td,{children:"We will provide both inline documentation of the code and a basic tutorial that explains how to use xtokens"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0c."}),(0,i.jsx)(n.td,{children:"Testing Guide"}),(0,i.jsx)(n.td,{children:"The code will have proper unit-test coverage to ensure functionality and robustness. In the guide we will describe how to run these tests"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1."}),(0,i.jsxs)(n.td,{children:["Substrate module: ",(0,i.jsx)(n.code,{children:"xtokens"})]}),(0,i.jsxs)(n.td,{children:["We will extend ",(0,i.jsx)(n.code,{children:"xtokens"})," to include parachain fungible asset multi location mapping with parachainId as the namespace (in PoC it's just string identifiers), Asset Transactor to handle fungible asset balances and operations, Location Conversion to map multi-location and accountId, AssetId Conversion to map foreign multi-asset to native parachain assetId/currencyId and vice versa"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2."}),(0,i.jsxs)(n.td,{children:["Substrate module: ",(0,i.jsx)(n.code,{children:"xcm-support"})]}),(0,i.jsxs)(n.td,{children:["We will extend ",(0,i.jsx)(n.code,{children:"xcm-support"})," to support the added operations from #1"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3."}),(0,i.jsx)(n.td,{children:"Article/Tutorial"}),(0,i.jsx)(n.td,{children:"We will write a tutorial that explains the work done as part of the grant."})]})]})]}),"\n",(0,i.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,i.jsx)(n.p,{children:"This is only the beginning of shaping up specific use cases of XCM, we will continue to improve fungible asset implementations so its generic enough for most if not all parachains. This work is likely to inspire non-fungible asset implementations, and we'd also be keen to contribute further as well."}),"\n",(0,i.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,i.jsx)(n.p,{children:"Possible additional information to include:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"xtokens"})," PoC has been implemented on multiple parachains on Rcococ, Plasm was the first amongst them, and ",(0,i.jsx)(n.a,{href:"https://medium.com/acalanetwork/the-first-successful-cross-chain-messaging-passing-xcmp-transaction-on-polkadot-testnet-eb36af2ad8c3?source=collection_home---4------1-----------------------",children:"here"})," is the article describing it."]}),"\n",(0,i.jsx)(n.li,{children:"Are there are any teams who have already contributed (financially) to the project? Just Acala."}),"\n",(0,i.jsx)(n.li,{children:"Have you applied for other grants so far? Yes, we have a grant for stablecoin that has been completed. We also have a grant for a Substrate composable EVM, of which the first milestone has been delivered."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>o});var s=t(96540);const i={},r=s.createContext(i);function a(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/030c705f.febe7214.js b/assets/js/030c705f.febe7214.js deleted file mode 100644 index 34ba06e86c6..00000000000 --- a/assets/js/030c705f.febe7214.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[53907],{28168:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"applications/xtokens","title":"xtokens - XCM Implementation for Fungible Assets","description":"This document is referenced in the terms and conditions and therefore needs to contain all the required information. Don\'t remove any of the mandatory parts presented in bold letters or as headlines! See the Open Grants Program Process on how to submit a proposal.","source":"@site/applications/xtokens.md","sourceDirName":"applications","slug":"/applications/xtokens","permalink":"/applications/xtokens","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/xtokens.md","tags":[],"version":"current","frontMatter":{}}');var i=t(74848),r=t(28453);const a={},o="xtokens - XCM Implementation for Fungible Assets",l={},c=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team Github",id:"team-github",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone \u2014 Implement xtokens PoC",id:"milestone--implement-xtokens-poc",level:3},{value:"Milestone \u2014 Further Implement xtokens according to the XCM Fungible Asset Implementation Guide",id:"milestone--further-implement-xtokens-according-to-the-xcm-fungible-asset-implementation-guide",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function d(e){const n={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"xtokens---xcm-implementation-for-fungible-assets",children:"xtokens - XCM Implementation for Fungible Assets"})}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["This document is referenced in the terms and conditions and therefore needs to contain all the required information. Don't remove any of the mandatory parts presented in bold letters or as headlines! See the ",(0,i.jsx)(n.a,{href:"https://github.com/w3f/Open-Grants-Program/blob/master/README_2.md",children:"Open Grants Program Process"})," on how to submit a proposal."]}),"\n"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Team Name:"})," Acala"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Payment Address:"})," ",(0,i.jsx)(n.code,{children:"1Q88PtW866r4bfv2eMphobP78QnsDrRKfY"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"The above combination of your GitHub account submitting the application and payment address will be your unique identifier during the program. Please keep them safe."})}),"\n",(0,i.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,i.jsx)(n.p,{children:"We are creating a XCM Implementation for Fungible Assets - xtokens."}),"\n",(0,i.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsxs)(n.p,{children:["Polkadot Cross-Consensus Message Format (XCM) is a generic message format that is very flexible but loosly defined. Therefore, we need to provide an implementation of required use case e.g. cross-chain transfer, for parachains to be interoperable with the same context, namely send/receive fungible assets between parachains, and between relay chain and parachains. We have developed an implementation guide, as well as a reference implementation ",(0,i.jsx)(n.code,{children:"xtokens"})," that has been used by Acala, Laminar, Plasm, and HydraDX successfully completing cross-chain fungible token transfers on Rococo parachain testnet. We are supporting many more projects including Moonbeam, Centrifuge, PolkaBTC, Darwinia, Kilt, Crust and Snowfork to implement this and enable our chains to be composable with each other."]}),"\n",(0,i.jsx)(n.p,{children:"We believe all chains on Polkadot/Kusama shall be composable with each other, from exchanging values to exchanging and altering states. The cross-chain fungible asset implementation is the first step towards this goal."}),"\n",(0,i.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,i.jsxs)(n.p,{children:["We have already delivered the work we outlined in a PoC state, we will continue the development to meet the ",(0,i.jsx)(n.code,{children:"best practice"})," outlined in the implementation guide at a production-grade standard, and this grant is applied partially in retrospect."]}),"\n",(0,i.jsx)(n.p,{children:"Below are deliverables:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["XCM Fungible Asset Implementation Guide that outlines fungible asset design considerations and discussions, serving as a draft ",(0,i.jsx)(n.code,{children:"best practice"}),". (see ",(0,i.jsx)(n.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library/discussions/385",children:"here"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["A reference implementation of cross-chain fungible assets - xtokens PoC (see xtokens ",(0,i.jsx)(n.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library/tree/master/xtokens",children:"here"})," and xcm-support ",(0,i.jsx)(n.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library/tree/master/xcm-support",children:"here"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["A detailed documentation for other parachains to use these pallets, configure cross-chain assets, open HRMP channels on Rococo to test the cross-chain transfer etc. (see docs ",(0,i.jsx)(n.a,{href:"https://wiki.acala.network/build/development-guide/composable-chains",children:"here"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Further develop xtokens to implement parachain and fungible asset identifier to handle asset conversion, assetId conversion, and multi-location conversion etc in a more generic and extensible way as described in the ",(0,i.jsx)(n.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library/discussions/385",children:"implementation guide"})]}),"\n",(0,i.jsxs)(n.li,{children:["We will contribute the ",(0,i.jsx)(n.code,{children:"xtokens"})," code to the ",(0,i.jsx)(n.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library",children:"orml (open-runtime-module-library)"})," so anyone can use and further extend it."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,i.jsxs)(n.p,{children:["This is another common-good implementation that would be useful to any parachains who want to send and receive fungible assets from other parachains, as well as send/receive relay chain token between relay chain and parachain. We have tackled many XCM and HRMP caveats while implementing ",(0,i.jsx)(n.code,{children:"xtokens"}),", which would save much time for many other projects and accelerate innovations on top of cross-chain value exchange. We also foresee this work will inspire more collaboration and discussion within the parachain ecosystem, and could also inspire similar development for non-fungible assets."]}),"\n",(0,i.jsx)(n.p,{children:"We are not aware of other implementations at this stage, but hope to inspire more."}),"\n",(0,i.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,i.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Shaun Wang (Lead Developer)"}),"\n",(0,i.jsx)(n.li,{children:"Bryan Chen (Architect)"}),"\n",(0,i.jsx)(n.li,{children:"Bette Chen (Product Manager)"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Contact Name:"})," Bette Chen"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Contact Email:"})," ",(0,i.jsx)(n.a,{href:"mailto:bette@acala.network",children:"bette@acala.network"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://acala.network/",children:"Acala Website"})}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Registered Address:"})," 462 Crawford Lane #02-39 Singapore 190462"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Registered Legal Entity:"})," ACALA PTE. LTD."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,i.jsx)(n.p,{children:"The team is made of experienced Substrate builders, various members are contributors to substrate, polkadot-js and other core libraries."}),"\n",(0,i.jsx)(n.p,{children:"Shaun Wang has been contributing to several Polkadot ecosystem open source libraries, including Substrate, parity-common, type-metadata, etc. He has worked extensively on launching Acala on Rococo testnet, implementing xtokens, helping various teams installing xtokens and successfully completing cross-chain transfers."}),"\n",(0,i.jsx)(n.p,{children:"Bryan Chen is one of the most active contributors to substrate codebase outside of Parity, a Polkadot community ambassador, and substrate/polkadot lecturer. He's the architect and technical brainpower behind the Laminar & Acala project."}),"\n",(0,i.jsx)(n.p,{children:"Bette Chen has more than a decade product/program/project management experience with background in Software Engineering and MBA from Otago and Duke. She's in charge of product and operation for Laminar & Acala."}),"\n",(0,i.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["xtokens: ",(0,i.jsx)(n.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library/tree/master/xtokens",children:"https://github.com/open-web3-stack/open-runtime-module-library/tree/master/xtokens"})]}),"\n",(0,i.jsxs)(n.li,{children:["xcm-support: ",(0,i.jsx)(n.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library/tree/master/xcm-support",children:"https://github.com/open-web3-stack/open-runtime-module-library/tree/master/xcm-support"})]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"team-github",children:"Team Github"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Shaun: ",(0,i.jsx)(n.a,{href:"https://github.com/orgs/laminar-protocol/people/shaopengw",children:"https://github.com/orgs/laminar-protocol/people/shaopengw"})]}),"\n",(0,i.jsxs)(n.li,{children:["Bryan: ",(0,i.jsx)(n.a,{href:"https://github.com/orgs/laminar-protocol/people/xlc",children:"https://github.com/orgs/laminar-protocol/people/xlc"})]}),"\n",(0,i.jsxs)(n.li,{children:["Bette: ",(0,i.jsx)(n.a,{href:"https://github.com/orgs/laminar-protocol/people/bette7",children:"https://github.com/orgs/laminar-protocol/people/bette7"})]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.linkedin.com/in/bryan-chen-1ba8ba52/",children:"https://www.linkedin.com/in/bryan-chen-1ba8ba52/"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.linkedin.com/in/bette-chen/",children:"https://www.linkedin.com/in/bette-chen/"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.linkedin.com/in/shaopeng-wang/",children:"https://www.linkedin.com/in/shaopeng-wang/"})}),"\n"]}),"\n",(0,i.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,i.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Total Estimated Duration:"})," 2 month"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Full-time equivalent (FTE):"})," 1.5 FTE"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Total Costs:"})," USD 25k (Payable in BTC)"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"milestone--implement-xtokens-poc",children:"Milestone \u2014 Implement xtokens PoC"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Estimated Duration:"})," 1 month"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"FTE:"})," 1.5"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Costs:"})," USD 15k"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Number"}),(0,i.jsx)(n.th,{children:"Deliverable"}),(0,i.jsx)(n.th,{children:"Specification"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0a."}),(0,i.jsx)(n.td,{children:"License"}),(0,i.jsx)(n.td,{children:"Apache 2.0"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0b."}),(0,i.jsx)(n.td,{children:"Documentation"}),(0,i.jsx)(n.td,{children:"We will provide both inline documentation of the code and a basic tutorial that explains how to use xtokens"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0c."}),(0,i.jsx)(n.td,{children:"Testing Guide"}),(0,i.jsx)(n.td,{children:"The code will have proper unit-test coverage to ensure functionality and robustness. In the guide we will describe how to run these tests"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1."}),(0,i.jsxs)(n.td,{children:["Substrate module: ",(0,i.jsx)(n.code,{children:"xtokens"})]}),(0,i.jsx)(n.td,{children:"We will create a Substrate module that will handle cross-chain Account and balance transfers: transfer relay chain token e.g. DOT, transfer parachain tokens to parachain etc."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2."}),(0,i.jsxs)(n.td,{children:["Substrate module: ",(0,i.jsx)(n.code,{children:"xcm-support"})]}),(0,i.jsx)(n.td,{children:"We will create a Substrate module that will provide support functionalities for XCM e.g. convert relay chain decimals to parachain decimals, supports multi-currency, and converts relay chain currencyId to parachain etc."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3."}),(0,i.jsx)(n.td,{children:"Support parachain installing xtoken"}),(0,i.jsx)(n.td,{children:"We will support other parachains to install and test cross-chain fungible token transfer using xtoken, by providing necessary documentation, direct technical support, and trouble shooting."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"4."}),(0,i.jsx)(n.td,{children:"Article/Tutorial"}),(0,i.jsx)(n.td,{children:"We will write a tutorial that explains the work done as part of the grant."})]})]})]}),"\n",(0,i.jsxs)(n.h3,{id:"milestone--further-implement-xtokens-according-to-the-xcm-fungible-asset-implementation-guide",children:["Milestone \u2014 Further Implement ",(0,i.jsx)(n.code,{children:"xtokens"})," according to the XCM Fungible Asset Implementation Guide"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Estimated Duration:"})," 1 month"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"FTE:"})," 1.5"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Costs:"})," USD 10k"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Number"}),(0,i.jsx)(n.th,{children:"Deliverable"}),(0,i.jsx)(n.th,{children:"Specification"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0a."}),(0,i.jsx)(n.td,{children:"License"}),(0,i.jsx)(n.td,{children:"Apache 2.0"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0b."}),(0,i.jsx)(n.td,{children:"Documentation"}),(0,i.jsx)(n.td,{children:"We will provide both inline documentation of the code and a basic tutorial that explains how to use xtokens"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0c."}),(0,i.jsx)(n.td,{children:"Testing Guide"}),(0,i.jsx)(n.td,{children:"The code will have proper unit-test coverage to ensure functionality and robustness. In the guide we will describe how to run these tests"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1."}),(0,i.jsxs)(n.td,{children:["Substrate module: ",(0,i.jsx)(n.code,{children:"xtokens"})]}),(0,i.jsxs)(n.td,{children:["We will extend ",(0,i.jsx)(n.code,{children:"xtokens"})," to include parachain fungible asset multi location mapping with parachainId as the namespace (in PoC it's just string identifiers), Asset Transactor to handle fungible asset balances and operations, Location Conversion to map multi-location and accountId, AssetId Conversion to map foreign multi-asset to native parachain assetId/currencyId and vice versa"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2."}),(0,i.jsxs)(n.td,{children:["Substrate module: ",(0,i.jsx)(n.code,{children:"xcm-support"})]}),(0,i.jsxs)(n.td,{children:["We will extend ",(0,i.jsx)(n.code,{children:"xcm-support"})," to support the added operations from #1"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3."}),(0,i.jsx)(n.td,{children:"Article/Tutorial"}),(0,i.jsx)(n.td,{children:"We will write a tutorial that explains the work done as part of the grant."})]})]})]}),"\n",(0,i.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,i.jsx)(n.p,{children:"This is only the beginning of shaping up specific use cases of XCM, we will continue to improve fungible asset implementations so its generic enough for most if not all parachains. This work is likely to inspire non-fungible asset implementations, and we'd also be keen to contribute further as well."}),"\n",(0,i.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,i.jsx)(n.p,{children:"Possible additional information to include:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"xtokens"})," PoC has been implemented on multiple parachains on Rcococ, Plasm was the first amongst them, and ",(0,i.jsx)(n.a,{href:"https://medium.com/acalanetwork/the-first-successful-cross-chain-messaging-passing-xcmp-transaction-on-polkadot-testnet-eb36af2ad8c3?source=collection_home---4------1-----------------------",children:"here"})," is the article describing it."]}),"\n",(0,i.jsx)(n.li,{children:"Are there are any teams who have already contributed (financially) to the project? Just Acala."}),"\n",(0,i.jsx)(n.li,{children:"Have you applied for other grants so far? Yes, we have a grant for stablecoin that has been completed. We also have a grant for a Substrate composable EVM, of which the first milestone has been delivered."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>o});var s=t(96540);const i={},r=s.createContext(i);function a(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/033247b8.ba543adb.js b/assets/js/033247b8.ba543adb.js deleted file mode 100644 index 368a73a953e..00000000000 --- a/assets/js/033247b8.ba543adb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[59794],{34068:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>l,metadata:()=>n,toc:()=>o});const n=JSON.parse('{"id":"applications/c++polkadot-light-client","title":"Polkadot Light Client in C++","description":"- Team Name: Equilibrium","source":"@site/applications/c++polkadot-light-client.md","sourceDirName":"applications","slug":"/applications/c++polkadot-light-client","permalink":"/applications/c++polkadot-light-client","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/c++polkadot-light-client.md","tags":[],"version":"current","frontMatter":{}}');var s=t(74848),r=t(28453);const l={},a="Polkadot Light Client in C++",c={},o=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Project Details",id:"project-details",level:3},{value:"Cryptography",id:"cryptography",level:4},{value:"Embedding Runtime",id:"embedding-runtime",level:4},{value:"Specifications for multichain support",id:"specifications-for-multichain-support",level:4},{value:"JSON-RPC service APIs",id:"json-rpc-service-apis",level:4},{value:"Components specifications / selection",id:"components-specifications--selection",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview",level:3},{value:"Milestone 1 \u2014 Substrate Module Research",id:"milestone-1--substrate-module-research",level:3},{value:"Future Plans",id:"future-plans",level:2}];function d(e){const i={a:"a",br:"br",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.header,{children:(0,s.jsx)(i.h1,{id:"polkadot-light-client-in-c",children:"Polkadot Light Client in C++"})}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Team Name:"})," Equilibrium"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Payment Address:"})," 0x4126272BA14F7a124b1B98633678e0e5F87Ec478"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsxs)(i.strong,{children:[(0,s.jsx)(i.a,{href:"https://github.com/w3f/Grants-Program/tee/master#level_slider-levels",children:"Level"}),":"]})," 2"]}),"\n"]}),"\n",(0,s.jsxs)(i.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(i.p,{children:"This project is to create a C++ implementation of a Light Client for Substrate-based chains.\nOn a high level, the C++ Light Client will allow users (via JSON-RPC) to:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Query chain state within the client (on synced chain state, including runtime code)"}),"\n",(0,s.jsx)(i.li,{children:"Route user transactions to peers and track results"}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(i.p,{children:"We will deliver a detailed specification of a light client for the implementation based on the research done in the time frame specified in this proposal. The actual implementation will be performed in the next phase."}),"\n",(0,s.jsx)(i.p,{children:"The specification includes:"}),"\n",(0,s.jsx)(i.h4,{id:"cryptography",children:"Cryptography"}),"\n",(0,s.jsxs)(i.p,{children:["Define primitives / library requirements such as blake2 hashing for proof verification",(0,s.jsx)(i.br,{}),"\n","Check library availabilities and provide estimates for missing libraries"]}),"\n",(0,s.jsx)(i.h4,{id:"embedding-runtime",children:"Embedding Runtime"}),"\n",(0,s.jsxs)(i.p,{children:["Define runtime environment requirements (Browser / NodeJS application / Other?)*",(0,s.jsx)(i.br,{}),"\n","Select runtimes such as wasmedge and/or emscripten cross-compilation for desktop / server and/or browser",(0,s.jsx)(i.br,{}),"\n","Define embedding environment interface such as bindings in JavaScript"]}),"\n",(0,s.jsx)(i.h4,{id:"specifications-for-multichain-support",children:"Specifications for multichain support"}),"\n",(0,s.jsx)(i.p,{children:"Specify scope and support for Parachain and Relay chain"}),"\n",(0,s.jsx)(i.h4,{id:"json-rpc-service-apis",children:"JSON-RPC service APIs"}),"\n",(0,s.jsx)(i.p,{children:"Define APIs to be supported*\n(submitting transactions, watching transactions / blocks / accounts, etc)"}),"\n",(0,s.jsxs)(i.p,{children:["As the RPC API is currently unstable (see ",(0,s.jsx)(i.a,{href:"https://github.com/w3f/PSPs/issues/41",children:"PSPs#41"}),"), specification must be written first."]}),"\n",(0,s.jsx)(i.h4,{id:"components-specifications--selection",children:"Components specifications / selection"}),"\n",(0,s.jsxs)(i.p,{children:["Networking (likely cpp-libp2p)",(0,s.jsx)(i.br,{}),"\n","Database (likely SQLite)"]}),"\n",(0,s.jsx)(i.p,{children:"*Web3 Foundation input required"}),"\n",(0,s.jsx)(i.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsxs)(i.p,{children:["This is an alternate implementation to the WASM light node in ",(0,s.jsx)(i.a,{href:"https://github.com/paritytech/smoldot/",children:"Smoldot"}),"."]}),"\n",(0,s.jsxs)(i.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(i.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Vaclav Barta"}),"\n",(0,s.jsx)(i.li,{children:"Mark Henderson"}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Contact Name:"})," Mark Henderson"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Contact Email:"})," ",(0,s.jsx)(i.a,{href:"mailto:mark@equilibrium.co",children:"mark@equilibrium.co"})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Website:"})," ",(0,s.jsx)(i.a,{href:"https://equilibrium.co/",children:"https://equilibrium.co/"})]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Registered Address:"})," Leip\xe4tehdas, Kaikukatu 4, 6th floor 00530 Helsinki, Finland"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Registered Legal Entity:"})," Equilibrium Group Oy"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Vaclav Barta is a Senior Software Developer at Equilibrium. Having implemented C++ projects for companies from Akamai to Deutsche Bank, currently creating smart contract pipelines from C to WebAssembly for XRPL Foundation."}),"\n",(0,s.jsx)(i.li,{children:"Mark Henderson is the VP of Engineering at Equilibrium. He has led the team starting with the original Rust IPFS grant in late 2019, through engagements with many of the largest names in Web3, and is now circling back to finish the critical work the team started with the original Ziggurat proposal. Core contributor to OrbitDB, Rust IPFS, and Ziggurat."}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"https://github.com/eqlabs",children:"https://github.com/eqlabs"})}),"\n"]}),"\n",(0,s.jsxs)(i.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,s.jsx)(i.p,{children:"Equilibrium discussed with David Hawig on different implementation on Polkadot host, C++, AssemblyScript and Zig. After initial research, Equilibrium has decided to apply for the C++ implementation of the light node."}),"\n",(0,s.jsxs)(i.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(i.p,{children:"To achieve the final implementation, the project is broken down into 2 phases:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Phase 0: Initial research for C++ Light Client specification"}),"\n",(0,s.jsx)(i.li,{children:"Phase 1: Light Client implementation"}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"This proposal is only for Phase 0 and will culminate with the delivery of a detailed specification for the light client implementation in Phase 1."}),"\n",(0,s.jsx)(i.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Total Estimated Duration:"})," 5 weeks"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Full-Time Equivalent (FTE):"})," 1"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Total Costs:"})," $34000 USD"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"milestone-1--substrate-module-research",children:"Milestone 1 \u2014 Substrate Module Research"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Estimated duration:"})," 5 weeks"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"FTE:"})," 1"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Costs:"})," $34000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(i.th,{children:"Deliverable"}),(0,s.jsx)(i.th,{children:"Specification"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(i.td,{children:"License"}),(0,s.jsx)(i.td,{children:"Apache 2.0 / MIT"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(i.td,{children:"Format"}),(0,s.jsx)(i.td,{children:"Markdown (mdBook)"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"0c."}),(0,s.jsx)(i.td,{children:"Published"}),(0,s.jsx)(i.td,{children:"GitHub, GitHub Pages"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(i.td,{children:"Cryptography"}),(0,s.jsx)(i.td,{children:"security advantages over connecting to 3rd-party node, limitations compared to full client"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(i.td,{children:"Runtime environment requirements"}),(0,s.jsx)(i.td,{children:"for browser and Node.js"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"3."}),(0,s.jsx)(i.td,{children:"JSON-RPC APIs"}),(0,s.jsx)(i.td,{children:"minimal run-time access interface"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"4."}),(0,s.jsx)(i.td,{children:"Dependencies"}),(0,s.jsx)(i.td,{children:"libraries for cryptography, networking, build"})]})]})]}),"\n",(0,s.jsx)(i.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsx)(i.p,{children:"From here we would move on to the implementation of the light client node in Phase 1. We expect Phase 1 to be completed by a larger team at Equilibrium."})]})}function h(e={}){const{wrapper:i}={...(0,r.R)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,i,t)=>{t.d(i,{R:()=>l,x:()=>a});var n=t(96540);const s={},r=n.createContext(s);function l(e){const i=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),n.createElement(r.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/033247b8.be328f13.js b/assets/js/033247b8.be328f13.js new file mode 100644 index 00000000000..2e8823c2cb4 --- /dev/null +++ b/assets/js/033247b8.be328f13.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[59794],{27557:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>l,metadata:()=>n,toc:()=>o});const n=JSON.parse('{"id":"applications/c++polkadot-light-client","title":"Polkadot Light Client in C++","description":"- Team Name: Equilibrium","source":"@site/applications/c++polkadot-light-client.md","sourceDirName":"applications","slug":"/applications/c++polkadot-light-client","permalink":"/applications/c++polkadot-light-client","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/c++polkadot-light-client.md","tags":[],"version":"current","frontMatter":{}}');var s=t(74848),r=t(28453);const l={},a="Polkadot Light Client in C++",c={},o=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Project Details",id:"project-details",level:3},{value:"Cryptography",id:"cryptography",level:4},{value:"Embedding Runtime",id:"embedding-runtime",level:4},{value:"Specifications for multichain support",id:"specifications-for-multichain-support",level:4},{value:"JSON-RPC service APIs",id:"json-rpc-service-apis",level:4},{value:"Components specifications / selection",id:"components-specifications--selection",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview",level:3},{value:"Milestone 1 \u2014 Substrate Module Research",id:"milestone-1--substrate-module-research",level:3},{value:"Future Plans",id:"future-plans",level:2}];function d(e){const i={a:"a",br:"br",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.header,{children:(0,s.jsx)(i.h1,{id:"polkadot-light-client-in-c",children:"Polkadot Light Client in C++"})}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Team Name:"})," Equilibrium"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Payment Address:"})," 0x4126272BA14F7a124b1B98633678e0e5F87Ec478"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsxs)(i.strong,{children:[(0,s.jsx)(i.a,{href:"https://github.com/w3f/Grants-Program/tee/master#level_slider-levels",children:"Level"}),":"]})," 2"]}),"\n"]}),"\n",(0,s.jsxs)(i.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(i.p,{children:"This project is to create a C++ implementation of a Light Client for Substrate-based chains.\nOn a high level, the C++ Light Client will allow users (via JSON-RPC) to:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Query chain state within the client (on synced chain state, including runtime code)"}),"\n",(0,s.jsx)(i.li,{children:"Route user transactions to peers and track results"}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(i.p,{children:"We will deliver a detailed specification of a light client for the implementation based on the research done in the time frame specified in this proposal. The actual implementation will be performed in the next phase."}),"\n",(0,s.jsx)(i.p,{children:"The specification includes:"}),"\n",(0,s.jsx)(i.h4,{id:"cryptography",children:"Cryptography"}),"\n",(0,s.jsxs)(i.p,{children:["Define primitives / library requirements such as blake2 hashing for proof verification",(0,s.jsx)(i.br,{}),"\n","Check library availabilities and provide estimates for missing libraries"]}),"\n",(0,s.jsx)(i.h4,{id:"embedding-runtime",children:"Embedding Runtime"}),"\n",(0,s.jsxs)(i.p,{children:["Define runtime environment requirements (Browser / NodeJS application / Other?)*",(0,s.jsx)(i.br,{}),"\n","Select runtimes such as wasmedge and/or emscripten cross-compilation for desktop / server and/or browser",(0,s.jsx)(i.br,{}),"\n","Define embedding environment interface such as bindings in JavaScript"]}),"\n",(0,s.jsx)(i.h4,{id:"specifications-for-multichain-support",children:"Specifications for multichain support"}),"\n",(0,s.jsx)(i.p,{children:"Specify scope and support for Parachain and Relay chain"}),"\n",(0,s.jsx)(i.h4,{id:"json-rpc-service-apis",children:"JSON-RPC service APIs"}),"\n",(0,s.jsx)(i.p,{children:"Define APIs to be supported*\n(submitting transactions, watching transactions / blocks / accounts, etc)"}),"\n",(0,s.jsxs)(i.p,{children:["As the RPC API is currently unstable (see ",(0,s.jsx)(i.a,{href:"https://github.com/w3f/PSPs/issues/41",children:"PSPs#41"}),"), specification must be written first."]}),"\n",(0,s.jsx)(i.h4,{id:"components-specifications--selection",children:"Components specifications / selection"}),"\n",(0,s.jsxs)(i.p,{children:["Networking (likely cpp-libp2p)",(0,s.jsx)(i.br,{}),"\n","Database (likely SQLite)"]}),"\n",(0,s.jsx)(i.p,{children:"*Web3 Foundation input required"}),"\n",(0,s.jsx)(i.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsxs)(i.p,{children:["This is an alternate implementation to the WASM light node in ",(0,s.jsx)(i.a,{href:"https://github.com/paritytech/smoldot/",children:"Smoldot"}),"."]}),"\n",(0,s.jsxs)(i.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(i.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Vaclav Barta"}),"\n",(0,s.jsx)(i.li,{children:"Mark Henderson"}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Contact Name:"})," Mark Henderson"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Contact Email:"})," ",(0,s.jsx)(i.a,{href:"mailto:mark@equilibrium.co",children:"mark@equilibrium.co"})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Website:"})," ",(0,s.jsx)(i.a,{href:"https://equilibrium.co/",children:"https://equilibrium.co/"})]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Registered Address:"})," Leip\xe4tehdas, Kaikukatu 4, 6th floor 00530 Helsinki, Finland"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Registered Legal Entity:"})," Equilibrium Group Oy"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Vaclav Barta is a Senior Software Developer at Equilibrium. Having implemented C++ projects for companies from Akamai to Deutsche Bank, currently creating smart contract pipelines from C to WebAssembly for XRPL Foundation."}),"\n",(0,s.jsx)(i.li,{children:"Mark Henderson is the VP of Engineering at Equilibrium. He has led the team starting with the original Rust IPFS grant in late 2019, through engagements with many of the largest names in Web3, and is now circling back to finish the critical work the team started with the original Ziggurat proposal. Core contributor to OrbitDB, Rust IPFS, and Ziggurat."}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"https://github.com/eqlabs",children:"https://github.com/eqlabs"})}),"\n"]}),"\n",(0,s.jsxs)(i.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,s.jsx)(i.p,{children:"Equilibrium discussed with David Hawig on different implementation on Polkadot host, C++, AssemblyScript and Zig. After initial research, Equilibrium has decided to apply for the C++ implementation of the light node."}),"\n",(0,s.jsxs)(i.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(i.p,{children:"To achieve the final implementation, the project is broken down into 2 phases:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Phase 0: Initial research for C++ Light Client specification"}),"\n",(0,s.jsx)(i.li,{children:"Phase 1: Light Client implementation"}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"This proposal is only for Phase 0 and will culminate with the delivery of a detailed specification for the light client implementation in Phase 1."}),"\n",(0,s.jsx)(i.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Total Estimated Duration:"})," 5 weeks"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Full-Time Equivalent (FTE):"})," 1"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Total Costs:"})," $34000 USD"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"milestone-1--substrate-module-research",children:"Milestone 1 \u2014 Substrate Module Research"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Estimated duration:"})," 5 weeks"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"FTE:"})," 1"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Costs:"})," $34000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(i.th,{children:"Deliverable"}),(0,s.jsx)(i.th,{children:"Specification"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(i.td,{children:"License"}),(0,s.jsx)(i.td,{children:"Apache 2.0 / MIT"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(i.td,{children:"Format"}),(0,s.jsx)(i.td,{children:"Markdown (mdBook)"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"0c."}),(0,s.jsx)(i.td,{children:"Published"}),(0,s.jsx)(i.td,{children:"GitHub, GitHub Pages"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(i.td,{children:"Cryptography"}),(0,s.jsx)(i.td,{children:"security advantages over connecting to 3rd-party node, limitations compared to full client"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(i.td,{children:"Runtime environment requirements"}),(0,s.jsx)(i.td,{children:"for browser and Node.js"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"3."}),(0,s.jsx)(i.td,{children:"JSON-RPC APIs"}),(0,s.jsx)(i.td,{children:"minimal run-time access interface"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"4."}),(0,s.jsx)(i.td,{children:"Dependencies"}),(0,s.jsx)(i.td,{children:"libraries for cryptography, networking, build"})]})]})]}),"\n",(0,s.jsx)(i.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsx)(i.p,{children:"From here we would move on to the implementation of the light client node in Phase 1. We expect Phase 1 to be completed by a larger team at Equilibrium."})]})}function h(e={}){const{wrapper:i}={...(0,r.R)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,i,t)=>{t.d(i,{R:()=>l,x:()=>a});var n=t(96540);const s={},r=n.createContext(s);function l(e){const i=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),n.createElement(r.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/039f99b9.d9d0a127.js b/assets/js/039f99b9.d9d0a127.js deleted file mode 100644 index b72f18ca4e0..00000000000 --- a/assets/js/039f99b9.d9d0a127.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[54972],{72575:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"applications/polket_toearnfun","title":"ToEarnFun","description":"- Team Name: Polket","source":"@site/applications/polket_toearnfun.md","sourceDirName":"applications","slug":"/applications/polket_toearnfun","permalink":"/applications/polket_toearnfun","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/polket_toearnfun.md","tags":[],"version":"current","frontMatter":{}}');var s=n(74848),r=n(28453);const l={},o="ToEarnFun",a={},c=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Where did the idea come from?",id:"where-did-the-idea-come-from",level:3},{value:"Overview",id:"overview",level:3},{value:"Project Features",id:"project-features",level:3},{value:"Easy To Use",id:"easy-to-use",level:4},{value:"Equipment Chip Embedding Proof Of Training",id:"equipment-chip-embedding-proof-of-training",level:4},{value:"Fitness + GameFi",id:"fitness--gamefi",level:4},{value:"The gameplay is completely decentralized",id:"the-gameplay-is-completely-decentralized",level:4},{value:"Project Application Scenarios",id:"project-application-scenarios",level:3},{value:"Combination of Physical Industry and Blockchain",id:"combination-of-physical-industry-and-blockchain",level:4},{value:"Fitness + GameFi",id:"fitness--gamefi-1",level:3},{value:"VFE Market",id:"vfe-market",level:3},{value:"Competition Challenge",id:"competition-challenge",level:3},{value:"Project Architecture",id:"project-architecture",level:3},{value:"More About This Project",id:"more-about-this-project",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Where and how does your project fit into the ecosystem?",id:"where-and-how-does-your-project-fit-into-the-ecosystem",level:4},{value:"Who is your target audience?",id:"who-is-your-target-audience",level:4},{value:"What need(s) does your project meet?",id:"what-needs-does-your-project-meet",level:4},{value:"Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem?",id:"are-there-any-other-projects-similar-to-yours-in-the-substrate--polkadot--kusama-ecosystem",level:4},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 - Implement the gameplay of VFE on Polket, and implement App based on Flutter",id:"milestone-1---implement-the-gameplay-of-vfe-on-polket-and-implement-app-based-on-flutter",level:3},{value:"Milestone 2 - Implement the buyback and VFE Market on Polket, and release Android App(Alpha-test)",id:"milestone-2---implement-the-buyback-and-vfe-market-on-polket-and-release-android-appalpha-test",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function h(e){const t={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"toearnfun",children:"ToEarnFun"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Team Name:"})," Polket"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Payment Address:"})," 0xd35f9Ea14D063af9B3567064FAB567275b09f03D(ETH-USDT)"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsxs)(t.strong,{children:[(0,s.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 2"]}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(t.h3,{id:"where-did-the-idea-come-from",children:"Where did the idea come from?"}),"\n",(0,s.jsxs)(t.p,{children:["Inspired by the success of ",(0,s.jsx)(t.strong,{children:"STEPN"}),", we have great confidence in Web3 applications combined with life scenarios. Because to let the majority of users enter the Web3 world, the interactive way of life scenes is the easiest entry. So we started from the fitness field and developed a Web3 smart fitness application, allowing ordinary users to pick up fitness equipment, training daily + GameFi, and gradually understand how the Web3 world can bring them more value and fun."]}),"\n",(0,s.jsxs)(t.p,{children:["Although ",(0,s.jsx)(t.strong,{children:"STEPN"})," achieved great success and dazzling attention as soon as it was launched, it also exposed the following problems:"]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Getting started is difficult and high risk"}),". Beginners first need cryptocurrency and buy at least one virtual sneaker before they can start running. Due to the long-term price instability of cryptocurrencies, users cannot grasp the timing of buying cryptocurrencies, which can lead to serious losses."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Insufficient decentralization"}),". ",(0,s.jsx)(t.strong,{children:"STEPN"}),", like most GameFi, adopts the solution of decentralization of asset transactions and centralized gameplay. This is because due to the bottleneck of the current smart contract technology, it is impossible to achieve complete decentralization, so the game system has the risk of self-theft, such as inflated rewards, malicious bans, and service suspension."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Incentives are not sustainable"}),". The incentive tokens generated by ",(0,s.jsx)(t.strong,{children:"STEPN"})," running are freely circulated without restrictions, and the business model is unsustainable, and will eventually enter a death spiral."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Is really cross-chain?"}),". Although ",(0,s.jsx)(t.strong,{children:"STEPN"})," publishes the same kind of assets on both public chains, the asset values are different, and it is not a cross-chain in the true sense."]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["After noticing the above problems, we finally adopted ",(0,s.jsx)(t.strong,{children:"Substrate"})," as the underlying technology in technology selection, and developed a blockchain named ",(0,s.jsx)(t.strong,{children:"Polket"}),". The goal of ",(0,s.jsx)(t.strong,{children:"Polket"})," is to create more commercial application scenarios for NFTs and connect to the Polkadot/Kusama network in a parachain manner. Based on the ",(0,s.jsx)(t.strong,{children:"Polket"})," chain, we will develop a smart fitness-type Web3 application to achieve capabilities that ",(0,s.jsx)(t.strong,{children:"STEPN"})," cannot achieve. We will name it ",(0,s.jsx)(t.strong,{children:"ToEarnFun"}),"."]}),"\n",(0,s.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://github.com/aexkobe/hackathon-2022-summer/raw/main/teams/08-polket/assets/toearnfun-log.svg",alt:"logo"})}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"ToEarnFun"})," is a ",(0,s.jsx)(t.strong,{children:"fit to earn"})," Web3 smart fitness application. Compared with other ",(0,s.jsx)(t.strong,{children:"x-to-earn"})," applications that only have ",(0,s.jsx)(t.strong,{children:"SocialFi"})," and ",(0,s.jsx)(t.strong,{children:"GameFi"})," elements, it can be connected with real smart fitness equipment. It relies on the encryption technology of the hardware chip to ensure that the sweat is paid fairly. The entry-level users of ",(0,s.jsx)(t.strong,{children:"ToEarnFun"})," do not need to purchase cryptocurrencies, but only need to purchase smart fitness equipment adapted to the application, and they can ",(0,s.jsx)(t.strong,{children:"fit to earn"})," immediately, greatly reducing the difficulty for ordinary users to enter the web3 world."]}),"\n",(0,s.jsx)(t.h3,{id:"project-features",children:"Project Features"}),"\n",(0,s.jsx)(t.h4,{id:"easy-to-use",children:"Easy To Use"}),"\n",(0,s.jsxs)(t.p,{children:["After the fitness equipment producer has passed the official qualification certification of ",(0,s.jsx)(t.strong,{children:"ToEarnFun"}),", the producer will register the chip public-key on the blockchain for each piece of fitness equipment produced. The user purchases ",(0,s.jsx)(t.strong,{children:"ToEarnFun"})," fitness equipment in the store, and completes the activation in the App, then can get a ",(0,s.jsx)(t.strong,{children:"VFE"})," (",(0,s.jsx)(t.strong,{children:"Virtual Fitness Equipment"}),", it can be understood as a type of ",(0,s.jsx)(t.strong,{children:"NFT"}),"). Users train through fitness equipment every day, and the system calculates the corresponding rewards based on the ",(0,s.jsx)(t.strong,{children:"VFE"})," attribute value on the chain."]}),"\n",(0,s.jsxs)(t.p,{children:["Compared with ",(0,s.jsx)(t.strong,{children:"STEPN"}),", which requires users to use cryptocurrencies to purchase ",(0,s.jsx)(t.strong,{children:"Sneaker"}),", ",(0,s.jsx)(t.strong,{children:"ToEarnFun"})," does not require users to own cryptocurrencies, and it is easier to meet regional compliance requirements in terms of sales methods. The ",(0,s.jsx)(t.strong,{children:"ToEarnFun"})," community is formed by a group of users with real fitness needs, and is also a group that is optimistic about the future of Web3. Opens a door for Web2 users to enter the ",(0,s.jsx)(t.strong,{children:"Polkadot ecosystem"}),"."]}),"\n",(0,s.jsx)(t.h4,{id:"equipment-chip-embedding-proof-of-training",children:"Equipment Chip Embedding Proof Of Training"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.em,{children:"How to prove that the player has completed the training?"})}),"\n",(0,s.jsxs)(t.p,{children:["In order to realize the ",(0,s.jsx)(t.code,{children:"Proof Of Training"})," algorithm, we need to embed a crypto algorithm in the chip of the smart fitness equipment. The equipment needs to generate a key pair and register the public key on the blockchain before leaving the factory. After the user activates the equipment, each time he completes the training, the equipment will sign the training data and submit it to the blockchain to complete the proof, and finally the user will receive a fair reward."]}),"\n",(0,s.jsx)(t.p,{children:"Since the private key of the equipment is generated by the chip before leaving the factory, the player cannot obtain it and cannot tamper with it, which prevents the player from modifying the training data through software, but the player can still cheat through physical plug-ins. However, with the development of technology, we will add motion sensors and biological inspection technology to the equipment to record more valuable data for player training and to prevent cheating by physical plug-ins."}),"\n",(0,s.jsx)(t.h4,{id:"fitness--gamefi",children:"Fitness + GameFi"}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"ToEarnFun"})," not only has the advantages of smart fitness applications, but also realizes the gameplay of ",(0,s.jsx)(t.strong,{children:"GameFi"}),". The core of the game is ",(0,s.jsx)(t.strong,{children:"VFE"}),"(",(0,s.jsx)(t.code,{children:"Virtual Fitness Equipment"}),") as the gameplay, ",(0,s.jsx)(t.strong,{children:"VFE"})," has a level system, with four basic attributes (efficiency, skill, luck, durability), four rarities (common, elite, rare, epic), and available power. When the user activates the equipment, they will get a ",(0,s.jsx)(t.strong,{children:"VFE"})," of common rarity and level 0 for free. Users can earn ",(0,s.jsx)(t.strong,{children:"FUN"})," by consuming energy through daily train, ",(0,s.jsx)(t.strong,{children:"FUN"})," is a consumable in ",(0,s.jsx)(t.strong,{children:"VFE"})," gameplay, used to: upgrade ",(0,s.jsx)(t.strong,{children:"VFE"})," level, ",(0,s.jsx)(t.strong,{children:"VFE"})," charging, Synthesize ",(0,s.jsx)(t.strong,{children:"VFE"}),", transaction fees, challenge events and more. ",(0,s.jsx)(t.strong,{children:"VFE"})," Get attribute points for each level up, and users can configure attributes independently. At present, the equipment we are implementing to interact with VFE is smart jump rope."]}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"VFE"})," is shorthand for ",(0,s.jsx)(t.code,{children:"Virtual Fitness Equipment"}),". It can be understood as a subclass of ",(0,s.jsx)(t.code,{children:"NFT (non-fungible token)"}),". We will create ",(0,s.jsx)(t.code,{children:"VFE"})," such as ",(0,s.jsx)(t.code,{children:"Smart Jump Rope"}),", ",(0,s.jsx)(t.code,{children:"Smart Hula Hoop"}),", ",(0,s.jsx)(t.code,{children:"Smart Boxing"}),", ",(0,s.jsx)(t.code,{children:"Spinning Bike"})," on the chain. What the user gets is a unique ",(0,s.jsx)(t.code,{children:"VFE instance"})," minted by ",(0,s.jsx)(t.code,{children:"VFE"}),"."]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.em,{children:"Basic attribute description:"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Efficiency"}),": It affects the amount of ",(0,s.jsx)(t.strong,{children:"FUN"})," income. The higher the efficiency, the more stable the income growth. It is recommended for entry-level users to configure."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Skill"}),": Affects the training score factor. The higher the skill, the higher the ",(0,s.jsx)(t.strong,{children:"FUN"})," income from training score conversion. Training score can dramatically increase or decrease your income, so recommended configuration for advanced users."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Luck"}),": Affects the drop probability of items and the amount of income added by random numbers on the chain."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Durability"}),": Affects ",(0,s.jsx)(t.strong,{children:"VFE"})," charging cost."]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.em,{children:"Rarity Description:"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Normal"}),": Free with purchase of fitness equipment."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Elite"}),": Collect ",(0,s.jsx)(t.strong,{children:"VFE"})," parts and combine with ",(0,s.jsx)(t.strong,{children:"VFE"})," chips to mint a new ",(0,s.jsx)(t.strong,{children:"VFE"}),", with a small probability to obtain."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Rare"}),": ",(0,s.jsx)(t.strong,{children:"ToEarnFun Official"})," regular sales."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Epic"}),": Participate in the ",(0,s.jsx)(t.strong,{children:"ToEarnFun official"})," event to get it."]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["Base stats and upgrade points, ",(0,s.jsx)(t.strong,{children:"common < elite < rare < epic"}),"."]}),"\n",(0,s.jsx)(t.h4,{id:"the-gameplay-is-completely-decentralized",children:"The gameplay is completely decentralized"}),"\n",(0,s.jsxs)(t.p,{children:["Most ",(0,s.jsx)(t.strong,{children:"GameFi"})," applications are implemented with ",(0,s.jsx)(t.strong,{children:"asset transaction decentralization and gameplay centralized"})," solutions. Because most Dapps are implemented based on smart contracts, limited by the execution efficiency and upgrade difficulties of smart contracts, it is difficult to achieve decentralized gameplay. Thanks to the forkless upgrade feature of ",(0,s.jsx)(t.strong,{children:"Substrate"}),", we can implement the gameplay on the chain, and more new gameplay can be implemented through the ",(0,s.jsx)(t.strong,{children:"Runtime"})," upgrade in the future, which will be a Web3 application in the true sense."]}),"\n",(0,s.jsx)(t.h3,{id:"project-application-scenarios",children:"Project Application Scenarios"}),"\n",(0,s.jsx)(t.h4,{id:"combination-of-physical-industry-and-blockchain",children:"Combination of Physical Industry and Blockchain"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://github.com/aexkobe/hackathon-2022-summer/raw/main/teams/08-polket/assets/toearnfun-produce-model-en.png",alt:"production"})}),"\n",(0,s.jsxs)(t.p,{children:["Participants: ",(0,s.jsx)(t.strong,{children:"Fitness Users"}),", ",(0,s.jsx)(t.strong,{children:"Equipment Producer"}),", ",(0,s.jsx)(t.strong,{children:"ToEarnFun Official"}),"."]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"ToEarnFun Official"})," first needs to create a ",(0,s.jsx)(t.strong,{children:"VFE"})," class on-chain. The first thing we implement is the ",(0,s.jsx)(t.strong,{children:"VFE"})," of the ",(0,s.jsx)(t.strong,{children:"rope skipping"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["To cooperate with ",(0,s.jsx)(t.strong,{children:"ToEarnFun"}),", equipment producers need to complete qualification certification and deposit a certain amount of security deposit into the ",(0,s.jsx)(t.strong,{children:"Producer Ledger"})," on the chain, which will be used to deduct fees for subsequent minting of ",(0,s.jsx)(t.strong,{children:"VFE"})," instances."]}),"\n",(0,s.jsxs)(t.li,{children:["According to the deposit amount deposited by the equipment producer, the system grants the producer a certain number of ",(0,s.jsx)(t.strong,{children:"VFE"})," minting rights."]}),"\n",(0,s.jsxs)(t.li,{children:["After the equipment producer completes the qualification certification, the ",(0,s.jsx)(t.strong,{children:"toearnfun-crypto-sdk"})," is integrated into the fitness equipment chip to realize the encryption protocol."]}),"\n",(0,s.jsxs)(t.li,{children:["Before leaving the factory, fitness equipment needs to be registered on the ",(0,s.jsx)(t.strong,{children:"Equipment Ledger"}),", and a mintinng fee will be reserved from the ",(0,s.jsx)(t.strong,{children:"Producer Ledger"})," on-chain."]}),"\n",(0,s.jsxs)(t.li,{children:["Fitness users can buy ",(0,s.jsx)(t.strong,{children:"ToEarnFun"})," cooperative fitness equipment in the local store without cryptocurrency."]}),"\n",(0,s.jsxs)(t.li,{children:["Fitness users complete on-chain activation of fitness equipment through the ",(0,s.jsx)(t.strong,{children:"ToEarnFun"})," app."]}),"\n",(0,s.jsxs)(t.li,{children:["After the fitness equipment is successfully activated, ",(0,s.jsx)(t.strong,{children:"Producer Ledger"})," will pay a minting fee from the reserved balance to ",(0,s.jsx)(t.strong,{children:"ToEarnFun Official Treasury"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["Because the producer has the minting right of the ",(0,s.jsx)(t.strong,{children:"VFE"})," class, a ",(0,s.jsx)(t.strong,{children:"VFE"})," instance will be minted on-chain to fitness users."]}),"\n",(0,s.jsxs)(t.li,{children:["Fitness users can get a ",(0,s.jsx)(t.strong,{children:"VFE"})," instance for free, in fact, the producer paid the minting fee when registering the equipment on the chain."]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["This business model not only helps traditional fitness equipment producers enter the Web3 world, expands the user base, and promotes industrial development, but also brings stable income to ",(0,s.jsx)(t.strong,{children:"ToEarnFun"})," and motivates ",(0,s.jsx)(t.strong,{children:"FUN"})," on ",(0,s.jsx)(t.strong,{children:"GameFi"})," in the future. Modules provide the foundation."]}),"\n",(0,s.jsx)(t.h3,{id:"fitness--gamefi-1",children:"Fitness + GameFi"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://github.com/aexkobe/hackathon-2022-summer/raw/main/teams/08-polket/assets/toearnfun-gamefi-model-en.png",alt:"Fitness+GameFi"})}),"\n",(0,s.jsxs)(t.p,{children:["Participants: ",(0,s.jsx)(t.strong,{children:"Fitness Users"}),", ",(0,s.jsx)(t.strong,{children:"ToEarnFun Official"}),"."]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Fitness users use fitness equipment for daily training."}),"\n",(0,s.jsxs)(t.li,{children:["The fitness equipment signature training data will be reported to the on-chain ",(0,s.jsx)(t.strong,{children:"Training Ledger"})," through the App."]}),"\n",(0,s.jsxs)(t.li,{children:["Calculate the reward according to the ",(0,s.jsx)(t.strong,{children:"VFE"})," attribute bound to the fitness equipment and the number of energy consumed during the training."]}),"\n",(0,s.jsxs)(t.li,{children:["The ",(0,s.jsx)(t.strong,{children:"FUN"})," incentive module issues rewards to fitness users, but there is a daily upper limit on rewards."]}),"\n",(0,s.jsxs)(t.li,{children:["Fitness users can use ",(0,s.jsx)(t.strong,{children:"FUN"})," to level up ",(0,s.jsx)(t.strong,{children:"VFE"})," instances to increase attribute points."]}),"\n",(0,s.jsxs)(t.li,{children:["Fitness users can sell their excess ",(0,s.jsx)(t.strong,{children:"FUN"})," to the ",(0,s.jsx)(t.strong,{children:"FUN Buybck Pool"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"ToEarnFun official"})," regularly buyback FUN in the pool."]}),"\n",(0,s.jsxs)(t.li,{children:["After each buyback of ",(0,s.jsx)(t.strong,{children:"FUN"}),", its buyback price will change. In order to ensure price stability, changes in the ",(0,s.jsx)(t.strong,{children:"FUN Buyback Price"})," will affect its inflation rate."]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["This business model not only allows users who like fitness to get the equivalent of their sweat, but also allows users who are addicted to ",(0,s.jsx)(t.strong,{children:"GameFi"})," to have the goal of fitness."]}),"\n",(0,s.jsx)(t.h3,{id:"vfe-market",children:"VFE Market"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://github.com/aexkobe/hackathon-2022-summer/raw/main/teams/08-polket/assets/toearnfun-market-model-en.png",alt:"VFE Market"})}),"\n",(0,s.jsxs)(t.p,{children:["Participants: ",(0,s.jsx)(t.strong,{children:"Fitness Users"}),", ",(0,s.jsx)(t.strong,{children:"ToEarnFun Official"}),", ",(0,s.jsx)(t.strong,{children:"3rd-party IP"}),"."]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"ToEarnFun Official"})," can approve 3rd-party IP certain amount of ",(0,s.jsx)(t.strong,{children:"VFE"})," minting rights."]}),"\n",(0,s.jsxs)(t.li,{children:["Whether it is ",(0,s.jsx)(t.strong,{children:"ToEarnFun Official"})," or ",(0,s.jsx)(t.strong,{children:"3rd-party IP"}),", as long as you have ",(0,s.jsx)(t.strong,{children:"VFE"})," minting rights, you can mint new ",(0,s.jsx)(t.strong,{children:"VFE"})," instances."]}),"\n",(0,s.jsxs)(t.li,{children:["However, every time a ",(0,s.jsx)(t.strong,{children:"VFE"})," instance is minted by a 3rd-party IP, the minting fee needs to be paid to ",(0,s.jsx)(t.strong,{children:"ToEarnFun Official"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["The newly minted ",(0,s.jsx)(t.strong,{children:"VFE"})," instance will be put into the ",(0,s.jsx)(t.strong,{children:"VFE"})," market and will be sold by auction or fixed-price."]}),"\n",(0,s.jsxs)(t.li,{children:["Fitness users can consume ",(0,s.jsx)(t.strong,{children:"FUN"})," to unbind the ",(0,s.jsx)(t.strong,{children:"VFE"})," instance on the equipment."]}),"\n",(0,s.jsxs)(t.li,{children:["The unbound ",(0,s.jsx)(t.strong,{children:"VFE"})," instance can be sold to the ",(0,s.jsx)(t.strong,{children:"VFE"})," market."]}),"\n",(0,s.jsxs)(t.li,{children:["Fitness users can also buy their favorite ",(0,s.jsx)(t.strong,{children:"VFE"})," instances in the ",(0,s.jsx)(t.strong,{children:"VFE"})," market."]}),"\n",(0,s.jsxs)(t.li,{children:["Fitness users buy VFE instances with better attributes, and then bind them to the equipment for training, which is the most effective way to earn ",(0,s.jsx)(t.strong,{children:"FUN"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["Compared with traditional games, ",(0,s.jsx)(t.strong,{children:"GameFi"})," has the characteristics of playability and possession, and game items have value. ",(0,s.jsx)(t.strong,{children:"ToEarnFun Official"})," can bring income through the sale of ",(0,s.jsx)(t.strong,{children:"VFE"}),", or it can also approve 3rd-party IP to mint ",(0,s.jsx)(t.strong,{children:"VFE"})," to bring income. Fitness users can also freely exchange ",(0,s.jsx)(t.strong,{children:"VFE"})," in the market to achieve arbitrage."]}),"\n",(0,s.jsx)(t.h3,{id:"competition-challenge",children:"Competition Challenge"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://github.com/aexkobe/hackathon-2022-summer/raw/main/teams/08-polket/assets/toearnfun-competition-model-en.png",alt:"Competition challenge"})}),"\n",(0,s.jsxs)(t.p,{children:["Participants: ",(0,s.jsx)(t.strong,{children:"Fitness Users"}),", ",(0,s.jsx)(t.strong,{children:"ToEarnFun Official"}),", ",(0,s.jsx)(t.strong,{children:"Public Welfare Organizations"}),"."]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"ToEarnFun Official"})," create competition template, set: registration fee, registration requirements, competition requirements, scoring rules, bonus distribution, cycle time limit, etc."]}),"\n",(0,s.jsx)(t.li,{children:"The competition template will publish event instances periodically."}),"\n",(0,s.jsx)(t.li,{children:"Fitness users who meet the registration requirements can pay the registration fee to participate in the event."}),"\n",(0,s.jsx)(t.li,{children:"Fitness users use their own fitness equipment to challenge according to the requirements of the competition."}),"\n",(0,s.jsx)(t.li,{children:"The fitness equipment reports the training data to the on-chain competition record."}),"\n",(0,s.jsx)(t.li,{children:"After the game, the game record will be determined according to the scoring rules of the game."}),"\n",(0,s.jsx)(t.li,{children:"Prizes will be awarded to the winner of the competition."}),"\n",(0,s.jsxs)(t.li,{children:["A portion of the funds raised by the event will be invested in the ",(0,s.jsx)(t.strong,{children:"Public Welfare Treasury"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["The funds of the ",(0,s.jsx)(t.strong,{children:"Public Welfare Treasury"})," can be donated to public welfare organizations through the proposal of the Public Welfare Council."]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["The use of blockchain to realize competition events is a very suitable application scenario. It not only makes the competition fair, open and transparent, but also greatly reduces labor costs and allows the ",(0,s.jsx)(t.strong,{children:"Public Welfare Treasury"})," to obtain more funds. At the same time, ",(0,s.jsx)(t.strong,{children:"DAO"})," is used to manage the ",(0,s.jsx)(t.strong,{children:"Public Welfare Treasury"}),", which ensures the sustainable development of public welfare undertakings."]}),"\n",(0,s.jsx)(t.h3,{id:"project-architecture",children:"Project Architecture"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://github.com/aexkobe/hackathon-2022-summer/raw/main/teams/08-polket/assets/toearnfun-architecture.png",alt:"Architecture"})}),"\n",(0,s.jsx)(t.h3,{id:"more-about-this-project",children:"More About This Project"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://www.toearn.fun",children:"Official website"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://app.mockplus.cn/run/design/21F_BXJYGPY/47SlUMc7lXwKP?cps=collapse&dt=iPhone%2013&ha=1&linkID=O9QYqoyvhVRzS&nav=1",children:"App UI Mockups"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://drive.google.com/file/d/1hpaKNFYQhYxkj0dNOEaRD81jcSrm66h3/view?usp=sharing",children:"Demo Video"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/polketio",children:"Github Repository"})}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsx)(t.h4,{id:"where-and-how-does-your-project-fit-into-the-ecosystem",children:"Where and how does your project fit into the ecosystem?"}),"\n",(0,s.jsx)(t.p,{children:"As we all know, it is more complicated for ordinary users to enter Web3. They need to buy cryptocurrencies and learn to use cryptocurrency wallets. Learn about different ecosystems and find out which Dapps are right for them."}),"\n",(0,s.jsxs)(t.p,{children:["I try to simplify this entry through the combination of ",(0,s.jsx)(t.code,{children:"hardware + Substrate + Mobile App"}),". Let ordinary people only need to buy a smart jump rope at the retailer, and training everyday, Web3 will give them another income. Gradually, they will learn about the Polkadot ecosystem, and they will slowly discover that Polkadot's parachains can bring them more value."]}),"\n",(0,s.jsx)(t.h4,{id:"who-is-your-target-audience",children:"Who is your target audience?"}),"\n",(0,s.jsx)(t.p,{children:"Our target audience are fitness enthusiasts and Polkadot ecosystem's users."}),"\n",(0,s.jsx)(t.h4,{id:"what-needs-does-your-project-meet",children:"What need(s) does your project meet?"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Use token incentives to promote people's daily training and get healthy body."}),"\n",(0,s.jsx)(t.li,{children:"Through physical product sales, new users will be brought to the Polkadot ecosystem."}),"\n"]}),"\n",(0,s.jsx)(t.h4,{id:"are-there-any-other-projects-similar-to-yours-in-the-substrate--polkadot--kusama-ecosystem",children:"Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem?"}),"\n",(0,s.jsx)(t.p,{children:"Similar projects have not yet appeared in the Substrate / Polkadot / Kusama ecosystem.\nThis table compares our project to similar projects in other ecosystems."}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Items"}),(0,s.jsx)(t.th,{children:"STEPN"}),(0,s.jsx)(t.th,{children:"FitR"}),(0,s.jsx)(t.th,{children:"ToEarnFun"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Physical Product"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"Yes"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Proof of Training"}),(0,s.jsx)(t.td,{children:"The App calculates the training data, and the central system proves"}),(0,s.jsx)(t.td,{children:"Same as STEPN"}),(0,s.jsx)(t.td,{children:"Hardware calculates training data, blockchain proves"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Incentives"}),(0,s.jsx)(t.td,{children:"GST has no upper limit and transferable, GMT has pre-mined and transferable"}),(0,s.jsx)(t.td,{children:"Same as STEPN"}),(0,s.jsx)(t.td,{children:"FUN has no upper limit and is not transferable, PNT has no pre-mining and the official promise to buyback"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Ecosystem"}),(0,s.jsx)(t.td,{children:"Solana/BSC/Ethereum"}),(0,s.jsx)(t.td,{children:"BSC"}),(0,s.jsx)(t.td,{children:"Polkadot/Kusama"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Target Audience"}),(0,s.jsx)(t.td,{children:"Crypto users"}),(0,s.jsx)(t.td,{children:"Same as STEPN"}),(0,s.jsx)(t.td,{children:"Crypto users and fitness users"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Source of income"}),(0,s.jsx)(t.td,{children:"NFT Sales, Market Tax"}),(0,s.jsx)(t.td,{children:"Same as STEPN"}),(0,s.jsx)(t.td,{children:"VFE Sales, Market Tax, Product Sales"})]})]})]}),"\n",(0,s.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Zhiquan Mai"}),": CEO. He once served as the development leader of cryptocurrency wallet system of ",(0,s.jsx)(t.a,{href:"https://www.bitbank.com/",children:"Bitbank"}),". In his spare time, he has developed some open-source iOS projects, such as ",(0,s.jsx)(t.a,{href:"https://github.com/zhiquan911/chance_btc_wallet",children:"Bitcoin Multisig wallet"})," and ",(0,s.jsx)(t.a,{href:"https://github.com/zhiquan911/CHKLineChart",children:"CHKLineChart"}),". Now he is responsible for the development of openwallet framework, which supports more than 70+ blockchain protocols."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Jianqiang Chen"}),": System development engineer. Now he is responsible for the development of the openwallet developer platform, which provides APIs to help developers quickly build cryptocurrency wallet applications."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Dongxing Liang"}),": System architect engineer. Now he is responsible for the back-end development of the openwallet.link enterprise-level digital-assets management system, and provides more than 70+ main chain assets and token asset custody services for digital financial companies."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Yinghao Fan"}),": Front-end engineer. He is now responsible for the front-end of openwallet related applications, such as the back-end of enterprise asset management, wallet applications, etc."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Shuchao He"}),": Cryptographic algorithm engineer. He is now responsible for the development of the underlying cryptographic library of openwallet, and supports the implementation of cryptographic algorithms such as ECC, Hash, and transaction verification for mainstream blockchains."]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Contact Name:"})," Zhiquan Mai"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Contact Email:"})," ",(0,s.jsx)(t.a,{href:"mailto:zhiquan911@gmail.com",children:"zhiquan911@gmail.com"})]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Website"}),": ",(0,s.jsx)(t.a,{href:"https://toearn.fun",children:"https://toearn.fun"})]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Registered Address:"})," Zhongshan Meiju Industrial Park, 6th Floor, Building 9."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Registered Legal Entity:"})," Zhongshan Shangyuzhou Technology Co., Ltd."]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsxs)(t.p,{children:["Our team has developed the ",(0,s.jsx)(t.a,{href:"https://github.com/blocktree",children:"openwallet"})," framework and redefines a wallet system model compatible with multiple blockchains. At the same time, we have build an openwallet developer platform, which integrates 70+ blockchain protocols, which greatly reduces the cost of developers and users."]}),"\n",(0,s.jsxs)(t.p,{children:["Our team also uses the ",(0,s.jsx)(t.a,{href:"https://www.openwallet.cn",children:"openwallet developer platform"})," to provide enterprises with blockchain-related development services, such as: cryptocurrency wallets, enterprise-level cryptocurrency management systems, multi-chain multisig wallet systems."]}),"\n",(0,s.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/blocktree",children:"https://github.com/blocktree"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/zhiquan911",children:"https://github.com/zhiquan911"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/godaddy-x",children:"https://github.com/godaddy-x"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/fanyinghao",children:"https://github.com/fanyinghao"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/Brochao",children:"https://github.com/Brochao"})}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["At present, we have completed the ",(0,s.jsx)(t.a,{href:"https://toearn.fun",children:"official website release"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["At present, we have completed ",(0,s.jsx)(t.a,{href:"https://app.mockplus.cn/run/design/21F_BXJYGPY/47SlUMc7lXwKP?cps=collapse&dt=iPhone%2013&ha=1&linkID=O9QYqoyvhVRzS&nav=1",children:"App Mockups"}),", and some ",(0,s.jsx)(t.a,{href:"https://drive.google.com/drive/folders/1O3yULWEVhGFzzDXwTWQr75SUU1-8oMEg?usp=sharing",children:"VFE"})," and ",(0,s.jsx)(t.a,{href:"https://drive.google.com/drive/folders/1NtV9sDeP8ATlT8hk0e22wQX6pDokIV9M?usp=sharing",children:"Smart Jump Rope Design"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["Polket is under development and the ",(0,s.jsx)(t.a,{href:"https://polkadot.js.org/apps/?rpc=wss://testnet-node.polket.io#/explorer",children:"Testnet"})," has been deployed ."]}),"\n",(0,s.jsx)(t.li,{children:"We have found a smart jump rope factory to develop a prototype product and embedded the encryption library we wrote into the product's chip. Each product generates a ECC keypair at the factory and implements the signature algorithm of the training data."}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Total Estimated Duration:"})," 4 months"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Full-Time Equivalent (FTE):"})," 4 FTE"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Total Costs:"})," $30,000 USD"]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"milestone-1---implement-the-gameplay-of-vfe-on-polket-and-implement-app-based-on-flutter",children:"Milestone 1 - Implement the gameplay of VFE on Polket, and implement App based on Flutter"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Estimated duration:"})," 2 month"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"FTE:"})," 4"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Costs:"})," 15,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(t.th,{children:"Deliverable"}),(0,s.jsx)(t.th,{children:"Specification"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(t.td,{children:"License"}),(0,s.jsx)(t.td,{children:"GPL-3.0"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(t.td,{children:"Documentation"}),(0,s.jsxs)(t.td,{children:["We will provide both ",(0,s.jsx)(t.strong,{children:"inline documentation"})," of the code and a basic ",(0,s.jsx)(t.strong,{children:"tutorial"})," that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0c."}),(0,s.jsx)(t.td,{children:"Testing Guide"}),(0,s.jsx)(t.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0d."}),(0,s.jsx)(t.td,{children:"Docker"}),(0,s.jsx)(t.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(t.td,{children:"Substrate module: pallet-vfe"}),(0,s.jsxs)(t.td,{children:["This module implements VFE gameplay, such as: ",(0,s.jsx)(t.code,{children:"producer_register"}),", ",(0,s.jsx)(t.code,{children:"device_type_create"}),", ",(0,s.jsx)(t.code,{children:"register_device"}),", ",(0,s.jsx)(t.code,{children:"bind_device"}),", ",(0,s.jsx)(t.code,{children:"sport_upload"}),", ",(0,s.jsx)(t.code,{children:"power_recovery"})," etc."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(t.td,{children:"Substrate module: pallet-unique-id"}),(0,s.jsx)(t.td,{children:"This module implements self-incrementing ID maintenance for stores in pallet-unique."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,s.jsx)(t.td,{children:"Substrate module: pallet-currencies"}),(0,s.jsxs)(t.td,{children:["This module is an implementor of ",(0,s.jsx)(t.code,{children:"frame_support::traits::fungibles"})," compatible with pallet-balances and pallet-assets."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"4."}),(0,s.jsx)(t.td,{children:"Substrate module: pallet-support"}),(0,s.jsx)(t.td,{children:"This module provides standard traits definitions for data interaction between different pallets."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"5."}),(0,s.jsx)(t.td,{children:"Flutter App: Smart Jump Rope supported"}),(0,s.jsx)(t.td,{children:"The App first supports smart jump rope, such as connecting equipment, generating keys in the equipment, and synchronizing training data."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"6."}),(0,s.jsx)(t.td,{children:"Flutter App: Integrate polkawallet-sdk"}),(0,s.jsx)(t.td,{children:"The App will integrate polkawallet-sdk to implement a built-in wallet that supports the polkadot ecosystem."})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"milestone-2---implement-the-buyback-and-vfe-market-on-polket-and-release-android-appalpha-test",children:"Milestone 2 - Implement the buyback and VFE Market on Polket, and release Android App(Alpha-test)"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Estimated Duration:"})," 2 month"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"FTE:"})," 4"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Costs:"})," 15,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(t.th,{children:"Deliverable"}),(0,s.jsx)(t.th,{children:"Specification"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(t.td,{children:"License"}),(0,s.jsx)(t.td,{children:"GPL-3.0"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(t.td,{children:"Documentation"}),(0,s.jsxs)(t.td,{children:["We will provide both ",(0,s.jsx)(t.strong,{children:"inline documentation"})," of the code and a basic ",(0,s.jsx)(t.strong,{children:"tutorial"})," that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0c."}),(0,s.jsx)(t.td,{children:"Testing Guide"}),(0,s.jsx)(t.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0d."}),(0,s.jsx)(t.td,{children:"Docker"}),(0,s.jsx)(t.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0e."}),(0,s.jsx)(t.td,{children:"Article"}),(0,s.jsx)(t.td,{children:"We will publish an article that explains the features and gameplay of this app."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(t.td,{children:"Substrate module: pallet-buyback"}),(0,s.jsx)(t.td,{children:"The implementation of this module allows the buybackers to establish an asset buyback pool, set the buyback asset quota and buyback date, and allow participants to invest in asset A, which will be converted into asset B when the buyback date is reached."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(t.td,{children:"Substrate module: pallet-vfe-order"}),(0,s.jsx)(t.td,{children:"This module implements the order book function of the VFE trading market."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,s.jsx)(t.td,{children:"Flutter App: VFE Buyback Pool"}),(0,s.jsx)(t.td,{children:"The app implements the buyback pool function, allowing users to invest in asset A and get another asset B when the buyback date is reached."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"4."}),(0,s.jsx)(t.td,{children:"Flutter App: VFE Market"}),(0,s.jsx)(t.td,{children:"The App implements the VFE trading market, allowing users to freely buy and sell VFE."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"5."}),(0,s.jsx)(t.td,{children:"Android Alpha-test Released"}),(0,s.jsx)(t.td,{children:"We will release the first Alpha-test App supporting the android platform."})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"When the milestones in the grant are completed, we will open source the entire project.\nOur projects are open source based on GPL-3.0 license."}),"\n",(0,s.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["We plan to apply for some funding from the ",(0,s.jsx)(t.code,{children:"Kusama Treasury"})," before launching the ",(0,s.jsx)(t.code,{children:"App beta version"})," to meet the first batch of equipment production. We will invite internal test users to the community, and distribute the first batch of equipment to them for free testing experience."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"Polket"})," plan to bid on Kusama's parachain slots to gain access to the Kusama ecosystem."]}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"How did you hear about the Grants Program?"})}),"\n",(0,s.jsx)(t.p,{children:"Substrate website."})]})}function d(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>l,x:()=>o});var i=n(96540);const s={},r=i.createContext(s);function l(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/039f99b9.feda978d.js b/assets/js/039f99b9.feda978d.js new file mode 100644 index 00000000000..f6567fa1a00 --- /dev/null +++ b/assets/js/039f99b9.feda978d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[54972],{51230:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"applications/polket_toearnfun","title":"ToEarnFun","description":"- Team Name: Polket","source":"@site/applications/polket_toearnfun.md","sourceDirName":"applications","slug":"/applications/polket_toearnfun","permalink":"/applications/polket_toearnfun","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/polket_toearnfun.md","tags":[],"version":"current","frontMatter":{}}');var s=n(74848),r=n(28453);const l={},o="ToEarnFun",a={},c=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Where did the idea come from?",id:"where-did-the-idea-come-from",level:3},{value:"Overview",id:"overview",level:3},{value:"Project Features",id:"project-features",level:3},{value:"Easy To Use",id:"easy-to-use",level:4},{value:"Equipment Chip Embedding Proof Of Training",id:"equipment-chip-embedding-proof-of-training",level:4},{value:"Fitness + GameFi",id:"fitness--gamefi",level:4},{value:"The gameplay is completely decentralized",id:"the-gameplay-is-completely-decentralized",level:4},{value:"Project Application Scenarios",id:"project-application-scenarios",level:3},{value:"Combination of Physical Industry and Blockchain",id:"combination-of-physical-industry-and-blockchain",level:4},{value:"Fitness + GameFi",id:"fitness--gamefi-1",level:3},{value:"VFE Market",id:"vfe-market",level:3},{value:"Competition Challenge",id:"competition-challenge",level:3},{value:"Project Architecture",id:"project-architecture",level:3},{value:"More About This Project",id:"more-about-this-project",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Where and how does your project fit into the ecosystem?",id:"where-and-how-does-your-project-fit-into-the-ecosystem",level:4},{value:"Who is your target audience?",id:"who-is-your-target-audience",level:4},{value:"What need(s) does your project meet?",id:"what-needs-does-your-project-meet",level:4},{value:"Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem?",id:"are-there-any-other-projects-similar-to-yours-in-the-substrate--polkadot--kusama-ecosystem",level:4},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 - Implement the gameplay of VFE on Polket, and implement App based on Flutter",id:"milestone-1---implement-the-gameplay-of-vfe-on-polket-and-implement-app-based-on-flutter",level:3},{value:"Milestone 2 - Implement the buyback and VFE Market on Polket, and release Android App(Alpha-test)",id:"milestone-2---implement-the-buyback-and-vfe-market-on-polket-and-release-android-appalpha-test",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function h(e){const t={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"toearnfun",children:"ToEarnFun"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Team Name:"})," Polket"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Payment Address:"})," 0xd35f9Ea14D063af9B3567064FAB567275b09f03D(ETH-USDT)"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsxs)(t.strong,{children:[(0,s.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 2"]}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(t.h3,{id:"where-did-the-idea-come-from",children:"Where did the idea come from?"}),"\n",(0,s.jsxs)(t.p,{children:["Inspired by the success of ",(0,s.jsx)(t.strong,{children:"STEPN"}),", we have great confidence in Web3 applications combined with life scenarios. Because to let the majority of users enter the Web3 world, the interactive way of life scenes is the easiest entry. So we started from the fitness field and developed a Web3 smart fitness application, allowing ordinary users to pick up fitness equipment, training daily + GameFi, and gradually understand how the Web3 world can bring them more value and fun."]}),"\n",(0,s.jsxs)(t.p,{children:["Although ",(0,s.jsx)(t.strong,{children:"STEPN"})," achieved great success and dazzling attention as soon as it was launched, it also exposed the following problems:"]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Getting started is difficult and high risk"}),". Beginners first need cryptocurrency and buy at least one virtual sneaker before they can start running. Due to the long-term price instability of cryptocurrencies, users cannot grasp the timing of buying cryptocurrencies, which can lead to serious losses."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Insufficient decentralization"}),". ",(0,s.jsx)(t.strong,{children:"STEPN"}),", like most GameFi, adopts the solution of decentralization of asset transactions and centralized gameplay. This is because due to the bottleneck of the current smart contract technology, it is impossible to achieve complete decentralization, so the game system has the risk of self-theft, such as inflated rewards, malicious bans, and service suspension."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Incentives are not sustainable"}),". The incentive tokens generated by ",(0,s.jsx)(t.strong,{children:"STEPN"})," running are freely circulated without restrictions, and the business model is unsustainable, and will eventually enter a death spiral."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Is really cross-chain?"}),". Although ",(0,s.jsx)(t.strong,{children:"STEPN"})," publishes the same kind of assets on both public chains, the asset values are different, and it is not a cross-chain in the true sense."]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["After noticing the above problems, we finally adopted ",(0,s.jsx)(t.strong,{children:"Substrate"})," as the underlying technology in technology selection, and developed a blockchain named ",(0,s.jsx)(t.strong,{children:"Polket"}),". The goal of ",(0,s.jsx)(t.strong,{children:"Polket"})," is to create more commercial application scenarios for NFTs and connect to the Polkadot/Kusama network in a parachain manner. Based on the ",(0,s.jsx)(t.strong,{children:"Polket"})," chain, we will develop a smart fitness-type Web3 application to achieve capabilities that ",(0,s.jsx)(t.strong,{children:"STEPN"})," cannot achieve. We will name it ",(0,s.jsx)(t.strong,{children:"ToEarnFun"}),"."]}),"\n",(0,s.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://github.com/aexkobe/hackathon-2022-summer/raw/main/teams/08-polket/assets/toearnfun-log.svg",alt:"logo"})}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"ToEarnFun"})," is a ",(0,s.jsx)(t.strong,{children:"fit to earn"})," Web3 smart fitness application. Compared with other ",(0,s.jsx)(t.strong,{children:"x-to-earn"})," applications that only have ",(0,s.jsx)(t.strong,{children:"SocialFi"})," and ",(0,s.jsx)(t.strong,{children:"GameFi"})," elements, it can be connected with real smart fitness equipment. It relies on the encryption technology of the hardware chip to ensure that the sweat is paid fairly. The entry-level users of ",(0,s.jsx)(t.strong,{children:"ToEarnFun"})," do not need to purchase cryptocurrencies, but only need to purchase smart fitness equipment adapted to the application, and they can ",(0,s.jsx)(t.strong,{children:"fit to earn"})," immediately, greatly reducing the difficulty for ordinary users to enter the web3 world."]}),"\n",(0,s.jsx)(t.h3,{id:"project-features",children:"Project Features"}),"\n",(0,s.jsx)(t.h4,{id:"easy-to-use",children:"Easy To Use"}),"\n",(0,s.jsxs)(t.p,{children:["After the fitness equipment producer has passed the official qualification certification of ",(0,s.jsx)(t.strong,{children:"ToEarnFun"}),", the producer will register the chip public-key on the blockchain for each piece of fitness equipment produced. The user purchases ",(0,s.jsx)(t.strong,{children:"ToEarnFun"})," fitness equipment in the store, and completes the activation in the App, then can get a ",(0,s.jsx)(t.strong,{children:"VFE"})," (",(0,s.jsx)(t.strong,{children:"Virtual Fitness Equipment"}),", it can be understood as a type of ",(0,s.jsx)(t.strong,{children:"NFT"}),"). Users train through fitness equipment every day, and the system calculates the corresponding rewards based on the ",(0,s.jsx)(t.strong,{children:"VFE"})," attribute value on the chain."]}),"\n",(0,s.jsxs)(t.p,{children:["Compared with ",(0,s.jsx)(t.strong,{children:"STEPN"}),", which requires users to use cryptocurrencies to purchase ",(0,s.jsx)(t.strong,{children:"Sneaker"}),", ",(0,s.jsx)(t.strong,{children:"ToEarnFun"})," does not require users to own cryptocurrencies, and it is easier to meet regional compliance requirements in terms of sales methods. The ",(0,s.jsx)(t.strong,{children:"ToEarnFun"})," community is formed by a group of users with real fitness needs, and is also a group that is optimistic about the future of Web3. Opens a door for Web2 users to enter the ",(0,s.jsx)(t.strong,{children:"Polkadot ecosystem"}),"."]}),"\n",(0,s.jsx)(t.h4,{id:"equipment-chip-embedding-proof-of-training",children:"Equipment Chip Embedding Proof Of Training"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.em,{children:"How to prove that the player has completed the training?"})}),"\n",(0,s.jsxs)(t.p,{children:["In order to realize the ",(0,s.jsx)(t.code,{children:"Proof Of Training"})," algorithm, we need to embed a crypto algorithm in the chip of the smart fitness equipment. The equipment needs to generate a key pair and register the public key on the blockchain before leaving the factory. After the user activates the equipment, each time he completes the training, the equipment will sign the training data and submit it to the blockchain to complete the proof, and finally the user will receive a fair reward."]}),"\n",(0,s.jsx)(t.p,{children:"Since the private key of the equipment is generated by the chip before leaving the factory, the player cannot obtain it and cannot tamper with it, which prevents the player from modifying the training data through software, but the player can still cheat through physical plug-ins. However, with the development of technology, we will add motion sensors and biological inspection technology to the equipment to record more valuable data for player training and to prevent cheating by physical plug-ins."}),"\n",(0,s.jsx)(t.h4,{id:"fitness--gamefi",children:"Fitness + GameFi"}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"ToEarnFun"})," not only has the advantages of smart fitness applications, but also realizes the gameplay of ",(0,s.jsx)(t.strong,{children:"GameFi"}),". The core of the game is ",(0,s.jsx)(t.strong,{children:"VFE"}),"(",(0,s.jsx)(t.code,{children:"Virtual Fitness Equipment"}),") as the gameplay, ",(0,s.jsx)(t.strong,{children:"VFE"})," has a level system, with four basic attributes (efficiency, skill, luck, durability), four rarities (common, elite, rare, epic), and available power. When the user activates the equipment, they will get a ",(0,s.jsx)(t.strong,{children:"VFE"})," of common rarity and level 0 for free. Users can earn ",(0,s.jsx)(t.strong,{children:"FUN"})," by consuming energy through daily train, ",(0,s.jsx)(t.strong,{children:"FUN"})," is a consumable in ",(0,s.jsx)(t.strong,{children:"VFE"})," gameplay, used to: upgrade ",(0,s.jsx)(t.strong,{children:"VFE"})," level, ",(0,s.jsx)(t.strong,{children:"VFE"})," charging, Synthesize ",(0,s.jsx)(t.strong,{children:"VFE"}),", transaction fees, challenge events and more. ",(0,s.jsx)(t.strong,{children:"VFE"})," Get attribute points for each level up, and users can configure attributes independently. At present, the equipment we are implementing to interact with VFE is smart jump rope."]}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"VFE"})," is shorthand for ",(0,s.jsx)(t.code,{children:"Virtual Fitness Equipment"}),". It can be understood as a subclass of ",(0,s.jsx)(t.code,{children:"NFT (non-fungible token)"}),". We will create ",(0,s.jsx)(t.code,{children:"VFE"})," such as ",(0,s.jsx)(t.code,{children:"Smart Jump Rope"}),", ",(0,s.jsx)(t.code,{children:"Smart Hula Hoop"}),", ",(0,s.jsx)(t.code,{children:"Smart Boxing"}),", ",(0,s.jsx)(t.code,{children:"Spinning Bike"})," on the chain. What the user gets is a unique ",(0,s.jsx)(t.code,{children:"VFE instance"})," minted by ",(0,s.jsx)(t.code,{children:"VFE"}),"."]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.em,{children:"Basic attribute description:"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Efficiency"}),": It affects the amount of ",(0,s.jsx)(t.strong,{children:"FUN"})," income. The higher the efficiency, the more stable the income growth. It is recommended for entry-level users to configure."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Skill"}),": Affects the training score factor. The higher the skill, the higher the ",(0,s.jsx)(t.strong,{children:"FUN"})," income from training score conversion. Training score can dramatically increase or decrease your income, so recommended configuration for advanced users."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Luck"}),": Affects the drop probability of items and the amount of income added by random numbers on the chain."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Durability"}),": Affects ",(0,s.jsx)(t.strong,{children:"VFE"})," charging cost."]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.em,{children:"Rarity Description:"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Normal"}),": Free with purchase of fitness equipment."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Elite"}),": Collect ",(0,s.jsx)(t.strong,{children:"VFE"})," parts and combine with ",(0,s.jsx)(t.strong,{children:"VFE"})," chips to mint a new ",(0,s.jsx)(t.strong,{children:"VFE"}),", with a small probability to obtain."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Rare"}),": ",(0,s.jsx)(t.strong,{children:"ToEarnFun Official"})," regular sales."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Epic"}),": Participate in the ",(0,s.jsx)(t.strong,{children:"ToEarnFun official"})," event to get it."]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["Base stats and upgrade points, ",(0,s.jsx)(t.strong,{children:"common < elite < rare < epic"}),"."]}),"\n",(0,s.jsx)(t.h4,{id:"the-gameplay-is-completely-decentralized",children:"The gameplay is completely decentralized"}),"\n",(0,s.jsxs)(t.p,{children:["Most ",(0,s.jsx)(t.strong,{children:"GameFi"})," applications are implemented with ",(0,s.jsx)(t.strong,{children:"asset transaction decentralization and gameplay centralized"})," solutions. Because most Dapps are implemented based on smart contracts, limited by the execution efficiency and upgrade difficulties of smart contracts, it is difficult to achieve decentralized gameplay. Thanks to the forkless upgrade feature of ",(0,s.jsx)(t.strong,{children:"Substrate"}),", we can implement the gameplay on the chain, and more new gameplay can be implemented through the ",(0,s.jsx)(t.strong,{children:"Runtime"})," upgrade in the future, which will be a Web3 application in the true sense."]}),"\n",(0,s.jsx)(t.h3,{id:"project-application-scenarios",children:"Project Application Scenarios"}),"\n",(0,s.jsx)(t.h4,{id:"combination-of-physical-industry-and-blockchain",children:"Combination of Physical Industry and Blockchain"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://github.com/aexkobe/hackathon-2022-summer/raw/main/teams/08-polket/assets/toearnfun-produce-model-en.png",alt:"production"})}),"\n",(0,s.jsxs)(t.p,{children:["Participants: ",(0,s.jsx)(t.strong,{children:"Fitness Users"}),", ",(0,s.jsx)(t.strong,{children:"Equipment Producer"}),", ",(0,s.jsx)(t.strong,{children:"ToEarnFun Official"}),"."]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"ToEarnFun Official"})," first needs to create a ",(0,s.jsx)(t.strong,{children:"VFE"})," class on-chain. The first thing we implement is the ",(0,s.jsx)(t.strong,{children:"VFE"})," of the ",(0,s.jsx)(t.strong,{children:"rope skipping"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["To cooperate with ",(0,s.jsx)(t.strong,{children:"ToEarnFun"}),", equipment producers need to complete qualification certification and deposit a certain amount of security deposit into the ",(0,s.jsx)(t.strong,{children:"Producer Ledger"})," on the chain, which will be used to deduct fees for subsequent minting of ",(0,s.jsx)(t.strong,{children:"VFE"})," instances."]}),"\n",(0,s.jsxs)(t.li,{children:["According to the deposit amount deposited by the equipment producer, the system grants the producer a certain number of ",(0,s.jsx)(t.strong,{children:"VFE"})," minting rights."]}),"\n",(0,s.jsxs)(t.li,{children:["After the equipment producer completes the qualification certification, the ",(0,s.jsx)(t.strong,{children:"toearnfun-crypto-sdk"})," is integrated into the fitness equipment chip to realize the encryption protocol."]}),"\n",(0,s.jsxs)(t.li,{children:["Before leaving the factory, fitness equipment needs to be registered on the ",(0,s.jsx)(t.strong,{children:"Equipment Ledger"}),", and a mintinng fee will be reserved from the ",(0,s.jsx)(t.strong,{children:"Producer Ledger"})," on-chain."]}),"\n",(0,s.jsxs)(t.li,{children:["Fitness users can buy ",(0,s.jsx)(t.strong,{children:"ToEarnFun"})," cooperative fitness equipment in the local store without cryptocurrency."]}),"\n",(0,s.jsxs)(t.li,{children:["Fitness users complete on-chain activation of fitness equipment through the ",(0,s.jsx)(t.strong,{children:"ToEarnFun"})," app."]}),"\n",(0,s.jsxs)(t.li,{children:["After the fitness equipment is successfully activated, ",(0,s.jsx)(t.strong,{children:"Producer Ledger"})," will pay a minting fee from the reserved balance to ",(0,s.jsx)(t.strong,{children:"ToEarnFun Official Treasury"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["Because the producer has the minting right of the ",(0,s.jsx)(t.strong,{children:"VFE"})," class, a ",(0,s.jsx)(t.strong,{children:"VFE"})," instance will be minted on-chain to fitness users."]}),"\n",(0,s.jsxs)(t.li,{children:["Fitness users can get a ",(0,s.jsx)(t.strong,{children:"VFE"})," instance for free, in fact, the producer paid the minting fee when registering the equipment on the chain."]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["This business model not only helps traditional fitness equipment producers enter the Web3 world, expands the user base, and promotes industrial development, but also brings stable income to ",(0,s.jsx)(t.strong,{children:"ToEarnFun"})," and motivates ",(0,s.jsx)(t.strong,{children:"FUN"})," on ",(0,s.jsx)(t.strong,{children:"GameFi"})," in the future. Modules provide the foundation."]}),"\n",(0,s.jsx)(t.h3,{id:"fitness--gamefi-1",children:"Fitness + GameFi"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://github.com/aexkobe/hackathon-2022-summer/raw/main/teams/08-polket/assets/toearnfun-gamefi-model-en.png",alt:"Fitness+GameFi"})}),"\n",(0,s.jsxs)(t.p,{children:["Participants: ",(0,s.jsx)(t.strong,{children:"Fitness Users"}),", ",(0,s.jsx)(t.strong,{children:"ToEarnFun Official"}),"."]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Fitness users use fitness equipment for daily training."}),"\n",(0,s.jsxs)(t.li,{children:["The fitness equipment signature training data will be reported to the on-chain ",(0,s.jsx)(t.strong,{children:"Training Ledger"})," through the App."]}),"\n",(0,s.jsxs)(t.li,{children:["Calculate the reward according to the ",(0,s.jsx)(t.strong,{children:"VFE"})," attribute bound to the fitness equipment and the number of energy consumed during the training."]}),"\n",(0,s.jsxs)(t.li,{children:["The ",(0,s.jsx)(t.strong,{children:"FUN"})," incentive module issues rewards to fitness users, but there is a daily upper limit on rewards."]}),"\n",(0,s.jsxs)(t.li,{children:["Fitness users can use ",(0,s.jsx)(t.strong,{children:"FUN"})," to level up ",(0,s.jsx)(t.strong,{children:"VFE"})," instances to increase attribute points."]}),"\n",(0,s.jsxs)(t.li,{children:["Fitness users can sell their excess ",(0,s.jsx)(t.strong,{children:"FUN"})," to the ",(0,s.jsx)(t.strong,{children:"FUN Buybck Pool"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"ToEarnFun official"})," regularly buyback FUN in the pool."]}),"\n",(0,s.jsxs)(t.li,{children:["After each buyback of ",(0,s.jsx)(t.strong,{children:"FUN"}),", its buyback price will change. In order to ensure price stability, changes in the ",(0,s.jsx)(t.strong,{children:"FUN Buyback Price"})," will affect its inflation rate."]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["This business model not only allows users who like fitness to get the equivalent of their sweat, but also allows users who are addicted to ",(0,s.jsx)(t.strong,{children:"GameFi"})," to have the goal of fitness."]}),"\n",(0,s.jsx)(t.h3,{id:"vfe-market",children:"VFE Market"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://github.com/aexkobe/hackathon-2022-summer/raw/main/teams/08-polket/assets/toearnfun-market-model-en.png",alt:"VFE Market"})}),"\n",(0,s.jsxs)(t.p,{children:["Participants: ",(0,s.jsx)(t.strong,{children:"Fitness Users"}),", ",(0,s.jsx)(t.strong,{children:"ToEarnFun Official"}),", ",(0,s.jsx)(t.strong,{children:"3rd-party IP"}),"."]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"ToEarnFun Official"})," can approve 3rd-party IP certain amount of ",(0,s.jsx)(t.strong,{children:"VFE"})," minting rights."]}),"\n",(0,s.jsxs)(t.li,{children:["Whether it is ",(0,s.jsx)(t.strong,{children:"ToEarnFun Official"})," or ",(0,s.jsx)(t.strong,{children:"3rd-party IP"}),", as long as you have ",(0,s.jsx)(t.strong,{children:"VFE"})," minting rights, you can mint new ",(0,s.jsx)(t.strong,{children:"VFE"})," instances."]}),"\n",(0,s.jsxs)(t.li,{children:["However, every time a ",(0,s.jsx)(t.strong,{children:"VFE"})," instance is minted by a 3rd-party IP, the minting fee needs to be paid to ",(0,s.jsx)(t.strong,{children:"ToEarnFun Official"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["The newly minted ",(0,s.jsx)(t.strong,{children:"VFE"})," instance will be put into the ",(0,s.jsx)(t.strong,{children:"VFE"})," market and will be sold by auction or fixed-price."]}),"\n",(0,s.jsxs)(t.li,{children:["Fitness users can consume ",(0,s.jsx)(t.strong,{children:"FUN"})," to unbind the ",(0,s.jsx)(t.strong,{children:"VFE"})," instance on the equipment."]}),"\n",(0,s.jsxs)(t.li,{children:["The unbound ",(0,s.jsx)(t.strong,{children:"VFE"})," instance can be sold to the ",(0,s.jsx)(t.strong,{children:"VFE"})," market."]}),"\n",(0,s.jsxs)(t.li,{children:["Fitness users can also buy their favorite ",(0,s.jsx)(t.strong,{children:"VFE"})," instances in the ",(0,s.jsx)(t.strong,{children:"VFE"})," market."]}),"\n",(0,s.jsxs)(t.li,{children:["Fitness users buy VFE instances with better attributes, and then bind them to the equipment for training, which is the most effective way to earn ",(0,s.jsx)(t.strong,{children:"FUN"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["Compared with traditional games, ",(0,s.jsx)(t.strong,{children:"GameFi"})," has the characteristics of playability and possession, and game items have value. ",(0,s.jsx)(t.strong,{children:"ToEarnFun Official"})," can bring income through the sale of ",(0,s.jsx)(t.strong,{children:"VFE"}),", or it can also approve 3rd-party IP to mint ",(0,s.jsx)(t.strong,{children:"VFE"})," to bring income. Fitness users can also freely exchange ",(0,s.jsx)(t.strong,{children:"VFE"})," in the market to achieve arbitrage."]}),"\n",(0,s.jsx)(t.h3,{id:"competition-challenge",children:"Competition Challenge"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://github.com/aexkobe/hackathon-2022-summer/raw/main/teams/08-polket/assets/toearnfun-competition-model-en.png",alt:"Competition challenge"})}),"\n",(0,s.jsxs)(t.p,{children:["Participants: ",(0,s.jsx)(t.strong,{children:"Fitness Users"}),", ",(0,s.jsx)(t.strong,{children:"ToEarnFun Official"}),", ",(0,s.jsx)(t.strong,{children:"Public Welfare Organizations"}),"."]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"ToEarnFun Official"})," create competition template, set: registration fee, registration requirements, competition requirements, scoring rules, bonus distribution, cycle time limit, etc."]}),"\n",(0,s.jsx)(t.li,{children:"The competition template will publish event instances periodically."}),"\n",(0,s.jsx)(t.li,{children:"Fitness users who meet the registration requirements can pay the registration fee to participate in the event."}),"\n",(0,s.jsx)(t.li,{children:"Fitness users use their own fitness equipment to challenge according to the requirements of the competition."}),"\n",(0,s.jsx)(t.li,{children:"The fitness equipment reports the training data to the on-chain competition record."}),"\n",(0,s.jsx)(t.li,{children:"After the game, the game record will be determined according to the scoring rules of the game."}),"\n",(0,s.jsx)(t.li,{children:"Prizes will be awarded to the winner of the competition."}),"\n",(0,s.jsxs)(t.li,{children:["A portion of the funds raised by the event will be invested in the ",(0,s.jsx)(t.strong,{children:"Public Welfare Treasury"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["The funds of the ",(0,s.jsx)(t.strong,{children:"Public Welfare Treasury"})," can be donated to public welfare organizations through the proposal of the Public Welfare Council."]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["The use of blockchain to realize competition events is a very suitable application scenario. It not only makes the competition fair, open and transparent, but also greatly reduces labor costs and allows the ",(0,s.jsx)(t.strong,{children:"Public Welfare Treasury"})," to obtain more funds. At the same time, ",(0,s.jsx)(t.strong,{children:"DAO"})," is used to manage the ",(0,s.jsx)(t.strong,{children:"Public Welfare Treasury"}),", which ensures the sustainable development of public welfare undertakings."]}),"\n",(0,s.jsx)(t.h3,{id:"project-architecture",children:"Project Architecture"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://github.com/aexkobe/hackathon-2022-summer/raw/main/teams/08-polket/assets/toearnfun-architecture.png",alt:"Architecture"})}),"\n",(0,s.jsx)(t.h3,{id:"more-about-this-project",children:"More About This Project"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://www.toearn.fun",children:"Official website"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://app.mockplus.cn/run/design/21F_BXJYGPY/47SlUMc7lXwKP?cps=collapse&dt=iPhone%2013&ha=1&linkID=O9QYqoyvhVRzS&nav=1",children:"App UI Mockups"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://drive.google.com/file/d/1hpaKNFYQhYxkj0dNOEaRD81jcSrm66h3/view?usp=sharing",children:"Demo Video"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/polketio",children:"Github Repository"})}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsx)(t.h4,{id:"where-and-how-does-your-project-fit-into-the-ecosystem",children:"Where and how does your project fit into the ecosystem?"}),"\n",(0,s.jsx)(t.p,{children:"As we all know, it is more complicated for ordinary users to enter Web3. They need to buy cryptocurrencies and learn to use cryptocurrency wallets. Learn about different ecosystems and find out which Dapps are right for them."}),"\n",(0,s.jsxs)(t.p,{children:["I try to simplify this entry through the combination of ",(0,s.jsx)(t.code,{children:"hardware + Substrate + Mobile App"}),". Let ordinary people only need to buy a smart jump rope at the retailer, and training everyday, Web3 will give them another income. Gradually, they will learn about the Polkadot ecosystem, and they will slowly discover that Polkadot's parachains can bring them more value."]}),"\n",(0,s.jsx)(t.h4,{id:"who-is-your-target-audience",children:"Who is your target audience?"}),"\n",(0,s.jsx)(t.p,{children:"Our target audience are fitness enthusiasts and Polkadot ecosystem's users."}),"\n",(0,s.jsx)(t.h4,{id:"what-needs-does-your-project-meet",children:"What need(s) does your project meet?"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Use token incentives to promote people's daily training and get healthy body."}),"\n",(0,s.jsx)(t.li,{children:"Through physical product sales, new users will be brought to the Polkadot ecosystem."}),"\n"]}),"\n",(0,s.jsx)(t.h4,{id:"are-there-any-other-projects-similar-to-yours-in-the-substrate--polkadot--kusama-ecosystem",children:"Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem?"}),"\n",(0,s.jsx)(t.p,{children:"Similar projects have not yet appeared in the Substrate / Polkadot / Kusama ecosystem.\nThis table compares our project to similar projects in other ecosystems."}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Items"}),(0,s.jsx)(t.th,{children:"STEPN"}),(0,s.jsx)(t.th,{children:"FitR"}),(0,s.jsx)(t.th,{children:"ToEarnFun"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Physical Product"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"Yes"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Proof of Training"}),(0,s.jsx)(t.td,{children:"The App calculates the training data, and the central system proves"}),(0,s.jsx)(t.td,{children:"Same as STEPN"}),(0,s.jsx)(t.td,{children:"Hardware calculates training data, blockchain proves"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Incentives"}),(0,s.jsx)(t.td,{children:"GST has no upper limit and transferable, GMT has pre-mined and transferable"}),(0,s.jsx)(t.td,{children:"Same as STEPN"}),(0,s.jsx)(t.td,{children:"FUN has no upper limit and is not transferable, PNT has no pre-mining and the official promise to buyback"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Ecosystem"}),(0,s.jsx)(t.td,{children:"Solana/BSC/Ethereum"}),(0,s.jsx)(t.td,{children:"BSC"}),(0,s.jsx)(t.td,{children:"Polkadot/Kusama"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Target Audience"}),(0,s.jsx)(t.td,{children:"Crypto users"}),(0,s.jsx)(t.td,{children:"Same as STEPN"}),(0,s.jsx)(t.td,{children:"Crypto users and fitness users"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Source of income"}),(0,s.jsx)(t.td,{children:"NFT Sales, Market Tax"}),(0,s.jsx)(t.td,{children:"Same as STEPN"}),(0,s.jsx)(t.td,{children:"VFE Sales, Market Tax, Product Sales"})]})]})]}),"\n",(0,s.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Zhiquan Mai"}),": CEO. He once served as the development leader of cryptocurrency wallet system of ",(0,s.jsx)(t.a,{href:"https://www.bitbank.com/",children:"Bitbank"}),". In his spare time, he has developed some open-source iOS projects, such as ",(0,s.jsx)(t.a,{href:"https://github.com/zhiquan911/chance_btc_wallet",children:"Bitcoin Multisig wallet"})," and ",(0,s.jsx)(t.a,{href:"https://github.com/zhiquan911/CHKLineChart",children:"CHKLineChart"}),". Now he is responsible for the development of openwallet framework, which supports more than 70+ blockchain protocols."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Jianqiang Chen"}),": System development engineer. Now he is responsible for the development of the openwallet developer platform, which provides APIs to help developers quickly build cryptocurrency wallet applications."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Dongxing Liang"}),": System architect engineer. Now he is responsible for the back-end development of the openwallet.link enterprise-level digital-assets management system, and provides more than 70+ main chain assets and token asset custody services for digital financial companies."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Yinghao Fan"}),": Front-end engineer. He is now responsible for the front-end of openwallet related applications, such as the back-end of enterprise asset management, wallet applications, etc."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Shuchao He"}),": Cryptographic algorithm engineer. He is now responsible for the development of the underlying cryptographic library of openwallet, and supports the implementation of cryptographic algorithms such as ECC, Hash, and transaction verification for mainstream blockchains."]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Contact Name:"})," Zhiquan Mai"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Contact Email:"})," ",(0,s.jsx)(t.a,{href:"mailto:zhiquan911@gmail.com",children:"zhiquan911@gmail.com"})]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Website"}),": ",(0,s.jsx)(t.a,{href:"https://toearn.fun",children:"https://toearn.fun"})]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Registered Address:"})," Zhongshan Meiju Industrial Park, 6th Floor, Building 9."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Registered Legal Entity:"})," Zhongshan Shangyuzhou Technology Co., Ltd."]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsxs)(t.p,{children:["Our team has developed the ",(0,s.jsx)(t.a,{href:"https://github.com/blocktree",children:"openwallet"})," framework and redefines a wallet system model compatible with multiple blockchains. At the same time, we have build an openwallet developer platform, which integrates 70+ blockchain protocols, which greatly reduces the cost of developers and users."]}),"\n",(0,s.jsxs)(t.p,{children:["Our team also uses the ",(0,s.jsx)(t.a,{href:"https://www.openwallet.cn",children:"openwallet developer platform"})," to provide enterprises with blockchain-related development services, such as: cryptocurrency wallets, enterprise-level cryptocurrency management systems, multi-chain multisig wallet systems."]}),"\n",(0,s.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/blocktree",children:"https://github.com/blocktree"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/zhiquan911",children:"https://github.com/zhiquan911"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/godaddy-x",children:"https://github.com/godaddy-x"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/fanyinghao",children:"https://github.com/fanyinghao"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/Brochao",children:"https://github.com/Brochao"})}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["At present, we have completed the ",(0,s.jsx)(t.a,{href:"https://toearn.fun",children:"official website release"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["At present, we have completed ",(0,s.jsx)(t.a,{href:"https://app.mockplus.cn/run/design/21F_BXJYGPY/47SlUMc7lXwKP?cps=collapse&dt=iPhone%2013&ha=1&linkID=O9QYqoyvhVRzS&nav=1",children:"App Mockups"}),", and some ",(0,s.jsx)(t.a,{href:"https://drive.google.com/drive/folders/1O3yULWEVhGFzzDXwTWQr75SUU1-8oMEg?usp=sharing",children:"VFE"})," and ",(0,s.jsx)(t.a,{href:"https://drive.google.com/drive/folders/1NtV9sDeP8ATlT8hk0e22wQX6pDokIV9M?usp=sharing",children:"Smart Jump Rope Design"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["Polket is under development and the ",(0,s.jsx)(t.a,{href:"https://polkadot.js.org/apps/?rpc=wss://testnet-node.polket.io#/explorer",children:"Testnet"})," has been deployed ."]}),"\n",(0,s.jsx)(t.li,{children:"We have found a smart jump rope factory to develop a prototype product and embedded the encryption library we wrote into the product's chip. Each product generates a ECC keypair at the factory and implements the signature algorithm of the training data."}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Total Estimated Duration:"})," 4 months"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Full-Time Equivalent (FTE):"})," 4 FTE"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Total Costs:"})," $30,000 USD"]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"milestone-1---implement-the-gameplay-of-vfe-on-polket-and-implement-app-based-on-flutter",children:"Milestone 1 - Implement the gameplay of VFE on Polket, and implement App based on Flutter"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Estimated duration:"})," 2 month"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"FTE:"})," 4"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Costs:"})," 15,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(t.th,{children:"Deliverable"}),(0,s.jsx)(t.th,{children:"Specification"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(t.td,{children:"License"}),(0,s.jsx)(t.td,{children:"GPL-3.0"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(t.td,{children:"Documentation"}),(0,s.jsxs)(t.td,{children:["We will provide both ",(0,s.jsx)(t.strong,{children:"inline documentation"})," of the code and a basic ",(0,s.jsx)(t.strong,{children:"tutorial"})," that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0c."}),(0,s.jsx)(t.td,{children:"Testing Guide"}),(0,s.jsx)(t.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0d."}),(0,s.jsx)(t.td,{children:"Docker"}),(0,s.jsx)(t.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(t.td,{children:"Substrate module: pallet-vfe"}),(0,s.jsxs)(t.td,{children:["This module implements VFE gameplay, such as: ",(0,s.jsx)(t.code,{children:"producer_register"}),", ",(0,s.jsx)(t.code,{children:"device_type_create"}),", ",(0,s.jsx)(t.code,{children:"register_device"}),", ",(0,s.jsx)(t.code,{children:"bind_device"}),", ",(0,s.jsx)(t.code,{children:"sport_upload"}),", ",(0,s.jsx)(t.code,{children:"power_recovery"})," etc."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(t.td,{children:"Substrate module: pallet-unique-id"}),(0,s.jsx)(t.td,{children:"This module implements self-incrementing ID maintenance for stores in pallet-unique."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,s.jsx)(t.td,{children:"Substrate module: pallet-currencies"}),(0,s.jsxs)(t.td,{children:["This module is an implementor of ",(0,s.jsx)(t.code,{children:"frame_support::traits::fungibles"})," compatible with pallet-balances and pallet-assets."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"4."}),(0,s.jsx)(t.td,{children:"Substrate module: pallet-support"}),(0,s.jsx)(t.td,{children:"This module provides standard traits definitions for data interaction between different pallets."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"5."}),(0,s.jsx)(t.td,{children:"Flutter App: Smart Jump Rope supported"}),(0,s.jsx)(t.td,{children:"The App first supports smart jump rope, such as connecting equipment, generating keys in the equipment, and synchronizing training data."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"6."}),(0,s.jsx)(t.td,{children:"Flutter App: Integrate polkawallet-sdk"}),(0,s.jsx)(t.td,{children:"The App will integrate polkawallet-sdk to implement a built-in wallet that supports the polkadot ecosystem."})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"milestone-2---implement-the-buyback-and-vfe-market-on-polket-and-release-android-appalpha-test",children:"Milestone 2 - Implement the buyback and VFE Market on Polket, and release Android App(Alpha-test)"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Estimated Duration:"})," 2 month"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"FTE:"})," 4"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Costs:"})," 15,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(t.th,{children:"Deliverable"}),(0,s.jsx)(t.th,{children:"Specification"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(t.td,{children:"License"}),(0,s.jsx)(t.td,{children:"GPL-3.0"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(t.td,{children:"Documentation"}),(0,s.jsxs)(t.td,{children:["We will provide both ",(0,s.jsx)(t.strong,{children:"inline documentation"})," of the code and a basic ",(0,s.jsx)(t.strong,{children:"tutorial"})," that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0c."}),(0,s.jsx)(t.td,{children:"Testing Guide"}),(0,s.jsx)(t.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0d."}),(0,s.jsx)(t.td,{children:"Docker"}),(0,s.jsx)(t.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0e."}),(0,s.jsx)(t.td,{children:"Article"}),(0,s.jsx)(t.td,{children:"We will publish an article that explains the features and gameplay of this app."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(t.td,{children:"Substrate module: pallet-buyback"}),(0,s.jsx)(t.td,{children:"The implementation of this module allows the buybackers to establish an asset buyback pool, set the buyback asset quota and buyback date, and allow participants to invest in asset A, which will be converted into asset B when the buyback date is reached."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(t.td,{children:"Substrate module: pallet-vfe-order"}),(0,s.jsx)(t.td,{children:"This module implements the order book function of the VFE trading market."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,s.jsx)(t.td,{children:"Flutter App: VFE Buyback Pool"}),(0,s.jsx)(t.td,{children:"The app implements the buyback pool function, allowing users to invest in asset A and get another asset B when the buyback date is reached."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"4."}),(0,s.jsx)(t.td,{children:"Flutter App: VFE Market"}),(0,s.jsx)(t.td,{children:"The App implements the VFE trading market, allowing users to freely buy and sell VFE."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"5."}),(0,s.jsx)(t.td,{children:"Android Alpha-test Released"}),(0,s.jsx)(t.td,{children:"We will release the first Alpha-test App supporting the android platform."})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"When the milestones in the grant are completed, we will open source the entire project.\nOur projects are open source based on GPL-3.0 license."}),"\n",(0,s.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["We plan to apply for some funding from the ",(0,s.jsx)(t.code,{children:"Kusama Treasury"})," before launching the ",(0,s.jsx)(t.code,{children:"App beta version"})," to meet the first batch of equipment production. We will invite internal test users to the community, and distribute the first batch of equipment to them for free testing experience."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"Polket"})," plan to bid on Kusama's parachain slots to gain access to the Kusama ecosystem."]}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"How did you hear about the Grants Program?"})}),"\n",(0,s.jsx)(t.p,{children:"Substrate website."})]})}function d(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>l,x:()=>o});var i=n(96540);const s={},r=i.createContext(s);function l(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/03a2950a.92531f15.js b/assets/js/03a2950a.92531f15.js deleted file mode 100644 index 97ec50fd129..00000000000 --- a/assets/js/03a2950a.92531f15.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[66230],{48586:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>d});const i=JSON.parse('{"id":"applications/Tokenguard","title":"Tokenguard: Ultimate growth & data analytics tool for Substrate","description":"Team Name:* Tokenguard.io (Block Solutions Sp z o.o.)","source":"@site/applications/Tokenguard.md","sourceDirName":"applications","slug":"/applications/Tokenguard","permalink":"/applications/Tokenguard","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/Tokenguard.md","tags":[],"version":"current","frontMatter":{}}');var t=n(74848),r=n(28453);const a={},o="Tokenguard: Ultimate growth & data analytics tool for Substrate",l={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Beta Version - existing Tokenguard features",id:"beta-version---existing-tokenguard-features",level:3},{value:"Features and designs:",id:"features-and-designs",level:4},{value:"Proposal mockups - new standalone features:",id:"proposal-mockups---new-standalone-features",level:4},{value:"Other Proposals Comparison",id:"other-proposals-comparison",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team\u2019s experience",id:"teams-experience",level:3},{value:"Current Traction & Business Model",id:"current-traction--business-model",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1: Frontend",id:"milestone-1-frontend",level:3},{value:"Milestone 2: Backend",id:"milestone-2-backend",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Analytics for Polkadot & Kusama ecosystems",id:"analytics-for-polkadot--kusama-ecosystems",level:3},{value:"Making web3 grow",id:"making-web3-grow",level:3}];function c(e){const s={a:"a",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"tokenguard-ultimate-growth--data-analytics-tool-for-substrate",children:"Tokenguard: Ultimate growth & data analytics tool for Substrate"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Team Name:"})," ",(0,t.jsx)(s.a,{href:"http://tokenguard.io/",children:"Tokenguard.io"})," (Block Solutions Sp z o.o.)"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Payment Address:"})," PL83249010570000990157469781 (USD IBAN; Alior Bank; SWIFT / BIC: ALBPPLPW)"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsxs)(s.strong,{children:[(0,t.jsx)(s.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 2"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"project-overview-",children:"Project Overview \ud83d\udcc4"}),"\n",(0,t.jsxs)(s.p,{children:["This application is a response to the RFP by Keegan Quigley: ",(0,t.jsx)(s.a,{href:"https://grants.web3.foundation/docs/RFPs/Under%20Development/analysis-website-and-data-platform",children:"https://grants.web3.foundation/docs/RFPs/Under Development/analysis-website-and-data-platform"}),"."]}),"\n",(0,t.jsx)(s.h3,{id:"overview",children:"Overview"}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"Absence of a user-friendly on-chain analytics platform"})," is an existing challenge of the Polkadot & Kusama ecosystems. Currently, querying data through GraphQL and backend services like Subquery and Subsquid requires considerable effort. Creating compelling and visually attractive dashboards is almost impossible due to lack of tools that focus on end user experinece. As a result, power-users and builders face difficulties in interactively accessing high-quality data and creating custom visualizations for easy sharing."]}),"\n",(0,t.jsxs)(s.p,{children:["To address this challenge, we propose an easy-to-use and efficient solution - an advanced data analytics tool designed to cater specifically to the needs of the Polkadot & Kusama ecosystems and related parachains. Our platform offers seamless data querying, simplifying the creation of customized charts and visualizations, ",(0,t.jsx)(s.strong,{children:"facilitating easy sharing of valuable insights and metrics within the"})," ",(0,t.jsx)(s.strong,{children:"community."})]}),"\n",(0,t.jsxs)(s.p,{children:["With the aim of ensuring extensive accessibility across the Substrate community and optimizing the functionality of our analytical tool, Tokenguard application places ",(0,t.jsx)(s.strong,{children:"a strong emphasis on refining the UX aspect"}),". This involves the development of an intuitive user interface (UI) and seamless frontend that effectively facilitates insights discovery."]}),"\n",(0,t.jsx)(s.h3,{id:"project-details",children:"Project Details"}),"\n",(0,t.jsxs)(s.p,{children:["To meet the expectations of Polkadot and Kusama community and the suggestions contained in the RFP, we propose a ",(0,t.jsx)(s.strong,{children:"comprehensive analytics tool consisting of"})," ",(0,t.jsx)(s.strong,{children:"a query builder, visualization creator and dashboard composer for Polkadot & Kusama ecosystems"})," - the creation of which requires the implementation of the following features."]}),"\n",(0,t.jsxs)(s.p,{children:["Features that will be built using this specific grant are ",(0,t.jsx)(s.strong,{children:"in bold"}),"."]}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["Data model:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Creating a RAW data access that would categorize data depending on its depth:","\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsx)(s.li,{children:"L0: Relay chains (Polkadot, Kusama)"}),"\n",(0,t.jsx)(s.li,{children:"L1: Parachains"}),"\n",(0,t.jsx)(s.li,{children:"L2: dApps & Smart Contracts"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["Creating a database of pre-transformed, comparable & curated metrics - each of the metric would be a pre-defined SQL query based on RAW data that is curated by Tokenguard team:","\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsx)(s.li,{children:"User related metrics"}),"\n",(0,t.jsx)(s.li,{children:"Activity related metrics"}),"\n",(0,t.jsx)(s.li,{children:"Conversions related metrics"}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["Metrics","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Creation:","\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsx)(s.li,{children:"Allowing users to create their own SQL queries from scratch and save them."}),"\n",(0,t.jsx)(s.li,{children:"Allowing users to preview SQL query of each of the existing metrics at Tokenguard."}),"\n",(0,t.jsx)(s.li,{children:"Allowing users to copy, edit and save each of the existing metrics."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["Collection:","\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsx)(s.li,{children:"List of projects on different depths (L0, L1, L2)"}),"\n",(0,t.jsx)(s.li,{children:"List of RAW tables available for these projects"}),"\n",(0,t.jsx)(s.li,{children:"List of comparable metrics for these projects"}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Dashboards"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Making it possible for people to create & share dashboards with their own metrics:"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.strong,{children:"Providing a description and schema of required API response. The response consists of all possible measures and dimensions for future visualization."})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.strong,{children:"Creating a frontend which allows user to select series of data for axis X and Y for visualization."})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.strong,{children:"Allowing user to select type of visualization for the data among 5 types (linechart, barchart, piechart, multiline chart, stacked barchart)."})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.strong,{children:"Designing frontend to layout visualizations on canvas (using drag & drop or any other method that is more comfortable for the user)."})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.strong,{children:"Saving dashboard related data on backend to allow frontend transform database metrics into attractive visualisations."})}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["Users","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Creating a user subpage with a list of users' dashboards & metrics"}),"\n",(0,t.jsx)(s.li,{children:"Displaying user stats"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"beta-version---existing-tokenguard-features",children:(0,t.jsx)(s.strong,{children:"Beta Version - existing Tokenguard features"})}),"\n",(0,t.jsxs)(s.p,{children:["(You can access public version of Tokenguard app at ",(0,t.jsx)(s.a,{href:"http://app.tokenguard.io/",children:"app.tokenguard.io"}),")"]}),"\n",(0,t.jsx)(s.p,{children:"Over the course of six months, Tokenguard application was meticulously developed with the objective of creating a user-friendly analytics tool for the Substrate Ecosystem, without requiring any coding or SQL skills. Within this timeframe, we successfully produced a beta version of the app, which now offers essential on-chain analytics for various projects within the Polkadot ecosystem, such as Astar, Aleph Zero, Nodle and many others."}),"\n",(0,t.jsx)(s.h4,{id:"features-and-designs",children:(0,t.jsx)(s.strong,{children:"Features and designs:"})}),"\n",(0,t.jsxs)(s.p,{children:["Dashboards overview - The overview of currently indexed and supported parachains:",(0,t.jsx)("br",{})]}),"\n",(0,t.jsx)("img",{src:"https://imagizer.imageshack.com/img924/1246/BK6CYe.png",width:"800",border:"0"}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsxs)(s.p,{children:["Ecosystem metrics dashboards - The on-chain data is visually presented through charts that are categorized into the most significant and essential aspects:",(0,t.jsx)("br",{})]}),"\n",(0,t.jsx)("img",{src:"https://imagizer.imageshack.com/img923/2272/10xb78.png",width:"800",border:"0"}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsxs)(s.p,{children:["Filtering - The ability to sort data based on the most useful indicators:",(0,t.jsx)("br",{})]}),"\n",(0,t.jsx)("img",{src:"https://imagizer.imageshack.com/img924/8639/9qncPN.png",width:"800",border:"0"}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsxs)(s.p,{children:["User activity analytics - A module that allows for an in-depth analysis of user behavior based on metrics such as DAU, MAU, retention or user segments:",(0,t.jsx)("br",{})]}),"\n",(0,t.jsx)("img",{src:"https://imagizer.imageshack.com/img924/8259/bLTEVH.png",width:"800",border:"0"}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)(s.h4,{id:"proposal-mockups---new-standalone-features",children:(0,t.jsx)(s.strong,{children:"Proposal mockups - new standalone features:"})}),"\n",(0,t.jsxs)(s.p,{children:["Dashboard creator - The drag and drop feature allows users to add metrics onto the dashboard:",(0,t.jsx)("br",{})]}),"\n",(0,t.jsx)("img",{src:"https://imagizer.imageshack.com/img922/9135/yU5s5a.png",width:"800",border:"0"}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)(s.p,{children:"Layout composer - Allowing for an easy modification of the dashboard's layout:"}),"\n",(0,t.jsx)("img",{src:"https://imagizer.imageshack.com/img922/9879/LgeThz.png",width:"800",border:"0"}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)("img",{src:"https://imagizer.imageshack.com/img923/5586/pAvjqF.png",width:"800",border:"0"}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Technology Stack:"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"JavaScript, TypeScript, Python"}),"\n",(0,t.jsx)(s.li,{children:"SQL, dbt, Airflow"}),"\n",(0,t.jsx)(s.li,{children:"Kubernetes"}),"\n",(0,t.jsx)(s.li,{children:"SubSquid"}),"\n",(0,t.jsx)(s.li,{children:"BI analytics tools"}),"\n",(0,t.jsx)(s.li,{children:"Cloud hosting and scalable infrastructure"}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"other-proposals-comparison",children:"Other Proposals Comparison"}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.a,{href:"https://grants.web3.foundation/docs/RFPs/Under%20Development/analysis-website-and-data-platform",children:"RFP"})," has been partially addressed by other teams in the proposals ",(0,t.jsx)(s.a,{href:"https://github.com/w3f/Grants-Program/pull/1716",children:"#1716"})," ",(0,t.jsx)(s.a,{href:"https://github.com/w3f/Grants-Program/pull/1768",children:"#1768"})," ",(0,t.jsx)(s.a,{href:"https://github.com/w3f/Grants-Program/pull/1748",children:"#1748"})," ",(0,t.jsx)(s.a,{href:"https://github.com/w3f/Grants-Program/pull/1815",children:"#1815"})," and work is underway to solve it. Being aware of how wide and complex the area of data analysis is, in our solution, we wanted to refer to the issues and propose modules that have not yet been built, but will complement the ongoing work."]}),"\n",(0,t.jsx)(s.p,{children:"Compared to the following, Tokenguard in this proposal provides both a user-friendly no-code dashboard composer and visualisation composer - which UX / UI is designed in an accessible way, reaching a wide audience."}),"\n",(0,t.jsx)(s.p,{children:"Features created in this proposal will support other data-related projects, making it easier for them to attract Polkadot & Kusama users:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.a,{href:"https://github.com/w3f/Grants-Program/pull/1716",children:"#1716"})," - is an ETL tool that focuses on delivering the Polkadot ecosystem data to a wide audience using Google BigQuery service."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.a,{href:"https://github.com/w3f/Grants-Program/pull/1768",children:"#1768"})," - is an ETL tool focused on deep account analytics challenges."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.a,{href:"https://github.com/w3f/Grants-Program/pull/1748",children:"#1748"})," - is a data analytics tool that focuses on wallet profiling and tracking its investments and structure."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.a,{href:"https://github.com/w3f/Grants-Program/pull/1815",children:"#1815"})," - is a low-level SQL query editor and vizualization creator dedicated for data engineers and developers."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,t.jsxs)(s.p,{children:["In order to facilitate growth, Substrate ecosystem needs a vast and thriving environment of developers creating parachains, dApps and smart contracts. Each parachain and each smart contract generates thousands of transactions that store important technical and business insights. Each new growing dApp, with its own marketing & growth strategy, ",(0,t.jsx)(s.strong,{children:"brings in new active users to the ecosystem and venture capital money"}),". These insights are currently hard to discover and the ecosystem needs infrastructure tools that would make it easy for management teams and developers to uncover them, similarly as it is done in EVM environment with tools like Dune Analytics or Tenderly."]}),"\n",(0,t.jsx)(s.p,{children:"Tokenguard addresses the need of following audiences:"}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Community:"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Transparency & Credibility:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Access to data and on-chain insights is the basis for a community driven blockchain."}),"\n",(0,t.jsx)(s.li,{children:"The ability to track and verify activity and growth in the parachains reinforces trust."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["Investment:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["A tool that gives access to the ",(0,t.jsx)(s.strong,{children:"performance of individual dApps and DeFi allows for a better investment decisions."})]}),"\n",(0,t.jsx)(s.li,{children:"A tool that gives access to the performance of individual dApps and DeFi** allows for a better assessment of the market situation in terms of investment."}),"\n",(0,t.jsx)(s.li,{children:"Insights into data on developer activity and TVL allows to attract additional community members who want to invest in the ecosystem."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["Engagement:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"A well-informed community is more likely to be involved in the building programs on a given chain and in ongoing activities."}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Access to insights allows the community to actively promote chain in social media"}),", at events and in ordinary media."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Relay chains, parachains and dApps teams:"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Marketing Improvements:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Off-chain to on-chain data correlation provides a deeper understanding of the marketing and PR efforts that contribute to the network\u2019s growth"}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Developer engagement tracking allows to identify strategies that encourage web3 creators"})," to build within the ecosystem."]}),"\n",(0,t.jsxs)(s.li,{children:["User segmentation and user behavior tracking allows to understand ",(0,t.jsx)(s.strong,{children:"which protocols and dApps generate the most usage in the network"})," and what type of user affects its growth."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["More efficient Treasury Spending:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Tracking the ",(0,t.jsx)(s.strong,{children:"inflow of new users through dApps and on-chain projects financed through treasury grants"})," of relay and parachains allows measuring spending success."]}),"\n",(0,t.jsxs)(s.li,{children:["Source of ",(0,t.jsx)(s.strong,{children:"reliable data to support discussion and decisions during treasury votings"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["Strengthening Operations & Security:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Real-time monitoring and alerts enable the team to respond more effectively in the face of potential threats such as rug pulls."}),"\n",(0,t.jsx)(s.li,{children:"Thanks to access to on-chain insights, such as a TVL in DeFi or a Smart Contract creation per developer, Tokenguard helps understand how to better optimize the operations of parachains for individual entities."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Tokenguard's public features and data are already being used by community users and projects like DotInsights (",(0,t.jsx)(s.a,{href:"https://dotinsights.subwallet.app/polkadot-report-q2-2023-en/",children:"https://dotinsights.subwallet.app/polkadot-report-q2-2023-en/"}),"):"]}),"\n",(0,t.jsx)("img",{src:"https://imagizer.imageshack.com/img922/508/rymrP6.png",width:"800",border:"0"}),"\n",(0,t.jsx)(s.h2,{id:"team-",children:"Team \ud83d\udc65"}),"\n",(0,t.jsx)(s.h3,{id:"team-members",children:"Team members"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Kamil Gorski - CEO (",(0,t.jsx)(s.a,{href:"https://www.linkedin.com/in/gorskikamil/",children:"https://www.linkedin.com/in/gorskikamil/"}),")"]}),"\n",(0,t.jsxs)(s.li,{children:["Jakub Rojek - CTO (",(0,t.jsx)(s.a,{href:"https://www.linkedin.com/in/jakub-rojek-dev/",children:"https://www.linkedin.com/in/jakub-rojek-dev/"}),")"]}),"\n",(0,t.jsxs)(s.li,{children:["Damian Rolek - CDO (",(0,t.jsx)(s.a,{href:"https://www.linkedin.com/in/damianrolek/",children:"https://www.linkedin.com/in/damianrolek/"}),")"]}),"\n",(0,t.jsxs)(s.li,{children:["Matt Saczewski - Business Development Manager (",(0,t.jsx)(s.a,{href:"https://www.linkedin.com/in/msaczewski/",children:"https://www.linkedin.com/in/msaczewski/"}),")"]}),"\n",(0,t.jsxs)(s.li,{children:["Jacob Piorecki - UI/UX Designer (",(0,t.jsx)(s.a,{href:"https://www.linkedin.com/in/jacobpiorecki/",children:"https://www.linkedin.com/in/jacobpiorecki/"}),")"]}),"\n",(0,t.jsxs)(s.li,{children:["Piotr J\xf3zefowicz - Backend Developer (",(0,t.jsx)(s.a,{href:"https://www.linkedin.com/in/piotr-jozefowicz-529669220/",children:"https://www.linkedin.com/in/piotr-jozefowicz-529669220/"}),")"]}),"\n",(0,t.jsxs)(s.li,{children:["Adam Kr\xf3l - Backend Developer (",(0,t.jsx)(s.a,{href:"https://www.linkedin.com/in/adam-kr%C3%B3l-7b3a831b6/",children:"https://www.linkedin.com/in/adam-kr\xf3l-7b3a831b6/"}),")"]}),"\n",(0,t.jsxs)(s.li,{children:["Krystian Trepczy\u0144ski - Frontend Developer (",(0,t.jsx)(s.a,{href:"https://www.linkedin.com/in/krystiantrepczynski/",children:"https://www.linkedin.com/in/krystiantrepczynski/"}),")"]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"contact",children:"Contact"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Contact Name:"})," Matt Saczewski"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Contact Email:"})," ",(0,t.jsx)(s.a,{href:"mailto:matt@tokenguard.io",children:"matt@tokenguard.io"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Website:"})," ",(0,t.jsx)(s.a,{href:"http://tokenguard.io/",children:"tokenguard.io"})]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Registered Address:"})," Foksal 3/5 St., 00-366 Warsaw, Poland, EU VAT ID PL7252284130"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Registered Legal Entity:"})," Block Solutions Sp z o.o."]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"teams-experience",children:"Team\u2019s experience"}),"\n",(0,t.jsxs)(s.p,{children:["Tokenguard\u2019s clients include Swiss Sygnum Bank, ",(0,t.jsx)(s.a,{href:"http://bitcoin.com/",children:"Bitcoin.com"}),", Astar, Aleph Zero and many others recognizable brands. Each of cofounders has tremendous web3 experience - Damian was co-creating DeFi analytics platform Kasuria. Jacob was working at OpenLoyalty, helping web3 projects engage their users and Kamil created web3 security solutions, designing a security monitoring that served 30+ tokens."]}),"\n",(0,t.jsx)(s.h3,{id:"current-traction--business-model",children:"Current Traction & Business Model"}),"\n",(0,t.jsxs)(s.p,{children:["Our current business model focuses on offering growth analytics solutions for parachains & dApps and allowed us to validate both product and services through collaborations with notable parachains such as Astar and Aleph Zero. We believe that ",(0,t.jsx)(s.strong,{children:"delivering free of charge community analytics will further enhance discovery of growth insights within the whole ecosystem"}),", allowing it to win the race for leading position in the web3 space."]}),"\n",(0,t.jsxs)(s.p,{children:["Teams we cooperate with appreciate our flexibility and user-oriented approach:",(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),"\n",(0,t.jsx)("img",{src:"https://imagizer.imageshack.com/img923/978/GjfFD0.jpg",height:"80",align:"left",border:"0"}),(0,t.jsx)(s.em,{children:"Tokenguard is the missing part for Astar ecosystem. Its analytics and tracking capabilities provide us with the crucial insights needed to understand on-chain activity and user behavior, allowing us to make data-driven decisions and optimize our strategies like never before."})," ",(0,t.jsx)("br",{}),(0,t.jsx)(s.strong,{children:"Maarten Henskens, Head of Foundation, Astar Network"}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{})]}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)("img",{src:"https://imagizer.imageshack.com/img924/640/oervBt.png",height:"80",align:"left",border:"0"}),(0,t.jsx)(s.em,{children:"We are happy to use Tokenguard, which offers Aleph Zero comprehensive on-chain user metrics and engagement data. Thanks to their analytics tool, we can make data-driven decisions and provide transparency to our community with easy-to-use dashboards."})," ",(0,t.jsx)("br",{}),(0,t.jsx)(s.strong,{children:"Antoni Zolciak, CMO, Aleph Zero"}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{})]}),"\n",(0,t.jsx)(s.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://github.com/tokenguardio",children:"https://github.com/tokenguardio"})}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"development-status-",children:"Development Status \ud83d\udcd6"}),"\n",(0,t.jsx)(s.p,{children:"Tokenguard is currently developing the following features:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Publicly accessible core analytics for Substrate communities, available at ",(0,t.jsx)(s.a,{href:"https://app.tokenguard.io/",children:"https://app.tokenguard.io"})]}),"\n",(0,t.jsxs)(s.li,{children:["Ecosystem Analytics for ",(0,t.jsx)(s.a,{href:"https://astar.network/",children:"Astar"})," - paying customers"]}),"\n",(0,t.jsxs)(s.li,{children:["Ecosystem Analytics for ",(0,t.jsx)(s.a,{href:"https://alephzero.org/",children:"Aleph Zero"})," - paying customers"]}),"\n",(0,t.jsxs)(s.li,{children:["Ink! dApp analytics for ",(0,t.jsx)(s.a,{href:"https://azero.id/",children:"AZero ID"}),", ",(0,t.jsx)(s.a,{href:"https://app.arthswap.org/",children:"ArthSwap"}),", ",(0,t.jsx)(s.a,{href:"https://panjea.io/",children:"Panjea"}),", ",(0,t.jsx)(s.a,{href:"https://www.interlock.network/",children:"Interlock"})," and others"]}),"\n",(0,t.jsxs)(s.li,{children:["Partnership with ",(0,t.jsx)(s.a,{href:"https://www.subsquid.io/",children:"SubSquid"})]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"development-roadmap-",children:"Development Roadmap \ud83d\udd29"}),"\n",(0,t.jsxs)(s.p,{children:["Having a lot of experience in building web3 products, our team is aware that there are many challenges behind building a fully functional analytics platform similar to Dune for an ecosystem as vast and diverse as Polkadot & Kusama. We acknowledge the fact that a lot of questions need to be answered and W3F requirements need to be specified to fully estimate the cost of creating such a solution that will be ",(0,t.jsx)(s.strong,{children:"easily upgradable and basically - fun for users"}),". We therefore propose to split the work on the project into 3 composable grants / proposals:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Dashboard builder"}),"\n",(0,t.jsx)(s.li,{children:"Metrics creator & catalogue"}),"\n",(0,t.jsx)(s.li,{children:"Universal data model & ETL (work underway from other projects)"}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"This proposal is the first part that is solely focused on preparation of the dashboard creator, helping us and other teams deliver the data to users in an attractive form."}),"\n",(0,t.jsx)(s.h3,{id:"overview-1",children:"Overview"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Total Estimated Duration:"})," 2 months"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Full-Time Equivalent (FTE):"})," 1.5 FTE"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Total Costs:"})," 30,000 USD"]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"milestone-1-frontend",children:"Milestone 1: Frontend"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Estimated duration:"})," 2 months"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"FTE:"})," 1.0"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Costs:"})," 20,000 USD"]}),"\n"]}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Number"}),(0,t.jsx)(s.th,{children:"Deliverable"}),(0,t.jsx)(s.th,{children:"Specification"}),(0,t.jsx)(s.th,{children:"TechStack"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),(0,t.jsx)(s.strong,{children:"0a."}),(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"License"}),(0,t.jsx)(s.td,{children:"MIT"}),(0,t.jsx)(s.td,{children:"---"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),(0,t.jsx)(s.strong,{children:"0b."}),(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"Documentation"}),(0,t.jsx)(s.td,{children:"We will provide inline documentation."}),(0,t.jsx)(s.td,{children:"---"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),(0,t.jsx)(s.strong,{children:"0c."}),(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"Testing and Testing Guide"}),(0,t.jsx)(s.td,{children:"Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. We will describe how to run these tests."}),(0,t.jsx)(s.td,{children:"---"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),(0,t.jsx)(s.strong,{children:"0d."}),(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"Docker"}),(0,t.jsx)(s.td,{children:"We will provide a Dockerfile that can be used to test all the functionality delivered with this milestone."}),(0,t.jsx)(s.td,{children:"---"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),"1.",(0,t.jsx)("br",{})]}),(0,t.jsxs)(s.td,{children:["Metrics visualisation",(0,t.jsx)("br",{})]}),(0,t.jsxs)(s.td,{children:["Allowing visualisation from RAW data:",(0,t.jsx)("br",{}),"1. Data selection interface for user including axis and scale setup,",(0,t.jsx)("br",{}),"2. Creating a preliminary visaulisation design standard of common data types,",(0,t.jsx)("br",{}),"3. Preparing 5 customisable visualisation types which include linechart, barchart, piechart, multiline chart, stacked barchart.",(0,t.jsx)("br",{}),"4. Creating a mechanism to customize the visualisations for differently branded projects"]}),(0,t.jsx)(s.td,{children:"ReactJS, MongoDB, Apache ECharts"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),"2.",(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"Dashboard layout"}),(0,t.jsxs)(s.td,{children:["Creating a dashboard composer which allows:",(0,t.jsx)("br",{}),"1. Creating, saving, modifying and deleting new and existing dashboards,",(0,t.jsx)("br",{}),"2. Populating a dashboard with visualised metrics with drag & drop method,",(0,t.jsx)("br",{}),"3. Modifying the dashboard layout - changing the positions of charts, resizing and deleting them.",(0,t.jsx)("br",{}),"4. Enriching the dashboard with captions, titles and links."]}),(0,t.jsx)(s.td,{children:"ReactJS, React Grid Layout, MongoDB"})]})]})]}),"\n",(0,t.jsx)(s.h3,{id:"milestone-2-backend",children:"Milestone 2: Backend"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Estimated Duration:"})," 2 weeks"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"FTE:"})," 1.5"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Costs:"})," 10,000 USD"]}),"\n"]}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Number"}),(0,t.jsx)(s.th,{children:"Deliverable"}),(0,t.jsx)(s.th,{children:"Specification"}),(0,t.jsx)(s.th,{children:"TechStack"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),(0,t.jsx)(s.strong,{children:"0a."}),(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"License"}),(0,t.jsx)(s.td,{children:"MIT"}),(0,t.jsx)(s.td,{children:"---"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),(0,t.jsx)(s.strong,{children:"0b."}),(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"Documentation"}),(0,t.jsx)(s.td,{children:"We will provide inline documentation."}),(0,t.jsx)(s.td,{children:"---"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),(0,t.jsx)(s.strong,{children:"0c."}),(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"Testing and Testing Guide"}),(0,t.jsx)(s.td,{children:"Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. We will describe how to run these tests."}),(0,t.jsx)(s.td,{children:"---"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),(0,t.jsx)(s.strong,{children:"0d."}),(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"Docker"}),(0,t.jsx)(s.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."}),(0,t.jsx)(s.td,{children:"---"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),"1.",(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"API reading mechanism"}),(0,t.jsxs)(s.td,{children:["Connecting frontend visualisations with underlying data through an API:",(0,t.jsx)("br",{}),"1. Description and schema for an API response,",(0,t.jsx)("br",{}),"2. Saving and modifying visualisation related data,",(0,t.jsx)("br",{}),"3. Saving and modifying dashboard related data,",(0,t.jsx)("br",{})," 4. Collecting user data in relation to dashboard and chosen metrics."]}),(0,t.jsx)(s.td,{children:"NodeJS, Express, OpenAPI, MongoDB"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),"3.",(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"Report & estimation"}),(0,t.jsx)(s.td,{children:'Detailed report on the dashboard composer design and cost estimation of all the features mentioned in "Project details" as well as additional features requested by Web3 Foundation.'}),(0,t.jsx)(s.td,{children:"---"})]})]})]}),"\n",(0,t.jsx)(s.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,t.jsx)(s.h3,{id:"analytics-for-polkadot--kusama-ecosystems",children:"Analytics for Polkadot & Kusama ecosystems"}),"\n",(0,t.jsx)(s.p,{children:"The module implemented under this proposal lays the foundation for covering the entire Polkadot & Kusama ecosystem with accessible and user-friendly tool for on-chain insights and analysis. PoC of query builder, visualization creator, dashboard composer for Polkadot and Kusama Relay Chains enables further scaling of the analytical tool to the entire ecosystem."}),"\n",(0,t.jsx)(s.p,{children:"The next steps will consist of a proposal to create a common dataset of metrics for each category of pallets/parachains; creating a more complex query builder, automated/semi-automated process of new parachain & dApp inclusion; automated/semi-automated process of user-requested tables aggregation; indexing and maintaining a database for the entire ecosystem (in cooperation with the Parity team)."}),"\n",(0,t.jsx)(s.h3,{id:"making-web3-grow",children:"Making web3 grow"}),"\n",(0,t.jsx)(s.p,{children:"At the same time, continuing the current activities, Tokenguard will offer its services to provide custom dashboards with advanced features to subsequent parachains in order to improve their marketing and operational activities."}),"\n",(0,t.jsx)(s.p,{children:"With backing up of well-known web3 investors, Tokenguard is on its path to help web3 ecosystems and dApps understand their user behavior and focus on product & marketing strategies that deliver organic growth."})]})}function h(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>a,x:()=>o});var i=n(96540);const t={},r=i.createContext(t);function a(e){const s=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),i.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/03a2950a.e0489d14.js b/assets/js/03a2950a.e0489d14.js new file mode 100644 index 00000000000..18afa6cc181 --- /dev/null +++ b/assets/js/03a2950a.e0489d14.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[66230],{79183:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>d});const i=JSON.parse('{"id":"applications/Tokenguard","title":"Tokenguard: Ultimate growth & data analytics tool for Substrate","description":"Team Name:* Tokenguard.io (Block Solutions Sp z o.o.)","source":"@site/applications/Tokenguard.md","sourceDirName":"applications","slug":"/applications/Tokenguard","permalink":"/applications/Tokenguard","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/Tokenguard.md","tags":[],"version":"current","frontMatter":{}}');var t=n(74848),r=n(28453);const a={},o="Tokenguard: Ultimate growth & data analytics tool for Substrate",l={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Beta Version - existing Tokenguard features",id:"beta-version---existing-tokenguard-features",level:3},{value:"Features and designs:",id:"features-and-designs",level:4},{value:"Proposal mockups - new standalone features:",id:"proposal-mockups---new-standalone-features",level:4},{value:"Other Proposals Comparison",id:"other-proposals-comparison",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team\u2019s experience",id:"teams-experience",level:3},{value:"Current Traction & Business Model",id:"current-traction--business-model",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1: Frontend",id:"milestone-1-frontend",level:3},{value:"Milestone 2: Backend",id:"milestone-2-backend",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Analytics for Polkadot & Kusama ecosystems",id:"analytics-for-polkadot--kusama-ecosystems",level:3},{value:"Making web3 grow",id:"making-web3-grow",level:3}];function c(e){const s={a:"a",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"tokenguard-ultimate-growth--data-analytics-tool-for-substrate",children:"Tokenguard: Ultimate growth & data analytics tool for Substrate"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Team Name:"})," ",(0,t.jsx)(s.a,{href:"http://tokenguard.io/",children:"Tokenguard.io"})," (Block Solutions Sp z o.o.)"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Payment Address:"})," PL83249010570000990157469781 (USD IBAN; Alior Bank; SWIFT / BIC: ALBPPLPW)"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsxs)(s.strong,{children:[(0,t.jsx)(s.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 2"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"project-overview-",children:"Project Overview \ud83d\udcc4"}),"\n",(0,t.jsxs)(s.p,{children:["This application is a response to the RFP by Keegan Quigley: ",(0,t.jsx)(s.a,{href:"https://grants.web3.foundation/docs/RFPs/Under%20Development/analysis-website-and-data-platform",children:"https://grants.web3.foundation/docs/RFPs/Under Development/analysis-website-and-data-platform"}),"."]}),"\n",(0,t.jsx)(s.h3,{id:"overview",children:"Overview"}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"Absence of a user-friendly on-chain analytics platform"})," is an existing challenge of the Polkadot & Kusama ecosystems. Currently, querying data through GraphQL and backend services like Subquery and Subsquid requires considerable effort. Creating compelling and visually attractive dashboards is almost impossible due to lack of tools that focus on end user experinece. As a result, power-users and builders face difficulties in interactively accessing high-quality data and creating custom visualizations for easy sharing."]}),"\n",(0,t.jsxs)(s.p,{children:["To address this challenge, we propose an easy-to-use and efficient solution - an advanced data analytics tool designed to cater specifically to the needs of the Polkadot & Kusama ecosystems and related parachains. Our platform offers seamless data querying, simplifying the creation of customized charts and visualizations, ",(0,t.jsx)(s.strong,{children:"facilitating easy sharing of valuable insights and metrics within the"})," ",(0,t.jsx)(s.strong,{children:"community."})]}),"\n",(0,t.jsxs)(s.p,{children:["With the aim of ensuring extensive accessibility across the Substrate community and optimizing the functionality of our analytical tool, Tokenguard application places ",(0,t.jsx)(s.strong,{children:"a strong emphasis on refining the UX aspect"}),". This involves the development of an intuitive user interface (UI) and seamless frontend that effectively facilitates insights discovery."]}),"\n",(0,t.jsx)(s.h3,{id:"project-details",children:"Project Details"}),"\n",(0,t.jsxs)(s.p,{children:["To meet the expectations of Polkadot and Kusama community and the suggestions contained in the RFP, we propose a ",(0,t.jsx)(s.strong,{children:"comprehensive analytics tool consisting of"})," ",(0,t.jsx)(s.strong,{children:"a query builder, visualization creator and dashboard composer for Polkadot & Kusama ecosystems"})," - the creation of which requires the implementation of the following features."]}),"\n",(0,t.jsxs)(s.p,{children:["Features that will be built using this specific grant are ",(0,t.jsx)(s.strong,{children:"in bold"}),"."]}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["Data model:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Creating a RAW data access that would categorize data depending on its depth:","\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsx)(s.li,{children:"L0: Relay chains (Polkadot, Kusama)"}),"\n",(0,t.jsx)(s.li,{children:"L1: Parachains"}),"\n",(0,t.jsx)(s.li,{children:"L2: dApps & Smart Contracts"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["Creating a database of pre-transformed, comparable & curated metrics - each of the metric would be a pre-defined SQL query based on RAW data that is curated by Tokenguard team:","\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsx)(s.li,{children:"User related metrics"}),"\n",(0,t.jsx)(s.li,{children:"Activity related metrics"}),"\n",(0,t.jsx)(s.li,{children:"Conversions related metrics"}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["Metrics","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Creation:","\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsx)(s.li,{children:"Allowing users to create their own SQL queries from scratch and save them."}),"\n",(0,t.jsx)(s.li,{children:"Allowing users to preview SQL query of each of the existing metrics at Tokenguard."}),"\n",(0,t.jsx)(s.li,{children:"Allowing users to copy, edit and save each of the existing metrics."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["Collection:","\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsx)(s.li,{children:"List of projects on different depths (L0, L1, L2)"}),"\n",(0,t.jsx)(s.li,{children:"List of RAW tables available for these projects"}),"\n",(0,t.jsx)(s.li,{children:"List of comparable metrics for these projects"}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Dashboards"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Making it possible for people to create & share dashboards with their own metrics:"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.strong,{children:"Providing a description and schema of required API response. The response consists of all possible measures and dimensions for future visualization."})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.strong,{children:"Creating a frontend which allows user to select series of data for axis X and Y for visualization."})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.strong,{children:"Allowing user to select type of visualization for the data among 5 types (linechart, barchart, piechart, multiline chart, stacked barchart)."})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.strong,{children:"Designing frontend to layout visualizations on canvas (using drag & drop or any other method that is more comfortable for the user)."})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.strong,{children:"Saving dashboard related data on backend to allow frontend transform database metrics into attractive visualisations."})}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["Users","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Creating a user subpage with a list of users' dashboards & metrics"}),"\n",(0,t.jsx)(s.li,{children:"Displaying user stats"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"beta-version---existing-tokenguard-features",children:(0,t.jsx)(s.strong,{children:"Beta Version - existing Tokenguard features"})}),"\n",(0,t.jsxs)(s.p,{children:["(You can access public version of Tokenguard app at ",(0,t.jsx)(s.a,{href:"http://app.tokenguard.io/",children:"app.tokenguard.io"}),")"]}),"\n",(0,t.jsx)(s.p,{children:"Over the course of six months, Tokenguard application was meticulously developed with the objective of creating a user-friendly analytics tool for the Substrate Ecosystem, without requiring any coding or SQL skills. Within this timeframe, we successfully produced a beta version of the app, which now offers essential on-chain analytics for various projects within the Polkadot ecosystem, such as Astar, Aleph Zero, Nodle and many others."}),"\n",(0,t.jsx)(s.h4,{id:"features-and-designs",children:(0,t.jsx)(s.strong,{children:"Features and designs:"})}),"\n",(0,t.jsxs)(s.p,{children:["Dashboards overview - The overview of currently indexed and supported parachains:",(0,t.jsx)("br",{})]}),"\n",(0,t.jsx)("img",{src:"https://imagizer.imageshack.com/img924/1246/BK6CYe.png",width:"800",border:"0"}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsxs)(s.p,{children:["Ecosystem metrics dashboards - The on-chain data is visually presented through charts that are categorized into the most significant and essential aspects:",(0,t.jsx)("br",{})]}),"\n",(0,t.jsx)("img",{src:"https://imagizer.imageshack.com/img923/2272/10xb78.png",width:"800",border:"0"}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsxs)(s.p,{children:["Filtering - The ability to sort data based on the most useful indicators:",(0,t.jsx)("br",{})]}),"\n",(0,t.jsx)("img",{src:"https://imagizer.imageshack.com/img924/8639/9qncPN.png",width:"800",border:"0"}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsxs)(s.p,{children:["User activity analytics - A module that allows for an in-depth analysis of user behavior based on metrics such as DAU, MAU, retention or user segments:",(0,t.jsx)("br",{})]}),"\n",(0,t.jsx)("img",{src:"https://imagizer.imageshack.com/img924/8259/bLTEVH.png",width:"800",border:"0"}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)(s.h4,{id:"proposal-mockups---new-standalone-features",children:(0,t.jsx)(s.strong,{children:"Proposal mockups - new standalone features:"})}),"\n",(0,t.jsxs)(s.p,{children:["Dashboard creator - The drag and drop feature allows users to add metrics onto the dashboard:",(0,t.jsx)("br",{})]}),"\n",(0,t.jsx)("img",{src:"https://imagizer.imageshack.com/img922/9135/yU5s5a.png",width:"800",border:"0"}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)(s.p,{children:"Layout composer - Allowing for an easy modification of the dashboard's layout:"}),"\n",(0,t.jsx)("img",{src:"https://imagizer.imageshack.com/img922/9879/LgeThz.png",width:"800",border:"0"}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)("img",{src:"https://imagizer.imageshack.com/img923/5586/pAvjqF.png",width:"800",border:"0"}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Technology Stack:"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"JavaScript, TypeScript, Python"}),"\n",(0,t.jsx)(s.li,{children:"SQL, dbt, Airflow"}),"\n",(0,t.jsx)(s.li,{children:"Kubernetes"}),"\n",(0,t.jsx)(s.li,{children:"SubSquid"}),"\n",(0,t.jsx)(s.li,{children:"BI analytics tools"}),"\n",(0,t.jsx)(s.li,{children:"Cloud hosting and scalable infrastructure"}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"other-proposals-comparison",children:"Other Proposals Comparison"}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.a,{href:"https://grants.web3.foundation/docs/RFPs/Under%20Development/analysis-website-and-data-platform",children:"RFP"})," has been partially addressed by other teams in the proposals ",(0,t.jsx)(s.a,{href:"https://github.com/w3f/Grants-Program/pull/1716",children:"#1716"})," ",(0,t.jsx)(s.a,{href:"https://github.com/w3f/Grants-Program/pull/1768",children:"#1768"})," ",(0,t.jsx)(s.a,{href:"https://github.com/w3f/Grants-Program/pull/1748",children:"#1748"})," ",(0,t.jsx)(s.a,{href:"https://github.com/w3f/Grants-Program/pull/1815",children:"#1815"})," and work is underway to solve it. Being aware of how wide and complex the area of data analysis is, in our solution, we wanted to refer to the issues and propose modules that have not yet been built, but will complement the ongoing work."]}),"\n",(0,t.jsx)(s.p,{children:"Compared to the following, Tokenguard in this proposal provides both a user-friendly no-code dashboard composer and visualisation composer - which UX / UI is designed in an accessible way, reaching a wide audience."}),"\n",(0,t.jsx)(s.p,{children:"Features created in this proposal will support other data-related projects, making it easier for them to attract Polkadot & Kusama users:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.a,{href:"https://github.com/w3f/Grants-Program/pull/1716",children:"#1716"})," - is an ETL tool that focuses on delivering the Polkadot ecosystem data to a wide audience using Google BigQuery service."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.a,{href:"https://github.com/w3f/Grants-Program/pull/1768",children:"#1768"})," - is an ETL tool focused on deep account analytics challenges."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.a,{href:"https://github.com/w3f/Grants-Program/pull/1748",children:"#1748"})," - is a data analytics tool that focuses on wallet profiling and tracking its investments and structure."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.a,{href:"https://github.com/w3f/Grants-Program/pull/1815",children:"#1815"})," - is a low-level SQL query editor and vizualization creator dedicated for data engineers and developers."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,t.jsxs)(s.p,{children:["In order to facilitate growth, Substrate ecosystem needs a vast and thriving environment of developers creating parachains, dApps and smart contracts. Each parachain and each smart contract generates thousands of transactions that store important technical and business insights. Each new growing dApp, with its own marketing & growth strategy, ",(0,t.jsx)(s.strong,{children:"brings in new active users to the ecosystem and venture capital money"}),". These insights are currently hard to discover and the ecosystem needs infrastructure tools that would make it easy for management teams and developers to uncover them, similarly as it is done in EVM environment with tools like Dune Analytics or Tenderly."]}),"\n",(0,t.jsx)(s.p,{children:"Tokenguard addresses the need of following audiences:"}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Community:"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Transparency & Credibility:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Access to data and on-chain insights is the basis for a community driven blockchain."}),"\n",(0,t.jsx)(s.li,{children:"The ability to track and verify activity and growth in the parachains reinforces trust."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["Investment:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["A tool that gives access to the ",(0,t.jsx)(s.strong,{children:"performance of individual dApps and DeFi allows for a better investment decisions."})]}),"\n",(0,t.jsx)(s.li,{children:"A tool that gives access to the performance of individual dApps and DeFi** allows for a better assessment of the market situation in terms of investment."}),"\n",(0,t.jsx)(s.li,{children:"Insights into data on developer activity and TVL allows to attract additional community members who want to invest in the ecosystem."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["Engagement:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"A well-informed community is more likely to be involved in the building programs on a given chain and in ongoing activities."}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Access to insights allows the community to actively promote chain in social media"}),", at events and in ordinary media."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Relay chains, parachains and dApps teams:"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Marketing Improvements:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Off-chain to on-chain data correlation provides a deeper understanding of the marketing and PR efforts that contribute to the network\u2019s growth"}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Developer engagement tracking allows to identify strategies that encourage web3 creators"})," to build within the ecosystem."]}),"\n",(0,t.jsxs)(s.li,{children:["User segmentation and user behavior tracking allows to understand ",(0,t.jsx)(s.strong,{children:"which protocols and dApps generate the most usage in the network"})," and what type of user affects its growth."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["More efficient Treasury Spending:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Tracking the ",(0,t.jsx)(s.strong,{children:"inflow of new users through dApps and on-chain projects financed through treasury grants"})," of relay and parachains allows measuring spending success."]}),"\n",(0,t.jsxs)(s.li,{children:["Source of ",(0,t.jsx)(s.strong,{children:"reliable data to support discussion and decisions during treasury votings"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["Strengthening Operations & Security:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Real-time monitoring and alerts enable the team to respond more effectively in the face of potential threats such as rug pulls."}),"\n",(0,t.jsx)(s.li,{children:"Thanks to access to on-chain insights, such as a TVL in DeFi or a Smart Contract creation per developer, Tokenguard helps understand how to better optimize the operations of parachains for individual entities."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Tokenguard's public features and data are already being used by community users and projects like DotInsights (",(0,t.jsx)(s.a,{href:"https://dotinsights.subwallet.app/polkadot-report-q2-2023-en/",children:"https://dotinsights.subwallet.app/polkadot-report-q2-2023-en/"}),"):"]}),"\n",(0,t.jsx)("img",{src:"https://imagizer.imageshack.com/img922/508/rymrP6.png",width:"800",border:"0"}),"\n",(0,t.jsx)(s.h2,{id:"team-",children:"Team \ud83d\udc65"}),"\n",(0,t.jsx)(s.h3,{id:"team-members",children:"Team members"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Kamil Gorski - CEO (",(0,t.jsx)(s.a,{href:"https://www.linkedin.com/in/gorskikamil/",children:"https://www.linkedin.com/in/gorskikamil/"}),")"]}),"\n",(0,t.jsxs)(s.li,{children:["Jakub Rojek - CTO (",(0,t.jsx)(s.a,{href:"https://www.linkedin.com/in/jakub-rojek-dev/",children:"https://www.linkedin.com/in/jakub-rojek-dev/"}),")"]}),"\n",(0,t.jsxs)(s.li,{children:["Damian Rolek - CDO (",(0,t.jsx)(s.a,{href:"https://www.linkedin.com/in/damianrolek/",children:"https://www.linkedin.com/in/damianrolek/"}),")"]}),"\n",(0,t.jsxs)(s.li,{children:["Matt Saczewski - Business Development Manager (",(0,t.jsx)(s.a,{href:"https://www.linkedin.com/in/msaczewski/",children:"https://www.linkedin.com/in/msaczewski/"}),")"]}),"\n",(0,t.jsxs)(s.li,{children:["Jacob Piorecki - UI/UX Designer (",(0,t.jsx)(s.a,{href:"https://www.linkedin.com/in/jacobpiorecki/",children:"https://www.linkedin.com/in/jacobpiorecki/"}),")"]}),"\n",(0,t.jsxs)(s.li,{children:["Piotr J\xf3zefowicz - Backend Developer (",(0,t.jsx)(s.a,{href:"https://www.linkedin.com/in/piotr-jozefowicz-529669220/",children:"https://www.linkedin.com/in/piotr-jozefowicz-529669220/"}),")"]}),"\n",(0,t.jsxs)(s.li,{children:["Adam Kr\xf3l - Backend Developer (",(0,t.jsx)(s.a,{href:"https://www.linkedin.com/in/adam-kr%C3%B3l-7b3a831b6/",children:"https://www.linkedin.com/in/adam-kr\xf3l-7b3a831b6/"}),")"]}),"\n",(0,t.jsxs)(s.li,{children:["Krystian Trepczy\u0144ski - Frontend Developer (",(0,t.jsx)(s.a,{href:"https://www.linkedin.com/in/krystiantrepczynski/",children:"https://www.linkedin.com/in/krystiantrepczynski/"}),")"]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"contact",children:"Contact"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Contact Name:"})," Matt Saczewski"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Contact Email:"})," ",(0,t.jsx)(s.a,{href:"mailto:matt@tokenguard.io",children:"matt@tokenguard.io"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Website:"})," ",(0,t.jsx)(s.a,{href:"http://tokenguard.io/",children:"tokenguard.io"})]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Registered Address:"})," Foksal 3/5 St., 00-366 Warsaw, Poland, EU VAT ID PL7252284130"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Registered Legal Entity:"})," Block Solutions Sp z o.o."]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"teams-experience",children:"Team\u2019s experience"}),"\n",(0,t.jsxs)(s.p,{children:["Tokenguard\u2019s clients include Swiss Sygnum Bank, ",(0,t.jsx)(s.a,{href:"http://bitcoin.com/",children:"Bitcoin.com"}),", Astar, Aleph Zero and many others recognizable brands. Each of cofounders has tremendous web3 experience - Damian was co-creating DeFi analytics platform Kasuria. Jacob was working at OpenLoyalty, helping web3 projects engage their users and Kamil created web3 security solutions, designing a security monitoring that served 30+ tokens."]}),"\n",(0,t.jsx)(s.h3,{id:"current-traction--business-model",children:"Current Traction & Business Model"}),"\n",(0,t.jsxs)(s.p,{children:["Our current business model focuses on offering growth analytics solutions for parachains & dApps and allowed us to validate both product and services through collaborations with notable parachains such as Astar and Aleph Zero. We believe that ",(0,t.jsx)(s.strong,{children:"delivering free of charge community analytics will further enhance discovery of growth insights within the whole ecosystem"}),", allowing it to win the race for leading position in the web3 space."]}),"\n",(0,t.jsxs)(s.p,{children:["Teams we cooperate with appreciate our flexibility and user-oriented approach:",(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),"\n",(0,t.jsx)("img",{src:"https://imagizer.imageshack.com/img923/978/GjfFD0.jpg",height:"80",align:"left",border:"0"}),(0,t.jsx)(s.em,{children:"Tokenguard is the missing part for Astar ecosystem. Its analytics and tracking capabilities provide us with the crucial insights needed to understand on-chain activity and user behavior, allowing us to make data-driven decisions and optimize our strategies like never before."})," ",(0,t.jsx)("br",{}),(0,t.jsx)(s.strong,{children:"Maarten Henskens, Head of Foundation, Astar Network"}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{})]}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)("img",{src:"https://imagizer.imageshack.com/img924/640/oervBt.png",height:"80",align:"left",border:"0"}),(0,t.jsx)(s.em,{children:"We are happy to use Tokenguard, which offers Aleph Zero comprehensive on-chain user metrics and engagement data. Thanks to their analytics tool, we can make data-driven decisions and provide transparency to our community with easy-to-use dashboards."})," ",(0,t.jsx)("br",{}),(0,t.jsx)(s.strong,{children:"Antoni Zolciak, CMO, Aleph Zero"}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{})]}),"\n",(0,t.jsx)(s.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://github.com/tokenguardio",children:"https://github.com/tokenguardio"})}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"development-status-",children:"Development Status \ud83d\udcd6"}),"\n",(0,t.jsx)(s.p,{children:"Tokenguard is currently developing the following features:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Publicly accessible core analytics for Substrate communities, available at ",(0,t.jsx)(s.a,{href:"https://app.tokenguard.io/",children:"https://app.tokenguard.io"})]}),"\n",(0,t.jsxs)(s.li,{children:["Ecosystem Analytics for ",(0,t.jsx)(s.a,{href:"https://astar.network/",children:"Astar"})," - paying customers"]}),"\n",(0,t.jsxs)(s.li,{children:["Ecosystem Analytics for ",(0,t.jsx)(s.a,{href:"https://alephzero.org/",children:"Aleph Zero"})," - paying customers"]}),"\n",(0,t.jsxs)(s.li,{children:["Ink! dApp analytics for ",(0,t.jsx)(s.a,{href:"https://azero.id/",children:"AZero ID"}),", ",(0,t.jsx)(s.a,{href:"https://app.arthswap.org/",children:"ArthSwap"}),", ",(0,t.jsx)(s.a,{href:"https://panjea.io/",children:"Panjea"}),", ",(0,t.jsx)(s.a,{href:"https://www.interlock.network/",children:"Interlock"})," and others"]}),"\n",(0,t.jsxs)(s.li,{children:["Partnership with ",(0,t.jsx)(s.a,{href:"https://www.subsquid.io/",children:"SubSquid"})]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"development-roadmap-",children:"Development Roadmap \ud83d\udd29"}),"\n",(0,t.jsxs)(s.p,{children:["Having a lot of experience in building web3 products, our team is aware that there are many challenges behind building a fully functional analytics platform similar to Dune for an ecosystem as vast and diverse as Polkadot & Kusama. We acknowledge the fact that a lot of questions need to be answered and W3F requirements need to be specified to fully estimate the cost of creating such a solution that will be ",(0,t.jsx)(s.strong,{children:"easily upgradable and basically - fun for users"}),". We therefore propose to split the work on the project into 3 composable grants / proposals:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Dashboard builder"}),"\n",(0,t.jsx)(s.li,{children:"Metrics creator & catalogue"}),"\n",(0,t.jsx)(s.li,{children:"Universal data model & ETL (work underway from other projects)"}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"This proposal is the first part that is solely focused on preparation of the dashboard creator, helping us and other teams deliver the data to users in an attractive form."}),"\n",(0,t.jsx)(s.h3,{id:"overview-1",children:"Overview"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Total Estimated Duration:"})," 2 months"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Full-Time Equivalent (FTE):"})," 1.5 FTE"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Total Costs:"})," 30,000 USD"]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"milestone-1-frontend",children:"Milestone 1: Frontend"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Estimated duration:"})," 2 months"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"FTE:"})," 1.0"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Costs:"})," 20,000 USD"]}),"\n"]}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Number"}),(0,t.jsx)(s.th,{children:"Deliverable"}),(0,t.jsx)(s.th,{children:"Specification"}),(0,t.jsx)(s.th,{children:"TechStack"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),(0,t.jsx)(s.strong,{children:"0a."}),(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"License"}),(0,t.jsx)(s.td,{children:"MIT"}),(0,t.jsx)(s.td,{children:"---"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),(0,t.jsx)(s.strong,{children:"0b."}),(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"Documentation"}),(0,t.jsx)(s.td,{children:"We will provide inline documentation."}),(0,t.jsx)(s.td,{children:"---"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),(0,t.jsx)(s.strong,{children:"0c."}),(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"Testing and Testing Guide"}),(0,t.jsx)(s.td,{children:"Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. We will describe how to run these tests."}),(0,t.jsx)(s.td,{children:"---"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),(0,t.jsx)(s.strong,{children:"0d."}),(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"Docker"}),(0,t.jsx)(s.td,{children:"We will provide a Dockerfile that can be used to test all the functionality delivered with this milestone."}),(0,t.jsx)(s.td,{children:"---"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),"1.",(0,t.jsx)("br",{})]}),(0,t.jsxs)(s.td,{children:["Metrics visualisation",(0,t.jsx)("br",{})]}),(0,t.jsxs)(s.td,{children:["Allowing visualisation from RAW data:",(0,t.jsx)("br",{}),"1. Data selection interface for user including axis and scale setup,",(0,t.jsx)("br",{}),"2. Creating a preliminary visaulisation design standard of common data types,",(0,t.jsx)("br",{}),"3. Preparing 5 customisable visualisation types which include linechart, barchart, piechart, multiline chart, stacked barchart.",(0,t.jsx)("br",{}),"4. Creating a mechanism to customize the visualisations for differently branded projects"]}),(0,t.jsx)(s.td,{children:"ReactJS, MongoDB, Apache ECharts"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),"2.",(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"Dashboard layout"}),(0,t.jsxs)(s.td,{children:["Creating a dashboard composer which allows:",(0,t.jsx)("br",{}),"1. Creating, saving, modifying and deleting new and existing dashboards,",(0,t.jsx)("br",{}),"2. Populating a dashboard with visualised metrics with drag & drop method,",(0,t.jsx)("br",{}),"3. Modifying the dashboard layout - changing the positions of charts, resizing and deleting them.",(0,t.jsx)("br",{}),"4. Enriching the dashboard with captions, titles and links."]}),(0,t.jsx)(s.td,{children:"ReactJS, React Grid Layout, MongoDB"})]})]})]}),"\n",(0,t.jsx)(s.h3,{id:"milestone-2-backend",children:"Milestone 2: Backend"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Estimated Duration:"})," 2 weeks"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"FTE:"})," 1.5"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Costs:"})," 10,000 USD"]}),"\n"]}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Number"}),(0,t.jsx)(s.th,{children:"Deliverable"}),(0,t.jsx)(s.th,{children:"Specification"}),(0,t.jsx)(s.th,{children:"TechStack"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),(0,t.jsx)(s.strong,{children:"0a."}),(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"License"}),(0,t.jsx)(s.td,{children:"MIT"}),(0,t.jsx)(s.td,{children:"---"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),(0,t.jsx)(s.strong,{children:"0b."}),(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"Documentation"}),(0,t.jsx)(s.td,{children:"We will provide inline documentation."}),(0,t.jsx)(s.td,{children:"---"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),(0,t.jsx)(s.strong,{children:"0c."}),(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"Testing and Testing Guide"}),(0,t.jsx)(s.td,{children:"Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. We will describe how to run these tests."}),(0,t.jsx)(s.td,{children:"---"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),(0,t.jsx)(s.strong,{children:"0d."}),(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"Docker"}),(0,t.jsx)(s.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."}),(0,t.jsx)(s.td,{children:"---"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),"1.",(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"API reading mechanism"}),(0,t.jsxs)(s.td,{children:["Connecting frontend visualisations with underlying data through an API:",(0,t.jsx)("br",{}),"1. Description and schema for an API response,",(0,t.jsx)("br",{}),"2. Saving and modifying visualisation related data,",(0,t.jsx)("br",{}),"3. Saving and modifying dashboard related data,",(0,t.jsx)("br",{})," 4. Collecting user data in relation to dashboard and chosen metrics."]}),(0,t.jsx)(s.td,{children:"NodeJS, Express, OpenAPI, MongoDB"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)("br",{}),"3.",(0,t.jsx)("br",{})]}),(0,t.jsx)(s.td,{children:"Report & estimation"}),(0,t.jsx)(s.td,{children:'Detailed report on the dashboard composer design and cost estimation of all the features mentioned in "Project details" as well as additional features requested by Web3 Foundation.'}),(0,t.jsx)(s.td,{children:"---"})]})]})]}),"\n",(0,t.jsx)(s.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,t.jsx)(s.h3,{id:"analytics-for-polkadot--kusama-ecosystems",children:"Analytics for Polkadot & Kusama ecosystems"}),"\n",(0,t.jsx)(s.p,{children:"The module implemented under this proposal lays the foundation for covering the entire Polkadot & Kusama ecosystem with accessible and user-friendly tool for on-chain insights and analysis. PoC of query builder, visualization creator, dashboard composer for Polkadot and Kusama Relay Chains enables further scaling of the analytical tool to the entire ecosystem."}),"\n",(0,t.jsx)(s.p,{children:"The next steps will consist of a proposal to create a common dataset of metrics for each category of pallets/parachains; creating a more complex query builder, automated/semi-automated process of new parachain & dApp inclusion; automated/semi-automated process of user-requested tables aggregation; indexing and maintaining a database for the entire ecosystem (in cooperation with the Parity team)."}),"\n",(0,t.jsx)(s.h3,{id:"making-web3-grow",children:"Making web3 grow"}),"\n",(0,t.jsx)(s.p,{children:"At the same time, continuing the current activities, Tokenguard will offer its services to provide custom dashboards with advanced features to subsequent parachains in order to improve their marketing and operational activities."}),"\n",(0,t.jsx)(s.p,{children:"With backing up of well-known web3 investors, Tokenguard is on its path to help web3 ecosystems and dApps understand their user behavior and focus on product & marketing strategies that deliver organic growth."})]})}function h(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>a,x:()=>o});var i=n(96540);const t={},r=i.createContext(t);function a(e){const s=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),i.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/04409633.8e28f2a8.js b/assets/js/04409633.8e28f2a8.js new file mode 100644 index 00000000000..65346deb202 --- /dev/null +++ b/assets/js/04409633.8e28f2a8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[61940],{70895:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>o,contentTitle:()=>r,default:()=>c,frontMatter:()=>l,metadata:()=>n,toc:()=>h});const n=JSON.parse('{"id":"applications/stable-asset","title":"Stable Asset","description":"Project Name:* Stable Asset","source":"@site/applications/stable-asset.md","sourceDirName":"applications","slug":"/applications/stable-asset","permalink":"/applications/stable-asset","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/stable-asset.md","tags":[],"version":"current","frontMatter":{}}');var i=s(74848),a=s(28453);const l={},r="Stable Asset",o={},h=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Stable Asset",id:"stable-asset-1",level:4},{value:"Stable Swap",id:"stable-swap",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 Implement Stable Swap Module",id:"milestone-1--implement-stable-swap-module",level:3},{value:"Milestone 2 \u2014 Implement Stable Asset Module",id:"milestone-2--implement-stable-asset-module",level:3},{value:"Milestone 3 \u2014 Support Yield in Stable Asset",id:"milestone-3--support-yield-in-stable-asset",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function d(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"stable-asset",children:"Stable Asset"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Project Name:"})," Stable Asset"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Team Name:"})," NUTS Finance"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Payment Address:"})," 0x679824d755B054a2a50358008472a6F400740319"]}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,i.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(t.p,{children:"There are vastly emerging assets in the Polkadot ecosystem, including both Polkadot native assets and assets bridged from other blockchains such as Ethereum and EOS. These assets introduce diversity in architecture and business model, but also fragmentizes the ecosystem since applications need to build separate markets for each of these assets. For example, stables coins can be divided into three categories: fiat-backed, crypto-backed and algorithmic stable coins, and on Ethereum each category has more than ten stable coin protocols. DEX benefits from such asset diversification but other protocols such as lending and options find it difficult to accommodate all these various assets."}),"\n",(0,i.jsx)(t.p,{children:"Asset synthesis is a common approach to unify asset values and hedge asset risks. One approach is to synthesize several mainstream assets or assets belonging to the same niche so that the synthetic assets represents the general trend of the underlying assets. In this approach the synthetic assets acts similiar to an index fund, and how to fairly price and adopt the synthetic assets becomes a new question. The second approach is to synthetize several assets of the same value peg such as BTC, ETH or USD. The synthetic asset has the same value peg, and it could simplifies financial application development since only one synthetic asset needs to be supported for each peg type."}),"\n",(0,i.jsx)(t.p,{children:"Stable Asset is an asset synthetic protocol of the second approach. It is also built with integrated swap and saving functionalities using the basket of assets."}),"\n",(0,i.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,i.jsx)(t.p,{children:"The Stable Asset is an asset synthetic protocol based on Curve's StableSwap algorithm as shown below:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://lh6.googleusercontent.com/i6owf1R5cUcc8lQtPTouisnVsj1Dt3xeCyeC_XcSjLPBCk1glLh_ZHx5GUa_f5WhsrkXJZx-PKfy8dxxrl1YjDsy-suFyXeU0vx1i6zp82lK7__NCR-HcE5cxEZ0FmaACfH8Ah7z",alt:"Stable Swap Algorithm"})}),"\n",(0,i.jsx)(t.p,{children:"Widely adopted as swap algorithm among assets with the same peg, it also works perfectly as an asset synthesis algorithm with a basket of assets with the same peg due to the following properties:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"When the prices of all underlying assets in the basket are equal, the number of each underlying assets in the baskets are equal as well. At this moment, the value of the synthetic asset equals the total number of underlying assets in the basket, and the collateral ratio reaches 100%;"}),"\n",(0,i.jsx)(t.li,{children:"Whenever the price of any underlying asset differs from each other, the value of StableAsset is smaller than the total number of underlying assets so that the collateral ratio is larger than 100%. Since all assets in the baskets are of the same value peg, their prices should fluctuate about the peg prices with low variation expected so that the overall collateral ratio should be slightly over 100%;"}),"\n",(0,i.jsx)(t.li,{children:"Users of the underlying swap can help to maintain the basket balance subject to underlying assets price shift."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"The Stable Asset system consists of three major components: Stable Asset, Stable Swap and Stable Savings."}),"\n",(0,i.jsx)(t.h4,{id:"stable-asset-1",children:"Stable Asset"}),"\n",(0,i.jsx)(t.p,{children:"Stable Asset is a synthetic asset with value peg such as BTC or USD. It's backed by a basket of assets with similar peg, and it provides more reliability and better peg compared to individual asset in the basket."}),"\n",(0,i.jsx)(t.p,{children:"The value of Stable Asset is derived from Curve's StableSwap algorithm. When there is shift in price from individual asset in the basket, the value of Stable Asset remains unchanged: The total value of Stable Asset is always the total amount of assets in the basket when their prices are all equal."}),"\n",(0,i.jsx)(t.h4,{id:"stable-swap",children:"Stable Swap"}),"\n",(0,i.jsx)(t.p,{children:"Stable Swap is a DEX built on top of the basket which is backing Swap Asset. It serves several purposes in the systems."}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"First, it enhances the capital efficiency of the baskets. Instead of staying still, the asset basket is used as DEX;"}),"\n",(0,i.jsx)(t.li,{children:"Second, it helps maintain peg of Stable Asset. Since the prices of individual asset might shift over time, DEX users can adjust the basket composition in order to reflect the current underlying asset value;"}),"\n",(0,i.jsx)(t.li,{children:"Third, the trading fee, along with the Stable Asset redemption fee, provide native yield to the Stable Asset holders."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"Stable Swap component is built with Curve's StableSwap algorithm with enhancement to better support the value of Stable Asset. It's different from the Curve DEX in that:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Its value composition is calculated based on the instrinic value of the Stable Assets instead of value of the underlying assets;"}),"\n",(0,i.jsx)(t.li,{children:"It has more robust and flexible basket management functionalities which are not required in DEX;"}),"\n",(0,i.jsx)(t.li,{children:"It's optimized in asset value computation."}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,i.jsxs)(t.p,{children:["Equilibrium is planning to deliver a ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/Open-Grants-Program/blob/master/applications/curve_amm.md",children:"Curve AMM"})," which is also based on StableSwap algorithm. Stable Asset, on the other hand, is a synthetic asset protocol built on top of the StableSwap algorithm with the following enhancement worth highlighted:"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Liquidity providers received a strongly peg asset instead of LP token so that they don't lose usability of their assets;"}),"\n",(0,i.jsx)(t.li,{children:"Users of the DEX helps the synthetic assets to maintain peg in cases of asset price shift;"}),"\n",(0,i.jsx)(t.li,{children:"Holders of Stable Asset have native interest coming from the system itself."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"In short, Equilibrium is a DEX while uses the bonding curve to compute the balance of the underlying assets, while StableAsset is a synthetic asset which uses the bonding curve to maintain the derived value of the basket."}),"\n",(0,i.jsxs)(t.p,{children:["Similar to Equilibrium, ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/Open-Grants-Program/blob/master/applications/sunrise-dex.md",children:"Sunrise DEX"})," is a DEX that focuses on swap functionalities. On the other hand, StableAsset focus on asset synthesis and the Stable Swap module is an internal system that helps keep the basket balanced."]}),"\n",(0,i.jsx)(t.p,{children:"Laminar is an over-collateralized synthetic asset protocol that uses various underlying assets to generate a value pegged assets. StableAsset is highly optimized for asset synthesis with a basket of assets with the same peg, and it can achieve a collateral ratio closed to 100%."}),"\n",(0,i.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,i.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Daniel Tang, Co-founder"}),"\n",(0,i.jsx)(t.li,{children:"Terry Lam, Co-founder"}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Name:"}),"\xa0Terry Lam"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Email:"}),"\xa0",(0,i.jsx)(t.a,{href:"mailto:terry@nuts.finance",children:"terry@nuts.finance"})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Website:"})," ",(0,i.jsx)(t.a,{href:"https://acoconut.fi/",children:"https://acoconut.fi/"})]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Registered Address:"}),"\xa0PO Box 309, Ugland House, Grand Cayman, KY1-1104, Cayman Islands"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Registered Legal Entity:"}),"\xa0ACoconut"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,i.jsx)(t.p,{children:"NUTS Finance is a blockchain development DAO. Our team is composed of experienced developers, financiers and serial entrepreneurs. We build open source, secure and composable technology solutions to empower developers and financial services providers to launch decentralized financial applications on the blockchain."}),"\n",(0,i.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/nutsfinance",children:"https://github.com/nutsfinance"})}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://www.linkedin.com/in/joeztang",children:"https://www.linkedin.com/in/joeztang"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://www.linkedin.com/in/terry-lam-80a71927",children:"https://www.linkedin.com/in/terry-lam-80a71927"})}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,i.jsx)(t.h3,{id:"overview-1",children:(0,i.jsx)(t.strong,{children:"Overview"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Estimated Duration:"}),"\xa01 month"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Full-time equivalent (FTE):"}),"\xa02"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Costs:"}),"\xa020,000 DAI"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-1--implement-stable-swap-module",children:(0,i.jsx)(t.strong,{children:"Milestone 1 \u2014 Implement Stable Swap Module"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated Duration:"}),"\xa01.5 week"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"}),"\xa02"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"}),"\xa07,000 DAI"]}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0"}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Apache 2.0 / MIT / Unlicense"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"1"}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"Provide documentation on components, working algorithms, and deployment processes"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"2"}),(0,i.jsx)(t.td,{children:"Substrate module: Stable Swap Substrate module"}),(0,i.jsxs)(t.td,{children:["This module will implement ",(0,i.jsx)(t.a,{href:"https://docs.acoconut.fi/asset/acbtc/algorithm",children:"core Stable Swap algorithm"})," to maintain balance of the basket, e.g.",(0,i.jsx)("br",{}),"computeD",(0,i.jsx)("br",{}),"computeDy",(0,i.jsx)("br",{}),"computeSwapAmount",(0,i.jsx)("br",{}),"swap.",(0,i.jsx)("br",{})," Part of the algorithm is implemented in Solidity in acBTC's ",(0,i.jsx)(t.a,{href:"https://github.com/nutsfinance/acBTC/blob/master/contracts/acoconut/ACoconutSwap.sol",children:"ACoconutSwap"})," contract."]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"3"}),(0,i.jsx)(t.td,{children:"Testing"}),(0,i.jsx)(t.td,{children:"Comprehensive tests that cover Stable Swap Substrate module"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"4"}),(0,i.jsx)(t.td,{children:"Docker"}),(0,i.jsx)(t.td,{children:"Provide a docker image with a Substrate chain that demonstrates this project"})]})]})]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-2--implement-stable-asset-module",children:(0,i.jsx)(t.strong,{children:"Milestone 2 \u2014 Implement Stable Asset Module"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated Duration:"}),"\xa01.5 week"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"}),"\xa02"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"}),"\xa07,000 DAI"]}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0"}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Apache 2.0 / MIT / Unlicense"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"1"}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"Provide documentation on components, working algorithms, and deployment processes"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"2"}),(0,i.jsx)(t.td,{children:"Substrate module: Stable Asset Substrate module"}),(0,i.jsxs)(t.td,{children:["This module will contain core functionalities for Stable Asset, which includes both how Stable Asset is minted/redeemed, e.g. ",(0,i.jsx)("br",{}),"getMintAmount",(0,i.jsx)("br",{}),"mint",(0,i.jsx)("br",{}),"getRedeemProportionAmount",(0,i.jsx)("br",{}),"redeemProportion",(0,i.jsx)("br",{}),"getRedeemSingleAmount",(0,i.jsx)("br",{}),"redeemSingle",(0,i.jsx)("br",{}),"getRedeemMultiAmount",(0,i.jsx)("br",{}),"redeemMulti,",(0,i.jsx)("br",{})," and how the basket assets are managed. The first part is partly implemented in Solidity in acBTC's ",(0,i.jsx)(t.a,{href:"https://github.com/nutsfinance/acBTC/blob/master/contracts/acoconut/ACoconutSwap.sol",children:"ACoconutSwap"})," contract."]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"3"}),(0,i.jsx)(t.td,{children:"Testing"}),(0,i.jsx)(t.td,{children:"Comprehensive tests that cover the Stable Asset Substrate modules"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"4"}),(0,i.jsx)(t.td,{children:"Docker"}),(0,i.jsx)(t.td,{children:"Provide a docker image with a Substrate chain that demonstrates this project"})]})]})]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-3--support-yield-in-stable-asset",children:(0,i.jsx)(t.strong,{children:"Milestone 3 \u2014 Support Yield in Stable Asset"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated Duration:"}),"\xa02 week"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"}),"\xa02"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"}),"\xa06,000 DAI"]}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0"}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Apache 2.0 / MIT / Unlicense"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"1"}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"Provide documentation on how to handle yield in stable asset pools"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"2"}),(0,i.jsx)(t.td,{children:"Substrate module: Stable Asset Substrate module"}),(0,i.jsx)(t.td,{children:"The Stable Asset module supports yield assets, e.g. LDOT/LKSM whose intrinsic values increase over time. It's able to collect yield generated by the yield asset to generate additional total supply of the stable asset. The Stable Asset module also supports increasing swap available liquidity within the same price range to better support price shift of DOT/KSM derivatives such as LDOT/LCDOT."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"3"}),(0,i.jsx)(t.td,{children:"Testing"}),(0,i.jsx)(t.td,{children:"Comprehensive tests that cover yield asset and amplification parameter change."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"4"}),(0,i.jsx)(t.td,{children:"Docker"}),(0,i.jsx)(t.td,{children:"Provide a docker image with a Substrate chain that demonstrates this project"})]})]})]}),"\n",(0,i.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,i.jsx)(t.p,{children:"We are going to launch token economics and governance to support the system."}),"\n",(0,i.jsx)(t.p,{children:"We are also going to launch multiple Stable Assets on Polkadot and reach DeFi applications for community adoption."}),"\n",(0,i.jsxs)(t.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,i.jsxs)(t.p,{children:["We've successfully launched our first StableAsset, ",(0,i.jsx)(t.a,{href:"https://app.acbtc.fi/",children:"acBTC"}),", on Ethereum. It receives positive feedback from the community and reaches peak total supply of 577 acBTC. The source code for acBTC can be found ",(0,i.jsx)(t.a,{href:"https://github.com/nutsfinance/acBTC",children:"here"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"cBTC is an implementation of the core algorithm and used to prove our concept in Ethereum. The StableAsset will be a full-fledged asset protocol with the following anhancements:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Stable Asset is a Substrate module in Polkadot ecosystem;"}),"\n",(0,i.jsx)(t.li,{children:"Stable Asset is a generic asset module which allows anyone to create synthetic value peg asset with integrated swap and saving functionalities;"}),"\n",(0,i.jsx)(t.li,{children:"Stable Asset provides complete and flexible asset management solutions which is currently not available in acBTC."}),"\n"]})]})}function c(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>l,x:()=>r});var n=s(96540);const i={},a=n.createContext(i);function l(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/04409633.bc0cc6cf.js b/assets/js/04409633.bc0cc6cf.js deleted file mode 100644 index 1056fdd8815..00000000000 --- a/assets/js/04409633.bc0cc6cf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[61940],{42204:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>o,contentTitle:()=>r,default:()=>c,frontMatter:()=>l,metadata:()=>n,toc:()=>h});const n=JSON.parse('{"id":"applications/stable-asset","title":"Stable Asset","description":"Project Name:* Stable Asset","source":"@site/applications/stable-asset.md","sourceDirName":"applications","slug":"/applications/stable-asset","permalink":"/applications/stable-asset","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/stable-asset.md","tags":[],"version":"current","frontMatter":{}}');var i=s(74848),a=s(28453);const l={},r="Stable Asset",o={},h=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Stable Asset",id:"stable-asset-1",level:4},{value:"Stable Swap",id:"stable-swap",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 Implement Stable Swap Module",id:"milestone-1--implement-stable-swap-module",level:3},{value:"Milestone 2 \u2014 Implement Stable Asset Module",id:"milestone-2--implement-stable-asset-module",level:3},{value:"Milestone 3 \u2014 Support Yield in Stable Asset",id:"milestone-3--support-yield-in-stable-asset",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function d(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"stable-asset",children:"Stable Asset"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Project Name:"})," Stable Asset"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Team Name:"})," NUTS Finance"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Payment Address:"})," 0x679824d755B054a2a50358008472a6F400740319"]}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,i.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(t.p,{children:"There are vastly emerging assets in the Polkadot ecosystem, including both Polkadot native assets and assets bridged from other blockchains such as Ethereum and EOS. These assets introduce diversity in architecture and business model, but also fragmentizes the ecosystem since applications need to build separate markets for each of these assets. For example, stables coins can be divided into three categories: fiat-backed, crypto-backed and algorithmic stable coins, and on Ethereum each category has more than ten stable coin protocols. DEX benefits from such asset diversification but other protocols such as lending and options find it difficult to accommodate all these various assets."}),"\n",(0,i.jsx)(t.p,{children:"Asset synthesis is a common approach to unify asset values and hedge asset risks. One approach is to synthesize several mainstream assets or assets belonging to the same niche so that the synthetic assets represents the general trend of the underlying assets. In this approach the synthetic assets acts similiar to an index fund, and how to fairly price and adopt the synthetic assets becomes a new question. The second approach is to synthetize several assets of the same value peg such as BTC, ETH or USD. The synthetic asset has the same value peg, and it could simplifies financial application development since only one synthetic asset needs to be supported for each peg type."}),"\n",(0,i.jsx)(t.p,{children:"Stable Asset is an asset synthetic protocol of the second approach. It is also built with integrated swap and saving functionalities using the basket of assets."}),"\n",(0,i.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,i.jsx)(t.p,{children:"The Stable Asset is an asset synthetic protocol based on Curve's StableSwap algorithm as shown below:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://lh6.googleusercontent.com/i6owf1R5cUcc8lQtPTouisnVsj1Dt3xeCyeC_XcSjLPBCk1glLh_ZHx5GUa_f5WhsrkXJZx-PKfy8dxxrl1YjDsy-suFyXeU0vx1i6zp82lK7__NCR-HcE5cxEZ0FmaACfH8Ah7z",alt:"Stable Swap Algorithm"})}),"\n",(0,i.jsx)(t.p,{children:"Widely adopted as swap algorithm among assets with the same peg, it also works perfectly as an asset synthesis algorithm with a basket of assets with the same peg due to the following properties:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"When the prices of all underlying assets in the basket are equal, the number of each underlying assets in the baskets are equal as well. At this moment, the value of the synthetic asset equals the total number of underlying assets in the basket, and the collateral ratio reaches 100%;"}),"\n",(0,i.jsx)(t.li,{children:"Whenever the price of any underlying asset differs from each other, the value of StableAsset is smaller than the total number of underlying assets so that the collateral ratio is larger than 100%. Since all assets in the baskets are of the same value peg, their prices should fluctuate about the peg prices with low variation expected so that the overall collateral ratio should be slightly over 100%;"}),"\n",(0,i.jsx)(t.li,{children:"Users of the underlying swap can help to maintain the basket balance subject to underlying assets price shift."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"The Stable Asset system consists of three major components: Stable Asset, Stable Swap and Stable Savings."}),"\n",(0,i.jsx)(t.h4,{id:"stable-asset-1",children:"Stable Asset"}),"\n",(0,i.jsx)(t.p,{children:"Stable Asset is a synthetic asset with value peg such as BTC or USD. It's backed by a basket of assets with similar peg, and it provides more reliability and better peg compared to individual asset in the basket."}),"\n",(0,i.jsx)(t.p,{children:"The value of Stable Asset is derived from Curve's StableSwap algorithm. When there is shift in price from individual asset in the basket, the value of Stable Asset remains unchanged: The total value of Stable Asset is always the total amount of assets in the basket when their prices are all equal."}),"\n",(0,i.jsx)(t.h4,{id:"stable-swap",children:"Stable Swap"}),"\n",(0,i.jsx)(t.p,{children:"Stable Swap is a DEX built on top of the basket which is backing Swap Asset. It serves several purposes in the systems."}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"First, it enhances the capital efficiency of the baskets. Instead of staying still, the asset basket is used as DEX;"}),"\n",(0,i.jsx)(t.li,{children:"Second, it helps maintain peg of Stable Asset. Since the prices of individual asset might shift over time, DEX users can adjust the basket composition in order to reflect the current underlying asset value;"}),"\n",(0,i.jsx)(t.li,{children:"Third, the trading fee, along with the Stable Asset redemption fee, provide native yield to the Stable Asset holders."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"Stable Swap component is built with Curve's StableSwap algorithm with enhancement to better support the value of Stable Asset. It's different from the Curve DEX in that:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Its value composition is calculated based on the instrinic value of the Stable Assets instead of value of the underlying assets;"}),"\n",(0,i.jsx)(t.li,{children:"It has more robust and flexible basket management functionalities which are not required in DEX;"}),"\n",(0,i.jsx)(t.li,{children:"It's optimized in asset value computation."}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,i.jsxs)(t.p,{children:["Equilibrium is planning to deliver a ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/Open-Grants-Program/blob/master/applications/curve_amm.md",children:"Curve AMM"})," which is also based on StableSwap algorithm. Stable Asset, on the other hand, is a synthetic asset protocol built on top of the StableSwap algorithm with the following enhancement worth highlighted:"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Liquidity providers received a strongly peg asset instead of LP token so that they don't lose usability of their assets;"}),"\n",(0,i.jsx)(t.li,{children:"Users of the DEX helps the synthetic assets to maintain peg in cases of asset price shift;"}),"\n",(0,i.jsx)(t.li,{children:"Holders of Stable Asset have native interest coming from the system itself."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"In short, Equilibrium is a DEX while uses the bonding curve to compute the balance of the underlying assets, while StableAsset is a synthetic asset which uses the bonding curve to maintain the derived value of the basket."}),"\n",(0,i.jsxs)(t.p,{children:["Similar to Equilibrium, ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/Open-Grants-Program/blob/master/applications/sunrise-dex.md",children:"Sunrise DEX"})," is a DEX that focuses on swap functionalities. On the other hand, StableAsset focus on asset synthesis and the Stable Swap module is an internal system that helps keep the basket balanced."]}),"\n",(0,i.jsx)(t.p,{children:"Laminar is an over-collateralized synthetic asset protocol that uses various underlying assets to generate a value pegged assets. StableAsset is highly optimized for asset synthesis with a basket of assets with the same peg, and it can achieve a collateral ratio closed to 100%."}),"\n",(0,i.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,i.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Daniel Tang, Co-founder"}),"\n",(0,i.jsx)(t.li,{children:"Terry Lam, Co-founder"}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Name:"}),"\xa0Terry Lam"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Email:"}),"\xa0",(0,i.jsx)(t.a,{href:"mailto:terry@nuts.finance",children:"terry@nuts.finance"})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Website:"})," ",(0,i.jsx)(t.a,{href:"https://acoconut.fi/",children:"https://acoconut.fi/"})]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Registered Address:"}),"\xa0PO Box 309, Ugland House, Grand Cayman, KY1-1104, Cayman Islands"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Registered Legal Entity:"}),"\xa0ACoconut"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,i.jsx)(t.p,{children:"NUTS Finance is a blockchain development DAO. Our team is composed of experienced developers, financiers and serial entrepreneurs. We build open source, secure and composable technology solutions to empower developers and financial services providers to launch decentralized financial applications on the blockchain."}),"\n",(0,i.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/nutsfinance",children:"https://github.com/nutsfinance"})}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://www.linkedin.com/in/joeztang",children:"https://www.linkedin.com/in/joeztang"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://www.linkedin.com/in/terry-lam-80a71927",children:"https://www.linkedin.com/in/terry-lam-80a71927"})}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,i.jsx)(t.h3,{id:"overview-1",children:(0,i.jsx)(t.strong,{children:"Overview"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Estimated Duration:"}),"\xa01 month"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Full-time equivalent (FTE):"}),"\xa02"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Costs:"}),"\xa020,000 DAI"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-1--implement-stable-swap-module",children:(0,i.jsx)(t.strong,{children:"Milestone 1 \u2014 Implement Stable Swap Module"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated Duration:"}),"\xa01.5 week"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"}),"\xa02"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"}),"\xa07,000 DAI"]}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0"}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Apache 2.0 / MIT / Unlicense"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"1"}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"Provide documentation on components, working algorithms, and deployment processes"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"2"}),(0,i.jsx)(t.td,{children:"Substrate module: Stable Swap Substrate module"}),(0,i.jsxs)(t.td,{children:["This module will implement ",(0,i.jsx)(t.a,{href:"https://docs.acoconut.fi/asset/acbtc/algorithm",children:"core Stable Swap algorithm"})," to maintain balance of the basket, e.g.",(0,i.jsx)("br",{}),"computeD",(0,i.jsx)("br",{}),"computeDy",(0,i.jsx)("br",{}),"computeSwapAmount",(0,i.jsx)("br",{}),"swap.",(0,i.jsx)("br",{})," Part of the algorithm is implemented in Solidity in acBTC's ",(0,i.jsx)(t.a,{href:"https://github.com/nutsfinance/acBTC/blob/master/contracts/acoconut/ACoconutSwap.sol",children:"ACoconutSwap"})," contract."]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"3"}),(0,i.jsx)(t.td,{children:"Testing"}),(0,i.jsx)(t.td,{children:"Comprehensive tests that cover Stable Swap Substrate module"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"4"}),(0,i.jsx)(t.td,{children:"Docker"}),(0,i.jsx)(t.td,{children:"Provide a docker image with a Substrate chain that demonstrates this project"})]})]})]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-2--implement-stable-asset-module",children:(0,i.jsx)(t.strong,{children:"Milestone 2 \u2014 Implement Stable Asset Module"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated Duration:"}),"\xa01.5 week"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"}),"\xa02"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"}),"\xa07,000 DAI"]}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0"}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Apache 2.0 / MIT / Unlicense"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"1"}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"Provide documentation on components, working algorithms, and deployment processes"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"2"}),(0,i.jsx)(t.td,{children:"Substrate module: Stable Asset Substrate module"}),(0,i.jsxs)(t.td,{children:["This module will contain core functionalities for Stable Asset, which includes both how Stable Asset is minted/redeemed, e.g. ",(0,i.jsx)("br",{}),"getMintAmount",(0,i.jsx)("br",{}),"mint",(0,i.jsx)("br",{}),"getRedeemProportionAmount",(0,i.jsx)("br",{}),"redeemProportion",(0,i.jsx)("br",{}),"getRedeemSingleAmount",(0,i.jsx)("br",{}),"redeemSingle",(0,i.jsx)("br",{}),"getRedeemMultiAmount",(0,i.jsx)("br",{}),"redeemMulti,",(0,i.jsx)("br",{})," and how the basket assets are managed. The first part is partly implemented in Solidity in acBTC's ",(0,i.jsx)(t.a,{href:"https://github.com/nutsfinance/acBTC/blob/master/contracts/acoconut/ACoconutSwap.sol",children:"ACoconutSwap"})," contract."]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"3"}),(0,i.jsx)(t.td,{children:"Testing"}),(0,i.jsx)(t.td,{children:"Comprehensive tests that cover the Stable Asset Substrate modules"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"4"}),(0,i.jsx)(t.td,{children:"Docker"}),(0,i.jsx)(t.td,{children:"Provide a docker image with a Substrate chain that demonstrates this project"})]})]})]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-3--support-yield-in-stable-asset",children:(0,i.jsx)(t.strong,{children:"Milestone 3 \u2014 Support Yield in Stable Asset"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated Duration:"}),"\xa02 week"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"}),"\xa02"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"}),"\xa06,000 DAI"]}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0"}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Apache 2.0 / MIT / Unlicense"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"1"}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"Provide documentation on how to handle yield in stable asset pools"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"2"}),(0,i.jsx)(t.td,{children:"Substrate module: Stable Asset Substrate module"}),(0,i.jsx)(t.td,{children:"The Stable Asset module supports yield assets, e.g. LDOT/LKSM whose intrinsic values increase over time. It's able to collect yield generated by the yield asset to generate additional total supply of the stable asset. The Stable Asset module also supports increasing swap available liquidity within the same price range to better support price shift of DOT/KSM derivatives such as LDOT/LCDOT."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"3"}),(0,i.jsx)(t.td,{children:"Testing"}),(0,i.jsx)(t.td,{children:"Comprehensive tests that cover yield asset and amplification parameter change."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"4"}),(0,i.jsx)(t.td,{children:"Docker"}),(0,i.jsx)(t.td,{children:"Provide a docker image with a Substrate chain that demonstrates this project"})]})]})]}),"\n",(0,i.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,i.jsx)(t.p,{children:"We are going to launch token economics and governance to support the system."}),"\n",(0,i.jsx)(t.p,{children:"We are also going to launch multiple Stable Assets on Polkadot and reach DeFi applications for community adoption."}),"\n",(0,i.jsxs)(t.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,i.jsxs)(t.p,{children:["We've successfully launched our first StableAsset, ",(0,i.jsx)(t.a,{href:"https://app.acbtc.fi/",children:"acBTC"}),", on Ethereum. It receives positive feedback from the community and reaches peak total supply of 577 acBTC. The source code for acBTC can be found ",(0,i.jsx)(t.a,{href:"https://github.com/nutsfinance/acBTC",children:"here"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"cBTC is an implementation of the core algorithm and used to prove our concept in Ethereum. The StableAsset will be a full-fledged asset protocol with the following anhancements:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Stable Asset is a Substrate module in Polkadot ecosystem;"}),"\n",(0,i.jsx)(t.li,{children:"Stable Asset is a generic asset module which allows anyone to create synthetic value peg asset with integrated swap and saving functionalities;"}),"\n",(0,i.jsx)(t.li,{children:"Stable Asset provides complete and flexible asset management solutions which is currently not available in acBTC."}),"\n"]})]})}function c(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>l,x:()=>r});var n=s(96540);const i={},a=n.createContext(i);function l(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0480b142.22f69968.js b/assets/js/0480b142.22f69968.js deleted file mode 100644 index 678780c249f..00000000000 --- a/assets/js/0480b142.22f69968.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[8070],{7208:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"docs/faq","title":"\ud83d\ude4b FAQ","description":"\ud83e\udded General","source":"@site/docs/faq.md","sourceDirName":"docs","slug":"/docs/faq","permalink":"/docs/faq","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/docs/faq.md","tags":[],"version":"current","sidebarPosition":11,"frontMatter":{"sidebar_position":11,"title":"\ud83d\ude4b FAQ"},"sidebar":"docs","previous":{"title":"\ud83d\udcbc Office Hours","permalink":"/docs/office-hours"},"next":{"title":"\ud83d\udcec Suggesting a Project","permalink":"/docs/suggesting"}}');var a=o(74848),i=o(28453);const s={sidebar_position:11,title:"\ud83d\ude4b FAQ"},r="Frequently Asked Questions",l={},d=[{value:"\ud83e\udded General",id:"-general",level:2},{value:"How do I apply?",id:"how-do-i-apply",level:3},{value:"How much can I ask for?",id:"how-much-can-i-ask-for",level:3},{value:"What does it mean for payments to be at least 50% DOT?",id:"what-does-it-mean-for-payments-to-be-at-least-50-dot",level:3},{value:"What activities/positions do you fund?",id:"what-activitiespositions-do-you-fund",level:3},{value:"Can anyone apply?",id:"can-anyone-apply",level:3},{value:"Can I get an upfront payment?",id:"can-i-get-an-upfront-payment",level:3},{value:"When do I get paid?",id:"when-do-i-get-paid",level:3},{value:"Can I reuse someone else\u2019s open-source code?",id:"can-i-reuse-someone-elses-open-source-code",level:3},{value:"I am starting a company that [...]. I want to use Polkadot/Kusama/Substrate to build a blockchain/parachain and connect [...]. Would I be eligible for a grant?",id:"i-am-starting-a-company-that--i-want-to-use-polkadotkusamasubstrate-to-build-a-blockchainparachain-and-connect--would-i-be-eligible-for-a-grant",level:3},{value:"My application was rejected. Do you have any recommendations on where to go from here?",id:"my-application-was-rejected-do-you-have-any-recommendations-on-where-to-go-from-here",level:3},{value:"One of your grantees is using my code without respecting the terms of its license",id:"one-of-your-grantees-is-using-my-code-without-respecting-the-terms-of-its-license",level:3},{value:"Why are other grant applications being accepted faster than mine?",id:"why-are-other-grant-applications-being-accepted-faster-than-mine",level:3},{value:"\ud83d\udd8a\ufe0f Application Process",id:"\ufe0f-application-process",level:2},{value:"How long does it take from application to decision?",id:"how-long-does-it-take-from-application-to-decision",level:3},{value:"A W3F member approved my application. Does that mean it is accepted?",id:"a-w3f-member-approved-my-application-does-that-mean-it-is-accepted",level:3},{value:"How do I apply if I want to keep information private?",id:"how-do-i-apply-if-i-want-to-keep-information-private",level:3},{value:"What is KYC/KYB and why do I have to provide this data?",id:"what-is-kyckyb-and-why-do-i-have-to-provide-this-data",level:3},{value:"\ud83e\udd73 After Approval",id:"-after-approval",level:2},{value:"When can I apply for a follow-up grant?",id:"when-can-i-apply-for-a-follow-up-grant",level:3},{value:"Something came up and I cannot finish the project in time. Can we postpone or call off the rest of my project?",id:"something-came-up-and-i-cannot-finish-the-project-in-time-can-we-postpone-or-call-off-the-rest-of-my-project",level:3},{value:"Can I list the Web3 Foundation as a partner?",id:"can-i-list-the-web3-foundation-as-a-partner",level:3},{value:"Can you help me advertise my project?",id:"can-you-help-me-advertise-my-project",level:3},{value:"I found one of my deliverables to be unnecessary, impossible or already done elsewhere. What do I do?",id:"i-found-one-of-my-deliverables-to-be-unnecessary-impossible-or-already-done-elsewhere-what-do-i-do",level:3},{value:"\ud83d\ude9a Milestone Delivery",id:"-milestone-delivery",level:2},{value:"How do I submit a milestone?",id:"how-do-i-submit-a-milestone",level:3},{value:"Can I submit two or more milestones at once?",id:"can-i-submit-two-or-more-milestones-at-once",level:3},{value:"Can I add a badge to my repo once I\u2019ve completed a milestone?",id:"can-i-add-a-badge-to-my-repo-once-ive-completed-a-milestone",level:3},{value:"Why are other milestones being accepted or discussed faster than mine?",id:"why-are-other-milestones-being-accepted-or-discussed-faster-than-mine",level:3}];function c(e){const t={a:"a",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",strong:"strong",...(0,i.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"frequently-asked-questions",children:"Frequently Asked Questions"})}),"\n",(0,a.jsx)(t.h2,{id:"-general",children:"\ud83e\udded General"}),"\n",(0,a.jsx)(t.h3,{id:"how-do-i-apply",children:"How do I apply?"}),"\n",(0,a.jsxs)(t.p,{children:["Please refer to the ",(0,a.jsx)(t.a,{href:"/docs/Process/how-to-apply",children:'"How to Apply" section'})," in our documentation."]}),"\n",(0,a.jsx)(t.h3,{id:"how-much-can-i-ask-for",children:"How much can I ask for?"}),"\n",(0,a.jsxs)(t.p,{children:["Generally, there is no upper limit to grant amounts. However, the higher the requested amount, the stricter the review. For guidance, please refer to the ",(0,a.jsx)(t.a,{href:"/docs/Introduction/levels",children:"grant levels section"})," in our documentation."]}),"\n",(0,a.jsx)(t.h3,{id:"what-does-it-mean-for-payments-to-be-at-least-50-dot",children:"What does it mean for payments to be at least 50% DOT?"}),"\n",(0,a.jsxs)(t.p,{children:['Every milestone payment will have two parts: one in DOT, vesting linearly over two years. The percentage of your grant paid in DOT ranges from 50 to 100% and will be negotiated during the application phase. For this, we need a Polkadot address in the grant agreement. It has to be a native Polkadot address as this is the only way to receive vested DOT that can be staked. The remaining percentage of the payment is in USDC, to be paid on Polkadot Asset Hub (see "Payment Details" in the application template for options). For the payment, please submit two invoices: one for the currency part (if applicable), one for the DOT part. Since the grant agreements are denominated in USD, we ask for invoices denominated in USD; we will convert the agreed upon percentage to DOT at the day of payment based on the previous day\'s closing price on ',(0,a.jsx)(t.a,{href:"https://coinmarketcap.com",children:"CoinMarketCap"}),". Our ",(0,a.jsx)(t.a,{href:"https://docs.google.com/forms/d/18BdmYEt8gvcC-5f7TMHdJftBr9dEeA2_lUfIqkH7it8/viewform",children:"invoice form"})," will walk you through the process."]}),"\n",(0,a.jsx)(t.h3,{id:"what-activitiespositions-do-you-fund",children:"What activities/positions do you fund?"}),"\n",(0,a.jsx)(t.p,{children:"The Web3 Foundation's Grants Program aims to fund software development and research activities that are beneficial for the ecosystem as a whole. As such, we don't usually fund tangential costs such as business-oriented activities (marketing, business planning), events, outreach, hosting costs or audits. We also expect you to have a good understanding of the technologies you are planning to use, meaning that we don't fund time spent learning how to use Substrate or how to write ink! smart contracts."}),"\n",(0,a.jsx)(t.h3,{id:"can-anyone-apply",children:"Can anyone apply?"}),"\n",(0,a.jsxs)(t.p,{children:["Projects for which a token sale has been or is being conducted are not eligible for a Web3 Foundation grant. Also, we do not fund projects that actively encourage gambling, illicit trade, money laundering or criminal activities in general. See also the ",(0,a.jsx)(t.a,{href:"/docs/Introduction/intro",children:"application guidelines"})," in our documentation."]}),"\n",(0,a.jsx)(t.h3,{id:"can-i-get-an-upfront-payment",children:"Can I get an upfront payment?"}),"\n",(0,a.jsxs)(t.p,{children:["The W3F Grants Program does not offer upfront payment. If you absolutely require upfront payment, have a look at our list of ",(0,a.jsx)(t.a,{href:"/docs/funding",children:"alternative funding programs"}),", some of which allow upfront payment."]}),"\n",(0,a.jsx)(t.h3,{id:"when-do-i-get-paid",children:"When do I get paid?"}),"\n",(0,a.jsxs)(t.p,{children:["Payments are issued once a milestone has been successfully delivered. Successful delivery requires that you have submitted the milestone as per our delivery guidelines ",(0,a.jsx)(t.em,{children:"and"})," that the Grants team has reviewed ",(0,a.jsx)(t.em,{children:"and officially accepted"})," your submission. Payment is made within 14 days after approval."]}),"\n",(0,a.jsx)(t.h3,{id:"can-i-reuse-someone-elses-open-source-code",children:"Can I reuse someone else\u2019s open-source code?"}),"\n",(0,a.jsx)(t.p,{children:"Open source software and the Web3 movement are all about collaboration. As long as you meet the code\u2019s license, we encourage you to find, modify and contribute to already existing libraries and projects if it is of use for your project. However, we expect you to honour other people\u2019s work and their right to attribution, and your published code to adhere to the license requirements of the code you are benefiting from. Submitting code as part of a milestone that violates someone else\u2019s license will result in immediate termination. We will furthermore continue to monitor any repositories you may have submitted as part of a milestone for possible license infringements and reserve the right to terminate the grant if we find you going out of your way to hide external contributions."}),"\n",(0,a.jsx)(t.h3,{id:"i-am-starting-a-company-that--i-want-to-use-polkadotkusamasubstrate-to-build-a-blockchainparachain-and-connect--would-i-be-eligible-for-a-grant",children:"I am starting a company that [...]. I want to use Polkadot/Kusama/Substrate to build a blockchain/parachain and connect [...]. Would I be eligible for a grant?"}),"\n",(0,a.jsxs)(t.p,{children:['What the Web3 Foundation is mainly looking for to support are projects "',(0,a.jsx)(t.a,{href:"https://web3.foundation/grants/",children:"driving advancement and adoption of decentralized software protocols [and] that make it easier for developers to build useful applications using these protocols."}),'" As such, we do not award grants to individual companies developing their private infrastructure. However, if part of your work is to build a library or another piece of software that could be of interest to the general Polkadot/Kusama/Substrate ecosystem and ask for funding specific to that, we are happy to look into it.']}),"\n",(0,a.jsx)(t.h3,{id:"my-application-was-rejected-do-you-have-any-recommendations-on-where-to-go-from-here",children:"My application was rejected. Do you have any recommendations on where to go from here?"}),"\n",(0,a.jsxs)(t.p,{children:["We usually give reasons why an application was rejected. We always try to be constructive and work with you towards an application that is beneficial to all parties. If we find no common ground, please have a look at ",(0,a.jsx)(t.a,{href:"/docs/funding",children:"our list of alternative funding opportunities"}),"."]}),"\n",(0,a.jsx)(t.h3,{id:"one-of-your-grantees-is-using-my-code-without-respecting-the-terms-of-its-license",children:"One of your grantees is using my code without respecting the terms of its license"}),"\n",(0,a.jsxs)(t.p,{children:["Please ",(0,a.jsx)(t.a,{href:"mailto:grants@web3.foundation",children:"reach out to us"})," asap."]}),"\n",(0,a.jsx)(t.h3,{id:"why-are-other-grant-applications-being-accepted-faster-than-mine",children:"Why are other grant applications being accepted faster than mine?"}),"\n",(0,a.jsx)(t.p,{children:"There are many reasons why your application might take longer than others: some applications are straightforward and simple and address an obvious issue, others require deeper understanding and discussion. If your application is highly technical or specialised, we might have to bring in an external evaluator. Sometimes, this specialised evaluator is busy with another evaluation. And sometimes, the committee is simply unsure or not quite convinced."}),"\n",(0,a.jsx)(t.h2,{id:"\ufe0f-application-process",children:"\ud83d\udd8a\ufe0f Application Process"}),"\n",(0,a.jsx)(t.h3,{id:"how-long-does-it-take-from-application-to-decision",children:"How long does it take from application to decision?"}),"\n",(0,a.jsx)(t.p,{children:"Depending on the requested amount, quality of the application and desirability for the ecosystem, a grant application could be approved within a week. Usually, there will be a discussion and requests for changes, additions or improvements. If no one in the committee finds the application approval-worthy or you don't react to our comments, it will be closed after two weeks of inactivity. Very large grants require the approval of the council, which convenes once a month. Thus, once an editor declares your application sufficient, it may take up to one month until a decision is made."}),"\n",(0,a.jsx)(t.h3,{id:"a-w3f-member-approved-my-application-does-that-mean-it-is-accepted",children:"A W3F member approved my application. Does that mean it is accepted?"}),"\n",(0,a.jsx)(t.p,{children:"Depending on the size of the grant, applications require two to five committee members to approve it. Since we have many different members with different backgrounds and specializations, it is possible that the committee disagrees and your application gets rejected even though one or two members approved it.\nThe application is accepted once the pull request is merged."}),"\n",(0,a.jsx)(t.h3,{id:"how-do-i-apply-if-i-want-to-keep-information-private",children:"How do I apply if I want to keep information private?"}),"\n",(0,a.jsxs)(t.p,{children:["For special cases that do not fit the regular grants structure, we provide ",(0,a.jsx)(t.a,{href:"https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform",children:"a form"}),". You can provide all application data by submitting this form, or submit the form with a reference to a pull request with data you are willing to make public."]}),"\n",(0,a.jsxs)(t.p,{children:["Our ",(0,a.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/e03a3e760846bfaf44352cb17a6763ff0fcf1a94/.github/pull_request_template.md?plain=1#L21",children:"application template"})," also offers the possibility to make the application public, but to keep its discussion private."]}),"\n",(0,a.jsx)(t.h3,{id:"what-is-kyckyb-and-why-do-i-have-to-provide-this-data",children:"What is KYC/KYB and why do I have to provide this data?"}),"\n",(0,a.jsxs)(t.p,{children:["In order to comply with regulations, the Web3 Foundation is required to perform KYC (Know Your Customer) checks on individuals and KYB (Know Your Business) checks on entities applying for a grant in order to verify their identity. For these checks, we ask you to provide information about yourself and/or the entity you are representing through our provider ",(0,a.jsx)(t.a,{href:"https://sumsub.com/",children:"Sumsub"}),". If you have any problems with or concerns about this process, please ",(0,a.jsx)(t.a,{href:"mailto:grants@web3.foundation",children:"reach out to us"}),"."]}),"\n",(0,a.jsx)(t.h2,{id:"-after-approval",children:"\ud83e\udd73 After Approval"}),"\n",(0,a.jsx)(t.h3,{id:"when-can-i-apply-for-a-follow-up-grant",children:"When can I apply for a follow-up grant?"}),"\n",(0,a.jsx)(t.p,{children:"Anyone who has successfully completed a grant project (i.e. all milestones were accepted, or the previous grant was terminated in mutual agreement) can apply for a follow-up grant. Concurrent grants are only granted in special circumstances."}),"\n",(0,a.jsx)(t.h3,{id:"something-came-up-and-i-cannot-finish-the-project-in-time-can-we-postpone-or-call-off-the-rest-of-my-project",children:"Something came up and I cannot finish the project in time. Can we postpone or call off the rest of my project?"}),"\n",(0,a.jsx)(t.p,{children:"The Web3 Foundation reserves the right to terminate an agreement that is behind schedule. However, we are not interested in taking away your grant for any slight hiccup. More often than not, delays are part of the journey and do not constitute a reason for concern. The best way to handle changes in your plans is to get in touch with us. If you would like to prematurely end your work, we can amend your application and remove the milestones you won't be able to complete. If you decide to continue work at a later date, you can always reapply for the remaining milestones and potentially adapt them to take into account any insights you have gained in the meantime."}),"\n",(0,a.jsx)(t.h3,{id:"can-i-list-the-web3-foundation-as-a-partner",children:"Can I list the Web3 Foundation as a partner?"}),"\n",(0,a.jsxs)(t.p,{children:["No. Once the grants team has accepted your first milestone, you may display our ",(0,a.jsx)(t.a,{href:"/docs/Support%20Docs/grant-badge-guidelines",children:"grants badge"})," in a project-specific context, such as the repository containing the grant project work."]}),"\n",(0,a.jsx)(t.h3,{id:"can-you-help-me-advertise-my-project",children:"Can you help me advertise my project?"}),"\n",(0,a.jsxs)(t.p,{children:["The Web3 Foundation does not provide PR services to its grantees. However, once per month we co-promote announcements from grants that have delivered a milestone on ",(0,a.jsx)(t.a,{href:"https://twitter.com/Web3foundation",children:"Twitter"}),". Note that the milestone needs to have been accepted prior to the announcement. Lastly, please observe our ",(0,a.jsx)(t.a,{href:"/docs/Support%20Docs/announcement-guidelines",children:"announcement guidelines"})," for all grant-related communications. This document also lists an email address through which you can get in touch with our PR team for feedback and in case you have specific questions."]}),"\n",(0,a.jsx)(t.h3,{id:"i-found-one-of-my-deliverables-to-be-unnecessary-impossible-or-already-done-elsewhere-what-do-i-do",children:"I found one of my deliverables to be unnecessary, impossible or already done elsewhere. What do I do?"}),"\n",(0,a.jsx)(t.p,{children:"Plans change. If you find parts of your original grant application to be unnecessary or you decide to pivot, but you still want to finish the project: get in touch with us. If your new plans are in line with the Web3 Foundation\u2019s values and the council approves the amendment, you can continue your work. If your plans change significantly or you find yourself not being able to finish the grant, we can mutually agree to terminate the grant early. You are always welcome to reapply another time."}),"\n",(0,a.jsx)(t.h2,{id:"-milestone-delivery",children:"\ud83d\ude9a Milestone Delivery"}),"\n",(0,a.jsx)(t.h3,{id:"how-do-i-submit-a-milestone",children:"How do I submit a milestone?"}),"\n",(0,a.jsxs)(t.p,{children:["For details, please refer to the ",(0,a.jsx)(t.a,{href:"/docs/Support%20Docs/milestone-deliverables-guidelines",children:"milestone delivery guidelines"}),". Generally speaking, the most important part of a delivery is a list of ",(0,a.jsx)(t.strong,{children:"the same deliverables listed in the application"})," with links to their implementation/realisation (ideally pointing to a specific commit or tag, so you can continue working on your repository without messing up your delivery and complicating our evaluation) and any additional notes you might have. The list of deliverables for each of your milestones should be defined in your grant agreement."]}),"\n",(0,a.jsx)(t.h3,{id:"can-i-submit-two-or-more-milestones-at-once",children:"Can I submit two or more milestones at once?"}),"\n",(0,a.jsx)(t.p,{children:"You can. However, we strongly encourage you to submit your work in increments (milestones), so that you can be sure we didn\u2019t misunderstand (an aspect of) your application, and you didn't make changes to your plan or delivery that would have required a reevaluation of the application."}),"\n",(0,a.jsx)(t.h3,{id:"can-i-add-a-badge-to-my-repo-once-ive-completed-a-milestone",children:"Can I add a badge to my repo once I\u2019ve completed a milestone?"}),"\n",(0,a.jsxs)(t.p,{children:["If yours is a ",(0,a.jsx)(t.a,{href:"/docs/Introduction/levels",children:"Level 2 or 3"})," grant and your first milestone has been submitted ",(0,a.jsx)(t.strong,{children:"and accepted"}),", yes. Please make sure that you follow the ",(0,a.jsx)(t.a,{href:"/docs/Support%20Docs/grant-badge-guidelines",children:"badge guidelines"})," when doing so."]}),"\n",(0,a.jsx)(t.h3,{id:"why-are-other-milestones-being-accepted-or-discussed-faster-than-mine",children:"Why are other milestones being accepted or discussed faster than mine?"}),"\n",(0,a.jsx)(t.p,{children:"While we try to process deliveries chronologically, some milestones aren't processed quite as fast as others. One obvious reason is the complexity of the delivery and its evaluation. Other times, your submission might require internal discussion or delegation. In any case, if you have any question on the processing of your delivery, you can reach out to us via email or Github."})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},28453:(e,t,o)=>{o.d(t,{R:()=>s,x:()=>r});var n=o(96540);const a={},i=n.createContext(a);function s(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0480b142.97f89b41.js b/assets/js/0480b142.97f89b41.js new file mode 100644 index 00000000000..735768f7911 --- /dev/null +++ b/assets/js/0480b142.97f89b41.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[8070],{85585:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"docs/faq","title":"\ud83d\ude4b FAQ","description":"\ud83e\udded General","source":"@site/docs/faq.md","sourceDirName":"docs","slug":"/docs/faq","permalink":"/docs/faq","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/docs/faq.md","tags":[],"version":"current","sidebarPosition":11,"frontMatter":{"sidebar_position":11,"title":"\ud83d\ude4b FAQ"},"sidebar":"docs","previous":{"title":"\ud83d\udcbc Office Hours","permalink":"/docs/office-hours"},"next":{"title":"\ud83d\udcec Suggesting a Project","permalink":"/docs/suggesting"}}');var a=o(74848),i=o(28453);const s={sidebar_position:11,title:"\ud83d\ude4b FAQ"},r="Frequently Asked Questions",l={},d=[{value:"\ud83e\udded General",id:"-general",level:2},{value:"How do I apply?",id:"how-do-i-apply",level:3},{value:"How much can I ask for?",id:"how-much-can-i-ask-for",level:3},{value:"What does it mean for payments to be at least 50% DOT?",id:"what-does-it-mean-for-payments-to-be-at-least-50-dot",level:3},{value:"What activities/positions do you fund?",id:"what-activitiespositions-do-you-fund",level:3},{value:"Can anyone apply?",id:"can-anyone-apply",level:3},{value:"Can I get an upfront payment?",id:"can-i-get-an-upfront-payment",level:3},{value:"When do I get paid?",id:"when-do-i-get-paid",level:3},{value:"Can I reuse someone else\u2019s open-source code?",id:"can-i-reuse-someone-elses-open-source-code",level:3},{value:"I am starting a company that [...]. I want to use Polkadot/Kusama/Substrate to build a blockchain/parachain and connect [...]. Would I be eligible for a grant?",id:"i-am-starting-a-company-that--i-want-to-use-polkadotkusamasubstrate-to-build-a-blockchainparachain-and-connect--would-i-be-eligible-for-a-grant",level:3},{value:"My application was rejected. Do you have any recommendations on where to go from here?",id:"my-application-was-rejected-do-you-have-any-recommendations-on-where-to-go-from-here",level:3},{value:"One of your grantees is using my code without respecting the terms of its license",id:"one-of-your-grantees-is-using-my-code-without-respecting-the-terms-of-its-license",level:3},{value:"Why are other grant applications being accepted faster than mine?",id:"why-are-other-grant-applications-being-accepted-faster-than-mine",level:3},{value:"\ud83d\udd8a\ufe0f Application Process",id:"\ufe0f-application-process",level:2},{value:"How long does it take from application to decision?",id:"how-long-does-it-take-from-application-to-decision",level:3},{value:"A W3F member approved my application. Does that mean it is accepted?",id:"a-w3f-member-approved-my-application-does-that-mean-it-is-accepted",level:3},{value:"How do I apply if I want to keep information private?",id:"how-do-i-apply-if-i-want-to-keep-information-private",level:3},{value:"What is KYC/KYB and why do I have to provide this data?",id:"what-is-kyckyb-and-why-do-i-have-to-provide-this-data",level:3},{value:"\ud83e\udd73 After Approval",id:"-after-approval",level:2},{value:"When can I apply for a follow-up grant?",id:"when-can-i-apply-for-a-follow-up-grant",level:3},{value:"Something came up and I cannot finish the project in time. Can we postpone or call off the rest of my project?",id:"something-came-up-and-i-cannot-finish-the-project-in-time-can-we-postpone-or-call-off-the-rest-of-my-project",level:3},{value:"Can I list the Web3 Foundation as a partner?",id:"can-i-list-the-web3-foundation-as-a-partner",level:3},{value:"Can you help me advertise my project?",id:"can-you-help-me-advertise-my-project",level:3},{value:"I found one of my deliverables to be unnecessary, impossible or already done elsewhere. What do I do?",id:"i-found-one-of-my-deliverables-to-be-unnecessary-impossible-or-already-done-elsewhere-what-do-i-do",level:3},{value:"\ud83d\ude9a Milestone Delivery",id:"-milestone-delivery",level:2},{value:"How do I submit a milestone?",id:"how-do-i-submit-a-milestone",level:3},{value:"Can I submit two or more milestones at once?",id:"can-i-submit-two-or-more-milestones-at-once",level:3},{value:"Can I add a badge to my repo once I\u2019ve completed a milestone?",id:"can-i-add-a-badge-to-my-repo-once-ive-completed-a-milestone",level:3},{value:"Why are other milestones being accepted or discussed faster than mine?",id:"why-are-other-milestones-being-accepted-or-discussed-faster-than-mine",level:3}];function c(e){const t={a:"a",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",strong:"strong",...(0,i.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"frequently-asked-questions",children:"Frequently Asked Questions"})}),"\n",(0,a.jsx)(t.h2,{id:"-general",children:"\ud83e\udded General"}),"\n",(0,a.jsx)(t.h3,{id:"how-do-i-apply",children:"How do I apply?"}),"\n",(0,a.jsxs)(t.p,{children:["Please refer to the ",(0,a.jsx)(t.a,{href:"/docs/Process/how-to-apply",children:'"How to Apply" section'})," in our documentation."]}),"\n",(0,a.jsx)(t.h3,{id:"how-much-can-i-ask-for",children:"How much can I ask for?"}),"\n",(0,a.jsxs)(t.p,{children:["Generally, there is no upper limit to grant amounts. However, the higher the requested amount, the stricter the review. For guidance, please refer to the ",(0,a.jsx)(t.a,{href:"/docs/Introduction/levels",children:"grant levels section"})," in our documentation."]}),"\n",(0,a.jsx)(t.h3,{id:"what-does-it-mean-for-payments-to-be-at-least-50-dot",children:"What does it mean for payments to be at least 50% DOT?"}),"\n",(0,a.jsxs)(t.p,{children:['Every milestone payment will have two parts: one in DOT, vesting linearly over two years. The percentage of your grant paid in DOT ranges from 50 to 100% and will be negotiated during the application phase. For this, we need a Polkadot address in the grant agreement. It has to be a native Polkadot address as this is the only way to receive vested DOT that can be staked. The remaining percentage of the payment is in USDC, to be paid on Polkadot Asset Hub (see "Payment Details" in the application template for options). For the payment, please submit two invoices: one for the currency part (if applicable), one for the DOT part. Since the grant agreements are denominated in USD, we ask for invoices denominated in USD; we will convert the agreed upon percentage to DOT at the day of payment based on the previous day\'s closing price on ',(0,a.jsx)(t.a,{href:"https://coinmarketcap.com",children:"CoinMarketCap"}),". Our ",(0,a.jsx)(t.a,{href:"https://docs.google.com/forms/d/18BdmYEt8gvcC-5f7TMHdJftBr9dEeA2_lUfIqkH7it8/viewform",children:"invoice form"})," will walk you through the process."]}),"\n",(0,a.jsx)(t.h3,{id:"what-activitiespositions-do-you-fund",children:"What activities/positions do you fund?"}),"\n",(0,a.jsx)(t.p,{children:"The Web3 Foundation's Grants Program aims to fund software development and research activities that are beneficial for the ecosystem as a whole. As such, we don't usually fund tangential costs such as business-oriented activities (marketing, business planning), events, outreach, hosting costs or audits. We also expect you to have a good understanding of the technologies you are planning to use, meaning that we don't fund time spent learning how to use Substrate or how to write ink! smart contracts."}),"\n",(0,a.jsx)(t.h3,{id:"can-anyone-apply",children:"Can anyone apply?"}),"\n",(0,a.jsxs)(t.p,{children:["Projects for which a token sale has been or is being conducted are not eligible for a Web3 Foundation grant. Also, we do not fund projects that actively encourage gambling, illicit trade, money laundering or criminal activities in general. See also the ",(0,a.jsx)(t.a,{href:"/docs/Introduction/intro",children:"application guidelines"})," in our documentation."]}),"\n",(0,a.jsx)(t.h3,{id:"can-i-get-an-upfront-payment",children:"Can I get an upfront payment?"}),"\n",(0,a.jsxs)(t.p,{children:["The W3F Grants Program does not offer upfront payment. If you absolutely require upfront payment, have a look at our list of ",(0,a.jsx)(t.a,{href:"/docs/funding",children:"alternative funding programs"}),", some of which allow upfront payment."]}),"\n",(0,a.jsx)(t.h3,{id:"when-do-i-get-paid",children:"When do I get paid?"}),"\n",(0,a.jsxs)(t.p,{children:["Payments are issued once a milestone has been successfully delivered. Successful delivery requires that you have submitted the milestone as per our delivery guidelines ",(0,a.jsx)(t.em,{children:"and"})," that the Grants team has reviewed ",(0,a.jsx)(t.em,{children:"and officially accepted"})," your submission. Payment is made within 14 days after approval."]}),"\n",(0,a.jsx)(t.h3,{id:"can-i-reuse-someone-elses-open-source-code",children:"Can I reuse someone else\u2019s open-source code?"}),"\n",(0,a.jsx)(t.p,{children:"Open source software and the Web3 movement are all about collaboration. As long as you meet the code\u2019s license, we encourage you to find, modify and contribute to already existing libraries and projects if it is of use for your project. However, we expect you to honour other people\u2019s work and their right to attribution, and your published code to adhere to the license requirements of the code you are benefiting from. Submitting code as part of a milestone that violates someone else\u2019s license will result in immediate termination. We will furthermore continue to monitor any repositories you may have submitted as part of a milestone for possible license infringements and reserve the right to terminate the grant if we find you going out of your way to hide external contributions."}),"\n",(0,a.jsx)(t.h3,{id:"i-am-starting-a-company-that--i-want-to-use-polkadotkusamasubstrate-to-build-a-blockchainparachain-and-connect--would-i-be-eligible-for-a-grant",children:"I am starting a company that [...]. I want to use Polkadot/Kusama/Substrate to build a blockchain/parachain and connect [...]. Would I be eligible for a grant?"}),"\n",(0,a.jsxs)(t.p,{children:['What the Web3 Foundation is mainly looking for to support are projects "',(0,a.jsx)(t.a,{href:"https://web3.foundation/grants/",children:"driving advancement and adoption of decentralized software protocols [and] that make it easier for developers to build useful applications using these protocols."}),'" As such, we do not award grants to individual companies developing their private infrastructure. However, if part of your work is to build a library or another piece of software that could be of interest to the general Polkadot/Kusama/Substrate ecosystem and ask for funding specific to that, we are happy to look into it.']}),"\n",(0,a.jsx)(t.h3,{id:"my-application-was-rejected-do-you-have-any-recommendations-on-where-to-go-from-here",children:"My application was rejected. Do you have any recommendations on where to go from here?"}),"\n",(0,a.jsxs)(t.p,{children:["We usually give reasons why an application was rejected. We always try to be constructive and work with you towards an application that is beneficial to all parties. If we find no common ground, please have a look at ",(0,a.jsx)(t.a,{href:"/docs/funding",children:"our list of alternative funding opportunities"}),"."]}),"\n",(0,a.jsx)(t.h3,{id:"one-of-your-grantees-is-using-my-code-without-respecting-the-terms-of-its-license",children:"One of your grantees is using my code without respecting the terms of its license"}),"\n",(0,a.jsxs)(t.p,{children:["Please ",(0,a.jsx)(t.a,{href:"mailto:grants@web3.foundation",children:"reach out to us"})," asap."]}),"\n",(0,a.jsx)(t.h3,{id:"why-are-other-grant-applications-being-accepted-faster-than-mine",children:"Why are other grant applications being accepted faster than mine?"}),"\n",(0,a.jsx)(t.p,{children:"There are many reasons why your application might take longer than others: some applications are straightforward and simple and address an obvious issue, others require deeper understanding and discussion. If your application is highly technical or specialised, we might have to bring in an external evaluator. Sometimes, this specialised evaluator is busy with another evaluation. And sometimes, the committee is simply unsure or not quite convinced."}),"\n",(0,a.jsx)(t.h2,{id:"\ufe0f-application-process",children:"\ud83d\udd8a\ufe0f Application Process"}),"\n",(0,a.jsx)(t.h3,{id:"how-long-does-it-take-from-application-to-decision",children:"How long does it take from application to decision?"}),"\n",(0,a.jsx)(t.p,{children:"Depending on the requested amount, quality of the application and desirability for the ecosystem, a grant application could be approved within a week. Usually, there will be a discussion and requests for changes, additions or improvements. If no one in the committee finds the application approval-worthy or you don't react to our comments, it will be closed after two weeks of inactivity. Very large grants require the approval of the council, which convenes once a month. Thus, once an editor declares your application sufficient, it may take up to one month until a decision is made."}),"\n",(0,a.jsx)(t.h3,{id:"a-w3f-member-approved-my-application-does-that-mean-it-is-accepted",children:"A W3F member approved my application. Does that mean it is accepted?"}),"\n",(0,a.jsx)(t.p,{children:"Depending on the size of the grant, applications require two to five committee members to approve it. Since we have many different members with different backgrounds and specializations, it is possible that the committee disagrees and your application gets rejected even though one or two members approved it.\nThe application is accepted once the pull request is merged."}),"\n",(0,a.jsx)(t.h3,{id:"how-do-i-apply-if-i-want-to-keep-information-private",children:"How do I apply if I want to keep information private?"}),"\n",(0,a.jsxs)(t.p,{children:["For special cases that do not fit the regular grants structure, we provide ",(0,a.jsx)(t.a,{href:"https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform",children:"a form"}),". You can provide all application data by submitting this form, or submit the form with a reference to a pull request with data you are willing to make public."]}),"\n",(0,a.jsxs)(t.p,{children:["Our ",(0,a.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/e03a3e760846bfaf44352cb17a6763ff0fcf1a94/.github/pull_request_template.md?plain=1#L21",children:"application template"})," also offers the possibility to make the application public, but to keep its discussion private."]}),"\n",(0,a.jsx)(t.h3,{id:"what-is-kyckyb-and-why-do-i-have-to-provide-this-data",children:"What is KYC/KYB and why do I have to provide this data?"}),"\n",(0,a.jsxs)(t.p,{children:["In order to comply with regulations, the Web3 Foundation is required to perform KYC (Know Your Customer) checks on individuals and KYB (Know Your Business) checks on entities applying for a grant in order to verify their identity. For these checks, we ask you to provide information about yourself and/or the entity you are representing through our provider ",(0,a.jsx)(t.a,{href:"https://sumsub.com/",children:"Sumsub"}),". If you have any problems with or concerns about this process, please ",(0,a.jsx)(t.a,{href:"mailto:grants@web3.foundation",children:"reach out to us"}),"."]}),"\n",(0,a.jsx)(t.h2,{id:"-after-approval",children:"\ud83e\udd73 After Approval"}),"\n",(0,a.jsx)(t.h3,{id:"when-can-i-apply-for-a-follow-up-grant",children:"When can I apply for a follow-up grant?"}),"\n",(0,a.jsx)(t.p,{children:"Anyone who has successfully completed a grant project (i.e. all milestones were accepted, or the previous grant was terminated in mutual agreement) can apply for a follow-up grant. Concurrent grants are only granted in special circumstances."}),"\n",(0,a.jsx)(t.h3,{id:"something-came-up-and-i-cannot-finish-the-project-in-time-can-we-postpone-or-call-off-the-rest-of-my-project",children:"Something came up and I cannot finish the project in time. Can we postpone or call off the rest of my project?"}),"\n",(0,a.jsx)(t.p,{children:"The Web3 Foundation reserves the right to terminate an agreement that is behind schedule. However, we are not interested in taking away your grant for any slight hiccup. More often than not, delays are part of the journey and do not constitute a reason for concern. The best way to handle changes in your plans is to get in touch with us. If you would like to prematurely end your work, we can amend your application and remove the milestones you won't be able to complete. If you decide to continue work at a later date, you can always reapply for the remaining milestones and potentially adapt them to take into account any insights you have gained in the meantime."}),"\n",(0,a.jsx)(t.h3,{id:"can-i-list-the-web3-foundation-as-a-partner",children:"Can I list the Web3 Foundation as a partner?"}),"\n",(0,a.jsxs)(t.p,{children:["No. Once the grants team has accepted your first milestone, you may display our ",(0,a.jsx)(t.a,{href:"/docs/Support%20Docs/grant-badge-guidelines",children:"grants badge"})," in a project-specific context, such as the repository containing the grant project work."]}),"\n",(0,a.jsx)(t.h3,{id:"can-you-help-me-advertise-my-project",children:"Can you help me advertise my project?"}),"\n",(0,a.jsxs)(t.p,{children:["The Web3 Foundation does not provide PR services to its grantees. However, once per month we co-promote announcements from grants that have delivered a milestone on ",(0,a.jsx)(t.a,{href:"https://twitter.com/Web3foundation",children:"Twitter"}),". Note that the milestone needs to have been accepted prior to the announcement. Lastly, please observe our ",(0,a.jsx)(t.a,{href:"/docs/Support%20Docs/announcement-guidelines",children:"announcement guidelines"})," for all grant-related communications. This document also lists an email address through which you can get in touch with our PR team for feedback and in case you have specific questions."]}),"\n",(0,a.jsx)(t.h3,{id:"i-found-one-of-my-deliverables-to-be-unnecessary-impossible-or-already-done-elsewhere-what-do-i-do",children:"I found one of my deliverables to be unnecessary, impossible or already done elsewhere. What do I do?"}),"\n",(0,a.jsx)(t.p,{children:"Plans change. If you find parts of your original grant application to be unnecessary or you decide to pivot, but you still want to finish the project: get in touch with us. If your new plans are in line with the Web3 Foundation\u2019s values and the council approves the amendment, you can continue your work. If your plans change significantly or you find yourself not being able to finish the grant, we can mutually agree to terminate the grant early. You are always welcome to reapply another time."}),"\n",(0,a.jsx)(t.h2,{id:"-milestone-delivery",children:"\ud83d\ude9a Milestone Delivery"}),"\n",(0,a.jsx)(t.h3,{id:"how-do-i-submit-a-milestone",children:"How do I submit a milestone?"}),"\n",(0,a.jsxs)(t.p,{children:["For details, please refer to the ",(0,a.jsx)(t.a,{href:"/docs/Support%20Docs/milestone-deliverables-guidelines",children:"milestone delivery guidelines"}),". Generally speaking, the most important part of a delivery is a list of ",(0,a.jsx)(t.strong,{children:"the same deliverables listed in the application"})," with links to their implementation/realisation (ideally pointing to a specific commit or tag, so you can continue working on your repository without messing up your delivery and complicating our evaluation) and any additional notes you might have. The list of deliverables for each of your milestones should be defined in your grant agreement."]}),"\n",(0,a.jsx)(t.h3,{id:"can-i-submit-two-or-more-milestones-at-once",children:"Can I submit two or more milestones at once?"}),"\n",(0,a.jsx)(t.p,{children:"You can. However, we strongly encourage you to submit your work in increments (milestones), so that you can be sure we didn\u2019t misunderstand (an aspect of) your application, and you didn't make changes to your plan or delivery that would have required a reevaluation of the application."}),"\n",(0,a.jsx)(t.h3,{id:"can-i-add-a-badge-to-my-repo-once-ive-completed-a-milestone",children:"Can I add a badge to my repo once I\u2019ve completed a milestone?"}),"\n",(0,a.jsxs)(t.p,{children:["If yours is a ",(0,a.jsx)(t.a,{href:"/docs/Introduction/levels",children:"Level 2 or 3"})," grant and your first milestone has been submitted ",(0,a.jsx)(t.strong,{children:"and accepted"}),", yes. Please make sure that you follow the ",(0,a.jsx)(t.a,{href:"/docs/Support%20Docs/grant-badge-guidelines",children:"badge guidelines"})," when doing so."]}),"\n",(0,a.jsx)(t.h3,{id:"why-are-other-milestones-being-accepted-or-discussed-faster-than-mine",children:"Why are other milestones being accepted or discussed faster than mine?"}),"\n",(0,a.jsx)(t.p,{children:"While we try to process deliveries chronologically, some milestones aren't processed quite as fast as others. One obvious reason is the complexity of the delivery and its evaluation. Other times, your submission might require internal discussion or delegation. In any case, if you have any question on the processing of your delivery, you can reach out to us via email or Github."})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},28453:(e,t,o)=>{o.d(t,{R:()=>s,x:()=>r});var n=o(96540);const a={},i=n.createContext(a);function s(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/04a01ee2.3a6c0a5a.js b/assets/js/04a01ee2.3a6c0a5a.js deleted file mode 100644 index 2c5c9179743..00000000000 --- a/assets/js/04a01ee2.3a6c0a5a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[21823],{92578:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>o});const t=JSON.parse('{"id":"applications/cScale","title":"cScale","description":"This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don\'t remove any of the mandatory parts presented in bold letters or as headlines! Lines starting with a > (such as this one) can be removed.","source":"@site/applications/cScale.md","sourceDirName":"applications","slug":"/applications/cScale","permalink":"/applications/cScale","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/cScale.md","tags":[],"version":"current","frontMatter":{}}');var s=i(74848),l=i(28453);const r={},a="cScale",d={},o=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Fixed Int",id:"fixed-int",level:4},{value:"Compact Int",id:"compact-int",level:4},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 - Working Product",id:"milestone-1---working-product",level:3},{value:"Milestone 2 - Additional testing",id:"milestone-2---additional-testing",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,l.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"cscale",children:"cScale"})}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsxs)(n.p,{children:["This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don't remove any of the mandatory parts presented in bold letters or as headlines! Lines starting with a ",(0,s.jsx)(n.code,{children:">"})," (such as this one) can be removed."]}),"\n",(0,s.jsxs)(n.p,{children:["See the ",(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/#pencil-process",children:"Grants Program Process"})," on how to submit a proposal."]}),"\n"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Team Name:"})," Matthew Darnell (Individual)"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Payment Address:"})," ",(0,s.jsx)(n.code,{children:"15ssDeS9peN9a3rDwFrV19YJ8oRffmphaE"})," (BTC)"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsxs)(n.strong,{children:[(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Status:"})," ",(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/pull/625#issuecomment-1047869564",children:"Terminated"})]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"cScale is a SCALE codec implementation in C"}),"\n",(0,s.jsx)(n.li,{children:"Currently there does not seem to be a working standalone implementation of this serialization codec in C"}),"\n",(0,s.jsx)(n.li,{children:"A SCALE implementation would allow for the development of more desktop applications communicating with Substrate nodes"}),"\n",(0,s.jsx)(n.li,{children:"I am developing this because I am interested in creating a simple and secure desktop Substrate wallet"}),"\n",(0,s.jsx)(n.li,{children:"I already have a generally working product that I would also like to improve as I get suggestions"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Technology stack will be a simple C library, mostly in C99 with a few uses of C11 ",(0,s.jsx)(n.code,{children:"_Generic"}),". One dependency currently will be included which is an open sourced, single file, pure-header utf8 implementation useful for SCALE string encoding."]}),"\n",(0,s.jsx)(n.li,{children:"Makefile is included but can do simple CMakeLists.txt if preferred"}),"\n",(0,s.jsxs)(n.li,{children:["Supported Data Types will be:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Fixed Width Integers"}),"\n",(0,s.jsx)(n.li,{children:"Compact/General Integers"}),"\n",(0,s.jsx)(n.li,{children:"Booleans"}),"\n",(0,s.jsx)(n.li,{children:"Options"}),"\n",(0,s.jsx)(n.li,{children:"Vectors (and Strings)"}),"\n",(0,s.jsx)(n.li,{children:"Enumerations"}),"\n",(0,s.jsx)(n.li,{children:"Tuples"}),"\n",(0,s.jsx)(n.li,{children:"User-Defined Data Structures"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Some limitations and caveats:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["C does not support ",(0,s.jsx)(n.code,{children:"uint128_t"})," types. Possible options are to introduce a 3rd party dependency or consume ",(0,s.jsx)(n.code,{children:"u128"})," values encoded as ",(0,s.jsx)(n.code,{children:"char*"})," strings. GCC does provide a ",(0,s.jsx)(n.code,{children:"uint128_t"})," extension but I'm not sure how universal this is and C does not support sufficiently long literal int values. Currently I am able to encode from a hex-represented ",(0,s.jsx)(n.code,{children:"u128"})," but could consume decimal represented ",(0,s.jsx)(n.code,{children:"char*"})," strings if required."]}),"\n",(0,s.jsxs)(n.li,{children:["Enumerations are tricky to implement as they are user-defined. I am able to construct a ",(0,s.jsx)(n.code,{children:"struct"})," which generates a custom enum type by consuming an array of strings of different types, e.g. ",(0,s.jsx)(n.code,{children:"[Int, Bool]"}),", but I am not sure how to make this very clean for the user."]}),"\n",(0,s.jsxs)(n.li,{children:["A lack of templating and type inference makes encoding/decoding user-defined ",(0,s.jsx)(n.code,{children:"struct"})," values a little difficult. I am able to achieve this by defining a custom ",(0,s.jsx)(n.code,{children:"struct"})," which contains a ",(0,s.jsx)(n.code,{children:"serialize"})," as well as ",(0,s.jsx)(n.code,{children:"deserialize"})," function pointer. The user will be able to include this ",(0,s.jsx)(n.code,{children:"struct"})," in his data structure and assign his own custom function. This works fine, but again, it is a little more in depth for the end user than ideal."]}),"\n",(0,s.jsx)(n.li,{children:"With each of these, I would love feedback from others on how to improve the library!"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"The target audience are Desktop C/C++ developers who would like to be able to encode and decode Substrate API data"}),"\n",(0,s.jsxs)(n.li,{children:["Similar Projects","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Kagome (C++ and not intended for standalone library use)"}),"\n",(0,s.jsx)(n.li,{children:"FinoaBanking substrate-c-tool (Has not been updated for over a year and is in unknown state of completion as far as I can tell)"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Matthew Darnell"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Email:"})," ",(0,s.jsx)(n.a,{href:"mailto:matthew.darnell@protonmail.com",children:"matthew.darnell@protonmail.com"})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://github.com/MatthewDarnell/iota-simplewallet",children:"https://github.com/MatthewDarnell/iota-simplewallet"})," -- IOTA C library"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://github.com/MatthewDarnell/redis_orderbook",children:"https://github.com/MatthewDarnell/redis_orderbook"})," -- Order matching engine in Rust"]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,s.jsx)(n.p,{children:"Currently have a basic working implementation. Generating a testing app, a basic cli app, and a statically linked library."}),"\n",(0,s.jsx)(n.p,{children:"Some examples:"}),"\n",(0,s.jsx)(n.h4,{id:"fixed-int",children:"Fixed Int"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-c",children:'scale_fixed_int fixed = { 0 };\nencode_int_to_fixed_int_scale(&fixed, (uint16_t)42);\nuint8_t serialized[64] = { 0 };\nsize_t serialized_len = 0;\nserialize_fixed_int(serialized, &serialized_len, &fixed);\n\nuint16_t output = 0;\ndecode_scale_fixed_int((void*)&output, &fixed);\n\nfor(int i=0; i < serialized_len; i++) printf("%02X", serialized[i]);\nprintf(" --- %u\\n", output);\n'})}),"\n",(0,s.jsx)(n.p,{children:"Prints:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",children:"2A00 --- 42\n"})}),"\n",(0,s.jsx)(n.h4,{id:"compact-int",children:"Compact Int"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-c",children:' scale_compact_int compact = { 0 };\n encode_compact(&compact, (uint32_t)69);\n uint8_t serialized[64] = { 0 };\n size_t serialized_len = 0;\n char *output = decode_compact_to_hex(&compact);\n serialize_compact_int(serialized, &serialized_len, &compact);\n uint32_t decoded = strtoul(output, NULL, 16);\n printf("SCALE=<");\n for(int i=0; i < serialized_len; i++) printf("%02X", serialized[i]);\n printf("> --- Hex=<%s> --- Decoded=<%u>\\n", output, decoded);\n free(output);\n'})}),"\n",(0,s.jsx)(n.p,{children:"Prints:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",children:"SCALE=<1501> --- Hex=<45> --- Decoded=<69>\n"})}),"\n",(0,s.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Estimated Duration:"})," 1 month"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Full-Time Equivalent (FTE):"})," 1 FTE"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Costs:"})," 10,000 USD, denominated in Bitcoin"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-1---working-product",children:"Milestone 1 - Working Product"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated duration:"})," 2 weeks"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," 9,000 USD in BTC"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"GPLv3"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsxs)(n.td,{children:["I will provide a README with several examples as well as a .c file for each data type with several tests showing encoding and decoding. I will also provide a ",(0,s.jsx)(n.code,{children:"docs"})," folder containing a markdown file giving examples for each data type as well as commenting each function in the main header file."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(n.td,{children:"Intermediate Structs"}),(0,s.jsx)(n.td,{children:"I will provide a set of Structs which represent SCALE data internally before being processed"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(n.td,{children:"Encode"}),(0,s.jsxs)(n.td,{children:["I will provide a set of functions that encode data into intermediate structs as well as others to serialize them. Each will generate an array of ",(0,s.jsx)(n.code,{children:"uint8_t*"})," as well as a corresponding length"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"3."}),(0,s.jsx)(n.td,{children:"Decode"}),(0,s.jsxs)(n.td,{children:["I will provide a set of functions that decode a valid SCALE ",(0,s.jsx)(n.code,{children:"uint8_t*"})," array into the appropriate intermediate struct as well as functions to deserialize the struct back into raw data"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"4."}),(0,s.jsx)(n.td,{children:"Testing"}),(0,s.jsx)(n.td,{children:"I will provide a testing application which tests each data type and ensures correctness"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"5."}),(0,s.jsx)(n.td,{children:"Basic CLI"}),(0,s.jsx)(n.td,{children:"I will provide a basic command line interface app which will encode/decode fixed width and compact integers"})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-2---additional-testing",children:"Milestone 2 - Additional testing"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated duration:"})," 1 month"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," 1,000 USD in BTC"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"GPLv3"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"I will add several useful structs to the docs folder which represent actual Substrate data with their respective serialization functions. (AccountInfo, AccountData)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(n.td,{children:"Tests"}),(0,s.jsx)(n.td,{children:"I will work to provide more tests, preferably utilizing Rust FFI to compare against parity-scale-code results. This may or may not require some assistance as I have never used Rust FFI."})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"I am writing this library to use in my own personal desktop wallet application"}),"\n",(0,s.jsxs)(n.li,{children:["I see a real need for it to allow the Substrate community to grow and I hope it makes it on the official list of ",(0,s.jsx)(n.a,{href:"https://substrate.dev/docs/en/knowledgebase/advanced/codec#implementations",children:"Scale Implementations"})]}),"\n",(0,s.jsx)(n.li,{children:"Long term I would be interested in improving this library to keep current with a possibly-evolving SCALE standard as well as getting help from other C devs making pull requests, which would be most welcome."}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"How did you hear about the Grants Program?"})," Shawn Tabrizi"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"This started as a personal project and I would like to assist in expanding the Substrate ecosystem by providing a critical element of its infrastructure in C"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>a});var t=i(96540);const s={},l=t.createContext(s);function r(e){const n=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/04a01ee2.7134bc61.js b/assets/js/04a01ee2.7134bc61.js new file mode 100644 index 00000000000..af5ca960fb1 --- /dev/null +++ b/assets/js/04a01ee2.7134bc61.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[21823],{7245:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>o});const t=JSON.parse('{"id":"applications/cScale","title":"cScale","description":"This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don\'t remove any of the mandatory parts presented in bold letters or as headlines! Lines starting with a > (such as this one) can be removed.","source":"@site/applications/cScale.md","sourceDirName":"applications","slug":"/applications/cScale","permalink":"/applications/cScale","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/cScale.md","tags":[],"version":"current","frontMatter":{}}');var s=i(74848),l=i(28453);const r={},a="cScale",d={},o=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Fixed Int",id:"fixed-int",level:4},{value:"Compact Int",id:"compact-int",level:4},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 - Working Product",id:"milestone-1---working-product",level:3},{value:"Milestone 2 - Additional testing",id:"milestone-2---additional-testing",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,l.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"cscale",children:"cScale"})}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsxs)(n.p,{children:["This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don't remove any of the mandatory parts presented in bold letters or as headlines! Lines starting with a ",(0,s.jsx)(n.code,{children:">"})," (such as this one) can be removed."]}),"\n",(0,s.jsxs)(n.p,{children:["See the ",(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/#pencil-process",children:"Grants Program Process"})," on how to submit a proposal."]}),"\n"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Team Name:"})," Matthew Darnell (Individual)"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Payment Address:"})," ",(0,s.jsx)(n.code,{children:"15ssDeS9peN9a3rDwFrV19YJ8oRffmphaE"})," (BTC)"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsxs)(n.strong,{children:[(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Status:"})," ",(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/pull/625#issuecomment-1047869564",children:"Terminated"})]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"cScale is a SCALE codec implementation in C"}),"\n",(0,s.jsx)(n.li,{children:"Currently there does not seem to be a working standalone implementation of this serialization codec in C"}),"\n",(0,s.jsx)(n.li,{children:"A SCALE implementation would allow for the development of more desktop applications communicating with Substrate nodes"}),"\n",(0,s.jsx)(n.li,{children:"I am developing this because I am interested in creating a simple and secure desktop Substrate wallet"}),"\n",(0,s.jsx)(n.li,{children:"I already have a generally working product that I would also like to improve as I get suggestions"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Technology stack will be a simple C library, mostly in C99 with a few uses of C11 ",(0,s.jsx)(n.code,{children:"_Generic"}),". One dependency currently will be included which is an open sourced, single file, pure-header utf8 implementation useful for SCALE string encoding."]}),"\n",(0,s.jsx)(n.li,{children:"Makefile is included but can do simple CMakeLists.txt if preferred"}),"\n",(0,s.jsxs)(n.li,{children:["Supported Data Types will be:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Fixed Width Integers"}),"\n",(0,s.jsx)(n.li,{children:"Compact/General Integers"}),"\n",(0,s.jsx)(n.li,{children:"Booleans"}),"\n",(0,s.jsx)(n.li,{children:"Options"}),"\n",(0,s.jsx)(n.li,{children:"Vectors (and Strings)"}),"\n",(0,s.jsx)(n.li,{children:"Enumerations"}),"\n",(0,s.jsx)(n.li,{children:"Tuples"}),"\n",(0,s.jsx)(n.li,{children:"User-Defined Data Structures"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Some limitations and caveats:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["C does not support ",(0,s.jsx)(n.code,{children:"uint128_t"})," types. Possible options are to introduce a 3rd party dependency or consume ",(0,s.jsx)(n.code,{children:"u128"})," values encoded as ",(0,s.jsx)(n.code,{children:"char*"})," strings. GCC does provide a ",(0,s.jsx)(n.code,{children:"uint128_t"})," extension but I'm not sure how universal this is and C does not support sufficiently long literal int values. Currently I am able to encode from a hex-represented ",(0,s.jsx)(n.code,{children:"u128"})," but could consume decimal represented ",(0,s.jsx)(n.code,{children:"char*"})," strings if required."]}),"\n",(0,s.jsxs)(n.li,{children:["Enumerations are tricky to implement as they are user-defined. I am able to construct a ",(0,s.jsx)(n.code,{children:"struct"})," which generates a custom enum type by consuming an array of strings of different types, e.g. ",(0,s.jsx)(n.code,{children:"[Int, Bool]"}),", but I am not sure how to make this very clean for the user."]}),"\n",(0,s.jsxs)(n.li,{children:["A lack of templating and type inference makes encoding/decoding user-defined ",(0,s.jsx)(n.code,{children:"struct"})," values a little difficult. I am able to achieve this by defining a custom ",(0,s.jsx)(n.code,{children:"struct"})," which contains a ",(0,s.jsx)(n.code,{children:"serialize"})," as well as ",(0,s.jsx)(n.code,{children:"deserialize"})," function pointer. The user will be able to include this ",(0,s.jsx)(n.code,{children:"struct"})," in his data structure and assign his own custom function. This works fine, but again, it is a little more in depth for the end user than ideal."]}),"\n",(0,s.jsx)(n.li,{children:"With each of these, I would love feedback from others on how to improve the library!"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"The target audience are Desktop C/C++ developers who would like to be able to encode and decode Substrate API data"}),"\n",(0,s.jsxs)(n.li,{children:["Similar Projects","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Kagome (C++ and not intended for standalone library use)"}),"\n",(0,s.jsx)(n.li,{children:"FinoaBanking substrate-c-tool (Has not been updated for over a year and is in unknown state of completion as far as I can tell)"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Matthew Darnell"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Email:"})," ",(0,s.jsx)(n.a,{href:"mailto:matthew.darnell@protonmail.com",children:"matthew.darnell@protonmail.com"})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://github.com/MatthewDarnell/iota-simplewallet",children:"https://github.com/MatthewDarnell/iota-simplewallet"})," -- IOTA C library"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://github.com/MatthewDarnell/redis_orderbook",children:"https://github.com/MatthewDarnell/redis_orderbook"})," -- Order matching engine in Rust"]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,s.jsx)(n.p,{children:"Currently have a basic working implementation. Generating a testing app, a basic cli app, and a statically linked library."}),"\n",(0,s.jsx)(n.p,{children:"Some examples:"}),"\n",(0,s.jsx)(n.h4,{id:"fixed-int",children:"Fixed Int"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-c",children:'scale_fixed_int fixed = { 0 };\nencode_int_to_fixed_int_scale(&fixed, (uint16_t)42);\nuint8_t serialized[64] = { 0 };\nsize_t serialized_len = 0;\nserialize_fixed_int(serialized, &serialized_len, &fixed);\n\nuint16_t output = 0;\ndecode_scale_fixed_int((void*)&output, &fixed);\n\nfor(int i=0; i < serialized_len; i++) printf("%02X", serialized[i]);\nprintf(" --- %u\\n", output);\n'})}),"\n",(0,s.jsx)(n.p,{children:"Prints:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",children:"2A00 --- 42\n"})}),"\n",(0,s.jsx)(n.h4,{id:"compact-int",children:"Compact Int"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-c",children:' scale_compact_int compact = { 0 };\n encode_compact(&compact, (uint32_t)69);\n uint8_t serialized[64] = { 0 };\n size_t serialized_len = 0;\n char *output = decode_compact_to_hex(&compact);\n serialize_compact_int(serialized, &serialized_len, &compact);\n uint32_t decoded = strtoul(output, NULL, 16);\n printf("SCALE=<");\n for(int i=0; i < serialized_len; i++) printf("%02X", serialized[i]);\n printf("> --- Hex=<%s> --- Decoded=<%u>\\n", output, decoded);\n free(output);\n'})}),"\n",(0,s.jsx)(n.p,{children:"Prints:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",children:"SCALE=<1501> --- Hex=<45> --- Decoded=<69>\n"})}),"\n",(0,s.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Estimated Duration:"})," 1 month"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Full-Time Equivalent (FTE):"})," 1 FTE"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Costs:"})," 10,000 USD, denominated in Bitcoin"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-1---working-product",children:"Milestone 1 - Working Product"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated duration:"})," 2 weeks"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," 9,000 USD in BTC"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"GPLv3"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsxs)(n.td,{children:["I will provide a README with several examples as well as a .c file for each data type with several tests showing encoding and decoding. I will also provide a ",(0,s.jsx)(n.code,{children:"docs"})," folder containing a markdown file giving examples for each data type as well as commenting each function in the main header file."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(n.td,{children:"Intermediate Structs"}),(0,s.jsx)(n.td,{children:"I will provide a set of Structs which represent SCALE data internally before being processed"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(n.td,{children:"Encode"}),(0,s.jsxs)(n.td,{children:["I will provide a set of functions that encode data into intermediate structs as well as others to serialize them. Each will generate an array of ",(0,s.jsx)(n.code,{children:"uint8_t*"})," as well as a corresponding length"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"3."}),(0,s.jsx)(n.td,{children:"Decode"}),(0,s.jsxs)(n.td,{children:["I will provide a set of functions that decode a valid SCALE ",(0,s.jsx)(n.code,{children:"uint8_t*"})," array into the appropriate intermediate struct as well as functions to deserialize the struct back into raw data"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"4."}),(0,s.jsx)(n.td,{children:"Testing"}),(0,s.jsx)(n.td,{children:"I will provide a testing application which tests each data type and ensures correctness"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"5."}),(0,s.jsx)(n.td,{children:"Basic CLI"}),(0,s.jsx)(n.td,{children:"I will provide a basic command line interface app which will encode/decode fixed width and compact integers"})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-2---additional-testing",children:"Milestone 2 - Additional testing"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated duration:"})," 1 month"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," 1,000 USD in BTC"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"GPLv3"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"I will add several useful structs to the docs folder which represent actual Substrate data with their respective serialization functions. (AccountInfo, AccountData)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(n.td,{children:"Tests"}),(0,s.jsx)(n.td,{children:"I will work to provide more tests, preferably utilizing Rust FFI to compare against parity-scale-code results. This may or may not require some assistance as I have never used Rust FFI."})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"I am writing this library to use in my own personal desktop wallet application"}),"\n",(0,s.jsxs)(n.li,{children:["I see a real need for it to allow the Substrate community to grow and I hope it makes it on the official list of ",(0,s.jsx)(n.a,{href:"https://substrate.dev/docs/en/knowledgebase/advanced/codec#implementations",children:"Scale Implementations"})]}),"\n",(0,s.jsx)(n.li,{children:"Long term I would be interested in improving this library to keep current with a possibly-evolving SCALE standard as well as getting help from other C devs making pull requests, which would be most welcome."}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"How did you hear about the Grants Program?"})," Shawn Tabrizi"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"This started as a personal project and I would like to assist in expanding the Substrate ecosystem by providing a critical element of its infrastructure in C"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>a});var t=i(96540);const s={},l=t.createContext(s);function r(e){const n=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/04a72ad1.6691174f.js b/assets/js/04a72ad1.6691174f.js deleted file mode 100644 index 41ca0e5cd01..00000000000 --- a/assets/js/04a72ad1.6691174f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[50689],{56462:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"docs/RFPs/privacy-enhancement-polkadot-extension","title":"Privacy Enhancement for Polkadot Extension","description":"This Request for Proposals is closed, meaning we are not looking for any more proposals on this topic at the moment.","source":"@site/docs/RFPs/privacy-enhancement-polkadot-extension.md","sourceDirName":"docs/RFPs","slug":"/docs/RFPs/privacy-enhancement-polkadot-extension","permalink":"/docs/RFPs/privacy-enhancement-polkadot-extension","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/docs/RFPs/privacy-enhancement-polkadot-extension.md","tags":[],"version":"current","frontMatter":{},"sidebar":"docs","previous":{"title":"Polkadot Protocol Conformance Tests","permalink":"/docs/RFPs/polkadot-protocol_conformance_tests"},"next":{"title":"High-availability validator setup","permalink":"/docs/RFPs/raft-validators"}}');var i=n(74848),o=n(28453);const r={},a="Privacy Enhancement for Polkadot Extension",l={},d=[{value:"Project Description \ud83d\udcc4",id:"project-description-page_facing_up",level:2},{value:"Deliverables \ud83d\udd29",id:"deliverables-nut_and_bolt",level:2},{value:"Milestone 1",id:"milestone-1",level:3}];function c(e){const t={a:"a",admonition:"admonition",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"privacy-enhancement-for-polkadot-extension",children:"Privacy Enhancement for Polkadot Extension"})}),"\n",(0,i.jsx)(t.admonition,{type:"danger",children:(0,i.jsxs)(t.p,{children:["This Request for Proposals is ",(0,i.jsx)(t.em,{children:"closed"}),", meaning we are not looking for any more proposals on this topic at the moment."]})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Status:"})," ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/master/applications/polkadot-js-extension-per-account-auth.md",children:"Implemented"}),". GH ",(0,i.jsx)(t.a,{href:"https://github.com/polkadot-js/extension/issues/1037",children:"issue"})," has been closed."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Proposer:"})," jonasW3F"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Projects you think this work could be useful for"})," [optional]: ",(0,i.jsx)(t.a,{href:"https://github.com/polkadot-js/extension",children:"https://github.com/polkadot-js/extension"})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Teams/People that could deliver the RFP:"})," @celrisen"]}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"project-description-page_facing_up",children:["Project Description ","\ud83d\udcc4"]}),"\n",(0,i.jsx)(t.p,{children:'An increasing number of websites require access to the Polkadot extension with a growing ecosystem. By allowing access to the extension, websites (naturally) can see the addresses that are contained in the extension. This imposes a big risk to privacy, because malicious actors could create lists about which addresses belong to one entity and, in the worst case, even link it to real-world identities (if at least one address is linked to an on-chain identity). A feature to prevent this is currently the "hide" button on single addresses, which prevent websites from seeing that address. However, it is currently cumbersome to handle that feature. The idea of this RFP is to extend on that feature and include a few QOL functionalities to make it easier for users to protect their privacy.'}),"\n",(0,i.jsxs)(t.h2,{id:"deliverables-nut_and_bolt",children:["Deliverables ","\ud83d\udd29"]}),"\n",(0,i.jsxs)(t.p,{children:["As outlined ",(0,i.jsx)(t.a,{href:"https://github.com/polkadot-js/extension/issues/893",children:"here"}),", the deliverable should include five features to the extension and a successful completion of this RFP includes a merge of a PR to the main polkadot-js/extension repo. ",(0,i.jsx)(t.strong,{children:"It is of great importance to generate clean code that follows best-practices"}),"."]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Estimated Duration:"})," 1 month"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Full-time equivalent (FTE):"})," Amount of time (in days) required for a single person to complete this project (",(0,i.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Full-time_equivalent",children:"see"}),")"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Costs:"})," $10'000."]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-1",children:"Milestone 1"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated Duration:"})," 1 month"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"})," Amount of time (in days) required for a single person to complete this milestone"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"})," $10'000"]}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"1."}),(0,i.jsx)(t.td,{children:'"Hide all"'}),(0,i.jsx)(t.td,{children:"A global button that hides/un-hides all addresses"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"2."}),(0,i.jsx)(t.td,{children:'"View-Groups"'}),(0,i.jsx)(t.td,{children:'Create and name groups which a user can organize their accounts to. For example, a "polkadot-js" group could unhide all accounts, while a "Parachain X" group only unhides those accounts a user knows that they have those parachain tokens on.'})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"3."}),(0,i.jsx)(t.td,{children:'"Privacy Mode"'}),(0,i.jsx)(t.td,{children:'A setting that automatically changes the extension to a specific view group (which could be "hide all").'})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"4."}),(0,i.jsx)(t.td,{children:'"Hide from Extension"'}),(0,i.jsx)(t.td,{children:"A feature that lets users hide addresses in the extension itself. This is useful for doing demos or presenting the screen. Those accounts are listed in a special tab and can be unhidden from there."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"5."}),(0,i.jsx)(t.td,{children:'"Link View-Groups to URLs"'}),(0,i.jsxs)(t.td,{children:["The extension already features an access control to specific URLs. To add on that, the extension could automatically switch to a defined view-group when entering an URL. Building on that, upon ",(0,i.jsx)(t.em,{children:"first"})," authorization of a website, the extension could ask which view-groups to add it to or offer to create a new one."]})]})]})]})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>a});var s=n(96540);const i={},o=s.createContext(i);function r(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/04a72ad1.98b27839.js b/assets/js/04a72ad1.98b27839.js new file mode 100644 index 00000000000..93e0a99a672 --- /dev/null +++ b/assets/js/04a72ad1.98b27839.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[50689],{1706:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"docs/RFPs/privacy-enhancement-polkadot-extension","title":"Privacy Enhancement for Polkadot Extension","description":"This Request for Proposals is closed, meaning we are not looking for any more proposals on this topic at the moment.","source":"@site/docs/RFPs/privacy-enhancement-polkadot-extension.md","sourceDirName":"docs/RFPs","slug":"/docs/RFPs/privacy-enhancement-polkadot-extension","permalink":"/docs/RFPs/privacy-enhancement-polkadot-extension","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/docs/RFPs/privacy-enhancement-polkadot-extension.md","tags":[],"version":"current","frontMatter":{},"sidebar":"docs","previous":{"title":"Polkadot Protocol Conformance Tests","permalink":"/docs/RFPs/polkadot-protocol_conformance_tests"},"next":{"title":"High-availability validator setup","permalink":"/docs/RFPs/raft-validators"}}');var i=n(74848),o=n(28453);const r={},a="Privacy Enhancement for Polkadot Extension",l={},d=[{value:"Project Description \ud83d\udcc4",id:"project-description-page_facing_up",level:2},{value:"Deliverables \ud83d\udd29",id:"deliverables-nut_and_bolt",level:2},{value:"Milestone 1",id:"milestone-1",level:3}];function c(e){const t={a:"a",admonition:"admonition",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"privacy-enhancement-for-polkadot-extension",children:"Privacy Enhancement for Polkadot Extension"})}),"\n",(0,i.jsx)(t.admonition,{type:"danger",children:(0,i.jsxs)(t.p,{children:["This Request for Proposals is ",(0,i.jsx)(t.em,{children:"closed"}),", meaning we are not looking for any more proposals on this topic at the moment."]})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Status:"})," ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/master/applications/polkadot-js-extension-per-account-auth.md",children:"Implemented"}),". GH ",(0,i.jsx)(t.a,{href:"https://github.com/polkadot-js/extension/issues/1037",children:"issue"})," has been closed."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Proposer:"})," jonasW3F"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Projects you think this work could be useful for"})," [optional]: ",(0,i.jsx)(t.a,{href:"https://github.com/polkadot-js/extension",children:"https://github.com/polkadot-js/extension"})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Teams/People that could deliver the RFP:"})," @celrisen"]}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"project-description-page_facing_up",children:["Project Description ","\ud83d\udcc4"]}),"\n",(0,i.jsx)(t.p,{children:'An increasing number of websites require access to the Polkadot extension with a growing ecosystem. By allowing access to the extension, websites (naturally) can see the addresses that are contained in the extension. This imposes a big risk to privacy, because malicious actors could create lists about which addresses belong to one entity and, in the worst case, even link it to real-world identities (if at least one address is linked to an on-chain identity). A feature to prevent this is currently the "hide" button on single addresses, which prevent websites from seeing that address. However, it is currently cumbersome to handle that feature. The idea of this RFP is to extend on that feature and include a few QOL functionalities to make it easier for users to protect their privacy.'}),"\n",(0,i.jsxs)(t.h2,{id:"deliverables-nut_and_bolt",children:["Deliverables ","\ud83d\udd29"]}),"\n",(0,i.jsxs)(t.p,{children:["As outlined ",(0,i.jsx)(t.a,{href:"https://github.com/polkadot-js/extension/issues/893",children:"here"}),", the deliverable should include five features to the extension and a successful completion of this RFP includes a merge of a PR to the main polkadot-js/extension repo. ",(0,i.jsx)(t.strong,{children:"It is of great importance to generate clean code that follows best-practices"}),"."]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Estimated Duration:"})," 1 month"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Full-time equivalent (FTE):"})," Amount of time (in days) required for a single person to complete this project (",(0,i.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Full-time_equivalent",children:"see"}),")"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Costs:"})," $10'000."]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-1",children:"Milestone 1"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated Duration:"})," 1 month"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"})," Amount of time (in days) required for a single person to complete this milestone"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"})," $10'000"]}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"1."}),(0,i.jsx)(t.td,{children:'"Hide all"'}),(0,i.jsx)(t.td,{children:"A global button that hides/un-hides all addresses"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"2."}),(0,i.jsx)(t.td,{children:'"View-Groups"'}),(0,i.jsx)(t.td,{children:'Create and name groups which a user can organize their accounts to. For example, a "polkadot-js" group could unhide all accounts, while a "Parachain X" group only unhides those accounts a user knows that they have those parachain tokens on.'})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"3."}),(0,i.jsx)(t.td,{children:'"Privacy Mode"'}),(0,i.jsx)(t.td,{children:'A setting that automatically changes the extension to a specific view group (which could be "hide all").'})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"4."}),(0,i.jsx)(t.td,{children:'"Hide from Extension"'}),(0,i.jsx)(t.td,{children:"A feature that lets users hide addresses in the extension itself. This is useful for doing demos or presenting the screen. Those accounts are listed in a special tab and can be unhidden from there."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"5."}),(0,i.jsx)(t.td,{children:'"Link View-Groups to URLs"'}),(0,i.jsxs)(t.td,{children:["The extension already features an access control to specific URLs. To add on that, the extension could automatically switch to a defined view-group when entering an URL. Building on that, upon ",(0,i.jsx)(t.em,{children:"first"})," authorization of a website, the extension could ask which view-groups to add it to or offer to create a new one."]})]})]})]})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>a});var s=n(96540);const i={},o=s.createContext(i);function r(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/05f401a8.67979f74.js b/assets/js/05f401a8.67979f74.js deleted file mode 100644 index 33ae58e5211..00000000000 --- a/assets/js/05f401a8.67979f74.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[66106],{12986:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>n,toc:()=>c});const n=JSON.parse('{"id":"applications/choko_wallet","title":"Choko Wallet","description":"This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don\'t remove any of the mandatory parts presented in bold letters or as headlines! Lines starting with a > (such as this one) can be removed.","source":"@site/applications/choko_wallet.md","sourceDirName":"applications","slug":"/applications/choko_wallet","permalink":"/applications/choko_wallet","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/choko_wallet.md","tags":[],"version":"current","frontMatter":{}}');var i=s(74848),o=s(28453);const r={},a="Choko Wallet",l={},c=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1",id:"milestone-1",level:3},{value:"Future Plans",id:"future-plans",level:2}];function h(e){const t={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"choko-wallet",children:"Choko Wallet"})}),"\n",(0,i.jsxs)(t.blockquote,{children:["\n",(0,i.jsxs)(t.p,{children:["This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don't remove any of the mandatory parts presented in bold letters or as headlines! Lines starting with a ",(0,i.jsx)(t.code,{children:">"})," (such as this one) can be removed."]}),"\n",(0,i.jsxs)(t.p,{children:["See the ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/#pencil-process",children:"Grants Program Process"})," on how to submit a proposal."]}),"\n"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Team Name:"})," SkyeKiwi Team"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Payment Address:"})," 0x91029aBEb484a84D99c1C519C7A8A0cDB6B7c878 (USDC Preferred OR DAI)"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsxs)(t.strong,{children:[(0,i.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 3"]}),"\n"]}),"\n",(0,i.jsxs)(t.blockquote,{children:["\n",(0,i.jsxs)(t.p,{children:["\u26a0\ufe0f ",(0,i.jsx)(t.em,{children:"The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe."})]}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,i.jsx)(t.p,{children:"Choko Wallet is a user-friendly multi-chain crypto wallet for the Polkadot ecosystem. The Polkadot ecosystem has been known for its complicated nature to interact with."}),"\n",(0,i.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:'Like all crypto wallets, fund privacy and ease of use are usually two sides of a spectreum. Choko Wallet will be more lean towards the "ease of use" side and remain to be (99%) static web app.'}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Unlike most of the crypto wallets, Choko wallet is designed to be website-based which stores user private key encrypted on website localStorage. When DApps request for signature, the Dapp will redirect to the Choko Wallet web app and ask for user approval. Upon finish, the wallet web app will redirect back to the Dapp."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"The most confusion part of the Polkadot ecosystem for new comers is the amount of blockchains there are. The PolkadotJs App (dotapps.io) allow different teams to assign different theme color to their blockchain that greatly reduce confusion. Wallets in the Polkadot ecosystem should follow the same paradigm. Moreover, we should offload the burden for the end users to choose which blockchain back to Dapp developer so that the user can connect to the desired blockchain endpoint with zero configuration."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Another issue with all wallets is the lacking of good encryption/decryption features with the user's private key. (i.e. ",(0,i.jsx)(t.a,{href:"https://github.com/polkadot-js/common/pull/1331",children:"https://github.com/polkadot-js/common/pull/1331"}),") This feature is critical when Web3 is more privacy centric. It has been hard to be built because of different elliptic curve and encryption schema. We will make attempt to first adopt to the schema used by our own SkyeKiwi Network and try to generize it later."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,i.jsx)(t.p,{children:"Technology Stack: (Almost) static Web App built with React/Redux and PolkadotJs."}),"\n",(0,i.jsxs)(t.p,{children:["A PoC on the redirecting mechnisim is available ",(0,i.jsx)(t.a,{href:"https://github.com/RoyTimes/wallet-sandbox-demo",children:"here"}),"."]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Setup on Another Device via QR: generate a QR code that displays a ",(0,i.jsx)(t.em,{children:"plaintext"})," of the seed phrase and scan it on another device. Similar to Metamask."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Email Recovery/Create Via Email: have a centralized service to send an email to the user with a link that contains ",(0,i.jsx)(t.em,{children:"plaintext"}),' of the seed phrase to recover the seed phrase (i.e. Email saying "Please keep this email for recovery of your wallet. Click link: ',(0,i.jsx)(t.a,{href:"https://choko.app/recovery?11111aaaaaaa",children:"https://choko.app/recovery?11111aaaaaaa"}),'...... "). A banner with warning should be presented when the user has more than $50 in the wallet.']}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:['"Linkdrop": a feature inspired by other ecosystems. A Dapp developer might initialize a Linkdrop vault of some tokens as gas fee for their seed users. (i.e. Having 10 DOT for the first 100 signup users). A pallet might be required, so we will build a pallet on SkyeKiwi Network first to test things out. The wallet will provide the developer with a simple interface to generate a linkdrop vault and generate a linkdrop link. (i.e. ',(0,i.jsx)(t.a,{href:"https://choko.app/claim?vault=1&authorization=0x8dad7777",children:"https://choko.app/claim?vault=1&authorization=0x8dad7777"}),'..."). The developer can distribute the link drop link to users. When a user click the link, it will guide the user to create a new seed phrase and then have the gas fee token deposited to the wallet.']}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Encryption/Decryption: A few solutions avaliable: 1. allow encryption/decryption on Sr25519 key agreement. Drawback would be that the composed message would be hard to process outside the wallet. 2. Find a method to calculate a Curve25519 public key from a Sr25519 public key. We are not hardcore cryptographer and has no intention of implementing this ourselves. Looking for a more expertised answer to whether this is possible or if there is an implementation to it. Such conversion would greatly increase compatbility with popular Curve25519 based encryption softwares. 3. Worst case senario: ask users to register a Curve25519 public key on account creation. This is horrible but allow the encryption schema to be further compatible with other ECs like secp256k1. Would love to have a discussion on this."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Request Handling: there will be two types of requests - local requests that should be resolved inside the Dapps and remote requests that need to be redirected to the wallet web app. For usual wallets, this is somewhat implicitly assumed (like Web3js and Metamask). However, for a website based wallets, these two types of requests need to be dramatically different to be handled to prevent constant website redirecting. Moreover, in lack of proper RPC between DApp and browser extensions, requests and response payloads are encoded in the URL with plaintext. Therefore, in response to all these differences, we will create a set of bytes precises encoding schema and segregated request handling strategies. The wallet app will only handle requests that require the usage of user's private keys and do no load the private key unless a password is authenticated. Check out PoC implementations here ",(0,i.jsx)(t.a,{href:"https://github.com/choko-wallet/sdk/blob/master/packages/request-handler/src/signMessage.ts",children:"Link"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["Mockups:\n",(0,i.jsx)(t.a,{href:"https://imgtu.com/i/jYkTaT",children:(0,i.jsx)(t.img,{src:"https://s1.ax1x.com/2022/07/04/jYkTaT.png",alt:"jYkTaT.png"})}),"\n",(0,i.jsx)(t.a,{href:"https://imgtu.com/i/jYkLRJ",children:(0,i.jsx)(t.img,{src:"https://s1.ax1x.com/2022/07/04/jYkLRJ.png",alt:"jYkLRJ.png"})})]}),"\n",(0,i.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Choko Wallet provides a simple and intuitive interface for user to interact with blockchains/Dapps in the Polkadot ecosystem."}),"\n",(0,i.jsx)(t.li,{children:"End users who are less-educated about the Polkadot ecosystem or blockchain/crypto in general."}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,i.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Song Zhou"}),"\n",(0,i.jsx)(t.li,{children:"Zoe Sun"}),"\n",(0,i.jsx)(t.li,{children:"Fontend Developer team at SkyeKiwi"}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Name:"})," Song Zhou"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Email:"})," ",(0,i.jsx)(t.a,{href:"mailto:song.zhou@skye.kiwi",children:"song.zhou@skye.kiwi"})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Website:"})," ",(0,i.jsx)(t.a,{href:"https://skye.kiwi",children:"https://skye.kiwi"})]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,i.jsx)(t.p,{children:"None"}),"\n",(0,i.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,i.jsxs)(t.p,{children:["We have applied and deliverd all milestones of the ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/pull/553",children:"SkyeKiwi Protocol"})," and built the SkyeKiwi Network based on SkyeKiwi Protocol as a privacy layer for Web3 featuring interoprabl, multi-shard, multi-vm private smart contract execution as a part of the Substrate Builder Program. We have a track record of engineering complicated system with high quality. The Choko Wallet is a critical component for the adoption of the SkyeKiwi Network (and the SkyeKiwi Protocol), from the encryption/decryption functionalities of the network. More discussed in future plan section."]}),"\n",(0,i.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://github.com/skyekiwi/skyekiwi-network",children:"https://github.com/skyekiwi/skyekiwi-network"})," - Main repo for the SkyeKiwi Network"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://github.com/skyekiwi/skyekiwi-protocol",children:"https://github.com/skyekiwi/skyekiwi-protocol"})," - TypeScript implementation of the SkyeKiwi Protocol"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://github.com/skyekiwi/kiwi-contract",children:"https://github.com/skyekiwi/kiwi-contract"})," - Smart contract toolkit for submitting smart contract on SkyeKiwi Network. ",(0,i.jsx)(t.a,{href:"https://docs.skye.kiwi/docs/quick-start/deploy",children:"Tutorial"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,i.jsxs)(t.p,{children:["The project is mostly front-end work, except for the mechism for cross-browser tab communication from the Dapp and wallet. Therefore, so far, we have only created a simple sandbox to demostrate the viability of such communication ",(0,i.jsx)(t.a,{href:"https://github.com/RoyTimes/wallet-sandbox-demo",children:"here"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:["Moreover, the ",(0,i.jsx)(t.a,{href:"https://github.com/near/near-wallet",children:"Near Wallet"})," (an Apache2.0 or MIT licensed open source software) seem to be a good base of development for Choko Wallet. We will fork the repo and do a complete overhaul to better fit the needs of the Polkadot ecosystem."]}),"\n",(0,i.jsxs)(t.blockquote,{children:["\n",(0,i.jsx)(t.p,{children:"Update on August 2\non Near Wallet: after a month long dig into the Near Wallet codebase, we recognize the following issues that prevent us to build upon the Near Wallet but instead, start a new codebase of the Web App from scratch:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Chaotic state management: the Near Wallet has very tangled state management for requests and responese. As it will be more efficient to build the underlying redux dataflow from scratch."}),"\n",(0,i.jsx)(t.li,{children:'Different account system and different cryptographics: the NEAR blockchain uses Ed25519 for pretty much everything, while on Substrate, Sr25519 is used in default but there can be all kinds of cryptographic used in the Polkadot ecosystem. (i.e. Moonbeam). Moreover, NEAR is based on a human-readable fake AccountId that links to several cryptographic "keys" for accounts. These are factors that contribute to point 1 of why the Near wallet codebase has such a complicated Redux dataflow.'}),"\n",(0,i.jsx)(t.li,{children:'Loose Encoding on URL: as we stated above on "Requst Handling", we will build a byte percise(and efficient) version of the encoding to be sent between Dapp and Wallet as Substrate extrinsics can be very long on cross-chain communicattions.'}),"\n",(0,i.jsx)(t.li,{children:"Decentralziation: lots of functionalities of Near wallet relies on a closed-source centralied helper service. We don't want that."}),"\n",(0,i.jsx)(t.li,{children:"Extensibility: the network RPC is hardcoded into NEAR. Choko Wallets need to support a wide range of networks, while we will allow networks to customize their own request handling mechnisim, while have a set of functionalities by default. Such design will require weeks to peel off wallet logics away from the near codebase."}),"\n",(0,i.jsx)(t.li,{children:'Security: the near wallet does not require a user input password to safeguard the seed phrase. This can be considered "kind of" secure because of the AccountId system of Near(i.e. Keys are ephermeral, while a human readable AccountId like "alex.near" is presistent). However, this is not applicable to the Polkadot ecosystem. To change so, we would also have to completely peel away the private key management logic from the near codebase.'}),"\n",(0,i.jsx)(t.li,{children:"Frontend Framework: we decided to go with Next+Tailwind+Redux+TypeScript combo with good lint/test/build pipeline for better maintainablity. And avoid the messy codebase as the Near Wallet."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsxs)(t.a,{href:"https://github.com/choko-wallet/sdk/tree/master/packages/core/src",children:["LINK ",(0,i.jsx)(t.code,{children:"@choko-wallet/core"})]})," for all primitives to the wallet like cross-chain ",(0,i.jsx)(t.code,{children:"DAppDescriptor"}),", cross-chain ",(0,i.jsx)(t.code,{children:"UserAccount"})," that can be locked and typed with different cryptographic types etc."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsxs)(t.a,{href:"https://github.com/choko-wallet/sdk/tree/master/packages/known-networks/src",children:["LINK ",(0,i.jsx)(t.code,{children:"@choko-wallet/known-networks"})]})," for a list of known-networks from ",(0,i.jsx)(t.code,{children:"@polkadot/apps"}),";"]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsxs)(t.a,{href:"https://github.com/choko-wallet/sdk/tree/master/packages/request-handler/src",children:["LINK ",(0,i.jsx)(t.code,{children:"@choko-wallet/request-handler"})]})," for a extendable request handling that are byte precise and efficient on payload encoding;"]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsxs)(t.a,{href:"https://github.com/choko-wallet/sdk/tree/master/packages/sdk",children:["LINK ",(0,i.jsx)(t.code,{children:"@choko-wallet/sdk"})]})," for Dapps to integrate for account management in browsers and handle both local and remote requests;"]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"@choko-wallet/sdk-react"})," (To be made) to inject the SDK to React components for lifecycle management etc."]}),"\n",(0,i.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,i.jsx)(t.p,{children:"Mostly described above in the Overview section."}),"\n",(0,i.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Estimated Duration:"})," 3 months"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Full-Time Equivalent (FTE):"})," 5 FTE"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Costs:"})," $36,000"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-1",children:"Milestone 1"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated duration:"})," 1.5 months"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"})," 6 FTE"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"})," 36,000 USD"]}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0a."}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Apache 2.0"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0b."}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsxs)(t.td,{children:["We will provide both ",(0,i.jsx)(t.strong,{children:"inline documentation"})," of the code and a ",(0,i.jsx)(t.strong,{children:"live demo"}),". Documentation to SDK."]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0c."}),(0,i.jsx)(t.td,{children:"Testing Guide"}),(0,i.jsx)(t.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0d."}),(0,i.jsx)(t.td,{children:"Docker"}),(0,i.jsx)(t.td,{children:"A Dockerfile won't be much useful for a static web app. Therefore, we are not going to provide one for this milestone."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0e."}),(0,i.jsx)(t.td,{children:"Article"}),(0,i.jsxs)(t.td,{children:["We will publish an ",(0,i.jsx)(t.strong,{children:"article"})," that explains the concept of the Choko Wallet. More general-public-oriented version of what described in this application."]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"1."}),(0,i.jsx)(t.td,{children:"Reactjs WebApp"}),(0,i.jsxs)(t.td,{children:["import/create account (create 12 words seed phrase, encrypt with user-input password and store in browser localStorage, encrypted with cryptographic primitives from ",(0,i.jsx)(t.code,{children:"@skyekiwi/crypto"}),", make sure the user has writen down the seed by testing a randomly selected word i.e. ask user to input and validate word #7; import a seed phrase and encrypt with user-input password)",(0,i.jsx)("br",{}),(0,i.jsx)("br",{})," sign message/transaction",(0,i.jsx)("br",{}),(0,i.jsx)("br",{})," a almost blank dashboard but allow switching between networks (support all networks on ",(0,i.jsx)(t.code,{children:"@choko-wallet/known-networks"}),") and connect to a customized network provider ",(0,i.jsx)("br",{}),(0,i.jsx)("br",{})," setup-on-another-device(instruction and QR code generator), import from clear seed(a route to receive a ",(0,i.jsx)(t.em,{children:"clear"})," encoded seed pharse via URL and import into wallet), create wallet page(option to send a URL with a ",(0,i.jsx)(t.em,{children:"clear"})," seed phrase via email & warning banner when a wallet that had exposed a ",(0,i.jsx)(t.em,{children:"clear"})," seed phrase has more than $50 on the selected network)"]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"2."}),(0,i.jsx)(t.td,{children:"A Sample DApp"}),(0,i.jsxs)(t.td,{children:["A sample DApp created with ",(0,i.jsx)(t.code,{children:"@choko-wallet/sdk"})," to test with common functionalities."]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,i.jsx)(t.td,{children:"SDK"}),(0,i.jsxs)(t.td,{children:["For ",(0,i.jsx)(t.code,{children:"@choko-wallet/known-networks"})," will include a few popular Polkadot chains, ",(0,i.jsx)(t.code,{children:"@choko-wallet/request-handler"}),' will implements handler for "request for user public identity", "request to sign transaction", "request to sign message", "request to decrypt/encrypt message" (Note: encryption/decryption won\'t be a solution yet, see discussion above for details).']})]})]})]}),"\n",(0,i.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Allow Web2 login info to be mapped to Web3 address. This will be some complicated and hard tech to implement to preserve user privacy. Require deeper integration of the SkyeKiwi Network for privacy preserving smart contract calls."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"NFT integration - Integrate wallet support for popular NFT protocols in the Polkadot ecosystem and teleporting of NFT assets."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Allow connection to Ethereum. Research and implement ways to send Web3Js style transactions via the browser wallet."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Ledger support - for serious crypto users, while preserving the easy to use nature of the wallet."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Biometric support - encrypt the seed phrases with FaceId/TouchId etc with WebAuthn standard."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Port as mobile Apps - biometrics authentication will sure be there and security will be greatly enhanced."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"More face-to-face events features - i.e. genrate printable QR codes for Linkdrops to be distributed at event venues; location based events check-ins. Scan and validate tickets (as NFTs) at event venues."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Integrate social-recovery-pallet for an easy recovery process."}),"\n"]}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>r,x:()=>a});var n=s(96540);const i={},o=n.createContext(i);function r(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/05f401a8.f9e1983a.js b/assets/js/05f401a8.f9e1983a.js new file mode 100644 index 00000000000..2a596f3f448 --- /dev/null +++ b/assets/js/05f401a8.f9e1983a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[66106],{68647:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>n,toc:()=>c});const n=JSON.parse('{"id":"applications/choko_wallet","title":"Choko Wallet","description":"This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don\'t remove any of the mandatory parts presented in bold letters or as headlines! Lines starting with a > (such as this one) can be removed.","source":"@site/applications/choko_wallet.md","sourceDirName":"applications","slug":"/applications/choko_wallet","permalink":"/applications/choko_wallet","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/choko_wallet.md","tags":[],"version":"current","frontMatter":{}}');var i=s(74848),o=s(28453);const r={},a="Choko Wallet",l={},c=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1",id:"milestone-1",level:3},{value:"Future Plans",id:"future-plans",level:2}];function h(e){const t={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"choko-wallet",children:"Choko Wallet"})}),"\n",(0,i.jsxs)(t.blockquote,{children:["\n",(0,i.jsxs)(t.p,{children:["This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don't remove any of the mandatory parts presented in bold letters or as headlines! Lines starting with a ",(0,i.jsx)(t.code,{children:">"})," (such as this one) can be removed."]}),"\n",(0,i.jsxs)(t.p,{children:["See the ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/#pencil-process",children:"Grants Program Process"})," on how to submit a proposal."]}),"\n"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Team Name:"})," SkyeKiwi Team"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Payment Address:"})," 0x91029aBEb484a84D99c1C519C7A8A0cDB6B7c878 (USDC Preferred OR DAI)"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsxs)(t.strong,{children:[(0,i.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 3"]}),"\n"]}),"\n",(0,i.jsxs)(t.blockquote,{children:["\n",(0,i.jsxs)(t.p,{children:["\u26a0\ufe0f ",(0,i.jsx)(t.em,{children:"The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe."})]}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,i.jsx)(t.p,{children:"Choko Wallet is a user-friendly multi-chain crypto wallet for the Polkadot ecosystem. The Polkadot ecosystem has been known for its complicated nature to interact with."}),"\n",(0,i.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:'Like all crypto wallets, fund privacy and ease of use are usually two sides of a spectreum. Choko Wallet will be more lean towards the "ease of use" side and remain to be (99%) static web app.'}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Unlike most of the crypto wallets, Choko wallet is designed to be website-based which stores user private key encrypted on website localStorage. When DApps request for signature, the Dapp will redirect to the Choko Wallet web app and ask for user approval. Upon finish, the wallet web app will redirect back to the Dapp."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"The most confusion part of the Polkadot ecosystem for new comers is the amount of blockchains there are. The PolkadotJs App (dotapps.io) allow different teams to assign different theme color to their blockchain that greatly reduce confusion. Wallets in the Polkadot ecosystem should follow the same paradigm. Moreover, we should offload the burden for the end users to choose which blockchain back to Dapp developer so that the user can connect to the desired blockchain endpoint with zero configuration."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Another issue with all wallets is the lacking of good encryption/decryption features with the user's private key. (i.e. ",(0,i.jsx)(t.a,{href:"https://github.com/polkadot-js/common/pull/1331",children:"https://github.com/polkadot-js/common/pull/1331"}),") This feature is critical when Web3 is more privacy centric. It has been hard to be built because of different elliptic curve and encryption schema. We will make attempt to first adopt to the schema used by our own SkyeKiwi Network and try to generize it later."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,i.jsx)(t.p,{children:"Technology Stack: (Almost) static Web App built with React/Redux and PolkadotJs."}),"\n",(0,i.jsxs)(t.p,{children:["A PoC on the redirecting mechnisim is available ",(0,i.jsx)(t.a,{href:"https://github.com/RoyTimes/wallet-sandbox-demo",children:"here"}),"."]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Setup on Another Device via QR: generate a QR code that displays a ",(0,i.jsx)(t.em,{children:"plaintext"})," of the seed phrase and scan it on another device. Similar to Metamask."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Email Recovery/Create Via Email: have a centralized service to send an email to the user with a link that contains ",(0,i.jsx)(t.em,{children:"plaintext"}),' of the seed phrase to recover the seed phrase (i.e. Email saying "Please keep this email for recovery of your wallet. Click link: ',(0,i.jsx)(t.a,{href:"https://choko.app/recovery?11111aaaaaaa",children:"https://choko.app/recovery?11111aaaaaaa"}),'...... "). A banner with warning should be presented when the user has more than $50 in the wallet.']}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:['"Linkdrop": a feature inspired by other ecosystems. A Dapp developer might initialize a Linkdrop vault of some tokens as gas fee for their seed users. (i.e. Having 10 DOT for the first 100 signup users). A pallet might be required, so we will build a pallet on SkyeKiwi Network first to test things out. The wallet will provide the developer with a simple interface to generate a linkdrop vault and generate a linkdrop link. (i.e. ',(0,i.jsx)(t.a,{href:"https://choko.app/claim?vault=1&authorization=0x8dad7777",children:"https://choko.app/claim?vault=1&authorization=0x8dad7777"}),'..."). The developer can distribute the link drop link to users. When a user click the link, it will guide the user to create a new seed phrase and then have the gas fee token deposited to the wallet.']}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Encryption/Decryption: A few solutions avaliable: 1. allow encryption/decryption on Sr25519 key agreement. Drawback would be that the composed message would be hard to process outside the wallet. 2. Find a method to calculate a Curve25519 public key from a Sr25519 public key. We are not hardcore cryptographer and has no intention of implementing this ourselves. Looking for a more expertised answer to whether this is possible or if there is an implementation to it. Such conversion would greatly increase compatbility with popular Curve25519 based encryption softwares. 3. Worst case senario: ask users to register a Curve25519 public key on account creation. This is horrible but allow the encryption schema to be further compatible with other ECs like secp256k1. Would love to have a discussion on this."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Request Handling: there will be two types of requests - local requests that should be resolved inside the Dapps and remote requests that need to be redirected to the wallet web app. For usual wallets, this is somewhat implicitly assumed (like Web3js and Metamask). However, for a website based wallets, these two types of requests need to be dramatically different to be handled to prevent constant website redirecting. Moreover, in lack of proper RPC between DApp and browser extensions, requests and response payloads are encoded in the URL with plaintext. Therefore, in response to all these differences, we will create a set of bytes precises encoding schema and segregated request handling strategies. The wallet app will only handle requests that require the usage of user's private keys and do no load the private key unless a password is authenticated. Check out PoC implementations here ",(0,i.jsx)(t.a,{href:"https://github.com/choko-wallet/sdk/blob/master/packages/request-handler/src/signMessage.ts",children:"Link"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["Mockups:\n",(0,i.jsx)(t.a,{href:"https://imgtu.com/i/jYkTaT",children:(0,i.jsx)(t.img,{src:"https://s1.ax1x.com/2022/07/04/jYkTaT.png",alt:"jYkTaT.png"})}),"\n",(0,i.jsx)(t.a,{href:"https://imgtu.com/i/jYkLRJ",children:(0,i.jsx)(t.img,{src:"https://s1.ax1x.com/2022/07/04/jYkLRJ.png",alt:"jYkLRJ.png"})})]}),"\n",(0,i.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Choko Wallet provides a simple and intuitive interface for user to interact with blockchains/Dapps in the Polkadot ecosystem."}),"\n",(0,i.jsx)(t.li,{children:"End users who are less-educated about the Polkadot ecosystem or blockchain/crypto in general."}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,i.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Song Zhou"}),"\n",(0,i.jsx)(t.li,{children:"Zoe Sun"}),"\n",(0,i.jsx)(t.li,{children:"Fontend Developer team at SkyeKiwi"}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Name:"})," Song Zhou"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Email:"})," ",(0,i.jsx)(t.a,{href:"mailto:song.zhou@skye.kiwi",children:"song.zhou@skye.kiwi"})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Website:"})," ",(0,i.jsx)(t.a,{href:"https://skye.kiwi",children:"https://skye.kiwi"})]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,i.jsx)(t.p,{children:"None"}),"\n",(0,i.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,i.jsxs)(t.p,{children:["We have applied and deliverd all milestones of the ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/pull/553",children:"SkyeKiwi Protocol"})," and built the SkyeKiwi Network based on SkyeKiwi Protocol as a privacy layer for Web3 featuring interoprabl, multi-shard, multi-vm private smart contract execution as a part of the Substrate Builder Program. We have a track record of engineering complicated system with high quality. The Choko Wallet is a critical component for the adoption of the SkyeKiwi Network (and the SkyeKiwi Protocol), from the encryption/decryption functionalities of the network. More discussed in future plan section."]}),"\n",(0,i.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://github.com/skyekiwi/skyekiwi-network",children:"https://github.com/skyekiwi/skyekiwi-network"})," - Main repo for the SkyeKiwi Network"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://github.com/skyekiwi/skyekiwi-protocol",children:"https://github.com/skyekiwi/skyekiwi-protocol"})," - TypeScript implementation of the SkyeKiwi Protocol"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://github.com/skyekiwi/kiwi-contract",children:"https://github.com/skyekiwi/kiwi-contract"})," - Smart contract toolkit for submitting smart contract on SkyeKiwi Network. ",(0,i.jsx)(t.a,{href:"https://docs.skye.kiwi/docs/quick-start/deploy",children:"Tutorial"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,i.jsxs)(t.p,{children:["The project is mostly front-end work, except for the mechism for cross-browser tab communication from the Dapp and wallet. Therefore, so far, we have only created a simple sandbox to demostrate the viability of such communication ",(0,i.jsx)(t.a,{href:"https://github.com/RoyTimes/wallet-sandbox-demo",children:"here"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:["Moreover, the ",(0,i.jsx)(t.a,{href:"https://github.com/near/near-wallet",children:"Near Wallet"})," (an Apache2.0 or MIT licensed open source software) seem to be a good base of development for Choko Wallet. We will fork the repo and do a complete overhaul to better fit the needs of the Polkadot ecosystem."]}),"\n",(0,i.jsxs)(t.blockquote,{children:["\n",(0,i.jsx)(t.p,{children:"Update on August 2\non Near Wallet: after a month long dig into the Near Wallet codebase, we recognize the following issues that prevent us to build upon the Near Wallet but instead, start a new codebase of the Web App from scratch:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Chaotic state management: the Near Wallet has very tangled state management for requests and responese. As it will be more efficient to build the underlying redux dataflow from scratch."}),"\n",(0,i.jsx)(t.li,{children:'Different account system and different cryptographics: the NEAR blockchain uses Ed25519 for pretty much everything, while on Substrate, Sr25519 is used in default but there can be all kinds of cryptographic used in the Polkadot ecosystem. (i.e. Moonbeam). Moreover, NEAR is based on a human-readable fake AccountId that links to several cryptographic "keys" for accounts. These are factors that contribute to point 1 of why the Near wallet codebase has such a complicated Redux dataflow.'}),"\n",(0,i.jsx)(t.li,{children:'Loose Encoding on URL: as we stated above on "Requst Handling", we will build a byte percise(and efficient) version of the encoding to be sent between Dapp and Wallet as Substrate extrinsics can be very long on cross-chain communicattions.'}),"\n",(0,i.jsx)(t.li,{children:"Decentralziation: lots of functionalities of Near wallet relies on a closed-source centralied helper service. We don't want that."}),"\n",(0,i.jsx)(t.li,{children:"Extensibility: the network RPC is hardcoded into NEAR. Choko Wallets need to support a wide range of networks, while we will allow networks to customize their own request handling mechnisim, while have a set of functionalities by default. Such design will require weeks to peel off wallet logics away from the near codebase."}),"\n",(0,i.jsx)(t.li,{children:'Security: the near wallet does not require a user input password to safeguard the seed phrase. This can be considered "kind of" secure because of the AccountId system of Near(i.e. Keys are ephermeral, while a human readable AccountId like "alex.near" is presistent). However, this is not applicable to the Polkadot ecosystem. To change so, we would also have to completely peel away the private key management logic from the near codebase.'}),"\n",(0,i.jsx)(t.li,{children:"Frontend Framework: we decided to go with Next+Tailwind+Redux+TypeScript combo with good lint/test/build pipeline for better maintainablity. And avoid the messy codebase as the Near Wallet."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsxs)(t.a,{href:"https://github.com/choko-wallet/sdk/tree/master/packages/core/src",children:["LINK ",(0,i.jsx)(t.code,{children:"@choko-wallet/core"})]})," for all primitives to the wallet like cross-chain ",(0,i.jsx)(t.code,{children:"DAppDescriptor"}),", cross-chain ",(0,i.jsx)(t.code,{children:"UserAccount"})," that can be locked and typed with different cryptographic types etc."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsxs)(t.a,{href:"https://github.com/choko-wallet/sdk/tree/master/packages/known-networks/src",children:["LINK ",(0,i.jsx)(t.code,{children:"@choko-wallet/known-networks"})]})," for a list of known-networks from ",(0,i.jsx)(t.code,{children:"@polkadot/apps"}),";"]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsxs)(t.a,{href:"https://github.com/choko-wallet/sdk/tree/master/packages/request-handler/src",children:["LINK ",(0,i.jsx)(t.code,{children:"@choko-wallet/request-handler"})]})," for a extendable request handling that are byte precise and efficient on payload encoding;"]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsxs)(t.a,{href:"https://github.com/choko-wallet/sdk/tree/master/packages/sdk",children:["LINK ",(0,i.jsx)(t.code,{children:"@choko-wallet/sdk"})]})," for Dapps to integrate for account management in browsers and handle both local and remote requests;"]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"@choko-wallet/sdk-react"})," (To be made) to inject the SDK to React components for lifecycle management etc."]}),"\n",(0,i.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,i.jsx)(t.p,{children:"Mostly described above in the Overview section."}),"\n",(0,i.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Estimated Duration:"})," 3 months"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Full-Time Equivalent (FTE):"})," 5 FTE"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Costs:"})," $36,000"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-1",children:"Milestone 1"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated duration:"})," 1.5 months"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"})," 6 FTE"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"})," 36,000 USD"]}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0a."}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Apache 2.0"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0b."}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsxs)(t.td,{children:["We will provide both ",(0,i.jsx)(t.strong,{children:"inline documentation"})," of the code and a ",(0,i.jsx)(t.strong,{children:"live demo"}),". Documentation to SDK."]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0c."}),(0,i.jsx)(t.td,{children:"Testing Guide"}),(0,i.jsx)(t.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0d."}),(0,i.jsx)(t.td,{children:"Docker"}),(0,i.jsx)(t.td,{children:"A Dockerfile won't be much useful for a static web app. Therefore, we are not going to provide one for this milestone."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0e."}),(0,i.jsx)(t.td,{children:"Article"}),(0,i.jsxs)(t.td,{children:["We will publish an ",(0,i.jsx)(t.strong,{children:"article"})," that explains the concept of the Choko Wallet. More general-public-oriented version of what described in this application."]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"1."}),(0,i.jsx)(t.td,{children:"Reactjs WebApp"}),(0,i.jsxs)(t.td,{children:["import/create account (create 12 words seed phrase, encrypt with user-input password and store in browser localStorage, encrypted with cryptographic primitives from ",(0,i.jsx)(t.code,{children:"@skyekiwi/crypto"}),", make sure the user has writen down the seed by testing a randomly selected word i.e. ask user to input and validate word #7; import a seed phrase and encrypt with user-input password)",(0,i.jsx)("br",{}),(0,i.jsx)("br",{})," sign message/transaction",(0,i.jsx)("br",{}),(0,i.jsx)("br",{})," a almost blank dashboard but allow switching between networks (support all networks on ",(0,i.jsx)(t.code,{children:"@choko-wallet/known-networks"}),") and connect to a customized network provider ",(0,i.jsx)("br",{}),(0,i.jsx)("br",{})," setup-on-another-device(instruction and QR code generator), import from clear seed(a route to receive a ",(0,i.jsx)(t.em,{children:"clear"})," encoded seed pharse via URL and import into wallet), create wallet page(option to send a URL with a ",(0,i.jsx)(t.em,{children:"clear"})," seed phrase via email & warning banner when a wallet that had exposed a ",(0,i.jsx)(t.em,{children:"clear"})," seed phrase has more than $50 on the selected network)"]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"2."}),(0,i.jsx)(t.td,{children:"A Sample DApp"}),(0,i.jsxs)(t.td,{children:["A sample DApp created with ",(0,i.jsx)(t.code,{children:"@choko-wallet/sdk"})," to test with common functionalities."]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,i.jsx)(t.td,{children:"SDK"}),(0,i.jsxs)(t.td,{children:["For ",(0,i.jsx)(t.code,{children:"@choko-wallet/known-networks"})," will include a few popular Polkadot chains, ",(0,i.jsx)(t.code,{children:"@choko-wallet/request-handler"}),' will implements handler for "request for user public identity", "request to sign transaction", "request to sign message", "request to decrypt/encrypt message" (Note: encryption/decryption won\'t be a solution yet, see discussion above for details).']})]})]})]}),"\n",(0,i.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Allow Web2 login info to be mapped to Web3 address. This will be some complicated and hard tech to implement to preserve user privacy. Require deeper integration of the SkyeKiwi Network for privacy preserving smart contract calls."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"NFT integration - Integrate wallet support for popular NFT protocols in the Polkadot ecosystem and teleporting of NFT assets."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Allow connection to Ethereum. Research and implement ways to send Web3Js style transactions via the browser wallet."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Ledger support - for serious crypto users, while preserving the easy to use nature of the wallet."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Biometric support - encrypt the seed phrases with FaceId/TouchId etc with WebAuthn standard."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Port as mobile Apps - biometrics authentication will sure be there and security will be greatly enhanced."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"More face-to-face events features - i.e. genrate printable QR codes for Linkdrops to be distributed at event venues; location based events check-ins. Scan and validate tickets (as NFTs) at event venues."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Integrate social-recovery-pallet for an easy recovery process."}),"\n"]}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>r,x:()=>a});var n=s(96540);const i={},o=n.createContext(i);function r(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/05f68587.42490934.js b/assets/js/05f68587.42490934.js deleted file mode 100644 index c3394ef5921..00000000000 --- a/assets/js/05f68587.42490934.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[63412],{26338:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>r,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"applications/AgriDot","title":"AgriDot - Web3 application for farmers","description":"- Team Name: AgriDot","source":"@site/applications/AgriDot.md","sourceDirName":"applications","slug":"/applications/AgriDot","permalink":"/applications/AgriDot","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/AgriDot.md","tags":[],"version":"current","frontMatter":{}}');var a=t(74848),s=t(28453);const r={},o="AgriDot - Web3 application for farmers",l={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Project Details",id:"project-details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Related work",id:"related-work",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team Github Profiles",id:"team-github-profiles",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Advisors",id:"advisors",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview",level:3},{value:"Milestone 1 - Working Web3 solution - AgriDot",id:"milestone-1---working-web3-solution---agridot",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Referral Program \ud83d\udcb0",id:"referral-program-moneybag",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function h(e){const i={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.header,{children:(0,a.jsx)(i.h1,{id:"agridot---web3-application-for-farmers",children:"AgriDot - Web3 application for farmers"})}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Team Name:"})," AgriDot"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Payment Details:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"DOT"}),": 1ukfa64f2WxSvJy8zwNC2RpSiajt2X1hsYQqBHmM9DTjT8R"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Payment"}),": Fiat payment - Details will be provided if the proposal gets accepted."]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsxs)(i.strong,{children:[(0,a.jsx)(i.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 1 \ud83d\udc23"]}),"\n"]}),"\n",(0,a.jsxs)(i.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,a.jsxs)("div",{align:"center",children:[(0,a.jsx)("img",{width:"400",alt:"AgriDot",src:"https://github.com/user-attachments/assets/fb233743-eb46-4015-8fcd-e6e06513dce4"}),(0,a.jsx)("h4",{align:"center",children:" Empowering farmers and beekeepers with blockchain-based NFT field management and community-driven knowledge sharing. "}),(0,a.jsx)("p",{align:"center"}),(0,a.jsx)("h1",{})]}),"\n",(0,a.jsx)(i.p,{children:"AgriDot is an innovative application tailored for farmers and beekeepers, leveraging blockchain technology to enhance agricultural management, increase farmer awareness, and foster community collaboration. The platform enables users many benefits such as:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"Creating and managing their fields as NFTs (Publicly/Privately)"}),"\n",(0,a.jsx)(i.li,{children:"Field weather monitoring"}),"\n",(0,a.jsx)(i.li,{children:"Pest tracking (Community shared)"}),"\n",(0,a.jsx)(i.li,{children:"Sharing valuable agricultural knowledge through guides (Community shared)"}),"\n",(0,a.jsx)(i.li,{children:"Crop origin proofs (For public fields)"}),"\n"]}),"\n",(0,a.jsx)(i.p,{children:"Both Pests and Guides will also be NFT-based, minted into sovereign collections of AgriDot, moderated by our team. Farmers will be able to donate to other farmers if their Pest report or Guide proves to be useful."}),"\n",(0,a.jsx)(i.p,{children:"AgriDot will be fully deployed on Polkadot, fully open source, transparent, and common good, eliminating the need for any databases storing user data. By introducing a novel use case and engaging a unique user base, this project adds to the diversity and utility of the Polkadot ecosystem."}),"\n",(0,a.jsx)(i.h3,{id:"project-details",children:"Project Details"}),"\n",(0,a.jsx)(i.p,{children:"This proposal presents a solution for integrating an agricultural use case into Polkadot. Currently, there are no other agricultural solutions on Polkadot for comparison. This solution fills a gap by introducing new niche use cases and a niche user base to Polkadot. The solution allows farmers to outsource useful information about their fields, about nearby pests and learn new practices and tips through guides."}),"\n",(0,a.jsx)(i.p,{children:"What will Farmers be able to do in the early stage:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsxs)(i.li,{children:["Create a Public/Private field as NFT.","\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"Public fields are publicly and transparently displayed on Blockchain (NFT explorers are able to easily display them), allowing for crop origin proofs, that farmers can distribute with their crops (Either place them on their products or show them to their business partners)."}),"\n",(0,a.jsx)(i.li,{children:"Private fields are privately created with NFT metadata hashed by SHA256 (NFT explorers are unable to display NFT metadata, it can only be seen through AgriDot by field owner). This option is available for farmers that want to use application privately."}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(i.li,{children:"See forecast information for any added field (current, hourly & long-term)."}),"\n",(0,a.jsx)(i.li,{children:"Add pest information for other Farmers with nearby fields."}),"\n",(0,a.jsx)(i.li,{children:"See pests, that occurred in nearby locations (Only displaying how far from the nearest field owned by the Farmer wanting to see this information (To keep privacy for private field owners). The maximal search distance can be customized by Farmer."}),"\n",(0,a.jsx)(i.li,{children:"Farmers can reward farmers, who publish useful pest information by voluntary donation."}),"\n",(0,a.jsx)(i.li,{children:"Add useful agricultural guides (Useful practices, crop cultivation & more)."}),"\n",(0,a.jsx)(i.li,{children:"See agricultural guides."}),"\n",(0,a.jsx)(i.li,{children:'Farmers can reward farmers, who publish useful guides by giving them "like" by voluntary donation. The guides have a simple ranking system and farmers can sort guides by most liked or most recent.'}),"\n",(0,a.jsx)(i.li,{children:"Farmers can report malicious guides and moderators (Our team) will be able to remove them (Burn the asset on behalf of AgriDot, as all guides and pests are minted under a unified collection (one collection for all pests and one collection for all guides))."}),"\n",(0,a.jsx)(i.li,{children:"Farmers can create crop origin proofs by creating crop NFT that is associated with public field. These proofs can help farmers build transparency and trust from their business partners."}),"\n"]}),"\n",(0,a.jsx)(i.p,{children:"Application advantages compared to traditional Web2 agriculture applications:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"No database with personal details. Everything is stored on the Blockchain transparently."}),"\n",(0,a.jsx)(i.li,{children:"Verifiable & immutable crop origin proofs."}),"\n",(0,a.jsx)(i.li,{children:"Simple, yet useful blockchain-based Pest report system."}),"\n"]}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.strong,{children:"UI design proposal"})}),"\n",(0,a.jsx)(i.p,{children:"The UI of the application is designed to be simple to use and to abstract complexity anywhere possible to provide smooth UX for Farmers. Everything Blockchain/Polkadot related contains simple to understand explanation/guide Farmers can easily follow. Below is an example of a login screen & field overview screen."}),"\n",(0,a.jsx)("img",{width:"609",alt:"UI",src:"https://github.com/user-attachments/assets/67fbfeaf-7017-4de6-b4a9-274c3e934e57"}),"\n",(0,a.jsxs)(i.p,{children:["We have prepared design mockups with simple workflows for the Web3 version in ",(0,a.jsx)(i.a,{href:"https://www.figma.com/design/WR2ZtOiYJcq9cBZvRzH4l9/AgriDot",children:"Figma - here"}),". This Figma project also contains the design of our ",(0,a.jsx)(i.a,{href:"https://github.com/kacena123/aurora-borealis",children:"current PoC"})," Web2 solution for comparison. We believe, that the improvement in UI is substantial."]}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.strong,{children:"Data Models"})}),"\n",(0,a.jsxs)(i.p,{children:["The application utilizes ",(0,a.jsx)(i.a,{href:"https://parachains.info/details/assethub",children:"Kusama Asset Hub"}),' as the chain for NFTs (As minting an NFT is a matter of cents on Kusama) and pallet called "NFTs" for concrete operations with collections and NFTs. To query the metadata of NFTs associated with the wallet address of concrete user application uses ',(0,a.jsx)(i.a,{href:"https://parachains.info/details/subsquid",children:"Subsquid indexer"}),". The queries for ",(0,a.jsx)(i.a,{href:"https://parachains.info/details/subsquid",children:"Subsquid indexer"})," are created by Kodadot's package called ",(0,a.jsx)(i.a,{href:"https://github.com/kodadot/uniquery",children:"Uniquery"}),"."]}),"\n",(0,a.jsx)(i.p,{children:"Below we demonstrate a simple use case of application cold startup, field creation, and crop origin proof creation."}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{src:"https://github.com/user-attachments/assets/ac82d2a0-76db-4789-beb3-4bf7af495b02",alt:"agridot field and crop sequential"})}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.strong,{children:"Technology stack"})}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"React native"}),"\n",(0,a.jsx)(i.li,{children:"PolkadotJS"}),"\n",(0,a.jsx)(i.li,{children:"NodeJS"}),"\n",(0,a.jsx)(i.li,{children:"Typescript"}),"\n",(0,a.jsx)(i.li,{children:"Subsquid"}),"\n",(0,a.jsx)(i.li,{children:"Kodadot Uniquery"}),"\n",(0,a.jsx)(i.li,{children:"NFTs pallet"}),"\n"]}),"\n",(0,a.jsx)(i.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,a.jsx)(i.p,{children:"Currently, there are no similar projects within the Substrate/Polkadot/Kusama ecosystem that focus on agriculture and beekeeping using blockchain technology. This distinctiveness positions AgriDot as a pioneering project in this domain."}),"\n",(0,a.jsx)(i.p,{children:"There are some agricultural projects in other blockchain ecosystems, however, none have successfully integrated the unique features of NFTs and decentralized community collaboration in the way AgriDot aims to achieve."}),"\n",(0,a.jsx)(i.p,{children:"While the main target audience of this project are Farmers and Beekeepers, other users may find the availability of useful Guides and even Pest reports (If they have small fields at home) very useful. While benefits, that AgriDot gains by enhancing Blockchain technology are substantial, the farmers are often not that technical and need to be shown, that the blockchain can be useful for them. This is why the application will notify them, that the data is transparently stored on the Polkadot blockchain and that the application does not collect nor will need to collect any data from them."}),"\n",(0,a.jsx)(i.p,{children:"The application bridges an important gap in niche user base and niche use case, that has not yet been explored on Polkadot by anyone."}),"\n",(0,a.jsx)(i.p,{children:"We have created a survey that was sent to 300 small and medium Agricultural businesses in Slovakia to gain insight on whether Farmers will be open to such an application and if so, if they will be willing to accept, that it will use Blockchain to enhance transparency. We received an overwhelming amount of responses from 167 farmers, that an application like this is very needed and they also provided us with feedback as to what should the application contain. We share the experiment results below."}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{src:"https://github.com/user-attachments/assets/f42530a8-2bdc-458d-8ebd-6302f3e47316",alt:"chart1"})}),"\n",(0,a.jsx)(i.p,{children:"First, we asked Farmers which listed features would they like to see in the ideal Agricultural application. The most useful for them is by far the weather monitoring. They also highly ranked Pest information and crop origin proofs. Based on this we then designed the application to fit most of the Farmer's needs."}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{src:"https://github.com/user-attachments/assets/441dfc2c-9675-4cf6-bfab-bf67e0be4b38",alt:"chart2"})}),"\n",(0,a.jsx)(i.p,{children:"In the second question, we asked Farmers if they would be open to Blockchain-based application that would enhance transparency of how their data is handled. More than 120 farmers stated, that they are open to this innovation and the rest of the farmers stated, that they are not open or that they are not sure which means, that the Farmers, that stated that they are not sure could change their mind once they try the application."}),"\n",(0,a.jsx)(i.h3,{id:"related-work",children:"Related work"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.strong,{children:"AgriApp"})}),"\n",(0,a.jsxs)(i.p,{children:["AgriApp is an Indian Web2 application for farmers - ",(0,a.jsx)(i.a,{href:"https://agriapp.com/",children:"Web"}),", ",(0,a.jsx)(i.a,{href:"https://play.google.com/store/apps/details?id=com.criyagen&hl=en_US",children:"Google Play"}),". It offers a range of features, including crop monitoring, advice on fertilization, irrigation, pest control, soil analysis, and weather forecasting. It also includes tools for managing work schedules, planning maintenance, and tracking costs and revenues. Additionally, the app features a store where users can purchase various pesticide products and fertilizers. Some advanced features are available only in paid versions of the app, which entails additional costs. Given the app's extensive functionality, it may be complex for new users, and fully utilizing its features may require some time to learn compared to AgriDot which is designed to focus on user-friendliness, meaning that even new users can quickly navigate and use the application without extensive training. Another downside is, that AgriApp does not have open-source code and users are unable to verify if their data is not used for malicious practices or sold compared to AgriDot which doesn't store any user data and has fully open-source code."]}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.strong,{children:"Agrichain"})}),"\n",(0,a.jsxs)(i.p,{children:["The AgriChain Web3 application is a tool aimed at improving transparency and efficiency in the agricultural sector through blockchain technology - ",(0,a.jsx)(i.a,{href:"https://agrichain.com/",children:"Web"}),", ",(0,a.jsx)(i.a,{href:"https://play.google.com/store/apps/details?id=com.agrichain&hl=sk",children:"Google Play"}),", ",(0,a.jsx)(i.a,{href:"https://link.springer.com/chapter/10.1007/978-3-030-96527-3_1",children:"Research article"}),". Its main advantage is the ability to track every stage of the supply chain, which allows accurate recording of transactions and the origin of products. In this way, the application tries to increase trust in the quality and safety of food.\nAgriChain's user interface is intuitive and easy to use, allowing even less experienced users to effectively manage their operations. The application also provides analytical tools to optimize production and manage inventory and payments through smart contracts.\nAgrichain primarily targets large farmers and large supply chains. Smaller farmers and beekeepers may find it much more difficult and costly to implement AgriChain into their production. Agrichain places great emphasis on supply chain efficiency and transparency and focuses mainly on management, while not supporting other functions such as weather, pest monitoring and also community functions between individual farmers compared to AgriDot."]}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.strong,{children:"AgriDigital"})}),"\n",(0,a.jsxs)(i.p,{children:["AgriDigital Onfarm is a Web3 application designed for modern farmers that simplifies and optimizes the management of agricultural production - ",(0,a.jsx)(i.a,{href:"https://www.agridigital.io/",children:"Web"}),", ",(0,a.jsx)(i.a,{href:"https://play.google.com/store/apps/details?id=io.waypath.app&hl=sk&gl=US",children:"Google Play"}),". It is part of the AgriDigital ecosystem, which focuses on the digitization and streamlining of Agricultural business. The application allows farmers to manage and monitor the warehouse and also manage the sale of stocks of cultivated crops. It enables detailed management of landlord distributions and profit shares, thus ensuring transparency in the distribution of income. AgriDigital Onfarm generates detailed reports on total yield per specific field, as well as gross yield at the farm and individual field levels, enabling performance analysis at various levels. It has an intuitive interface, which makes it easy to use even for less technical users. Its main goal is to increase the efficiency and performance of farms using analytical tools. The main downside of AgriDigital compared to AgriDot is, that AgriDigital is not available in all countries and its services are not free. The AgriDigital application focuses more on managing crop sales and farmer finances. It does not offer functionality such as weather monitoring, or pest control and does not support a community system."]}),"\n",(0,a.jsxs)(i.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,a.jsx)(i.h3,{id:"team-members",children:"Team members"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"Katar\xedna Valov\xe1 - Core developer, Master's degree student Faculty of Informatics and Information Technologies STU in Bratislava, Slovakia"}),"\n"]}),"\n",(0,a.jsx)(i.h3,{id:"contact",children:"Contact"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Contact Name:"})," Katar\xedna Valov\xe1"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Contact Email:"})," ",(0,a.jsx)(i.a,{href:"mailto:valova.katarin@gmail.com",children:"valova.katarin@gmail.com"})]}),"\n"]}),"\n",(0,a.jsx)(i.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Registered Address:"})," Sto\u0161ick\xe1 472, Liptovsk\xfd Mikul\xe1\u0161 03104, Slovak Republic"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Registered Legal Entity:"})," Katar\xedna Valov\xe1"]}),"\n"]}),"\n",(0,a.jsx)(i.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,a.jsxs)(i.p,{children:["Katar\xedna is studying Master's degree at the Faculty of Informatics and Information Technologies STU in Bratislava, her Bachelor's thesis was about creating application meant to ease farmers' lives by providing them key information about their fields and pests. Katar\xedna was recently introduced to Web3 by her new university Master's thesis supervisor ",(0,a.jsx)(i.a,{href:"https://github.com/dudo50",children:"Du\u0161an"}),". She found out, that she is very passionate about transforming Web2 applications into Web3 applications, making them much less resource-dependent and more transparent. Katar\xedna found passion in writing research articles about this topic and participated in the local university conference. Katar\xedna also sees this as an opportunity to introduce a new niche use case to Polkadot and she is very excited to explore this ecosystem further and expose it to farmers."]}),"\n",(0,a.jsx)(i.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:(0,a.jsx)(i.a,{href:"https://github.com/kacena123/aurora-borealis",children:"https://github.com/kacena123/aurora-borealis"})}),"\n"]}),"\n",(0,a.jsx)(i.h3,{id:"team-github-profiles",children:"Team Github Profiles"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:(0,a.jsx)(i.a,{href:"https://github.com/kacena123",children:"https://github.com/kacena123"})}),"\n"]}),"\n",(0,a.jsx)(i.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:(0,a.jsx)(i.a,{href:"https://www.linkedin.com/in/katka-val/",children:"https://www.linkedin.com/in/katka-val/"})}),"\n"]}),"\n",(0,a.jsx)(i.h3,{id:"advisors",children:"Advisors"}),"\n",(0,a.jsx)(i.p,{children:"Ecosystem developers who agreed to provide advisory help during the project implementation phase:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"Dudo50 founder of ParaSpell (Interoperability solutions)"}),"\n"]}),"\n",(0,a.jsxs)(i.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,a.jsxs)(i.p,{children:["Currently, there is a PoC called ",(0,a.jsx)(i.a,{href:"https://github.com/kacena123/aurora-borealis",children:"Aurora Borealis"})," developed and ready to be used as a Web2 application in Kotlin. The enhanced version will be programmed in a more widely used React Native framework, and have a complete design overhaul and Web3 migration."]}),"\n",(0,a.jsxs)(i.p,{children:["We have created Figma mockups of how would this Web2 to Web3 migration look. They were mentioned in the project details but we will link them here too - ",(0,a.jsx)(i.a,{href:"https://www.figma.com/design/WR2ZtOiYJcq9cBZvRzH4l9/AgriDot",children:"figma link"}),"."]}),"\n",(0,a.jsxs)(i.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,a.jsx)(i.h3,{id:"overview",children:"Overview"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Total Estimated Duration:"})," 4 months"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Full-Time Equivalent (FTE):"})," 1"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Total Costs:"})," 10,000 USD"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"DOT %:"})," 50%"]}),"\n"]}),"\n",(0,a.jsx)(i.h3,{id:"milestone-1---working-web3-solution---agridot",children:"Milestone 1 - Working Web3 solution - AgriDot"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Estimated duration:"})," 4 month"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"FTE:"})," 1"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Costs:"})," 10,000 USD"]}),"\n"]}),"\n",(0,a.jsxs)(i.table,{children:[(0,a.jsx)(i.thead,{children:(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.th,{style:{textAlign:"right"},children:"Number"}),(0,a.jsx)(i.th,{children:"Deliverable"}),(0,a.jsx)(i.th,{children:"Specification"})]})}),(0,a.jsxs)(i.tbody,{children:[(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:(0,a.jsx)(i.strong,{children:"0a."})}),(0,a.jsx)(i.td,{children:"License"}),(0,a.jsx)(i.td,{children:"MIT"})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:(0,a.jsx)(i.strong,{children:"0b."})}),(0,a.jsx)(i.td,{children:"Documentation"}),(0,a.jsxs)(i.td,{children:["We will provide both ",(0,a.jsx)(i.strong,{children:"inline documentation"})," of the code and a basic ",(0,a.jsx)(i.strong,{children:"tutorial"})," on how to interact with the application from registration to interaction with the blockchain."]})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:(0,a.jsx)(i.strong,{children:"0c."})}),(0,a.jsx)(i.td,{children:"Testing and Testing Guide"}),(0,a.jsx)(i.td,{children:"We will provide unit tests for core application functionality. Guide on how to launch these tests will be mentioned in the README.md"})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:(0,a.jsx)(i.strong,{children:"0d."})}),(0,a.jsx)(i.td,{children:"Docker"}),(0,a.jsx)(i.td,{children:"We will provide a docker file that will let you try all the implemented functionality mentioned in the milestone description."})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"0e."}),(0,a.jsx)(i.td,{children:"Article"}),(0,a.jsxs)(i.td,{children:["We will provide a summary article that will mention all the innovations brought during the development of AgriDot. This article will be published on ",(0,a.jsx)(i.a,{href:"https://medium.com/",children:"Medium"}),"."]})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"1.a"}),(0,a.jsx)(i.td,{children:"Fields as NFTs (Private)"}),(0,a.jsxs)(i.td,{children:['We will implement functionality that allows farmers to mint their fields as NFTs (via "',(0,a.jsx)(i.a,{href:"https://wiki.polkadot.network/docs/learn-nft-pallets#nfts-pallet",children:"NFTs"}),'" pallet) in a secure, hashed way (in-app hashed by AgriDot key phrase (each NFT will be checked for the correspondation between signed wallet address and owner of NFT before being decoded and displayed (as additional protection step))) so only AgriDot will be able to decode them and display them to farmers who own them.']})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"1.b"}),(0,a.jsx)(i.td,{children:"Fields as NFTs (Public)"}),(0,a.jsxs)(i.td,{children:['We will implement functionality that allows farmers to mint their fields (via "',(0,a.jsx)(i.a,{href:"https://wiki.polkadot.network/docs/learn-nft-pallets#nfts-pallet",children:"NFTs"}),'" pallet) in a public way, so any NFT explorer will be able to display them (NFTs will have a standard format (name, image, metadata(containing field coordinates) )). These fields will then be able to be used with "4. Crop origin proofs" allowing farmers to create a proof of crop origin that will be linked to their public field.']})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"1.c"}),(0,a.jsx)(i.td,{children:"See the weather for your NFT fields"}),(0,a.jsxs)(i.td,{children:["We will implement functionality that lets you query the coordinates of your NFT fields and display weather for the upcoming period (This feature will use ",(0,a.jsx)(i.a,{href:"https://github.com/kodadot/uniquery",children:"Kodadot uniquery"})," package for creating queries that will be used with ",(0,a.jsx)(i.a,{href:"https://www.sqd.dev/",children:"Subsquid indexer"}),". Weather for farmer's NFTs will be queried from ",(0,a.jsx)(i.a,{href:"https://open-meteo.com/",children:"Open-Meteo"})," open-source API (or else if found better))"]})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"2.a"}),(0,a.jsx)(i.td,{children:"Pests as NFTs"}),(0,a.jsxs)(i.td,{children:['We will implement Pest functionality. Pests will be minted to a unified collection (via "',(0,a.jsx)(i.a,{href:"https://wiki.polkadot.network/docs/learn-nft-pallets#nfts-pallet",children:"NFTs"}),'" pallet), with coordination of the Field where it appeared (Coordinate will be private (Hashed in-app by AgriDot key phrase)), farmers will only know, that a certain Pest appeared X km away from their field (They will be able to set how far they wish to monitor pests)']})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"2.b"}),(0,a.jsx)(i.td,{children:"Donation system for Pest reporters"}),(0,a.jsx)(i.td,{children:"We will implement a donation system for pest reporters. Farmers that actively report Pests and are useful to the community can receive donations from Farmers who are willing to thank them for this information (Potentially saving their crops & giving them the ability to prepare for Pest arrival well ahead). This feature will use a standard transfer pallet."})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"3.a"}),(0,a.jsx)(i.td,{children:"Guides as NFTs"}),(0,a.jsxs)(i.td,{children:['We will implement guides to be mintable as NFTs into the unified collection (via "',(0,a.jsx)(i.a,{href:"https://wiki.polkadot.network/docs/learn-nft-pallets#nfts-pallet",children:"NFTs"}),'" pallet). Guides allow farmers to share their knowledge with other farmers (They can range from DIY guides to crop-growing or animal caretaking guides).']})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"3.b"}),(0,a.jsx)(i.td,{children:"Rating and donation system for Guides"}),(0,a.jsx)(i.td,{children:'We will implement functionality that allows farmers to provide guide rating by small donation to Farmer who created the Guide. The application will display the amount of "Likes"(Donations) and a report button (So malicious guides can be removed by administrators). This functionality requires a database, however only for 2 anonymous details (Concrete guide NFT ID & amount of times, that farmers donated (Not saving who (which address donated). The database will only increase like a counter once the donation is finalized in the block also). This feature will use a standard transfer pallet.'})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"4."}),(0,a.jsx)(i.td,{children:"Crop origin proofs"}),(0,a.jsxs)(i.td,{children:['We will implement a feature that allows farmers to mint NFTs of crops (via "',(0,a.jsx)(i.a,{href:"https://wiki.polkadot.network/docs/learn-nft-pallets#nfts-pallet",children:"NFTs"}),'" pallet), that were cultivated on field that farmer minted. Farmer will then be able to use these NFTs as proof of crop origin. The application will generate a QR code for NFT explorer that will contain details about the crop and its origin field (If the field was minted as Public).']})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"5.a"}),(0,a.jsx)(i.td,{children:"Comprehensive documentation I"}),(0,a.jsx)(i.td,{children:"We will provide comprehensive documentation for developers - on how to start the application and different functions overview (Via GitHub pages)"})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"5.b"}),(0,a.jsx)(i.td,{children:"Comprehensive documentation II"}),(0,a.jsx)(i.td,{children:"We will provide comprehensive documentation for users - on how to create a Polkadot wallet, how to use the application, and a basic application overview (Via Github pages)"})]})]})]}),"\n",(0,a.jsx)(i.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,a.jsx)(i.p,{children:"The application is and will be a common good, further living from donations made by farmers - We will implement voluntary donations for certain features so they can support the application if they would like to. As server costs will be minimal (Due to the lack of a complex database &\xa0full use of on-chain storage) this shouldn't be an issue to achieve. The application will strictly not contain any ads. As for innovations, we would like to focus on a few key areas in the Polkadot network further on:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"Adding support for managing animals (Same way, that fields are managed) and adding proofs of origin for products that are produced by animals/from animals."}),"\n",(0,a.jsx)(i.li,{children:"Implementing schedules feature (To allow farmers to create simple schedules to structure their work)"}),"\n",(0,a.jsx)(i.li,{children:"Adding support for notifications regarding Pests or Weather (It can help farmers notice problems faster)"}),"\n",(0,a.jsx)(i.li,{children:"Simple crop/products marketplace"}),"\n",(0,a.jsx)(i.li,{children:"Creating a simple on-chain storage pallet (To further enhance Guides, allowing for larger texts and sub-sectioning)."}),"\n",(0,a.jsx)(i.li,{children:"Building Parachain focused on Farmers and Agriculture (There are many great use cases that can help ease farmers' lives)."}),"\n"]}),"\n",(0,a.jsx)(i.p,{children:"These innovations will drive the next wave of digital transformation in agriculture."}),"\n",(0,a.jsx)(i.p,{children:"As for gaining users, we will notify the contacted farmers about the application & we plan to contact farmers in other states through agriculture festivals and\nagricultural technology exhibitions."}),"\n",(0,a.jsxs)(i.h2,{id:"referral-program-moneybag",children:["Referral Program ","\ud83d\udcb0"]}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Referrer:"})," ",(0,a.jsx)(i.a,{href:"https://github.com/dudo50",children:"Dudo50"})]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Payment Address:"})," 139zHfuPsG62FKQtwjxMwqZAwPNZG6BooUWgF6L3LWYLUu3z (Polkadot)"]}),"\n"]}),"\n",(0,a.jsxs)(i.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,a.jsxs)(i.p,{children:[(0,a.jsx)(i.strong,{children:"How did you hear about the Grants Program?"})," Personal recommendation by the university thesis supervisor."]}),"\n",(0,a.jsx)(i.p,{children:"The main problem Farmers seem to have with Blockchain is a lack of trust in this technology. We would like to prove them otherwise and explain to them in the simplest way possible, that this technology is very useful in various use cases that we wish to explore and bring to them throughout their (and our) journey with AgriDot."})]})}function c(e={}){const{wrapper:i}={...(0,s.R)(),...e.components};return i?(0,a.jsx)(i,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},28453:(e,i,t)=>{t.d(i,{R:()=>r,x:()=>o});var n=t(96540);const a={},s=n.createContext(a);function r(e){const i=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function o(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),n.createElement(s.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/05f68587.8769857a.js b/assets/js/05f68587.8769857a.js new file mode 100644 index 00000000000..ffd28ba6391 --- /dev/null +++ b/assets/js/05f68587.8769857a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[63412],{56062:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>r,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"applications/AgriDot","title":"AgriDot - Web3 application for farmers","description":"- Team Name: AgriDot","source":"@site/applications/AgriDot.md","sourceDirName":"applications","slug":"/applications/AgriDot","permalink":"/applications/AgriDot","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/AgriDot.md","tags":[],"version":"current","frontMatter":{}}');var a=t(74848),s=t(28453);const r={},o="AgriDot - Web3 application for farmers",l={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Project Details",id:"project-details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Related work",id:"related-work",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team Github Profiles",id:"team-github-profiles",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Advisors",id:"advisors",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview",level:3},{value:"Milestone 1 - Working Web3 solution - AgriDot",id:"milestone-1---working-web3-solution---agridot",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Referral Program \ud83d\udcb0",id:"referral-program-moneybag",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function h(e){const i={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.header,{children:(0,a.jsx)(i.h1,{id:"agridot---web3-application-for-farmers",children:"AgriDot - Web3 application for farmers"})}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Team Name:"})," AgriDot"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Payment Details:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"DOT"}),": 1ukfa64f2WxSvJy8zwNC2RpSiajt2X1hsYQqBHmM9DTjT8R"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Payment"}),": Fiat payment - Details shared on 8. January 2025 at 18:36 via email in the application below."]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsxs)(i.strong,{children:[(0,a.jsx)(i.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 1 \ud83d\udc23"]}),"\n"]}),"\n",(0,a.jsxs)(i.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,a.jsxs)("div",{align:"center",children:[(0,a.jsx)("img",{width:"400",alt:"AgriDot",src:"https://github.com/user-attachments/assets/fb233743-eb46-4015-8fcd-e6e06513dce4"}),(0,a.jsx)("h4",{align:"center",children:" Empowering farmers and beekeepers with blockchain-based NFT field management and community-driven knowledge sharing. "}),(0,a.jsx)("p",{align:"center"}),(0,a.jsx)("h1",{})]}),"\n",(0,a.jsx)(i.p,{children:"AgriDot is an innovative application tailored for farmers and beekeepers, leveraging blockchain technology to enhance agricultural management, increase farmer awareness, and foster community collaboration. The platform enables users many benefits such as:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"Creating and managing their fields as NFTs (Publicly/Privately)"}),"\n",(0,a.jsx)(i.li,{children:"Field weather monitoring"}),"\n",(0,a.jsx)(i.li,{children:"Pest tracking (Community shared)"}),"\n",(0,a.jsx)(i.li,{children:"Sharing valuable agricultural knowledge through guides (Community shared)"}),"\n",(0,a.jsx)(i.li,{children:"Crop origin proofs (For public fields)"}),"\n"]}),"\n",(0,a.jsx)(i.p,{children:"Both Pests and Guides will also be NFT-based, minted into sovereign collections of AgriDot, moderated by our team. Farmers will be able to donate to other farmers if their Pest report or Guide proves to be useful."}),"\n",(0,a.jsx)(i.p,{children:"AgriDot will be fully deployed on Polkadot, fully open source, transparent, and common good, eliminating the need for any databases storing user data. By introducing a novel use case and engaging a unique user base, this project adds to the diversity and utility of the Polkadot ecosystem."}),"\n",(0,a.jsx)(i.h3,{id:"project-details",children:"Project Details"}),"\n",(0,a.jsx)(i.p,{children:"This proposal presents a solution for integrating an agricultural use case into Polkadot. Currently, there are no other agricultural solutions on Polkadot for comparison. This solution fills a gap by introducing new niche use cases and a niche user base to Polkadot. The solution allows farmers to outsource useful information about their fields, about nearby pests and learn new practices and tips through guides."}),"\n",(0,a.jsx)(i.p,{children:"What will Farmers be able to do in the early stage:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsxs)(i.li,{children:["Create a Public/Private field as NFT.","\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"Public fields are publicly and transparently displayed on Blockchain (NFT explorers are able to easily display them), allowing for crop origin proofs, that farmers can distribute with their crops (Either place them on their products or show them to their business partners)."}),"\n",(0,a.jsx)(i.li,{children:"Private fields are privately created with NFT metadata hashed by SHA256 (NFT explorers are unable to display NFT metadata, it can only be seen through AgriDot by field owner). This option is available for farmers that want to use application privately."}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(i.li,{children:"See forecast information for any added field (current, hourly & long-term)."}),"\n",(0,a.jsx)(i.li,{children:"Add pest information for other Farmers with nearby fields."}),"\n",(0,a.jsx)(i.li,{children:"See pests, that occurred in nearby locations (Only displaying how far from the nearest field owned by the Farmer wanting to see this information (To keep privacy for private field owners). The maximal search distance can be customized by Farmer."}),"\n",(0,a.jsx)(i.li,{children:"Farmers can reward farmers, who publish useful pest information by voluntary donation."}),"\n",(0,a.jsx)(i.li,{children:"Add useful agricultural guides (Useful practices, crop cultivation & more)."}),"\n",(0,a.jsx)(i.li,{children:"See agricultural guides."}),"\n",(0,a.jsx)(i.li,{children:'Farmers can reward farmers, who publish useful guides by giving them "like" by voluntary donation. The guides have a simple ranking system and farmers can sort guides by most liked or most recent.'}),"\n",(0,a.jsx)(i.li,{children:"Farmers can report malicious guides and moderators (Our team) will be able to remove them (Burn the asset on behalf of AgriDot, as all guides and pests are minted under a unified collection (one collection for all pests and one collection for all guides))."}),"\n",(0,a.jsx)(i.li,{children:"Farmers can create crop origin proofs by creating crop NFT that is associated with public field. These proofs can help farmers build transparency and trust from their business partners."}),"\n"]}),"\n",(0,a.jsx)(i.p,{children:"Application advantages compared to traditional Web2 agriculture applications:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"No database with personal details. Everything is stored on the Blockchain transparently."}),"\n",(0,a.jsx)(i.li,{children:"Verifiable & immutable crop origin proofs."}),"\n",(0,a.jsx)(i.li,{children:"Simple, yet useful blockchain-based Pest report system."}),"\n"]}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.strong,{children:"UI design proposal"})}),"\n",(0,a.jsx)(i.p,{children:"The UI of the application is designed to be simple to use and to abstract complexity anywhere possible to provide smooth UX for Farmers. Everything Blockchain/Polkadot related contains simple to understand explanation/guide Farmers can easily follow. Below is an example of a login screen & field overview screen."}),"\n",(0,a.jsx)("img",{width:"609",alt:"UI",src:"https://github.com/user-attachments/assets/67fbfeaf-7017-4de6-b4a9-274c3e934e57"}),"\n",(0,a.jsxs)(i.p,{children:["We have prepared design mockups with simple workflows for the Web3 version in ",(0,a.jsx)(i.a,{href:"https://www.figma.com/design/WR2ZtOiYJcq9cBZvRzH4l9/AgriDot",children:"Figma - here"}),". This Figma project also contains the design of our ",(0,a.jsx)(i.a,{href:"https://github.com/kacena123/aurora-borealis",children:"current PoC"})," Web2 solution for comparison. We believe, that the improvement in UI is substantial."]}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.strong,{children:"Data Models"})}),"\n",(0,a.jsxs)(i.p,{children:["The application utilizes ",(0,a.jsx)(i.a,{href:"https://parachains.info/details/assethub",children:"Kusama Asset Hub"}),' as the chain for NFTs (As minting an NFT is a matter of cents on Kusama) and pallet called "NFTs" for concrete operations with collections and NFTs. To query the metadata of NFTs associated with the wallet address of concrete user application uses ',(0,a.jsx)(i.a,{href:"https://parachains.info/details/subsquid",children:"Subsquid indexer"}),". The queries for ",(0,a.jsx)(i.a,{href:"https://parachains.info/details/subsquid",children:"Subsquid indexer"})," are created by Kodadot's package called ",(0,a.jsx)(i.a,{href:"https://github.com/kodadot/uniquery",children:"Uniquery"}),"."]}),"\n",(0,a.jsx)(i.p,{children:"Below we demonstrate a simple use case of application cold startup, field creation, and crop origin proof creation."}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{src:"https://github.com/user-attachments/assets/ac82d2a0-76db-4789-beb3-4bf7af495b02",alt:"agridot field and crop sequential"})}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.strong,{children:"Technology stack"})}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"React native"}),"\n",(0,a.jsx)(i.li,{children:"PolkadotJS"}),"\n",(0,a.jsx)(i.li,{children:"NodeJS"}),"\n",(0,a.jsx)(i.li,{children:"Typescript"}),"\n",(0,a.jsx)(i.li,{children:"Subsquid"}),"\n",(0,a.jsx)(i.li,{children:"Kodadot Uniquery"}),"\n",(0,a.jsx)(i.li,{children:"NFTs pallet"}),"\n"]}),"\n",(0,a.jsx)(i.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,a.jsx)(i.p,{children:"Currently, there are no similar projects within the Substrate/Polkadot/Kusama ecosystem that focus on agriculture and beekeeping using blockchain technology. This distinctiveness positions AgriDot as a pioneering project in this domain."}),"\n",(0,a.jsx)(i.p,{children:"There are some agricultural projects in other blockchain ecosystems, however, none have successfully integrated the unique features of NFTs and decentralized community collaboration in the way AgriDot aims to achieve."}),"\n",(0,a.jsx)(i.p,{children:"While the main target audience of this project are Farmers and Beekeepers, other users may find the availability of useful Guides and even Pest reports (If they have small fields at home) very useful. While benefits, that AgriDot gains by enhancing Blockchain technology are substantial, the farmers are often not that technical and need to be shown, that the blockchain can be useful for them. This is why the application will notify them, that the data is transparently stored on the Polkadot blockchain and that the application does not collect nor will need to collect any data from them."}),"\n",(0,a.jsx)(i.p,{children:"The application bridges an important gap in niche user base and niche use case, that has not yet been explored on Polkadot by anyone."}),"\n",(0,a.jsx)(i.p,{children:"We have created a survey that was sent to 300 small and medium Agricultural businesses in Slovakia to gain insight on whether Farmers will be open to such an application and if so, if they will be willing to accept, that it will use Blockchain to enhance transparency. We received an overwhelming amount of responses from 167 farmers, that an application like this is very needed and they also provided us with feedback as to what should the application contain. We share the experiment results below."}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{src:"https://github.com/user-attachments/assets/f42530a8-2bdc-458d-8ebd-6302f3e47316",alt:"chart1"})}),"\n",(0,a.jsx)(i.p,{children:"First, we asked Farmers which listed features would they like to see in the ideal Agricultural application. The most useful for them is by far the weather monitoring. They also highly ranked Pest information and crop origin proofs. Based on this we then designed the application to fit most of the Farmer's needs."}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{src:"https://github.com/user-attachments/assets/441dfc2c-9675-4cf6-bfab-bf67e0be4b38",alt:"chart2"})}),"\n",(0,a.jsx)(i.p,{children:"In the second question, we asked Farmers if they would be open to Blockchain-based application that would enhance transparency of how their data is handled. More than 120 farmers stated, that they are open to this innovation and the rest of the farmers stated, that they are not open or that they are not sure which means, that the Farmers, that stated that they are not sure could change their mind once they try the application."}),"\n",(0,a.jsx)(i.h3,{id:"related-work",children:"Related work"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.strong,{children:"AgriApp"})}),"\n",(0,a.jsxs)(i.p,{children:["AgriApp is an Indian Web2 application for farmers - ",(0,a.jsx)(i.a,{href:"https://agriapp.com/",children:"Web"}),", ",(0,a.jsx)(i.a,{href:"https://play.google.com/store/apps/details?id=com.criyagen&hl=en_US",children:"Google Play"}),". It offers a range of features, including crop monitoring, advice on fertilization, irrigation, pest control, soil analysis, and weather forecasting. It also includes tools for managing work schedules, planning maintenance, and tracking costs and revenues. Additionally, the app features a store where users can purchase various pesticide products and fertilizers. Some advanced features are available only in paid versions of the app, which entails additional costs. Given the app's extensive functionality, it may be complex for new users, and fully utilizing its features may require some time to learn compared to AgriDot which is designed to focus on user-friendliness, meaning that even new users can quickly navigate and use the application without extensive training. Another downside is, that AgriApp does not have open-source code and users are unable to verify if their data is not used for malicious practices or sold compared to AgriDot which doesn't store any user data and has fully open-source code."]}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.strong,{children:"Agrichain"})}),"\n",(0,a.jsxs)(i.p,{children:["The AgriChain Web3 application is a tool aimed at improving transparency and efficiency in the agricultural sector through blockchain technology - ",(0,a.jsx)(i.a,{href:"https://agrichain.com/",children:"Web"}),", ",(0,a.jsx)(i.a,{href:"https://play.google.com/store/apps/details?id=com.agrichain&hl=sk",children:"Google Play"}),", ",(0,a.jsx)(i.a,{href:"https://link.springer.com/chapter/10.1007/978-3-030-96527-3_1",children:"Research article"}),". Its main advantage is the ability to track every stage of the supply chain, which allows accurate recording of transactions and the origin of products. In this way, the application tries to increase trust in the quality and safety of food.\nAgriChain's user interface is intuitive and easy to use, allowing even less experienced users to effectively manage their operations. The application also provides analytical tools to optimize production and manage inventory and payments through smart contracts.\nAgrichain primarily targets large farmers and large supply chains. Smaller farmers and beekeepers may find it much more difficult and costly to implement AgriChain into their production. Agrichain places great emphasis on supply chain efficiency and transparency and focuses mainly on management, while not supporting other functions such as weather, pest monitoring and also community functions between individual farmers compared to AgriDot."]}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.strong,{children:"AgriDigital"})}),"\n",(0,a.jsxs)(i.p,{children:["AgriDigital Onfarm is a Web3 application designed for modern farmers that simplifies and optimizes the management of agricultural production - ",(0,a.jsx)(i.a,{href:"https://www.agridigital.io/",children:"Web"}),", ",(0,a.jsx)(i.a,{href:"https://play.google.com/store/apps/details?id=io.waypath.app&hl=sk&gl=US",children:"Google Play"}),". It is part of the AgriDigital ecosystem, which focuses on the digitization and streamlining of Agricultural business. The application allows farmers to manage and monitor the warehouse and also manage the sale of stocks of cultivated crops. It enables detailed management of landlord distributions and profit shares, thus ensuring transparency in the distribution of income. AgriDigital Onfarm generates detailed reports on total yield per specific field, as well as gross yield at the farm and individual field levels, enabling performance analysis at various levels. It has an intuitive interface, which makes it easy to use even for less technical users. Its main goal is to increase the efficiency and performance of farms using analytical tools. The main downside of AgriDigital compared to AgriDot is, that AgriDigital is not available in all countries and its services are not free. The AgriDigital application focuses more on managing crop sales and farmer finances. It does not offer functionality such as weather monitoring, or pest control and does not support a community system."]}),"\n",(0,a.jsxs)(i.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,a.jsx)(i.h3,{id:"team-members",children:"Team members"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"Katar\xedna Valov\xe1 - Core developer, Master's degree student Faculty of Informatics and Information Technologies STU in Bratislava, Slovakia"}),"\n"]}),"\n",(0,a.jsx)(i.h3,{id:"contact",children:"Contact"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Contact Name:"})," Katar\xedna Valov\xe1"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Contact Email:"})," ",(0,a.jsx)(i.a,{href:"mailto:valova.katarin@gmail.com",children:"valova.katarin@gmail.com"})]}),"\n"]}),"\n",(0,a.jsx)(i.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Registered Address:"})," Sto\u0161ick\xe1 472, Liptovsk\xfd Mikul\xe1\u0161 03104, Slovak Republic"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Registered Legal Entity:"})," Katar\xedna Valov\xe1"]}),"\n"]}),"\n",(0,a.jsx)(i.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,a.jsxs)(i.p,{children:["Katar\xedna is studying Master's degree at the Faculty of Informatics and Information Technologies STU in Bratislava, her Bachelor's thesis was about creating application meant to ease farmers' lives by providing them key information about their fields and pests. Katar\xedna was recently introduced to Web3 by her new university Master's thesis supervisor ",(0,a.jsx)(i.a,{href:"https://github.com/dudo50",children:"Du\u0161an"}),". She found out, that she is very passionate about transforming Web2 applications into Web3 applications, making them much less resource-dependent and more transparent. Katar\xedna found passion in writing research articles about this topic and participated in the local university conference. Katar\xedna also sees this as an opportunity to introduce a new niche use case to Polkadot and she is very excited to explore this ecosystem further and expose it to farmers."]}),"\n",(0,a.jsx)(i.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:(0,a.jsx)(i.a,{href:"https://github.com/kacena123/aurora-borealis",children:"https://github.com/kacena123/aurora-borealis"})}),"\n"]}),"\n",(0,a.jsx)(i.h3,{id:"team-github-profiles",children:"Team Github Profiles"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:(0,a.jsx)(i.a,{href:"https://github.com/kacena123",children:"https://github.com/kacena123"})}),"\n"]}),"\n",(0,a.jsx)(i.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:(0,a.jsx)(i.a,{href:"https://www.linkedin.com/in/katka-val/",children:"https://www.linkedin.com/in/katka-val/"})}),"\n"]}),"\n",(0,a.jsx)(i.h3,{id:"advisors",children:"Advisors"}),"\n",(0,a.jsx)(i.p,{children:"Ecosystem developers who agreed to provide advisory help during the project implementation phase:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"Dudo50 founder of ParaSpell (Interoperability solutions)"}),"\n"]}),"\n",(0,a.jsxs)(i.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,a.jsxs)(i.p,{children:["Currently, there is a PoC called ",(0,a.jsx)(i.a,{href:"https://github.com/kacena123/aurora-borealis",children:"Aurora Borealis"})," developed and ready to be used as a Web2 application in Kotlin. The enhanced version will be programmed in a more widely used React Native framework, and have a complete design overhaul and Web3 migration."]}),"\n",(0,a.jsxs)(i.p,{children:["We have created Figma mockups of how would this Web2 to Web3 migration look. They were mentioned in the project details but we will link them here too - ",(0,a.jsx)(i.a,{href:"https://www.figma.com/design/WR2ZtOiYJcq9cBZvRzH4l9/AgriDot",children:"figma link"}),"."]}),"\n",(0,a.jsxs)(i.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,a.jsx)(i.h3,{id:"overview",children:"Overview"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Total Estimated Duration:"})," 4 months"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Full-Time Equivalent (FTE):"})," 1"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Total Costs:"})," 10,000 USD"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"DOT %:"})," 50%"]}),"\n"]}),"\n",(0,a.jsx)(i.h3,{id:"milestone-1---working-web3-solution---agridot",children:"Milestone 1 - Working Web3 solution - AgriDot"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Estimated duration:"})," 4 month"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"FTE:"})," 1"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Costs:"})," 10,000 USD"]}),"\n"]}),"\n",(0,a.jsxs)(i.table,{children:[(0,a.jsx)(i.thead,{children:(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.th,{style:{textAlign:"right"},children:"Number"}),(0,a.jsx)(i.th,{children:"Deliverable"}),(0,a.jsx)(i.th,{children:"Specification"})]})}),(0,a.jsxs)(i.tbody,{children:[(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:(0,a.jsx)(i.strong,{children:"0a."})}),(0,a.jsx)(i.td,{children:"License"}),(0,a.jsx)(i.td,{children:"MIT"})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:(0,a.jsx)(i.strong,{children:"0b."})}),(0,a.jsx)(i.td,{children:"Documentation"}),(0,a.jsxs)(i.td,{children:["We will provide both ",(0,a.jsx)(i.strong,{children:"inline documentation"})," of the code and a basic ",(0,a.jsx)(i.strong,{children:"tutorial"})," on how to interact with the application from registration to interaction with the blockchain."]})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:(0,a.jsx)(i.strong,{children:"0c."})}),(0,a.jsx)(i.td,{children:"Testing and Testing Guide"}),(0,a.jsx)(i.td,{children:"We will provide unit tests for core application functionality. Guide on how to launch these tests will be mentioned in the README.md"})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:(0,a.jsx)(i.strong,{children:"0d."})}),(0,a.jsx)(i.td,{children:"Docker"}),(0,a.jsx)(i.td,{children:"We will provide a docker file that will let you try all the implemented functionality mentioned in the milestone description."})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"0e."}),(0,a.jsx)(i.td,{children:"Article"}),(0,a.jsxs)(i.td,{children:["We will provide a summary article that will mention all the innovations brought during the development of AgriDot. This article will be published on ",(0,a.jsx)(i.a,{href:"https://medium.com/",children:"Medium"}),"."]})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"1.a"}),(0,a.jsx)(i.td,{children:"Fields as NFTs (Private)"}),(0,a.jsxs)(i.td,{children:['We will implement functionality that allows farmers to mint their fields as NFTs (via "',(0,a.jsx)(i.a,{href:"https://wiki.polkadot.network/docs/learn-nft-pallets#nfts-pallet",children:"NFTs"}),'" pallet) in a secure, hashed way (in-app hashed by AgriDot key phrase (each NFT will be checked for the correspondation between signed wallet address and owner of NFT before being decoded and displayed (as additional protection step))) so only AgriDot will be able to decode them and display them to farmers who own them.']})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"1.b"}),(0,a.jsx)(i.td,{children:"Fields as NFTs (Public)"}),(0,a.jsxs)(i.td,{children:['We will implement functionality that allows farmers to mint their fields (via "',(0,a.jsx)(i.a,{href:"https://wiki.polkadot.network/docs/learn-nft-pallets#nfts-pallet",children:"NFTs"}),'" pallet) in a public way, so any NFT explorer will be able to display them (NFTs will have a standard format (name, image, metadata(containing field coordinates) )). These fields will then be able to be used with "4. Crop origin proofs" allowing farmers to create a proof of crop origin that will be linked to their public field.']})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"1.c"}),(0,a.jsx)(i.td,{children:"See the weather for your NFT fields"}),(0,a.jsxs)(i.td,{children:["We will implement functionality that lets you query the coordinates of your NFT fields and display weather for the upcoming period (This feature will use ",(0,a.jsx)(i.a,{href:"https://github.com/kodadot/uniquery",children:"Kodadot uniquery"})," package for creating queries that will be used with ",(0,a.jsx)(i.a,{href:"https://www.sqd.dev/",children:"Subsquid indexer"}),". Weather for farmer's NFTs will be queried from ",(0,a.jsx)(i.a,{href:"https://open-meteo.com/",children:"Open-Meteo"})," open-source API (or else if found better))"]})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"2.a"}),(0,a.jsx)(i.td,{children:"Pests as NFTs"}),(0,a.jsxs)(i.td,{children:['We will implement Pest functionality. Pests will be minted to a unified collection (via "',(0,a.jsx)(i.a,{href:"https://wiki.polkadot.network/docs/learn-nft-pallets#nfts-pallet",children:"NFTs"}),'" pallet), with coordination of the Field where it appeared (Coordinate will be private (Hashed in-app by AgriDot key phrase)), farmers will only know, that a certain Pest appeared X km away from their field (They will be able to set how far they wish to monitor pests)']})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"2.b"}),(0,a.jsx)(i.td,{children:"Donation system for Pest reporters"}),(0,a.jsx)(i.td,{children:"We will implement a donation system for pest reporters. Farmers that actively report Pests and are useful to the community can receive donations from Farmers who are willing to thank them for this information (Potentially saving their crops & giving them the ability to prepare for Pest arrival well ahead). This feature will use a standard transfer pallet."})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"3.a"}),(0,a.jsx)(i.td,{children:"Guides as NFTs"}),(0,a.jsxs)(i.td,{children:['We will implement guides to be mintable as NFTs into the unified collection (via "',(0,a.jsx)(i.a,{href:"https://wiki.polkadot.network/docs/learn-nft-pallets#nfts-pallet",children:"NFTs"}),'" pallet). Guides allow farmers to share their knowledge with other farmers (They can range from DIY guides to crop-growing or animal caretaking guides).']})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"3.b"}),(0,a.jsx)(i.td,{children:"Rating and donation system for Guides"}),(0,a.jsx)(i.td,{children:'We will implement functionality that allows farmers to provide guide rating by small donation to Farmer who created the Guide. The application will display the amount of "Likes"(Donations) and a report button (So malicious guides can be removed by administrators). This functionality requires a database, however only for 2 anonymous details (Concrete guide NFT ID & amount of times, that farmers donated (Not saving who (which address donated). The database will only increase like a counter once the donation is finalized in the block also). This feature will use a standard transfer pallet.'})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"4."}),(0,a.jsx)(i.td,{children:"Crop origin proofs"}),(0,a.jsxs)(i.td,{children:['We will implement a feature that allows farmers to mint NFTs of crops (via "',(0,a.jsx)(i.a,{href:"https://wiki.polkadot.network/docs/learn-nft-pallets#nfts-pallet",children:"NFTs"}),'" pallet), that were cultivated on field that farmer minted. Farmer will then be able to use these NFTs as proof of crop origin. The application will generate a QR code for NFT explorer that will contain details about the crop and its origin field (If the field was minted as Public).']})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"5.a"}),(0,a.jsx)(i.td,{children:"Comprehensive documentation I"}),(0,a.jsx)(i.td,{children:"We will provide comprehensive documentation for developers - on how to start the application and different functions overview (Via GitHub pages)"})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{style:{textAlign:"right"},children:"5.b"}),(0,a.jsx)(i.td,{children:"Comprehensive documentation II"}),(0,a.jsx)(i.td,{children:"We will provide comprehensive documentation for users - on how to create a Polkadot wallet, how to use the application, and a basic application overview (Via Github pages)"})]})]})]}),"\n",(0,a.jsx)(i.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,a.jsx)(i.p,{children:"The application is and will be a common good, further living from donations made by farmers - We will implement voluntary donations for certain features so they can support the application if they would like to. As server costs will be minimal (Due to the lack of a complex database &\xa0full use of on-chain storage) this shouldn't be an issue to achieve. The application will strictly not contain any ads. As for innovations, we would like to focus on a few key areas in the Polkadot network further on:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"Adding support for managing animals (Same way, that fields are managed) and adding proofs of origin for products that are produced by animals/from animals."}),"\n",(0,a.jsx)(i.li,{children:"Implementing schedules feature (To allow farmers to create simple schedules to structure their work)"}),"\n",(0,a.jsx)(i.li,{children:"Adding support for notifications regarding Pests or Weather (It can help farmers notice problems faster)"}),"\n",(0,a.jsx)(i.li,{children:"Simple crop/products marketplace"}),"\n",(0,a.jsx)(i.li,{children:"Creating a simple on-chain storage pallet (To further enhance Guides, allowing for larger texts and sub-sectioning)."}),"\n",(0,a.jsx)(i.li,{children:"Building Parachain focused on Farmers and Agriculture (There are many great use cases that can help ease farmers' lives)."}),"\n"]}),"\n",(0,a.jsx)(i.p,{children:"These innovations will drive the next wave of digital transformation in agriculture."}),"\n",(0,a.jsx)(i.p,{children:"As for gaining users, we will notify the contacted farmers about the application & we plan to contact farmers in other states through agriculture festivals and\nagricultural technology exhibitions."}),"\n",(0,a.jsxs)(i.h2,{id:"referral-program-moneybag",children:["Referral Program ","\ud83d\udcb0"]}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Referrer:"})," ",(0,a.jsx)(i.a,{href:"https://github.com/dudo50",children:"Dudo50"})]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Payment Address:"})," 139zHfuPsG62FKQtwjxMwqZAwPNZG6BooUWgF6L3LWYLUu3z (Polkadot)"]}),"\n"]}),"\n",(0,a.jsxs)(i.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,a.jsxs)(i.p,{children:[(0,a.jsx)(i.strong,{children:"How did you hear about the Grants Program?"})," Personal recommendation by the university thesis supervisor."]}),"\n",(0,a.jsx)(i.p,{children:"The main problem Farmers seem to have with Blockchain is a lack of trust in this technology. We would like to prove them otherwise and explain to them in the simplest way possible, that this technology is very useful in various use cases that we wish to explore and bring to them throughout their (and our) journey with AgriDot."})]})}function c(e={}){const{wrapper:i}={...(0,s.R)(),...e.components};return i?(0,a.jsx)(i,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},28453:(e,i,t)=>{t.d(i,{R:()=>r,x:()=>o});var n=t(96540);const a={},s=n.createContext(a);function r(e){const i=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function o(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),n.createElement(s.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/071b3461.6fab2953.js b/assets/js/071b3461.6fab2953.js deleted file mode 100644 index 3fcb36d05f2..00000000000 --- a/assets/js/071b3461.6fab2953.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[20783],{12578:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>l,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"applications/dot_marketplace-Phase3","title":"Dot Marketplace v3","description":"- Status: Open","source":"@site/applications/dot_marketplace-Phase3.md","sourceDirName":"applications","slug":"/applications/dot_marketplace-Phase3","permalink":"/applications/dot_marketplace-Phase3","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/dot_marketplace-Phase3.md","tags":[],"version":"current","frontMatter":{}}');var i=n(74848),r=n(28453);const l={},a="Dot Marketplace v3",o={},d=[{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Repository Hierarchy",id:"repository-hierarchy",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-",level:2},{value:"Milestone 1",id:"milestone-1",level:3},{value:"Milestone 2",id:"milestone-2",level:3},{value:"Milestone 3",id:"milestone-3",level:3},{value:"Additional Project Details",id:"additional-project-details",level:3},{value:"Future Plans",id:"future-plans",level:3},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"dot-marketplace-v3",children:"Dot Marketplace v3"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Status:"})," Open"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Project Name:"})," Dot Marketplace"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Team Name:"})," Wow Labz"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Payment Address:"})," bc1qv954czydwz72egdzhkkuw85jegwrsmlt8a5xs8 (BTC - Bitcoin)"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Level:"})," 2"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(t.p,{children:"Links To Previous Approved Grants:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/master/applications/dot_marketplace.md",children:"Phase 1"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/master/applications/dot_marketplace-phase2.md",children:"Phase 2"})}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"This is phase 3 of Dot Marketplace, which is a general-purpose decentralized marketplace created as a Substrate pallet."}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Dot Marketplace can be used by any decentralized project to float tasks and invite their community members to execute them for a reward. Its POC was developed during the Polkadot India Buildathon (2021)."}),"\n",(0,i.jsx)(t.li,{children:"In the previous phases we have built a decentralised bounty platform and a decentralised court for dispute resolution. More details can be found on the respective grant proposals shared above."}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,i.jsxs)(t.p,{children:["The current scope of work involves ",(0,i.jsx)(t.strong,{children:"milestone-based submissions"})," in which a project is divided into multiple configurable milestones(min 1 and max 5) to allow parallel or sequential execution."]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Each project must have at least one milestone and can have a maximum of five milestones (configurable)"}),"\n",(0,i.jsx)(t.li,{children:"Each milestone has its independent bidding system where multiple workers can place their bids"}),"\n",(0,i.jsx)(t.li,{children:"The publisher can select a bid as per the requirement and ratings of the worker and other criteria that can be added to a user account."}),"\n",(0,i.jsx)(t.li,{children:"A worker can bid for multiple milestones of a single project based on their expertise."}),"\n",(0,i.jsx)(t.li,{children:"A project reaches completion only if all milestones in the project are completed and approved by the publisher."}),"\n",(0,i.jsx)(t.li,{children:"In our current implementation all milestones are independent, hence they can be completed and approved by the publisher irrespective of the overall project status."}),"\n",(0,i.jsx)(t.li,{children:"Based on the requirements, a publisher can add more milestones to a project even after it is pushed to the market, provided the total number of milestones does not exceed 5 (configurable)"}),"\n",(0,i.jsx)(t.li,{children:"Decentralized IPFS Storage for project materials using NFTStorage Provider. Each material will have a unique CID that can be accessed by both Publisher and Worker."}),"\n",(0,i.jsx)(t.li,{children:"Advance Search by task tags, ids & title."}),"\n",(0,i.jsxs)(t.li,{children:["The ",(0,i.jsx)(t.a,{href:"https://github.com/WowLabz/dot-marketplace-v2",children:"decentralized court"})," implemented in phase 2 is functional for each milestone of a project"]}),"\n",(0,i.jsx)(t.li,{children:"All of the above features will be updated as a new feature for the existing marketplace pallet. Similarly, the selekatal UI will be updated to showcase the same."}),"\n",(0,i.jsx)(t.li,{children:"A new file server written using the rocket framework will be provided for the integration with IPFS (using NftStorage)."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"The flow of tasking pallet with milestone based submission"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://user-images.githubusercontent.com/66478092/190300655-1d2085b3-b728-4ced-8238-f262a9c5c5f8.png",alt:"Tasking-Court-Flow4 drawio"})}),"\n",(0,i.jsx)(t.h3,{id:"repository-hierarchy",children:(0,i.jsx)(t.strong,{children:"Repository Hierarchy"})}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"node\n\u251c\u2500\u2500 build.rs\n\u251c\u2500\u2500 Cargo.toml\n\u2514\u2500\u2500 src\n \u251c\u2500\u2500 chain_spec.rs\n \u251c\u2500\u2500 cli.rs\n \u251c\u2500\u2500 command.rs\n \u251c\u2500\u2500 lib.rs\n \u251c\u2500\u2500 main.rs\n \u251c\u2500\u2500 rpc.rs\n \u2514\u2500\u2500 service.rs\npallets\n\u251c\u2500\u2500 pallet-chat\n\u2502 \u251c\u2500\u2500 Cargo.toml\n\u2502 \u251c\u2500\u2500 README.md\n\u2502 \u2514\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 benchmarking.rs\n\u2502 \u251c\u2500\u2500 lib.rs\n\u2502 \u251c\u2500\u2500 mock.rs\n\u2502 \u2514\u2500\u2500 tests.rs\n\u2514\u2500\u2500 pallet-tasking\n \u251c\u2500\u2500 Cargo.toml\n \u251c\u2500\u2500 README.md\n \u2514\u2500\u2500 src\n \u251c\u2500\u2500 benchmarking.rs\n \u251c\u2500\u2500 lib.rs\n \u251c\u2500\u2500 mock.rs\n \u251c\u2500\u2500 utils.rs\n \u2514\u2500\u2500 tests.rs\nruntime\n\u251c\u2500\u2500 build.rs\n\u251c\u2500\u2500 Cargo.toml\n\u2514\u2500\u2500 src\n \u2514\u2500\u2500 lib.rs\n"})}),"\n",(0,i.jsx)(t.p,{children:"The current focus is to enhance the existing Substrate pallet and allied code base to get a basic yet functional marketplace up and running."}),"\n",(0,i.jsx)(t.h3,{id:"ecosystem-fit",children:(0,i.jsx)(t.strong,{children:"Ecosystem Fit"})}),"\n",(0,i.jsx)(t.p,{children:"We believe this work could be helpful for any Polkadot parachains/parathreads interested in including a marketplace with on-chain dispute resolution."}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Almost all parachains/parathreads would find motivation in encouraging their community members to contribute meaningfully to their roadmap. This can be achieved by utilizing a marketplace like Dot Marketplace, where technical, marketing, or governance-centric projects can be published as bounties. And community members are invited to bid for and execute them."}),"\n",(0,i.jsx)(t.li,{children:"A milestone-based submission will enhance the functionality of the marketplace and provide a more comprehensive user experience for both the worker and the publisher."}),"\n",(0,i.jsx)(t.li,{children:"The on-chain court will act as a dispute resolution mechanism between users involved in a project. A set of community members meeting specific criteria get to be a part of the jury for the dispute and cast votes, based on which a decision is reached."}),"\n",(0,i.jsx)(t.li,{children:"To facilitate easier communication between a customer and a worker, a one-to-one chat feature is also created."}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"team-",children:(0,i.jsx)(t.strong,{children:"Team \ud83d\udc65"})}),"\n",(0,i.jsx)(t.h3,{id:"team-members",children:(0,i.jsx)(t.strong,{children:"Team members"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://www.linkedin.com/in/startupamit/",children:(0,i.jsx)(t.strong,{children:"Amit Singh"})})," [ Product Manager ]"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://www.linkedin.com/in/roshit/",children:(0,i.jsx)(t.strong,{children:"Roshit Omanakuttan"})})," [ Technical Architect ]"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://www.linkedin.com/in/loakesh-indiran-8a2282140",children:(0,i.jsx)(t.strong,{children:"Loakesh Indiran"})})," [ Full Stack Developer ]"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"http://www.linkedin.com/in/tejas-vijay-1430a3190",children:(0,i.jsx)(t.strong,{children:"Tejas Gaware"})})," [ Backend Developer ]"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://www.linkedin.com/in/rajat-petwal-947440197/",children:(0,i.jsx)(t.strong,{children:"Rajat Petwal"})})," [ Backend Developer ]"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"contact",children:(0,i.jsx)(t.strong,{children:"Contact"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Name:"})," Amit Singh"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Email:"})," amit (dot) singh (@) wowlabz.com"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Website:"})," ",(0,i.jsx)(t.a,{href:"https://www.wowlabz.com/",children:"http://www.wowlabz.com"})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Project Website:"})," ",(0,i.jsx)(t.a,{href:"https://dotmarketplace.co/",children:"Dot marketplace website"})]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"legal-structure",children:(0,i.jsx)(t.strong,{children:"Legal Structure"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Registered Address:"})," Wow Labz, 2Gethr Cowork, Tower B, Mantri Commercio, Outer Ring Rd, Bellandur, Bengaluru, Karnataka, India 560103"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Registered Legal Entity:"})," Wow Internet Labz Private Limited"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"teams-experience",children:(0,i.jsx)(t.strong,{children:"Team's experience"})}),"\n",(0,i.jsxs)(t.p,{children:["Dot Marketplace is being built by the team at Wow Labz. Wow Labz is one of India's leading turnkey product development companies. The team is also building Socialli - an interoperable metaverse protocol on Polkadot. Additionally the team at Wow Labz has built ",(0,i.jsx)(t.a,{href:"https://www.polkadotindia.org/",children:"Polkadot India"})," - a 15,000+ community of polkadot enthusiasts predominantly from the Indian region. The team has previously built a decentralized storage protocol called Lake Network - ",(0,i.jsx)(t.a,{href:"https://lakenetwork.io/",children:"https://lakenetwork.io/"})," in addition to multiple dApps on Ethereum, Stellar, EOS, and Hyperledger."]}),"\n",(0,i.jsxs)(t.p,{children:["A list of centralized and decentralised apps published can be found ",(0,i.jsx)(t.a,{href:"https://www.wowlabz.com/work/",children:"here"}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"team-code-repos",children:(0,i.jsx)(t.strong,{children:"Team Code Repos"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/orgs/WowLabz/projects",children:"https://github.com/orgs/WowLabz/projects"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/WowLabz/tasking_backend",children:"https://github.com/WowLabz/tasking_backend"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/WowLabz/tasking_frontend",children:"https://github.com/WowLabz/tasking_frontend"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/WowLabz/yoda_creator_economy_node",children:"https://github.com/WowLabz/yoda_creator_economy_node"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/WowLabz/dot-marketplace-v2",children:"https://github.com/WowLabz/dot-marketplace-v2"})}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"development-status-",children:(0,i.jsx)(t.strong,{children:"Development Status \ud83d\udcd6"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Here's a link to the approved grant proposal for the ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/master/applications/dot_marketplace.md",children:"first phase"})," and ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/master/applications/dot_marketplace-phase2.md",children:"second phase"})]}),"\n",(0,i.jsx)(t.li,{children:"We are in touch with @takahser and @Rouven from the Web 3 Grants and Treasuries team, respectively."}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"development-roadmap-",children:[(0,i.jsx)(t.strong,{children:"Development Roadmap"})," \ud83d\udd29"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.strong,{children:"Overview"})})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Estimated Duration:"})," 2.0 Months"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Full-Time Equivalent (FTE):"})," 2.39"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Costs:"})," 29,925 USD"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-1",children:(0,i.jsx)(t.strong,{children:"Milestone 1"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated duration:"})," 3.0 weeks"]}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.strong,{children:"FTE: 1"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.strong,{children:"PTE: 2"})}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"})," 12,725 USD"]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"The main deliverable for this milestone is to facilitate the creation of a project that can accommodate multiple milestones that may or may not depend on each other. These functionalities will be implemented as an upgrade to the existing marketplace pallet."}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Sr no."}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0a"}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Apache 2.0"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0b"}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"We will provide both inline documentation of the code and a tutorial that explains how a user can use DOT Marketplace and understand the flow of tasking pallet."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0c"}),(0,i.jsx)(t.td,{children:"Testing Guide"}),(0,i.jsx)(t.td,{children:"Functions will be covered by unit tests, the documentation will describe how to run these tests. We will also provide scripts to help deploy, run and test the build."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0d"}),(0,i.jsx)(t.td,{children:"Docker Image"}),(0,i.jsx)(t.td,{children:"Docker image of the build"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"1"}),(0,i.jsx)(t.td,{children:"Project Structure"}),(0,i.jsx)(t.td,{children:"The existing application only allows one milestone per project. Phase 3 modifies it to allow a publisher to add multiple milestones under the same project."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"2"}),(0,i.jsx)(t.td,{children:"Multiple Bidders"}),(0,i.jsx)(t.td,{children:"Multiple bidders can now bid for the same milestone, and the publisher can choose one worker based on the bidder ratings"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"3"}),(0,i.jsx)(t.td,{children:"Escrow"}),(0,i.jsx)(t.td,{children:"Multiple subaccounts are created for a project to account for each milestone and make it easier to store all funds for transfer/exchange."})]})]})]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-2",children:(0,i.jsx)(t.strong,{children:"Milestone 2"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated duration:"})," 2.0 weeks"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"})," 1"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"PTE:"})," 2"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"})," 9,225 USD"]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"In continuation to previous work, this milestone involves the creation of an on-chain decentralized court to handle dispute resolution. Each milestone can go into a dispute on the same scope as mentioned in the second phase of dot marketplace. The other milestones in a project are not affected by the dispute of one of the milestones. The court pallet will be upgraded to support these new features."}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Sr no."}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0a"}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Apache 2.0"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0b"}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"We will provide both inline documentation of the code and a tutorial that explains how a user can use DOT Marketplace and understand the flow of tasking pallet."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0c"}),(0,i.jsx)(t.td,{children:"Testing Guide"}),(0,i.jsx)(t.td,{children:"Functions will be covered by unit tests, the documentation will describe how to run these tests. We will also provide scripts to help deploy, run and test the build."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0d"}),(0,i.jsx)(t.td,{children:"Docker Image"}),(0,i.jsx)(t.td,{children:"Docker image of the build"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"1"}),(0,i.jsx)(t.td,{children:"Decentralized Court Module"}),(0,i.jsx)(t.td,{children:"An on-chain decentralized court for dispute resolution within the ecosystem."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"1a"}),(0,i.jsx)(t.td,{children:"Disapprove Milestone"}),(0,i.jsx)(t.td,{children:"In the case of a customer not being satisfied with the work submitted by the service provider (worker). A set of jurors is shortlisted (court summon) to resolve the dispute and pass a verdict."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"1b"}),(0,i.jsx)(t.td,{children:"Disapprove Rating"}),(0,i.jsx)(t.td,{children:"The customer or the service provider, once they have received their rating for a particular milestone and are not satisfied with it."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"1c"}),(0,i.jsx)(t.td,{children:"General Dispute"}),(0,i.jsx)(t.td,{children:"A general dispute function for cases that do not fall under the categories mentioned in 1a and 1b."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"2"}),(0,i.jsx)(t.td,{children:"Voting module"}),(0,i.jsx)(t.td,{children:"Each juror can review the dispute and cast their vote, which also includes their rating for both the customer and the worker. After two days, all the juror votes are counted, and a winner is identified."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"3"}),(0,i.jsx)(t.td,{children:"Frontend App"}),(0,i.jsx)(t.td,{children:"Supporting frontend UI to test the aforementioned functionality."})]})]})]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-3",children:(0,i.jsx)(t.strong,{children:"Milestone 3"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated duration:"})," 3.0 weeks"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"})," 1"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"PTE:"})," 2"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"})," 7975 USD"]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"The main deliverables in this milestone are to use decentralized IPFS based storages to store all the files realated to tasks & advanced search. A file server integrated to nft storage will provided, using rocket framework & the search feature will be an update to the makerplace pallet. The skeletal UI will also be updated to showcase all the new features in Phase3."}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Sr no."}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0a"}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Apache 2.0"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0b"}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"We will provide both inline documentation of the code and a tutorial that explains how a user can use DOT Marketplace and understand the flow of tasking pallet."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0c"}),(0,i.jsx)(t.td,{children:"Testing Guide"}),(0,i.jsx)(t.td,{children:"Functions will be covered by unit tests, the documentation will describe how to run these tests. We will also provide scripts to help deploy, run and test the build."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0d"}),(0,i.jsx)(t.td,{children:"Docker Image"}),(0,i.jsx)(t.td,{children:"Docker image of the build"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"1"}),(0,i.jsx)(t.td,{children:"Decentralized Storage"}),(0,i.jsx)(t.td,{children:"All tasks related docs will be stored on a decentralized IPFS platform."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"2"}),(0,i.jsx)(t.td,{children:"Advanced Search"}),(0,i.jsx)(t.td,{children:"Search based on task progress, tags, tasks or milestone id's."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"3"}),(0,i.jsx)(t.td,{children:"Frontend App"}),(0,i.jsx)(t.td,{children:"Supporting frontend UI to test the aforementioned functionality."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"4"}),(0,i.jsx)(t.td,{children:"Website"}),(0,i.jsx)(t.td,{children:"Dedicated one-page website for Dot Marketplace."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"5"}),(0,i.jsx)(t.td,{children:"Article"}),(0,i.jsx)(t.td,{children:"Website article showing motivation behind phase 3 of dot marketplace and how to make the best use of it."})]})]})]}),"\n",(0,i.jsx)(t.h3,{id:"additional-project-details",children:(0,i.jsx)(t.strong,{children:"Additional Project Details"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Technology stack being used","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Rust, Substrate, React, Python, centralized cloud storage"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"future-plans",children:(0,i.jsx)(t.strong,{children:"Future Plans"})}),"\n",(0,i.jsx)(t.p,{children:"This is the last phase in our current roadmap. Post this we would focus on partnerships with chains on the dotsama ecosystem for integrating DotMarketplace as their native bounty management tool (this work has already started). If future, if the traction is great, we could create a fresh proposal for an excellent UI or integrate DotMarketplace within PolkaJS Apps itself with native support for multiple tokens besides DOT."}),"\n",(0,i.jsx)(t.h3,{id:""}),"\n",(0,i.jsxs)(t.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"How did you hear about the Grants Program?"})," Web3 Foundation Website, Polkadot India Buildathon"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"We have been working on this roadmap since we applied for the Web3 grant"}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>l,x:()=>a});var s=n(96540);const i={},r=s.createContext(i);function l(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/071b3461.949266a1.js b/assets/js/071b3461.949266a1.js new file mode 100644 index 00000000000..ffb945dc7ff --- /dev/null +++ b/assets/js/071b3461.949266a1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[20783],{69176:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>l,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"applications/dot_marketplace-Phase3","title":"Dot Marketplace v3","description":"- Status: Open","source":"@site/applications/dot_marketplace-Phase3.md","sourceDirName":"applications","slug":"/applications/dot_marketplace-Phase3","permalink":"/applications/dot_marketplace-Phase3","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/dot_marketplace-Phase3.md","tags":[],"version":"current","frontMatter":{}}');var i=n(74848),r=n(28453);const l={},a="Dot Marketplace v3",o={},d=[{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Repository Hierarchy",id:"repository-hierarchy",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-",level:2},{value:"Milestone 1",id:"milestone-1",level:3},{value:"Milestone 2",id:"milestone-2",level:3},{value:"Milestone 3",id:"milestone-3",level:3},{value:"Additional Project Details",id:"additional-project-details",level:3},{value:"Future Plans",id:"future-plans",level:3},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"dot-marketplace-v3",children:"Dot Marketplace v3"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Status:"})," Open"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Project Name:"})," Dot Marketplace"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Team Name:"})," Wow Labz"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Payment Address:"})," bc1qv954czydwz72egdzhkkuw85jegwrsmlt8a5xs8 (BTC - Bitcoin)"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Level:"})," 2"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(t.p,{children:"Links To Previous Approved Grants:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/master/applications/dot_marketplace.md",children:"Phase 1"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/master/applications/dot_marketplace-phase2.md",children:"Phase 2"})}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"This is phase 3 of Dot Marketplace, which is a general-purpose decentralized marketplace created as a Substrate pallet."}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Dot Marketplace can be used by any decentralized project to float tasks and invite their community members to execute them for a reward. Its POC was developed during the Polkadot India Buildathon (2021)."}),"\n",(0,i.jsx)(t.li,{children:"In the previous phases we have built a decentralised bounty platform and a decentralised court for dispute resolution. More details can be found on the respective grant proposals shared above."}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,i.jsxs)(t.p,{children:["The current scope of work involves ",(0,i.jsx)(t.strong,{children:"milestone-based submissions"})," in which a project is divided into multiple configurable milestones(min 1 and max 5) to allow parallel or sequential execution."]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Each project must have at least one milestone and can have a maximum of five milestones (configurable)"}),"\n",(0,i.jsx)(t.li,{children:"Each milestone has its independent bidding system where multiple workers can place their bids"}),"\n",(0,i.jsx)(t.li,{children:"The publisher can select a bid as per the requirement and ratings of the worker and other criteria that can be added to a user account."}),"\n",(0,i.jsx)(t.li,{children:"A worker can bid for multiple milestones of a single project based on their expertise."}),"\n",(0,i.jsx)(t.li,{children:"A project reaches completion only if all milestones in the project are completed and approved by the publisher."}),"\n",(0,i.jsx)(t.li,{children:"In our current implementation all milestones are independent, hence they can be completed and approved by the publisher irrespective of the overall project status."}),"\n",(0,i.jsx)(t.li,{children:"Based on the requirements, a publisher can add more milestones to a project even after it is pushed to the market, provided the total number of milestones does not exceed 5 (configurable)"}),"\n",(0,i.jsx)(t.li,{children:"Decentralized IPFS Storage for project materials using NFTStorage Provider. Each material will have a unique CID that can be accessed by both Publisher and Worker."}),"\n",(0,i.jsx)(t.li,{children:"Advance Search by task tags, ids & title."}),"\n",(0,i.jsxs)(t.li,{children:["The ",(0,i.jsx)(t.a,{href:"https://github.com/WowLabz/dot-marketplace-v2",children:"decentralized court"})," implemented in phase 2 is functional for each milestone of a project"]}),"\n",(0,i.jsx)(t.li,{children:"All of the above features will be updated as a new feature for the existing marketplace pallet. Similarly, the selekatal UI will be updated to showcase the same."}),"\n",(0,i.jsx)(t.li,{children:"A new file server written using the rocket framework will be provided for the integration with IPFS (using NftStorage)."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"The flow of tasking pallet with milestone based submission"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://user-images.githubusercontent.com/66478092/190300655-1d2085b3-b728-4ced-8238-f262a9c5c5f8.png",alt:"Tasking-Court-Flow4 drawio"})}),"\n",(0,i.jsx)(t.h3,{id:"repository-hierarchy",children:(0,i.jsx)(t.strong,{children:"Repository Hierarchy"})}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"node\n\u251c\u2500\u2500 build.rs\n\u251c\u2500\u2500 Cargo.toml\n\u2514\u2500\u2500 src\n \u251c\u2500\u2500 chain_spec.rs\n \u251c\u2500\u2500 cli.rs\n \u251c\u2500\u2500 command.rs\n \u251c\u2500\u2500 lib.rs\n \u251c\u2500\u2500 main.rs\n \u251c\u2500\u2500 rpc.rs\n \u2514\u2500\u2500 service.rs\npallets\n\u251c\u2500\u2500 pallet-chat\n\u2502 \u251c\u2500\u2500 Cargo.toml\n\u2502 \u251c\u2500\u2500 README.md\n\u2502 \u2514\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 benchmarking.rs\n\u2502 \u251c\u2500\u2500 lib.rs\n\u2502 \u251c\u2500\u2500 mock.rs\n\u2502 \u2514\u2500\u2500 tests.rs\n\u2514\u2500\u2500 pallet-tasking\n \u251c\u2500\u2500 Cargo.toml\n \u251c\u2500\u2500 README.md\n \u2514\u2500\u2500 src\n \u251c\u2500\u2500 benchmarking.rs\n \u251c\u2500\u2500 lib.rs\n \u251c\u2500\u2500 mock.rs\n \u251c\u2500\u2500 utils.rs\n \u2514\u2500\u2500 tests.rs\nruntime\n\u251c\u2500\u2500 build.rs\n\u251c\u2500\u2500 Cargo.toml\n\u2514\u2500\u2500 src\n \u2514\u2500\u2500 lib.rs\n"})}),"\n",(0,i.jsx)(t.p,{children:"The current focus is to enhance the existing Substrate pallet and allied code base to get a basic yet functional marketplace up and running."}),"\n",(0,i.jsx)(t.h3,{id:"ecosystem-fit",children:(0,i.jsx)(t.strong,{children:"Ecosystem Fit"})}),"\n",(0,i.jsx)(t.p,{children:"We believe this work could be helpful for any Polkadot parachains/parathreads interested in including a marketplace with on-chain dispute resolution."}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Almost all parachains/parathreads would find motivation in encouraging their community members to contribute meaningfully to their roadmap. This can be achieved by utilizing a marketplace like Dot Marketplace, where technical, marketing, or governance-centric projects can be published as bounties. And community members are invited to bid for and execute them."}),"\n",(0,i.jsx)(t.li,{children:"A milestone-based submission will enhance the functionality of the marketplace and provide a more comprehensive user experience for both the worker and the publisher."}),"\n",(0,i.jsx)(t.li,{children:"The on-chain court will act as a dispute resolution mechanism between users involved in a project. A set of community members meeting specific criteria get to be a part of the jury for the dispute and cast votes, based on which a decision is reached."}),"\n",(0,i.jsx)(t.li,{children:"To facilitate easier communication between a customer and a worker, a one-to-one chat feature is also created."}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"team-",children:(0,i.jsx)(t.strong,{children:"Team \ud83d\udc65"})}),"\n",(0,i.jsx)(t.h3,{id:"team-members",children:(0,i.jsx)(t.strong,{children:"Team members"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://www.linkedin.com/in/startupamit/",children:(0,i.jsx)(t.strong,{children:"Amit Singh"})})," [ Product Manager ]"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://www.linkedin.com/in/roshit/",children:(0,i.jsx)(t.strong,{children:"Roshit Omanakuttan"})})," [ Technical Architect ]"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://www.linkedin.com/in/loakesh-indiran-8a2282140",children:(0,i.jsx)(t.strong,{children:"Loakesh Indiran"})})," [ Full Stack Developer ]"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"http://www.linkedin.com/in/tejas-vijay-1430a3190",children:(0,i.jsx)(t.strong,{children:"Tejas Gaware"})})," [ Backend Developer ]"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://www.linkedin.com/in/rajat-petwal-947440197/",children:(0,i.jsx)(t.strong,{children:"Rajat Petwal"})})," [ Backend Developer ]"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"contact",children:(0,i.jsx)(t.strong,{children:"Contact"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Name:"})," Amit Singh"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Email:"})," amit (dot) singh (@) wowlabz.com"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Website:"})," ",(0,i.jsx)(t.a,{href:"https://www.wowlabz.com/",children:"http://www.wowlabz.com"})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Project Website:"})," ",(0,i.jsx)(t.a,{href:"https://dotmarketplace.co/",children:"Dot marketplace website"})]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"legal-structure",children:(0,i.jsx)(t.strong,{children:"Legal Structure"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Registered Address:"})," Wow Labz, 2Gethr Cowork, Tower B, Mantri Commercio, Outer Ring Rd, Bellandur, Bengaluru, Karnataka, India 560103"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Registered Legal Entity:"})," Wow Internet Labz Private Limited"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"teams-experience",children:(0,i.jsx)(t.strong,{children:"Team's experience"})}),"\n",(0,i.jsxs)(t.p,{children:["Dot Marketplace is being built by the team at Wow Labz. Wow Labz is one of India's leading turnkey product development companies. The team is also building Socialli - an interoperable metaverse protocol on Polkadot. Additionally the team at Wow Labz has built ",(0,i.jsx)(t.a,{href:"https://www.polkadotindia.org/",children:"Polkadot India"})," - a 15,000+ community of polkadot enthusiasts predominantly from the Indian region. The team has previously built a decentralized storage protocol called Lake Network - ",(0,i.jsx)(t.a,{href:"https://lakenetwork.io/",children:"https://lakenetwork.io/"})," in addition to multiple dApps on Ethereum, Stellar, EOS, and Hyperledger."]}),"\n",(0,i.jsxs)(t.p,{children:["A list of centralized and decentralised apps published can be found ",(0,i.jsx)(t.a,{href:"https://www.wowlabz.com/work/",children:"here"}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"team-code-repos",children:(0,i.jsx)(t.strong,{children:"Team Code Repos"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/orgs/WowLabz/projects",children:"https://github.com/orgs/WowLabz/projects"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/WowLabz/tasking_backend",children:"https://github.com/WowLabz/tasking_backend"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/WowLabz/tasking_frontend",children:"https://github.com/WowLabz/tasking_frontend"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/WowLabz/yoda_creator_economy_node",children:"https://github.com/WowLabz/yoda_creator_economy_node"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/WowLabz/dot-marketplace-v2",children:"https://github.com/WowLabz/dot-marketplace-v2"})}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"development-status-",children:(0,i.jsx)(t.strong,{children:"Development Status \ud83d\udcd6"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Here's a link to the approved grant proposal for the ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/master/applications/dot_marketplace.md",children:"first phase"})," and ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/master/applications/dot_marketplace-phase2.md",children:"second phase"})]}),"\n",(0,i.jsx)(t.li,{children:"We are in touch with @takahser and @Rouven from the Web 3 Grants and Treasuries team, respectively."}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"development-roadmap-",children:[(0,i.jsx)(t.strong,{children:"Development Roadmap"})," \ud83d\udd29"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.strong,{children:"Overview"})})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Estimated Duration:"})," 2.0 Months"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Full-Time Equivalent (FTE):"})," 2.39"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Costs:"})," 29,925 USD"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-1",children:(0,i.jsx)(t.strong,{children:"Milestone 1"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated duration:"})," 3.0 weeks"]}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.strong,{children:"FTE: 1"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.strong,{children:"PTE: 2"})}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"})," 12,725 USD"]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"The main deliverable for this milestone is to facilitate the creation of a project that can accommodate multiple milestones that may or may not depend on each other. These functionalities will be implemented as an upgrade to the existing marketplace pallet."}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Sr no."}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0a"}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Apache 2.0"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0b"}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"We will provide both inline documentation of the code and a tutorial that explains how a user can use DOT Marketplace and understand the flow of tasking pallet."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0c"}),(0,i.jsx)(t.td,{children:"Testing Guide"}),(0,i.jsx)(t.td,{children:"Functions will be covered by unit tests, the documentation will describe how to run these tests. We will also provide scripts to help deploy, run and test the build."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0d"}),(0,i.jsx)(t.td,{children:"Docker Image"}),(0,i.jsx)(t.td,{children:"Docker image of the build"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"1"}),(0,i.jsx)(t.td,{children:"Project Structure"}),(0,i.jsx)(t.td,{children:"The existing application only allows one milestone per project. Phase 3 modifies it to allow a publisher to add multiple milestones under the same project."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"2"}),(0,i.jsx)(t.td,{children:"Multiple Bidders"}),(0,i.jsx)(t.td,{children:"Multiple bidders can now bid for the same milestone, and the publisher can choose one worker based on the bidder ratings"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"3"}),(0,i.jsx)(t.td,{children:"Escrow"}),(0,i.jsx)(t.td,{children:"Multiple subaccounts are created for a project to account for each milestone and make it easier to store all funds for transfer/exchange."})]})]})]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-2",children:(0,i.jsx)(t.strong,{children:"Milestone 2"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated duration:"})," 2.0 weeks"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"})," 1"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"PTE:"})," 2"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"})," 9,225 USD"]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"In continuation to previous work, this milestone involves the creation of an on-chain decentralized court to handle dispute resolution. Each milestone can go into a dispute on the same scope as mentioned in the second phase of dot marketplace. The other milestones in a project are not affected by the dispute of one of the milestones. The court pallet will be upgraded to support these new features."}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Sr no."}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0a"}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Apache 2.0"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0b"}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"We will provide both inline documentation of the code and a tutorial that explains how a user can use DOT Marketplace and understand the flow of tasking pallet."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0c"}),(0,i.jsx)(t.td,{children:"Testing Guide"}),(0,i.jsx)(t.td,{children:"Functions will be covered by unit tests, the documentation will describe how to run these tests. We will also provide scripts to help deploy, run and test the build."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0d"}),(0,i.jsx)(t.td,{children:"Docker Image"}),(0,i.jsx)(t.td,{children:"Docker image of the build"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"1"}),(0,i.jsx)(t.td,{children:"Decentralized Court Module"}),(0,i.jsx)(t.td,{children:"An on-chain decentralized court for dispute resolution within the ecosystem."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"1a"}),(0,i.jsx)(t.td,{children:"Disapprove Milestone"}),(0,i.jsx)(t.td,{children:"In the case of a customer not being satisfied with the work submitted by the service provider (worker). A set of jurors is shortlisted (court summon) to resolve the dispute and pass a verdict."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"1b"}),(0,i.jsx)(t.td,{children:"Disapprove Rating"}),(0,i.jsx)(t.td,{children:"The customer or the service provider, once they have received their rating for a particular milestone and are not satisfied with it."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"1c"}),(0,i.jsx)(t.td,{children:"General Dispute"}),(0,i.jsx)(t.td,{children:"A general dispute function for cases that do not fall under the categories mentioned in 1a and 1b."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"2"}),(0,i.jsx)(t.td,{children:"Voting module"}),(0,i.jsx)(t.td,{children:"Each juror can review the dispute and cast their vote, which also includes their rating for both the customer and the worker. After two days, all the juror votes are counted, and a winner is identified."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"3"}),(0,i.jsx)(t.td,{children:"Frontend App"}),(0,i.jsx)(t.td,{children:"Supporting frontend UI to test the aforementioned functionality."})]})]})]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-3",children:(0,i.jsx)(t.strong,{children:"Milestone 3"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated duration:"})," 3.0 weeks"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"})," 1"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"PTE:"})," 2"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"})," 7975 USD"]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"The main deliverables in this milestone are to use decentralized IPFS based storages to store all the files realated to tasks & advanced search. A file server integrated to nft storage will provided, using rocket framework & the search feature will be an update to the makerplace pallet. The skeletal UI will also be updated to showcase all the new features in Phase3."}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Sr no."}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0a"}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Apache 2.0"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0b"}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"We will provide both inline documentation of the code and a tutorial that explains how a user can use DOT Marketplace and understand the flow of tasking pallet."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0c"}),(0,i.jsx)(t.td,{children:"Testing Guide"}),(0,i.jsx)(t.td,{children:"Functions will be covered by unit tests, the documentation will describe how to run these tests. We will also provide scripts to help deploy, run and test the build."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0d"}),(0,i.jsx)(t.td,{children:"Docker Image"}),(0,i.jsx)(t.td,{children:"Docker image of the build"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"1"}),(0,i.jsx)(t.td,{children:"Decentralized Storage"}),(0,i.jsx)(t.td,{children:"All tasks related docs will be stored on a decentralized IPFS platform."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"2"}),(0,i.jsx)(t.td,{children:"Advanced Search"}),(0,i.jsx)(t.td,{children:"Search based on task progress, tags, tasks or milestone id's."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"3"}),(0,i.jsx)(t.td,{children:"Frontend App"}),(0,i.jsx)(t.td,{children:"Supporting frontend UI to test the aforementioned functionality."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"4"}),(0,i.jsx)(t.td,{children:"Website"}),(0,i.jsx)(t.td,{children:"Dedicated one-page website for Dot Marketplace."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"5"}),(0,i.jsx)(t.td,{children:"Article"}),(0,i.jsx)(t.td,{children:"Website article showing motivation behind phase 3 of dot marketplace and how to make the best use of it."})]})]})]}),"\n",(0,i.jsx)(t.h3,{id:"additional-project-details",children:(0,i.jsx)(t.strong,{children:"Additional Project Details"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Technology stack being used","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Rust, Substrate, React, Python, centralized cloud storage"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"future-plans",children:(0,i.jsx)(t.strong,{children:"Future Plans"})}),"\n",(0,i.jsx)(t.p,{children:"This is the last phase in our current roadmap. Post this we would focus on partnerships with chains on the dotsama ecosystem for integrating DotMarketplace as their native bounty management tool (this work has already started). If future, if the traction is great, we could create a fresh proposal for an excellent UI or integrate DotMarketplace within PolkaJS Apps itself with native support for multiple tokens besides DOT."}),"\n",(0,i.jsx)(t.h3,{id:""}),"\n",(0,i.jsxs)(t.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"How did you hear about the Grants Program?"})," Web3 Foundation Website, Polkadot India Buildathon"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"We have been working on this roadmap since we applied for the Web3 grant"}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>l,x:()=>a});var s=n(96540);const i={},r=s.createContext(i);function l(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/071cfc94.9a7348f1.js b/assets/js/071cfc94.9a7348f1.js deleted file mode 100644 index 19e81ea722c..00000000000 --- a/assets/js/071cfc94.9a7348f1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[35778],{99298:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>a,metadata:()=>n,toc:()=>h});const n=JSON.parse('{"id":"applications/sunshine-keybase","title":"Sunshine Keybase","description":"Proposer:* 4meta5","source":"@site/applications/sunshine-keybase.md","sourceDirName":"applications","slug":"/applications/sunshine-keybase","permalink":"/applications/sunshine-keybase","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/sunshine-keybase.md","tags":[],"version":"current","frontMatter":{}}');var i=s(74848),r=s(28453);const a={},o="Sunshine Keybase",l={},h=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Chain Pallet",id:"chain-pallet",level:4},{value:"Keybase Pallet",id:"keybase-pallet",level:4},{value:"Flutter Android UI",id:"flutter-android-ui",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Team Website",id:"team-website",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Milestone 1 \u2014 Sunshine-Keybase + UI",id:"milestone-1--sunshine-keybase--ui",level:3},{value:"Community engagement",id:"community-engagement",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Past Work",id:"past-work",level:2}];function d(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"sunshine-keybase",children:"Sunshine Keybase"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Proposer:"})," ",(0,i.jsx)(t.a,{href:"https://github.com/4meta5",children:(0,i.jsx)(t.code,{children:"4meta5"})})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Payment Address:"})," 16uCivZhPAy4RiK5ZA1TEMo6Xq5pGTh4BA"]}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,i.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://github.com/sunshine-protocol/sunshine-keybase",children:(0,i.jsx)(t.code,{children:"sunshine-keybase"})})," implements ",(0,i.jsx)(t.a,{href:"https://book.keybase.io/docs/crypto/local-key-security",children:"Keybase's Local Key Security"})," to associate a set of keys with a ",(0,i.jsx)(t.code,{children:"UID"})," and manage this set of keys to sign and authenticate messages on the user's behalf. The implementation uses a Substrate runtime to enforce the rules of interaction with the keystore, especially as it pertains to revoking keys for a provisioned storage device."]}),"\n",(0,i.jsxs)(t.p,{children:["The project provides a usable keystore for ",(0,i.jsx)(t.a,{href:"https://martin.kleppmann.com/papers/local-first.pdf",children:"local first"})," applications using ",(0,i.jsx)(t.a,{href:"https://github.com/paritytech/substrate",children:"substrate"}),". The ",(0,i.jsx)(t.code,{children:"sunshine-identity"})," pallet provides structure to control a set of keys with a ",(0,i.jsx)(t.code,{children:"UID"})," and track storage metadata associated with the given ",(0,i.jsx)(t.code,{children:"UID"}),". The client uses ",(0,i.jsx)(t.a,{href:"https://github.com/ipfs-rust/ipfs-embed",children:(0,i.jsx)(t.code,{children:"ipfs-embed"})})," to store sensitive data offchain and encrypted on the local hardware. The ",(0,i.jsx)(t.code,{children:"sunshine-chain"})," pallet uses the same stack to coordinate storage of chain data amongst a closed set of clients."]}),"\n",(0,i.jsxs)(t.p,{children:["We believe ",(0,i.jsx)(t.a,{href:"https://github.com/sunshine-protocol/sunshine-keybase",children:(0,i.jsx)(t.code,{children:"sunshine-keybase"})})," provides a reusable identity architecture for other projects in the Web3 space. Moreover, the ",(0,i.jsx)(t.code,{children:"sunshine-chain"})," client and pallet demonstrate minimal design to set and enforce the storage of offchain data among a permissioned set of clients. This infrastructure will prove useful to substrate projects that need to coordinate and enforce private network storage of data offchain."]}),"\n",(0,i.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,i.jsx)(t.p,{children:"The project includes two pallets and a Flutter UI for Android."}),"\n",(0,i.jsx)(t.h4,{id:"chain-pallet",children:"Chain Pallet"}),"\n",(0,i.jsx)(t.p,{children:"The chain module is a reusable abstraction for building private proof of authority chains using ipfs and using substrate to provide authorization and consensus on the current head of the chain. When authoring a block on ipfs a race condition can occur. Due to substrate providing a total order of transactions only one transaction will succeed in updating the head of the chain, the other client will create a new block on the head of the chain and retry the failed operation."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://draftin.com:443/images/75511?token=ptiW5ycSDqtNQbpH3I24_9YXQQgh2YmbFtDSIT16ZBVaHVtRgQJBeMGmk94Yo3sVGjqJKj86iTmj9y9k6AF2Ujo",alt:"chain_module.svg"})}),"\n",(0,i.jsx)(t.h4,{id:"keybase-pallet",children:"Keybase Pallet"}),"\n",(0,i.jsx)(t.p,{children:"The keybase identity module manages the user's chain that stores the user key, device keys, password and social media accounts using the sunshine chain pallet. Private data shared between devices is encrypted with the user private key. When a new device is provisioned a key is generated locally on the device, and a provisioning protocol is used to communicate between the new device and the provisioning device."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://draftin.com:443/images/75515?token=ZVIuml8B13k3idkoLujuomRsDbSbgUGtzweL7qwj_HNDX8TYlq1iegqpvEnjVjddVdDdle57KVdD7MI7OJES5c8",alt:"keybase-module.svg"})}),"\n",(0,i.jsx)(t.p,{children:"Password changes are stored encrypted in the user chain. When a device receives a block with a password change it reencrypts it's local device key using the new password. This ensures that the user only needs to remember one password."}),"\n",(0,i.jsx)(t.p,{children:"Social media accounts are linked to a chain account, by submitting a proof in the social media profile and on the user's chain. Other users can find the on chain account on the social media page and verify that they are both controlled by the same cryptographic identity. This allows us to use github usernames as aliases without compromising the decentralized nature or security that blockchains provide. While resolving the social media account to an on chain identity requires the service to be online, already resolved identities are stored locally. This means that even if github is offline, transfers to already verified github accounts can be performed."}),"\n",(0,i.jsx)(t.h4,{id:"flutter-android-ui",children:"Flutter Android UI"}),"\n",(0,i.jsxs)(t.p,{children:["The Flutter UI allows Android users to initialize a local keystore and device identity using the ",(0,i.jsx)(t.code,{children:"sunshine-identity"})," pallet. It allows the user to initialize the keystore, set a passphrase, and change the passphrase. The UI also allows the user to paste links to github gists to prove ownership of github accounts."]}),"\n",(0,i.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,i.jsxs)(t.p,{children:["There are other approaches to creating an identity graph, but we have yet to find another substrate project that implements device-oriented key revocability. The native keystore leverages ",(0,i.jsx)(t.a,{href:"https://github.com/ipfs-rust/ipfs-embed",children:(0,i.jsx)(t.code,{children:"ipfs-embed"})})," to store sensitive data in an encrypted form on the local hardware. Over time, we expect ",(0,i.jsx)(t.a,{href:"https://github.com/ipfs-rust/ipfs-embed",children:(0,i.jsx)(t.code,{children:"ipfs-embed"})})," to evolve with the needs and requirements of users."]}),"\n",(0,i.jsx)(t.p,{children:"The current design coordinates the storage of private offchain data on permissioned client networks. Our project will use this identity infrastructure for sharing encrypted messages and backing up encrypted files, privately and within teams with membership tracked transparently on-chain."}),"\n",(0,i.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,i.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/4meta5",children:"Amar Singh"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/dvc94ch",children:"David Craven"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/shekohex",children:"Shady Khalifa"})}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"team-website",children:"Team Website"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://sunshine.foundation",children:"https://sunshine.foundation"})}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,i.jsx)(t.p,{children:"Sunshine Systems LLC"}),"\n",(0,i.jsx)(t.p,{children:"16192 Coastal Highway, Lewes, Delaware 19958, County of Sussex"}),"\n",(0,i.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://github.com/4meta5",children:"Amar"})," started and maintained the ",(0,i.jsx)(t.a,{href:"https://substrate.dev/recipes/",children:"Substrate Recipes"})," as an employee at Parity. He wrote the ",(0,i.jsx)(t.a,{href:"https://github.com/sunshine-protocol/sunshine-bounty",children:(0,i.jsx)(t.code,{children:"sunshine-bounty"})})," runtime, node, client, and CLI under Sunshine's first grant. He is an experienced substrate runtime developer."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://github.com/dvc94ch",children:"David"})," worked on substrate core development as an employee at Parity. He is the lead maintainer of ",(0,i.jsx)(t.a,{href:"https://github.com/ipfs-rust/ipfs-embed",children:(0,i.jsx)(t.code,{children:"ipfs-embed"})})," and contributes upstream often to ",(0,i.jsx)(t.a,{href:"https://github.com/paritytech/substrate-subxt/",children:(0,i.jsx)(t.code,{children:"substrate-subxt"})})," to meet Sunshine's Rust client requirements."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://github.com/shekohex",children:"Shady"})," is an experienced Typescript, Flutter, and Rust developer with contributions to many open source projects (i.e. ",(0,i.jsx)(t.a,{href:"https://github.com/nestjsx/nest-access-control/graphs/contributors",children:(0,i.jsx)(t.code,{children:"nest-access-control"})}),"). He is a pioneer in Rust-Dart FFI development with generic components released alongside his work on the Sunshine Flutter infrastructure i.e. ",(0,i.jsx)(t.a,{href:"https://github.com/shekohex/flutterust",children:(0,i.jsx)(t.code,{children:"flutterust"})}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/sunshine-protocol",children:"sunshine-protocol"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/ipfs-rust",children:"ipfs-rust"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/shekohex/flutterust",children:"flutterust"})}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,i.jsx)(t.p,{children:"There is only one milestone."}),"\n",(0,i.jsx)(t.h3,{id:"milestone-1--sunshine-keybase--ui",children:"Milestone 1 \u2014 Sunshine-Keybase + UI"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated Duration:"})," 6 weeks"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"})," 2"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"})," 1.5 BTC"]}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0a."}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Unlicense"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0b."}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"We will provide both inline documentation of the code and a basic tutorial that shows how to run the local dev node alongside the Flutter UI to register and manage a sunshine-identity on a local network."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0c."}),(0,i.jsx)(t.td,{children:"Testing Guide"}),(0,i.jsx)(t.td,{children:"The client will have substrate-subxt integration tests that verify behavior at the network level to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"1."}),(0,i.jsx)(t.td,{children:"Substrate module: Chain"}),(0,i.jsx)(t.td,{children:"We will create a pallet that allows a closed set of signers to build private proof of authority chains using ipfs and substrate. These chains consists of private data shared among the closed set."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"2."}),(0,i.jsx)(t.td,{children:"Substrate module: Identity"}),(0,i.jsx)(t.td,{children:"We will create a pallet that uses the Chain module to manage data relevant to the registered identity. This module adds more granular management when storing the user key, device keys, password and social media accounts."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"3."}),(0,i.jsx)(t.td,{children:"Flutter UI"}),(0,i.jsx)(t.td,{children:"We will write a Flutter UI that communicates directly between our Rust substrate-subxt client and our Flutter interface to express the user identity configuration interface."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"4."}),(0,i.jsx)(t.td,{children:"Substrate chain"}),(0,i.jsx)(t.td,{children:"Flutter UI works with local node to enable identity registration, password reset, and github authentication."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"5."}),(0,i.jsx)(t.td,{children:"Docker"}),(0,i.jsx)(t.td,{children:"We will provide a dockerfile to demonstrate the full functionality of our chain"})]})]})]}),"\n",(0,i.jsx)(t.h3,{id:"community-engagement",children:"Community engagement"}),"\n",(0,i.jsxs)(t.p,{children:["We will publish an article on ",(0,i.jsx)(t.code,{children:"dev.to"})," upon completion."]}),"\n",(0,i.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,i.jsx)(t.p,{children:"Sunshine Chain will launch in Q1 2021. We are continuing to build infrastructure that is useful for the interchain community as well as other individual substrate chains."}),"\n",(0,i.jsx)(t.h2,{id:"past-work",children:"Past Work"}),"\n",(0,i.jsxs)(t.p,{children:["We wrote a ",(0,i.jsx)(t.a,{href:"https://meta5.world/posts/ysunshine",children:"blog post"})," listing open source contributions funded by our first Web3 grant. Highlights include"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"7 governance pallets, configured into a runtime and node to express a Substrate DAO Chain"}),"\n",(0,i.jsx)(t.li,{children:"Rust client and CLI for interacting with the node"}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://github.com/paritytech/substrate-subxt/",children:(0,i.jsx)(t.code,{children:"substrate-subxt"})})," contributions to support native Rust clients and light clients (w/ 2 Parity projects now using substrate-subxt for this purpose -- ledgeracio, cargo contract)"]}),"\n",(0,i.jsxs)(t.li,{children:["Rust client which uses ",(0,i.jsx)(t.a,{href:"https://github.com/ipfs-rust/ipfs-embed",children:(0,i.jsx)(t.code,{children:"ipfs-embed"})})," for storage of data not necessary for Substrate runtime storage","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["including tooling around ",(0,i.jsx)(t.code,{children:"ipfs-embed"})," to facilitate error handling and improve the overall API"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["Rust-Dart FFI to call Rust client code from Flutter Dart User Interface","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"with intermediate infrastructure open sourced for the wider Rust and Flutter ecosystems"}),"\n",(0,i.jsx)(t.li,{children:"native keystore supports modern key management i.e. key rotation"}),"\n"]}),"\n"]}),"\n"]})]})}function c(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>a,x:()=>o});var n=s(96540);const i={},r=n.createContext(i);function a(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/071cfc94.e560b021.js b/assets/js/071cfc94.e560b021.js new file mode 100644 index 00000000000..48eb26daa97 --- /dev/null +++ b/assets/js/071cfc94.e560b021.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[35778],{95877:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>a,metadata:()=>n,toc:()=>h});const n=JSON.parse('{"id":"applications/sunshine-keybase","title":"Sunshine Keybase","description":"Proposer:* 4meta5","source":"@site/applications/sunshine-keybase.md","sourceDirName":"applications","slug":"/applications/sunshine-keybase","permalink":"/applications/sunshine-keybase","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/sunshine-keybase.md","tags":[],"version":"current","frontMatter":{}}');var i=s(74848),r=s(28453);const a={},o="Sunshine Keybase",l={},h=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Chain Pallet",id:"chain-pallet",level:4},{value:"Keybase Pallet",id:"keybase-pallet",level:4},{value:"Flutter Android UI",id:"flutter-android-ui",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Team Website",id:"team-website",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Milestone 1 \u2014 Sunshine-Keybase + UI",id:"milestone-1--sunshine-keybase--ui",level:3},{value:"Community engagement",id:"community-engagement",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Past Work",id:"past-work",level:2}];function d(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"sunshine-keybase",children:"Sunshine Keybase"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Proposer:"})," ",(0,i.jsx)(t.a,{href:"https://github.com/4meta5",children:(0,i.jsx)(t.code,{children:"4meta5"})})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Payment Address:"})," 16uCivZhPAy4RiK5ZA1TEMo6Xq5pGTh4BA"]}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,i.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://github.com/sunshine-protocol/sunshine-keybase",children:(0,i.jsx)(t.code,{children:"sunshine-keybase"})})," implements ",(0,i.jsx)(t.a,{href:"https://book.keybase.io/docs/crypto/local-key-security",children:"Keybase's Local Key Security"})," to associate a set of keys with a ",(0,i.jsx)(t.code,{children:"UID"})," and manage this set of keys to sign and authenticate messages on the user's behalf. The implementation uses a Substrate runtime to enforce the rules of interaction with the keystore, especially as it pertains to revoking keys for a provisioned storage device."]}),"\n",(0,i.jsxs)(t.p,{children:["The project provides a usable keystore for ",(0,i.jsx)(t.a,{href:"https://martin.kleppmann.com/papers/local-first.pdf",children:"local first"})," applications using ",(0,i.jsx)(t.a,{href:"https://github.com/paritytech/substrate",children:"substrate"}),". The ",(0,i.jsx)(t.code,{children:"sunshine-identity"})," pallet provides structure to control a set of keys with a ",(0,i.jsx)(t.code,{children:"UID"})," and track storage metadata associated with the given ",(0,i.jsx)(t.code,{children:"UID"}),". The client uses ",(0,i.jsx)(t.a,{href:"https://github.com/ipfs-rust/ipfs-embed",children:(0,i.jsx)(t.code,{children:"ipfs-embed"})})," to store sensitive data offchain and encrypted on the local hardware. The ",(0,i.jsx)(t.code,{children:"sunshine-chain"})," pallet uses the same stack to coordinate storage of chain data amongst a closed set of clients."]}),"\n",(0,i.jsxs)(t.p,{children:["We believe ",(0,i.jsx)(t.a,{href:"https://github.com/sunshine-protocol/sunshine-keybase",children:(0,i.jsx)(t.code,{children:"sunshine-keybase"})})," provides a reusable identity architecture for other projects in the Web3 space. Moreover, the ",(0,i.jsx)(t.code,{children:"sunshine-chain"})," client and pallet demonstrate minimal design to set and enforce the storage of offchain data among a permissioned set of clients. This infrastructure will prove useful to substrate projects that need to coordinate and enforce private network storage of data offchain."]}),"\n",(0,i.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,i.jsx)(t.p,{children:"The project includes two pallets and a Flutter UI for Android."}),"\n",(0,i.jsx)(t.h4,{id:"chain-pallet",children:"Chain Pallet"}),"\n",(0,i.jsx)(t.p,{children:"The chain module is a reusable abstraction for building private proof of authority chains using ipfs and using substrate to provide authorization and consensus on the current head of the chain. When authoring a block on ipfs a race condition can occur. Due to substrate providing a total order of transactions only one transaction will succeed in updating the head of the chain, the other client will create a new block on the head of the chain and retry the failed operation."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://draftin.com:443/images/75511?token=ptiW5ycSDqtNQbpH3I24_9YXQQgh2YmbFtDSIT16ZBVaHVtRgQJBeMGmk94Yo3sVGjqJKj86iTmj9y9k6AF2Ujo",alt:"chain_module.svg"})}),"\n",(0,i.jsx)(t.h4,{id:"keybase-pallet",children:"Keybase Pallet"}),"\n",(0,i.jsx)(t.p,{children:"The keybase identity module manages the user's chain that stores the user key, device keys, password and social media accounts using the sunshine chain pallet. Private data shared between devices is encrypted with the user private key. When a new device is provisioned a key is generated locally on the device, and a provisioning protocol is used to communicate between the new device and the provisioning device."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://draftin.com:443/images/75515?token=ZVIuml8B13k3idkoLujuomRsDbSbgUGtzweL7qwj_HNDX8TYlq1iegqpvEnjVjddVdDdle57KVdD7MI7OJES5c8",alt:"keybase-module.svg"})}),"\n",(0,i.jsx)(t.p,{children:"Password changes are stored encrypted in the user chain. When a device receives a block with a password change it reencrypts it's local device key using the new password. This ensures that the user only needs to remember one password."}),"\n",(0,i.jsx)(t.p,{children:"Social media accounts are linked to a chain account, by submitting a proof in the social media profile and on the user's chain. Other users can find the on chain account on the social media page and verify that they are both controlled by the same cryptographic identity. This allows us to use github usernames as aliases without compromising the decentralized nature or security that blockchains provide. While resolving the social media account to an on chain identity requires the service to be online, already resolved identities are stored locally. This means that even if github is offline, transfers to already verified github accounts can be performed."}),"\n",(0,i.jsx)(t.h4,{id:"flutter-android-ui",children:"Flutter Android UI"}),"\n",(0,i.jsxs)(t.p,{children:["The Flutter UI allows Android users to initialize a local keystore and device identity using the ",(0,i.jsx)(t.code,{children:"sunshine-identity"})," pallet. It allows the user to initialize the keystore, set a passphrase, and change the passphrase. The UI also allows the user to paste links to github gists to prove ownership of github accounts."]}),"\n",(0,i.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,i.jsxs)(t.p,{children:["There are other approaches to creating an identity graph, but we have yet to find another substrate project that implements device-oriented key revocability. The native keystore leverages ",(0,i.jsx)(t.a,{href:"https://github.com/ipfs-rust/ipfs-embed",children:(0,i.jsx)(t.code,{children:"ipfs-embed"})})," to store sensitive data in an encrypted form on the local hardware. Over time, we expect ",(0,i.jsx)(t.a,{href:"https://github.com/ipfs-rust/ipfs-embed",children:(0,i.jsx)(t.code,{children:"ipfs-embed"})})," to evolve with the needs and requirements of users."]}),"\n",(0,i.jsx)(t.p,{children:"The current design coordinates the storage of private offchain data on permissioned client networks. Our project will use this identity infrastructure for sharing encrypted messages and backing up encrypted files, privately and within teams with membership tracked transparently on-chain."}),"\n",(0,i.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,i.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/4meta5",children:"Amar Singh"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/dvc94ch",children:"David Craven"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/shekohex",children:"Shady Khalifa"})}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"team-website",children:"Team Website"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://sunshine.foundation",children:"https://sunshine.foundation"})}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,i.jsx)(t.p,{children:"Sunshine Systems LLC"}),"\n",(0,i.jsx)(t.p,{children:"16192 Coastal Highway, Lewes, Delaware 19958, County of Sussex"}),"\n",(0,i.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://github.com/4meta5",children:"Amar"})," started and maintained the ",(0,i.jsx)(t.a,{href:"https://substrate.dev/recipes/",children:"Substrate Recipes"})," as an employee at Parity. He wrote the ",(0,i.jsx)(t.a,{href:"https://github.com/sunshine-protocol/sunshine-bounty",children:(0,i.jsx)(t.code,{children:"sunshine-bounty"})})," runtime, node, client, and CLI under Sunshine's first grant. He is an experienced substrate runtime developer."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://github.com/dvc94ch",children:"David"})," worked on substrate core development as an employee at Parity. He is the lead maintainer of ",(0,i.jsx)(t.a,{href:"https://github.com/ipfs-rust/ipfs-embed",children:(0,i.jsx)(t.code,{children:"ipfs-embed"})})," and contributes upstream often to ",(0,i.jsx)(t.a,{href:"https://github.com/paritytech/substrate-subxt/",children:(0,i.jsx)(t.code,{children:"substrate-subxt"})})," to meet Sunshine's Rust client requirements."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://github.com/shekohex",children:"Shady"})," is an experienced Typescript, Flutter, and Rust developer with contributions to many open source projects (i.e. ",(0,i.jsx)(t.a,{href:"https://github.com/nestjsx/nest-access-control/graphs/contributors",children:(0,i.jsx)(t.code,{children:"nest-access-control"})}),"). He is a pioneer in Rust-Dart FFI development with generic components released alongside his work on the Sunshine Flutter infrastructure i.e. ",(0,i.jsx)(t.a,{href:"https://github.com/shekohex/flutterust",children:(0,i.jsx)(t.code,{children:"flutterust"})}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/sunshine-protocol",children:"sunshine-protocol"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/ipfs-rust",children:"ipfs-rust"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/shekohex/flutterust",children:"flutterust"})}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,i.jsx)(t.p,{children:"There is only one milestone."}),"\n",(0,i.jsx)(t.h3,{id:"milestone-1--sunshine-keybase--ui",children:"Milestone 1 \u2014 Sunshine-Keybase + UI"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated Duration:"})," 6 weeks"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"})," 2"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"})," 1.5 BTC"]}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0a."}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Unlicense"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0b."}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"We will provide both inline documentation of the code and a basic tutorial that shows how to run the local dev node alongside the Flutter UI to register and manage a sunshine-identity on a local network."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0c."}),(0,i.jsx)(t.td,{children:"Testing Guide"}),(0,i.jsx)(t.td,{children:"The client will have substrate-subxt integration tests that verify behavior at the network level to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"1."}),(0,i.jsx)(t.td,{children:"Substrate module: Chain"}),(0,i.jsx)(t.td,{children:"We will create a pallet that allows a closed set of signers to build private proof of authority chains using ipfs and substrate. These chains consists of private data shared among the closed set."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"2."}),(0,i.jsx)(t.td,{children:"Substrate module: Identity"}),(0,i.jsx)(t.td,{children:"We will create a pallet that uses the Chain module to manage data relevant to the registered identity. This module adds more granular management when storing the user key, device keys, password and social media accounts."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"3."}),(0,i.jsx)(t.td,{children:"Flutter UI"}),(0,i.jsx)(t.td,{children:"We will write a Flutter UI that communicates directly between our Rust substrate-subxt client and our Flutter interface to express the user identity configuration interface."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"4."}),(0,i.jsx)(t.td,{children:"Substrate chain"}),(0,i.jsx)(t.td,{children:"Flutter UI works with local node to enable identity registration, password reset, and github authentication."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"5."}),(0,i.jsx)(t.td,{children:"Docker"}),(0,i.jsx)(t.td,{children:"We will provide a dockerfile to demonstrate the full functionality of our chain"})]})]})]}),"\n",(0,i.jsx)(t.h3,{id:"community-engagement",children:"Community engagement"}),"\n",(0,i.jsxs)(t.p,{children:["We will publish an article on ",(0,i.jsx)(t.code,{children:"dev.to"})," upon completion."]}),"\n",(0,i.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,i.jsx)(t.p,{children:"Sunshine Chain will launch in Q1 2021. We are continuing to build infrastructure that is useful for the interchain community as well as other individual substrate chains."}),"\n",(0,i.jsx)(t.h2,{id:"past-work",children:"Past Work"}),"\n",(0,i.jsxs)(t.p,{children:["We wrote a ",(0,i.jsx)(t.a,{href:"https://meta5.world/posts/ysunshine",children:"blog post"})," listing open source contributions funded by our first Web3 grant. Highlights include"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"7 governance pallets, configured into a runtime and node to express a Substrate DAO Chain"}),"\n",(0,i.jsx)(t.li,{children:"Rust client and CLI for interacting with the node"}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://github.com/paritytech/substrate-subxt/",children:(0,i.jsx)(t.code,{children:"substrate-subxt"})})," contributions to support native Rust clients and light clients (w/ 2 Parity projects now using substrate-subxt for this purpose -- ledgeracio, cargo contract)"]}),"\n",(0,i.jsxs)(t.li,{children:["Rust client which uses ",(0,i.jsx)(t.a,{href:"https://github.com/ipfs-rust/ipfs-embed",children:(0,i.jsx)(t.code,{children:"ipfs-embed"})})," for storage of data not necessary for Substrate runtime storage","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["including tooling around ",(0,i.jsx)(t.code,{children:"ipfs-embed"})," to facilitate error handling and improve the overall API"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["Rust-Dart FFI to call Rust client code from Flutter Dart User Interface","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"with intermediate infrastructure open sourced for the wider Rust and Flutter ecosystems"}),"\n",(0,i.jsx)(t.li,{children:"native keystore supports modern key management i.e. key rotation"}),"\n"]}),"\n"]}),"\n"]})]})}function c(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>a,x:()=>o});var n=s(96540);const i={},r=n.createContext(i);function a(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/074c5a9e.b605a8c0.js b/assets/js/074c5a9e.b605a8c0.js deleted file mode 100644 index 199a9a8f69b..00000000000 --- a/assets/js/074c5a9e.b605a8c0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[77187],{56502:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"applications/staking-rewards-collector-front-end","title":"Staking Rewards Viewer","description":"This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don\'t remove any of the mandatory parts presented in bold letters or as headlines! Lines starting with a > (such as this one) can be removed.","source":"@site/applications/staking-rewards-collector-front-end.md","sourceDirName":"applications","slug":"/applications/staking-rewards-collector-front-end","permalink":"/applications/staking-rewards-collector-front-end","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/staking-rewards-collector-front-end.md","tags":[],"version":"current","frontMatter":{}}');var i=n(74848),r=n(28453);const o={},l="Staking Rewards Viewer",a={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"MockUp",id:"mockup",level:4},{value:"Technologies",id:"technologies",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Milestone 1 (Implementation & Testing)",id:"milestone-1-implementation--testing",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const t={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"staking-rewards-viewer",children:"Staking Rewards Viewer"})}),"\n",(0,i.jsxs)(t.blockquote,{children:["\n",(0,i.jsxs)(t.p,{children:["This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don't remove any of the mandatory parts presented in bold letters or as headlines! Lines starting with a ",(0,i.jsx)(t.code,{children:">"})," (such as this one) can be removed."]}),"\n",(0,i.jsxs)(t.p,{children:["See the ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/Open-Grants-Program/#pencil-process",children:"Open Grants Program Process"})," on how to submit a proposal."]}),"\n"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Team Name:"})," Jackson Harris III"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Payment Address:"})," Ethereum (DAI) payment address 0x2E07c8624da45FF0Bd4ba18dE7b9156995C44034."]}),"\n"]}),"\n",(0,i.jsxs)(t.blockquote,{children:["\n",(0,i.jsxs)(t.p,{children:["\u26a0\ufe0f ",(0,i.jsx)(t.em,{children:"The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe."})]}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,i.jsxs)(t.p,{children:["This application is in response to ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/General-Grants-Program/blob/master/rfps/staking-rewards-collector-front-end.md",children:"Front-End for Staking Rewards Collector"})]}),"\n",(0,i.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsxs)(t.p,{children:["This is a Staking Rewards Viewer for Polkadot and Kusama allowing users to view their staking rewards and easily download their search results.\nThis implementation will take the work started in the ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/staking-rewards-collector",children:"staking-rewards-collector"})," and integrate it with an easy to use modern front end using Next.js and deployed on Vercel with the goal of deploying to IPFS."]}),"\n",(0,i.jsx)(t.p,{children:"I am interested in utilizing my current Software engineering skills to contribute to the Polkadot ecosystem. I have been following the project for a few years and have been looking for a way to participate."}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://github.com/jackson-harris-iii/staking-rewards-viewer",children:"Propsoal Repo"})," with a screenshot of mockup created in Adobe Xd. Here is a quick demo video of a work in progress ",(0,i.jsx)(t.a,{href:"https://www.loom.com/share/435c92cb3abe4984b18716642d01f631",children:"Video"})," and a ",(0,i.jsx)(t.a,{href:"https://staking-rewards-viewer.vercel.app/",children:"Deployed"})," demo on vercel. (currently, the vercel version is not making requests. Looking at swapping out the curlRequest for fetch API calls."]}),"\n",(0,i.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,i.jsx)(t.h4,{id:"mockup",children:"MockUp"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://github.com/jackson-harris-iii/staking-rewards-viewer/blob/main/mockup.png",alt:""})}),"\n",(0,i.jsx)(t.h4,{id:"technologies",children:"Technologies"}),"\n",(0,i.jsx)(t.p,{children:"We expect the teams to already have a solid idea about your project's expected final state. Therefore, we ask the teams to submit (where relevant):"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Mockups/designs Adobe Xd"}),"\n",(0,i.jsx)(t.li,{children:"Front End: Next.js, Material Design Bootstrap React"}),"\n",(0,i.jsx)(t.li,{children:"Back End: N/A (The applicatoin will use a serverless design on Vercel/Fleek)"}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/staking-rewards-collector",children:"staking-rewards-collector"})," is a tool to gather staking rewards for given addresses and cross-reference those with daily price data. This is a very useful tool for every validator and nominator in the ecosystem. However, since it has currently a CLI and requires some technical knowledge to set up (git, nodejs, yarn). A front-end hosted on a website could help many users getting access to this tool and enjoy the benefits."]}),"\n",(0,i.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,i.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Jackson Harris ",(0,i.jsx)(t.a,{href:"https://www.linkedin.com/in/jacksonharris3/",children:"Linkedin"})," ",(0,i.jsx)(t.a,{href:"https://github.com/jackson-harris-iii",children:"GitHub"})]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Name:"})," Jackson Harris III"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Email:"})," ",(0,i.jsx)(t.a,{href:"mailto:jackson.harris3@gmail.com",children:"jackson.harris3@gmail.com"})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Website:"})," ",(0,i.jsx)(t.a,{href:"https://www.linkedin.com/in/jacksonharris3/",children:"https://www.linkedin.com/in/jacksonharris3/"})]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Registered Address:"})," Can Provide Home Address offline"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Registered Legal Entity:"})," Freelance/Contractor for tax purposes I am an Independent Contractor"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,i.jsx)(t.p,{children:"Jackson Harris: Software Engineer 3 years, Digital Marketing/Business Development 10 years."}),"\n",(0,i.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/jackson-harris-iii/staking-rewards-viewer",children:"https://github.com/jackson-harris-iii/staking-rewards-viewer"})}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://www.linkedin.com/in/jacksonharris3/",children:"https://www.linkedin.com/in/jacksonharris3/"})}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,i.jsx)(t.p,{children:"If you've already started implementing your project or it is part of a larger repository, please provide a link and a description of the code here. In any case, please provide some documentation on the research and other work you have conducted before applying. This could be:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Original ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/General-Grants-Program/blob/master/rfps/staking-rewards-collector-front-end.md",children:"RFP"})," (requests for proposal),"]}),"\n",(0,i.jsxs)(t.li,{children:["Conversation reference to my original ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/General-Grants-Program/pull/439",children:"submission"})," with @axl of w3f"]}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-1-implementation--testing",children:"Milestone 1 (Implementation & Testing)"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated Duration:"})," 12 days"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"})," 12"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"})," 4000 USD"]}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0a."}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Apache 2.0"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0b."}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsxs)(t.td,{children:["We will provide both ",(0,i.jsx)(t.strong,{children:"inline documentation"})," of the code and a basic ",(0,i.jsx)(t.strong,{children:"tutorial"})," that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works."]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0c."}),(0,i.jsx)(t.td,{children:"Testing Guide"}),(0,i.jsx)(t.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0d."}),(0,i.jsx)(t.td,{children:"Docker"}),(0,i.jsx)(t.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"1."}),(0,i.jsx)(t.td,{children:"UI for user input"}),(0,i.jsx)(t.td,{children:"Develop an UI to request necessary data from the users."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"2a."}),(0,i.jsx)(t.td,{children:"Address LookUp Functionality"}),(0,i.jsx)(t.td,{children:"Allow users to enter multiple wallet addresses for either or both the Polkdaot and/or Kusama networks and deploy these features to Vercel."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"2b."}),(0,i.jsx)(t.td,{children:"CSV/JSON Download"}),(0,i.jsx)(t.td,{children:"Enable users to download a copy of their lookup results in either CSV or JSON format."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,i.jsx)(t.td,{children:"Form validation"}),(0,i.jsx)(t.td,{children:"Add form validation to wallet address input while still allowing for multiple addresses to be entered. Validation for fiat amounts that will properly display based on the selected currency."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"4."}),(0,i.jsx)(t.td,{children:"UI for data visualizer"}),(0,i.jsx)(t.td,{children:"Develop an environment to display the output (.csv and .json) for the end user in a pleasurable way."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"5."}),(0,i.jsx)(t.td,{children:"Tooltips/Helpers"}),(0,i.jsx)(t.td,{children:"Implement help texts and tooltips to explain the different features and inputs to users."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"6."}),(0,i.jsx)(t.td,{children:"Testing"}),(0,i.jsx)(t.td,{children:"Write tests to confirm the application behaves as expected"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"7."}),(0,i.jsx)(t.td,{children:"Polishing & Delivery"}),(0,i.jsx)(t.td,{children:"Reach out for feedback to the Grants Team. Integrate final feedback on functional, as well as cosmetic changes like font size, colors, typos etc."})]})]})]}),"\n",(0,i.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Collaborate with the original RFP proposer to determine how to best promote the finished application throughout the community."}),"\n",(0,i.jsx)(t.li,{children:"Ask the community for suggestions to improve and add new features as necesary."}),"\n",(0,i.jsx)(t.li,{children:"Refactor and Deploy to IPFS"}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"How did you hear about the Grants Program?"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"I watched a video, on youtube, with Gavin Wood where he mentioned the Web3 Foundation and the grants program."}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>l});var s=n(96540);const i={},r=s.createContext(i);function o(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/074c5a9e.ea8acc02.js b/assets/js/074c5a9e.ea8acc02.js new file mode 100644 index 00000000000..6be8aa56a5b --- /dev/null +++ b/assets/js/074c5a9e.ea8acc02.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[77187],{81697:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"applications/staking-rewards-collector-front-end","title":"Staking Rewards Viewer","description":"This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don\'t remove any of the mandatory parts presented in bold letters or as headlines! Lines starting with a > (such as this one) can be removed.","source":"@site/applications/staking-rewards-collector-front-end.md","sourceDirName":"applications","slug":"/applications/staking-rewards-collector-front-end","permalink":"/applications/staking-rewards-collector-front-end","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/staking-rewards-collector-front-end.md","tags":[],"version":"current","frontMatter":{}}');var i=n(74848),r=n(28453);const o={},l="Staking Rewards Viewer",a={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"MockUp",id:"mockup",level:4},{value:"Technologies",id:"technologies",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Milestone 1 (Implementation & Testing)",id:"milestone-1-implementation--testing",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const t={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"staking-rewards-viewer",children:"Staking Rewards Viewer"})}),"\n",(0,i.jsxs)(t.blockquote,{children:["\n",(0,i.jsxs)(t.p,{children:["This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don't remove any of the mandatory parts presented in bold letters or as headlines! Lines starting with a ",(0,i.jsx)(t.code,{children:">"})," (such as this one) can be removed."]}),"\n",(0,i.jsxs)(t.p,{children:["See the ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/Open-Grants-Program/#pencil-process",children:"Open Grants Program Process"})," on how to submit a proposal."]}),"\n"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Team Name:"})," Jackson Harris III"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Payment Address:"})," Ethereum (DAI) payment address 0x2E07c8624da45FF0Bd4ba18dE7b9156995C44034."]}),"\n"]}),"\n",(0,i.jsxs)(t.blockquote,{children:["\n",(0,i.jsxs)(t.p,{children:["\u26a0\ufe0f ",(0,i.jsx)(t.em,{children:"The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe."})]}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,i.jsxs)(t.p,{children:["This application is in response to ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/General-Grants-Program/blob/master/rfps/staking-rewards-collector-front-end.md",children:"Front-End for Staking Rewards Collector"})]}),"\n",(0,i.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsxs)(t.p,{children:["This is a Staking Rewards Viewer for Polkadot and Kusama allowing users to view their staking rewards and easily download their search results.\nThis implementation will take the work started in the ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/staking-rewards-collector",children:"staking-rewards-collector"})," and integrate it with an easy to use modern front end using Next.js and deployed on Vercel with the goal of deploying to IPFS."]}),"\n",(0,i.jsx)(t.p,{children:"I am interested in utilizing my current Software engineering skills to contribute to the Polkadot ecosystem. I have been following the project for a few years and have been looking for a way to participate."}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://github.com/jackson-harris-iii/staking-rewards-viewer",children:"Propsoal Repo"})," with a screenshot of mockup created in Adobe Xd. Here is a quick demo video of a work in progress ",(0,i.jsx)(t.a,{href:"https://www.loom.com/share/435c92cb3abe4984b18716642d01f631",children:"Video"})," and a ",(0,i.jsx)(t.a,{href:"https://staking-rewards-viewer.vercel.app/",children:"Deployed"})," demo on vercel. (currently, the vercel version is not making requests. Looking at swapping out the curlRequest for fetch API calls."]}),"\n",(0,i.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,i.jsx)(t.h4,{id:"mockup",children:"MockUp"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://github.com/jackson-harris-iii/staking-rewards-viewer/blob/main/mockup.png",alt:""})}),"\n",(0,i.jsx)(t.h4,{id:"technologies",children:"Technologies"}),"\n",(0,i.jsx)(t.p,{children:"We expect the teams to already have a solid idea about your project's expected final state. Therefore, we ask the teams to submit (where relevant):"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Mockups/designs Adobe Xd"}),"\n",(0,i.jsx)(t.li,{children:"Front End: Next.js, Material Design Bootstrap React"}),"\n",(0,i.jsx)(t.li,{children:"Back End: N/A (The applicatoin will use a serverless design on Vercel/Fleek)"}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/staking-rewards-collector",children:"staking-rewards-collector"})," is a tool to gather staking rewards for given addresses and cross-reference those with daily price data. This is a very useful tool for every validator and nominator in the ecosystem. However, since it has currently a CLI and requires some technical knowledge to set up (git, nodejs, yarn). A front-end hosted on a website could help many users getting access to this tool and enjoy the benefits."]}),"\n",(0,i.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,i.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Jackson Harris ",(0,i.jsx)(t.a,{href:"https://www.linkedin.com/in/jacksonharris3/",children:"Linkedin"})," ",(0,i.jsx)(t.a,{href:"https://github.com/jackson-harris-iii",children:"GitHub"})]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Name:"})," Jackson Harris III"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Email:"})," ",(0,i.jsx)(t.a,{href:"mailto:jackson.harris3@gmail.com",children:"jackson.harris3@gmail.com"})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Website:"})," ",(0,i.jsx)(t.a,{href:"https://www.linkedin.com/in/jacksonharris3/",children:"https://www.linkedin.com/in/jacksonharris3/"})]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Registered Address:"})," Can Provide Home Address offline"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Registered Legal Entity:"})," Freelance/Contractor for tax purposes I am an Independent Contractor"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,i.jsx)(t.p,{children:"Jackson Harris: Software Engineer 3 years, Digital Marketing/Business Development 10 years."}),"\n",(0,i.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/jackson-harris-iii/staking-rewards-viewer",children:"https://github.com/jackson-harris-iii/staking-rewards-viewer"})}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://www.linkedin.com/in/jacksonharris3/",children:"https://www.linkedin.com/in/jacksonharris3/"})}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,i.jsx)(t.p,{children:"If you've already started implementing your project or it is part of a larger repository, please provide a link and a description of the code here. In any case, please provide some documentation on the research and other work you have conducted before applying. This could be:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Original ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/General-Grants-Program/blob/master/rfps/staking-rewards-collector-front-end.md",children:"RFP"})," (requests for proposal),"]}),"\n",(0,i.jsxs)(t.li,{children:["Conversation reference to my original ",(0,i.jsx)(t.a,{href:"https://github.com/w3f/General-Grants-Program/pull/439",children:"submission"})," with @axl of w3f"]}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-1-implementation--testing",children:"Milestone 1 (Implementation & Testing)"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated Duration:"})," 12 days"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"})," 12"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"})," 4000 USD"]}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0a."}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Apache 2.0"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0b."}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsxs)(t.td,{children:["We will provide both ",(0,i.jsx)(t.strong,{children:"inline documentation"})," of the code and a basic ",(0,i.jsx)(t.strong,{children:"tutorial"})," that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works."]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0c."}),(0,i.jsx)(t.td,{children:"Testing Guide"}),(0,i.jsx)(t.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"0d."}),(0,i.jsx)(t.td,{children:"Docker"}),(0,i.jsx)(t.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"1."}),(0,i.jsx)(t.td,{children:"UI for user input"}),(0,i.jsx)(t.td,{children:"Develop an UI to request necessary data from the users."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"2a."}),(0,i.jsx)(t.td,{children:"Address LookUp Functionality"}),(0,i.jsx)(t.td,{children:"Allow users to enter multiple wallet addresses for either or both the Polkdaot and/or Kusama networks and deploy these features to Vercel."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"2b."}),(0,i.jsx)(t.td,{children:"CSV/JSON Download"}),(0,i.jsx)(t.td,{children:"Enable users to download a copy of their lookup results in either CSV or JSON format."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,i.jsx)(t.td,{children:"Form validation"}),(0,i.jsx)(t.td,{children:"Add form validation to wallet address input while still allowing for multiple addresses to be entered. Validation for fiat amounts that will properly display based on the selected currency."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"4."}),(0,i.jsx)(t.td,{children:"UI for data visualizer"}),(0,i.jsx)(t.td,{children:"Develop an environment to display the output (.csv and .json) for the end user in a pleasurable way."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"5."}),(0,i.jsx)(t.td,{children:"Tooltips/Helpers"}),(0,i.jsx)(t.td,{children:"Implement help texts and tooltips to explain the different features and inputs to users."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"6."}),(0,i.jsx)(t.td,{children:"Testing"}),(0,i.jsx)(t.td,{children:"Write tests to confirm the application behaves as expected"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:"7."}),(0,i.jsx)(t.td,{children:"Polishing & Delivery"}),(0,i.jsx)(t.td,{children:"Reach out for feedback to the Grants Team. Integrate final feedback on functional, as well as cosmetic changes like font size, colors, typos etc."})]})]})]}),"\n",(0,i.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Collaborate with the original RFP proposer to determine how to best promote the finished application throughout the community."}),"\n",(0,i.jsx)(t.li,{children:"Ask the community for suggestions to improve and add new features as necesary."}),"\n",(0,i.jsx)(t.li,{children:"Refactor and Deploy to IPFS"}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"How did you hear about the Grants Program?"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"I watched a video, on youtube, with Gavin Wood where he mentioned the Web3 Foundation and the grants program."}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>l});var s=n(96540);const i={},r=s.createContext(i);function o(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/075bc5a3.0a7e1f4a.js b/assets/js/075bc5a3.0a7e1f4a.js deleted file mode 100644 index d58af70515c..00000000000 --- a/assets/js/075bc5a3.0a7e1f4a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[4925],{86637:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"applications/Maki","title":"Maki","description":"- Team Name: Cyril Carlier (Individual)","source":"@site/applications/Maki.md","sourceDirName":"applications","slug":"/applications/Maki","permalink":"/applications/Maki","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/Maki.md","tags":[],"version":"current","frontMatter":{}}');var s=n(74848),r=n(28453);const o={},a="Maki",l={},c=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Overview :",id:"overview-",level:4},{value:"Maki's Functions :",id:"makis-functions-",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 Implement Voter functions",id:"milestone-1--implement-voter-functions",level:3},{value:"Milestone 2 \u2014 Coordinator's functions",id:"milestone-2--coordinators-functions",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function d(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"maki",children:"Maki"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Team Name:"})," Cyril Carlier (Individual)"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Payment Address:"})," 0x8a0cFA1DE5c26e3Cd553F33Dc560fBfa5267867C (ERC-20 USDC)"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsxs)(t.strong,{children:[(0,s.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 1"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Status:"})," Terminated"]}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsxs)(t.p,{children:["This application is a response from the ",(0,s.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/master/rfps/open/anti-collusion_infrastructure.md",children:"anti-collusion infrastructure RFP"}),"."]}),"\n",(0,s.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsxs)(t.p,{children:["Maki aims to be a simple MACI implementation for the Polkadot eco-system, similar to the existing one on Ethereum (",(0,s.jsx)(t.a,{href:"https://github.com/privacy-scaling-explorations/maci",children:"MACI"}),")"]}),"\n",(0,s.jsxs)(t.p,{children:["Maki is an ink! smart contract that implements a minimal anti-collusion infrastructure as specified in the following ",(0,s.jsx)(t.a,{href:"https://github.com/privacy-scaling-explorations/maci/tree/9b1b1a631090ee89d2bc12f4bcef7763e42caef0/specs",children:"specifications"})," and derived from ",(0,s.jsx)(t.a,{href:"https://ethresear.ch/t/minimal-anti-collusion-infrastructure/5413",children:"this ethresearch post"}),". This means that most of the project details are based on the researches done on ",(0,s.jsx)(t.a,{href:"https://ethresear.ch/t/minimal-anti-collusion-infrastructure/5413",children:"MACI"})," and the specifications. Things may differ by making Maki a more simple version of MACI."]}),"\n",(0,s.jsx)(t.p,{children:"As explained in the RFP, the smart contract aims to allow users to vote on a quadratic voting and avoid/minimize the risk of collusion, keep the votes anonymous and allow the users to change their votes until the voting process ends."}),"\n",(0,s.jsx)(t.p,{children:"Governance is an important part of Polkadot and (even more for now I'd say) Kusama, while a a lot of use cases of governance mechanisms are already implemented and running on the ecosystems (via pallets and smart contracts), a voting system for quadratic voting, anonymous voting and anti-collusion is not available yet.\nThat is why the project fits well for Polkadot and Kusama."}),"\n",(0,s.jsx)(t.p,{children:"I'm interested in this project because governance is a major component in decentralized ecosystems and adding more needed possibilities to the panel of voting mechanism of Polkadot and Kusama seems important to me.\nWhile for now I'm unsure the current projects on Polkadot/Kusama needs such mechanism, it is obvious some will need such anti-collusion and anonymous voting for its users."}),"\n",(0,s.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(t.p,{children:"Following the specifications of MACI as linked above, here is an overview of the architecture and core functionalities of Maki."}),"\n",(0,s.jsx)(t.p,{children:"Maki is a smart contract that allow its users to vote while making collusion among participant difficult (if the operator is honest) and retain censorship resistance, correct execution and anonymity of votes."}),"\n",(0,s.jsxs)(t.p,{children:["Maki has two kind of users: one ",(0,s.jsx)(t.strong,{children:"operator"})," and 0..n ",(0,s.jsx)(t.strong,{children:"voter(s)"})," (also called user here under)."]}),"\n",(0,s.jsx)(t.p,{children:"The operator role is to deploy the contract (and publish his public key, known by all), start the sign-up period (which is done when the contract is deployed), process all the voters commands, generate the result of each commands, tally the votes and generate a zk-SNARK proof that the result is valid."}),"\n",(0,s.jsx)(t.p,{children:"The voter role is to sign-up for a vote and then vote."}),"\n",(0,s.jsx)(t.p,{children:"Secrecy of the votes are possible by using cryptographic operations. As described in the MACI specs, each users and the coordinator have a key-pair used to publish encrypted messages and for the coordinator to decrypt those messages."}),"\n",(0,s.jsx)(t.h4,{id:"overview-",children:"Overview :"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://i.imgur.com/n4tmk6p.png",alt:""})}),"\n",(0,s.jsx)(t.h4,{id:"makis-functions-",children:"Maki's Functions :"}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"signUp"})," allows a user to register for voting by sending his public key to the contract. There is no need for a given user to call this function multiple times."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"publishMessage"})," allows a user to vote. A voter may use this multiple time to change his vote options, as long as the vote in not ended."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"processMessages"})," function called by the coordinator to process all the users' messages, update the state root and provide a zk-snark proof."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"proveVoteTally"})," to publish the vote result and the zk-snark proof of it. Called by the coordinator. Can only be called once the vote ended."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"verifyVoteTally"})," to verify that the generated zkSnark proof is valid."]}),"\n",(0,s.jsx)(t.p,{children:"Public functions are needed for the coordinator to process the votes off-chain (basically the contract's state such as stateTree, messageTree, etc.) and the voter to get the coordinator's key."}),"\n",(0,s.jsxs)(t.p,{children:["Besides the contract, we will provide two circuits to build the zk-Snark proof off-chain, one for the correctness of message processing (",(0,s.jsx)(t.code,{children:"proveStateCorrectness"}),") and one for the vote tallying (",(0,s.jsx)(t.code,{children:"proveVoteTallyCorrectness"}),"). The circuits will be written in ",(0,s.jsx)(t.a,{href:"https://docs.circom.io/",children:"circom"})," and it will be used through a script that build and execute the compiled circuit. This is needed for the coordinator's functions ",(0,s.jsx)(t.code,{children:"processMessages"})," and ",(0,s.jsx)(t.code,{children:"proveVoteTally"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["Maki has two merkle roots, one for the ",(0,s.jsx)(t.code,{children:"messageTree"})," (which gathers submitted messages) and one for the ",(0,s.jsx)(t.code,{children:"stateTree"})," (which gathers the mapping between the user public keys and the votes)."]}),"\n",(0,s.jsx)(t.p,{children:"Maki will be implemented as an ink! smart contract, so it will be developed in Rust with ink! library."}),"\n",(0,s.jsxs)(t.p,{children:["Maki will ",(0,s.jsx)(t.em,{children:"not"})," provide out-of-the-box choices of circuits used for zk-SNARK proof (as it may vary depending on the nature of the voting system), nor choices of the type of voting mechanism (non-quadratic votes, conviction votes, different tallying (such as what can be found on Polkadot and Kusama referenda), etc.). However this could be part of a maintenance program, a future plan, and/or another team may develop these features to meet their needs."]}),"\n",(0,s.jsxs)(t.p,{children:["The goal being to have a functioning contract, the circuit is not my main concern here.Therefore, an existing circuit will be reused (in Typescript) - most likely one that is implemented by ",(0,s.jsx)(t.a,{href:"https://github.com/privacy-scaling-explorations/maci",children:"MACI"}),". I'll give full credits to their implementation, even if this requires some adaptations on my end."]}),"\n",(0,s.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsx)(t.p,{children:"Maki can be used in any blockchain that supports ink! smart contracts."}),"\n",(0,s.jsx)(t.p,{children:"It can be reused - as provided or modified - by any blockchain, dApp, infrastructures, ... that wishes to provide a way to make quadratic votes for its users."}),"\n",(0,s.jsx)(t.p,{children:"I'm not aware of any similar project on Substrate. Despite that there are different existing voting mechanisms on Polkadot/Kusama, this one is the only one that would provide a quadratic, provable, anonymous and anti-collusion voting system."}),"\n",(0,s.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Cyril Carlier"}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Contact Name:"})," Cyril Carlier"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Contact Email:"})," ",(0,s.jsx)(t.a,{href:"mailto:cyrilcarlier@hotmail.com",children:"cyrilcarlier@hotmail.com"})]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsx)(t.p,{children:"Individual / Sole Proprietor"}),"\n",(0,s.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsx)(t.p,{children:"I'm a software developer with 5 years of relevant experience in C#/.Net, Java(with Spring/Hibernate), Typescript, React, C++, SQL and Angular, working mainly on DDD projects and lower-level projects (such as background-jobs services, multi-thread related projects). I have a master degree in Computer Science (University of Namur - Belgium)."}),"\n",(0,s.jsx)(t.p,{children:"Here is an overview of different relevant project I've worked / working on :"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"http://www.polkauction.io/",children:"Polk-auction"}),": A project funded by this program (",(0,s.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/2606f01f2fed14bb358560c8ececc9ad05e40bb8/applications/polk-auction.md",children:"polk-auction application"}),") which is a project that allow Polkadot and Kusama end-users to have a concise, simple an easy to understand view of the parachain, auction and crowdloan state of the Dotsama's ecosystem. Focused on on-chain data with some useful and relevant off-chain information surrounding the state of Polkadot / Kusama. While the project is online, I don't consider it \"finished\" as there is still a lot of things to add and enhance on Polk-auction."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Project with background processing of files and websocket messaging for communication between multiple applications."}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Different DDD projects with back-end(s) (HTTP API, written with .NetCore and Entity) and UI app(s) (web-app), multiple databases and mechanisms for back-end communication if/when needed."}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Multiple other projects and PoC, mostly with backend technologies (Java, C++, C#)"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"If anyone on your team has applied for a grant at the Web3 Foundation previously, please list the name of the project and legal entity here."}),"\n",(0,s.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/CrommVardek",children:"https://github.com/CrommVardek"})}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://www.linkedin.com/in/cyril-carlier/",children:"https://www.linkedin.com/in/cyril-carlier/"})}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,s.jsxs)(t.p,{children:["As mentioned, this application is a response from the ",(0,s.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/master/rfps/open/anti-collusion_infrastructure.md",children:"anti-collusion infrastructure RFP"})]}),"\n",(0,s.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Total Estimated Duration:"})," 15 months"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Full-Time Equivalent (FTE):"})," 0.15 FTE"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Total Costs:"})," $9,000"]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"milestone-1--implement-voter-functions",children:"Milestone 1 \u2014 Implement Voter functions"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Estimated duration:"})," 9 months"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"FTE:"})," 0.1 FTE"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Costs:"})," 3,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(t.th,{children:"Deliverable"}),(0,s.jsx)(t.th,{children:"Specification"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(t.td,{children:"License"}),(0,s.jsx)(t.td,{children:"MIT"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(t.td,{children:"Documentation"}),(0,s.jsxs)(t.td,{children:["We will provide both ",(0,s.jsx)(t.strong,{children:"inline documentation"})," of the code and a basic ",(0,s.jsx)(t.strong,{children:"tutorial"})," that explains how a user can deploy the contract and use its functions. References, such as the MACI research page or the specs of MACI implementation, will be provided."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0c."}),(0,s.jsx)(t.td,{children:"Testing Guide"}),(0,s.jsx)(t.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(t.td,{children:"Maki: constructor and internal state"}),(0,s.jsx)(t.td,{children:"Contract internal state needed to work properly and its constructor"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(t.td,{children:"Maki: signUp function"}),(0,s.jsx)(t.td,{children:"User function to register for the vote (ink!)"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,s.jsx)(t.td,{children:"Maki: publishMessage function"}),(0,s.jsx)(t.td,{children:"User function to vote (ink!)"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"4."}),(0,s.jsx)(t.td,{children:"Maki: processMessage function"}),(0,s.jsx)(t.td,{children:"Coordinator function to proves that the messages have been correctly processed"})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"Note: 0d. not included, because it would be overkill to setup a whole environment on a docker image just to deploy the contract while other resources already exist for that."}),"\n",(0,s.jsx)(t.p,{children:"Note: As the implementation is based on others work (research and specification), we will give credits and link the needed parts of it."}),"\n",(0,s.jsx)(t.h3,{id:"milestone-2--coordinators-functions",children:"Milestone 2 \u2014 Coordinator's functions"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Estimated Duration:"})," 6 months"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"FTE:"})," 0.3 FTE"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Costs:"})," 6,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(t.th,{children:"Deliverable"}),(0,s.jsx)(t.th,{children:"Specification"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(t.td,{children:"License"}),(0,s.jsx)(t.td,{children:"MIT"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(t.td,{children:"Documentation"}),(0,s.jsxs)(t.td,{children:["We will provide both ",(0,s.jsx)(t.strong,{children:"inline documentation"})," of the code and a basic ",(0,s.jsx)(t.strong,{children:"tutorial"})," that explains how a user can deploy the contract and use its functions. References, such as the MACI research page or the specs of MACI implementation, will be provided."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0c."}),(0,s.jsx)(t.td,{children:"Testing Guide"}),(0,s.jsx)(t.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0e."}),(0,s.jsx)(t.td,{children:"Article"}),(0,s.jsxs)(t.td,{children:["We will publish a Medium ",(0,s.jsx)(t.strong,{children:"article"})," and the same article on SubSocial to explain what is Maki. The articles will be referenced on Reddit (/r/Kusama and /r/Polkadot) and on diverse Discord Server related to Polkadot (mostly the important and official ones)."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(t.td,{children:"Maki: proveVoteTally function"}),(0,s.jsx)(t.td,{children:"Coordinator function to prove the result of the vote tally on-chain (ink!)"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(t.td,{children:"Maki: verifyVoteTally function"}),(0,s.jsx)(t.td,{children:"Function to verify the result of the vote tally and the proof of it (ink!)"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,s.jsx)(t.td,{children:"Circuits"}),(0,s.jsxs)(t.td,{children:["Circuit used to generate the zk-Snark (in TypeScript and Circom) - this will be based (if not reused) on this work ",(0,s.jsx)(t.a,{href:"https://github.com/privacy-scaling-explorations/maci/tree/master/circuits/ts",children:"MACI"})," and ",(0,s.jsx)(t.a,{href:"https://github.com/privacy-scaling-explorations/maci/tree/master/circuits/circom",children:"MACI"}),". One circuit for proveStateCorrectness and one for proveVoteTallyCorrectness functions."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"4."}),(0,s.jsx)(t.td,{children:"Votes Verifier"}),(0,s.jsxs)(t.td,{children:["Verifier contract/function (in Rust/ink!) to verify that the proof is correct - this will be based on this work ",(0,s.jsx)(t.a,{href:"https://github.com/privacy-scaling-explorations/maci/tree/master/circuits/ts",children:"MACI"}),". The verifier will be used by Maki"]})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"Note: 0d. not included, because it would be overkill to setup a whole environment on a docker image just to deploy the contract while other resources already exist for that."}),"\n",(0,s.jsx)(t.p,{children:"Note: As the implementation is based on others work (research and specification), we will give credits and link the needed parts of it."}),"\n",(0,s.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsx)(t.p,{children:"I plan to deploy this contract on one of the parachain (for example on Shiden) of Kusama to ask the community what would be their preferred choice for the next development/feature/changes of Maki."}),"\n",(0,s.jsx)(t.p,{children:"Which led us to the long-term plan... That would be:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Add a simple UI/library (in Typescript) to interact with the contract easily.\nPlease include here."}),"\n",(0,s.jsx)(t.li,{children:"Provide different circuits for the proof"}),"\n",(0,s.jsx)(t.li,{children:"Provide a way to configure the contract to allow non-quadratic votes, or for example conviction votes"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"These are just ideas. I would also like for the community (developers) to participate, re-use, enhance or create their own version of Maki."}),"\n",(0,s.jsxs)(t.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"How did you hear about the Grants Program?"}),"\nI've been part of the program once (",(0,s.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/2606f01f2fed14bb358560c8ececc9ad05e40bb8/applications/polk-auction.md",children:"polk-auction application"}),")"]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>a});var i=n(96540);const s={},r=i.createContext(s);function o(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/075bc5a3.dbae7113.js b/assets/js/075bc5a3.dbae7113.js new file mode 100644 index 00000000000..26578d91eb4 --- /dev/null +++ b/assets/js/075bc5a3.dbae7113.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[4925],{81487:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"applications/Maki","title":"Maki","description":"- Team Name: Cyril Carlier (Individual)","source":"@site/applications/Maki.md","sourceDirName":"applications","slug":"/applications/Maki","permalink":"/applications/Maki","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/Maki.md","tags":[],"version":"current","frontMatter":{}}');var s=n(74848),r=n(28453);const o={},a="Maki",l={},c=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Overview :",id:"overview-",level:4},{value:"Maki's Functions :",id:"makis-functions-",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 Implement Voter functions",id:"milestone-1--implement-voter-functions",level:3},{value:"Milestone 2 \u2014 Coordinator's functions",id:"milestone-2--coordinators-functions",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function d(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"maki",children:"Maki"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Team Name:"})," Cyril Carlier (Individual)"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Payment Address:"})," 0x8a0cFA1DE5c26e3Cd553F33Dc560fBfa5267867C (ERC-20 USDC)"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsxs)(t.strong,{children:[(0,s.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 1"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Status:"})," Terminated"]}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsxs)(t.p,{children:["This application is a response from the ",(0,s.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/master/rfps/open/anti-collusion_infrastructure.md",children:"anti-collusion infrastructure RFP"}),"."]}),"\n",(0,s.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsxs)(t.p,{children:["Maki aims to be a simple MACI implementation for the Polkadot eco-system, similar to the existing one on Ethereum (",(0,s.jsx)(t.a,{href:"https://github.com/privacy-scaling-explorations/maci",children:"MACI"}),")"]}),"\n",(0,s.jsxs)(t.p,{children:["Maki is an ink! smart contract that implements a minimal anti-collusion infrastructure as specified in the following ",(0,s.jsx)(t.a,{href:"https://github.com/privacy-scaling-explorations/maci/tree/9b1b1a631090ee89d2bc12f4bcef7763e42caef0/specs",children:"specifications"})," and derived from ",(0,s.jsx)(t.a,{href:"https://ethresear.ch/t/minimal-anti-collusion-infrastructure/5413",children:"this ethresearch post"}),". This means that most of the project details are based on the researches done on ",(0,s.jsx)(t.a,{href:"https://ethresear.ch/t/minimal-anti-collusion-infrastructure/5413",children:"MACI"})," and the specifications. Things may differ by making Maki a more simple version of MACI."]}),"\n",(0,s.jsx)(t.p,{children:"As explained in the RFP, the smart contract aims to allow users to vote on a quadratic voting and avoid/minimize the risk of collusion, keep the votes anonymous and allow the users to change their votes until the voting process ends."}),"\n",(0,s.jsx)(t.p,{children:"Governance is an important part of Polkadot and (even more for now I'd say) Kusama, while a a lot of use cases of governance mechanisms are already implemented and running on the ecosystems (via pallets and smart contracts), a voting system for quadratic voting, anonymous voting and anti-collusion is not available yet.\nThat is why the project fits well for Polkadot and Kusama."}),"\n",(0,s.jsx)(t.p,{children:"I'm interested in this project because governance is a major component in decentralized ecosystems and adding more needed possibilities to the panel of voting mechanism of Polkadot and Kusama seems important to me.\nWhile for now I'm unsure the current projects on Polkadot/Kusama needs such mechanism, it is obvious some will need such anti-collusion and anonymous voting for its users."}),"\n",(0,s.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(t.p,{children:"Following the specifications of MACI as linked above, here is an overview of the architecture and core functionalities of Maki."}),"\n",(0,s.jsx)(t.p,{children:"Maki is a smart contract that allow its users to vote while making collusion among participant difficult (if the operator is honest) and retain censorship resistance, correct execution and anonymity of votes."}),"\n",(0,s.jsxs)(t.p,{children:["Maki has two kind of users: one ",(0,s.jsx)(t.strong,{children:"operator"})," and 0..n ",(0,s.jsx)(t.strong,{children:"voter(s)"})," (also called user here under)."]}),"\n",(0,s.jsx)(t.p,{children:"The operator role is to deploy the contract (and publish his public key, known by all), start the sign-up period (which is done when the contract is deployed), process all the voters commands, generate the result of each commands, tally the votes and generate a zk-SNARK proof that the result is valid."}),"\n",(0,s.jsx)(t.p,{children:"The voter role is to sign-up for a vote and then vote."}),"\n",(0,s.jsx)(t.p,{children:"Secrecy of the votes are possible by using cryptographic operations. As described in the MACI specs, each users and the coordinator have a key-pair used to publish encrypted messages and for the coordinator to decrypt those messages."}),"\n",(0,s.jsx)(t.h4,{id:"overview-",children:"Overview :"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://i.imgur.com/n4tmk6p.png",alt:""})}),"\n",(0,s.jsx)(t.h4,{id:"makis-functions-",children:"Maki's Functions :"}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"signUp"})," allows a user to register for voting by sending his public key to the contract. There is no need for a given user to call this function multiple times."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"publishMessage"})," allows a user to vote. A voter may use this multiple time to change his vote options, as long as the vote in not ended."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"processMessages"})," function called by the coordinator to process all the users' messages, update the state root and provide a zk-snark proof."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"proveVoteTally"})," to publish the vote result and the zk-snark proof of it. Called by the coordinator. Can only be called once the vote ended."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"verifyVoteTally"})," to verify that the generated zkSnark proof is valid."]}),"\n",(0,s.jsx)(t.p,{children:"Public functions are needed for the coordinator to process the votes off-chain (basically the contract's state such as stateTree, messageTree, etc.) and the voter to get the coordinator's key."}),"\n",(0,s.jsxs)(t.p,{children:["Besides the contract, we will provide two circuits to build the zk-Snark proof off-chain, one for the correctness of message processing (",(0,s.jsx)(t.code,{children:"proveStateCorrectness"}),") and one for the vote tallying (",(0,s.jsx)(t.code,{children:"proveVoteTallyCorrectness"}),"). The circuits will be written in ",(0,s.jsx)(t.a,{href:"https://docs.circom.io/",children:"circom"})," and it will be used through a script that build and execute the compiled circuit. This is needed for the coordinator's functions ",(0,s.jsx)(t.code,{children:"processMessages"})," and ",(0,s.jsx)(t.code,{children:"proveVoteTally"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["Maki has two merkle roots, one for the ",(0,s.jsx)(t.code,{children:"messageTree"})," (which gathers submitted messages) and one for the ",(0,s.jsx)(t.code,{children:"stateTree"})," (which gathers the mapping between the user public keys and the votes)."]}),"\n",(0,s.jsx)(t.p,{children:"Maki will be implemented as an ink! smart contract, so it will be developed in Rust with ink! library."}),"\n",(0,s.jsxs)(t.p,{children:["Maki will ",(0,s.jsx)(t.em,{children:"not"})," provide out-of-the-box choices of circuits used for zk-SNARK proof (as it may vary depending on the nature of the voting system), nor choices of the type of voting mechanism (non-quadratic votes, conviction votes, different tallying (such as what can be found on Polkadot and Kusama referenda), etc.). However this could be part of a maintenance program, a future plan, and/or another team may develop these features to meet their needs."]}),"\n",(0,s.jsxs)(t.p,{children:["The goal being to have a functioning contract, the circuit is not my main concern here.Therefore, an existing circuit will be reused (in Typescript) - most likely one that is implemented by ",(0,s.jsx)(t.a,{href:"https://github.com/privacy-scaling-explorations/maci",children:"MACI"}),". I'll give full credits to their implementation, even if this requires some adaptations on my end."]}),"\n",(0,s.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsx)(t.p,{children:"Maki can be used in any blockchain that supports ink! smart contracts."}),"\n",(0,s.jsx)(t.p,{children:"It can be reused - as provided or modified - by any blockchain, dApp, infrastructures, ... that wishes to provide a way to make quadratic votes for its users."}),"\n",(0,s.jsx)(t.p,{children:"I'm not aware of any similar project on Substrate. Despite that there are different existing voting mechanisms on Polkadot/Kusama, this one is the only one that would provide a quadratic, provable, anonymous and anti-collusion voting system."}),"\n",(0,s.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Cyril Carlier"}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Contact Name:"})," Cyril Carlier"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Contact Email:"})," ",(0,s.jsx)(t.a,{href:"mailto:cyrilcarlier@hotmail.com",children:"cyrilcarlier@hotmail.com"})]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsx)(t.p,{children:"Individual / Sole Proprietor"}),"\n",(0,s.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsx)(t.p,{children:"I'm a software developer with 5 years of relevant experience in C#/.Net, Java(with Spring/Hibernate), Typescript, React, C++, SQL and Angular, working mainly on DDD projects and lower-level projects (such as background-jobs services, multi-thread related projects). I have a master degree in Computer Science (University of Namur - Belgium)."}),"\n",(0,s.jsx)(t.p,{children:"Here is an overview of different relevant project I've worked / working on :"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"http://www.polkauction.io/",children:"Polk-auction"}),": A project funded by this program (",(0,s.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/2606f01f2fed14bb358560c8ececc9ad05e40bb8/applications/polk-auction.md",children:"polk-auction application"}),") which is a project that allow Polkadot and Kusama end-users to have a concise, simple an easy to understand view of the parachain, auction and crowdloan state of the Dotsama's ecosystem. Focused on on-chain data with some useful and relevant off-chain information surrounding the state of Polkadot / Kusama. While the project is online, I don't consider it \"finished\" as there is still a lot of things to add and enhance on Polk-auction."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Project with background processing of files and websocket messaging for communication between multiple applications."}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Different DDD projects with back-end(s) (HTTP API, written with .NetCore and Entity) and UI app(s) (web-app), multiple databases and mechanisms for back-end communication if/when needed."}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Multiple other projects and PoC, mostly with backend technologies (Java, C++, C#)"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"If anyone on your team has applied for a grant at the Web3 Foundation previously, please list the name of the project and legal entity here."}),"\n",(0,s.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/CrommVardek",children:"https://github.com/CrommVardek"})}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://www.linkedin.com/in/cyril-carlier/",children:"https://www.linkedin.com/in/cyril-carlier/"})}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,s.jsxs)(t.p,{children:["As mentioned, this application is a response from the ",(0,s.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/master/rfps/open/anti-collusion_infrastructure.md",children:"anti-collusion infrastructure RFP"})]}),"\n",(0,s.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Total Estimated Duration:"})," 15 months"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Full-Time Equivalent (FTE):"})," 0.15 FTE"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Total Costs:"})," $9,000"]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"milestone-1--implement-voter-functions",children:"Milestone 1 \u2014 Implement Voter functions"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Estimated duration:"})," 9 months"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"FTE:"})," 0.1 FTE"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Costs:"})," 3,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(t.th,{children:"Deliverable"}),(0,s.jsx)(t.th,{children:"Specification"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(t.td,{children:"License"}),(0,s.jsx)(t.td,{children:"MIT"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(t.td,{children:"Documentation"}),(0,s.jsxs)(t.td,{children:["We will provide both ",(0,s.jsx)(t.strong,{children:"inline documentation"})," of the code and a basic ",(0,s.jsx)(t.strong,{children:"tutorial"})," that explains how a user can deploy the contract and use its functions. References, such as the MACI research page or the specs of MACI implementation, will be provided."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0c."}),(0,s.jsx)(t.td,{children:"Testing Guide"}),(0,s.jsx)(t.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(t.td,{children:"Maki: constructor and internal state"}),(0,s.jsx)(t.td,{children:"Contract internal state needed to work properly and its constructor"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(t.td,{children:"Maki: signUp function"}),(0,s.jsx)(t.td,{children:"User function to register for the vote (ink!)"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,s.jsx)(t.td,{children:"Maki: publishMessage function"}),(0,s.jsx)(t.td,{children:"User function to vote (ink!)"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"4."}),(0,s.jsx)(t.td,{children:"Maki: processMessage function"}),(0,s.jsx)(t.td,{children:"Coordinator function to proves that the messages have been correctly processed"})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"Note: 0d. not included, because it would be overkill to setup a whole environment on a docker image just to deploy the contract while other resources already exist for that."}),"\n",(0,s.jsx)(t.p,{children:"Note: As the implementation is based on others work (research and specification), we will give credits and link the needed parts of it."}),"\n",(0,s.jsx)(t.h3,{id:"milestone-2--coordinators-functions",children:"Milestone 2 \u2014 Coordinator's functions"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Estimated Duration:"})," 6 months"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"FTE:"})," 0.3 FTE"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Costs:"})," 6,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(t.th,{children:"Deliverable"}),(0,s.jsx)(t.th,{children:"Specification"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(t.td,{children:"License"}),(0,s.jsx)(t.td,{children:"MIT"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(t.td,{children:"Documentation"}),(0,s.jsxs)(t.td,{children:["We will provide both ",(0,s.jsx)(t.strong,{children:"inline documentation"})," of the code and a basic ",(0,s.jsx)(t.strong,{children:"tutorial"})," that explains how a user can deploy the contract and use its functions. References, such as the MACI research page or the specs of MACI implementation, will be provided."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0c."}),(0,s.jsx)(t.td,{children:"Testing Guide"}),(0,s.jsx)(t.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0e."}),(0,s.jsx)(t.td,{children:"Article"}),(0,s.jsxs)(t.td,{children:["We will publish a Medium ",(0,s.jsx)(t.strong,{children:"article"})," and the same article on SubSocial to explain what is Maki. The articles will be referenced on Reddit (/r/Kusama and /r/Polkadot) and on diverse Discord Server related to Polkadot (mostly the important and official ones)."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(t.td,{children:"Maki: proveVoteTally function"}),(0,s.jsx)(t.td,{children:"Coordinator function to prove the result of the vote tally on-chain (ink!)"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(t.td,{children:"Maki: verifyVoteTally function"}),(0,s.jsx)(t.td,{children:"Function to verify the result of the vote tally and the proof of it (ink!)"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,s.jsx)(t.td,{children:"Circuits"}),(0,s.jsxs)(t.td,{children:["Circuit used to generate the zk-Snark (in TypeScript and Circom) - this will be based (if not reused) on this work ",(0,s.jsx)(t.a,{href:"https://github.com/privacy-scaling-explorations/maci/tree/master/circuits/ts",children:"MACI"})," and ",(0,s.jsx)(t.a,{href:"https://github.com/privacy-scaling-explorations/maci/tree/master/circuits/circom",children:"MACI"}),". One circuit for proveStateCorrectness and one for proveVoteTallyCorrectness functions."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"4."}),(0,s.jsx)(t.td,{children:"Votes Verifier"}),(0,s.jsxs)(t.td,{children:["Verifier contract/function (in Rust/ink!) to verify that the proof is correct - this will be based on this work ",(0,s.jsx)(t.a,{href:"https://github.com/privacy-scaling-explorations/maci/tree/master/circuits/ts",children:"MACI"}),". The verifier will be used by Maki"]})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"Note: 0d. not included, because it would be overkill to setup a whole environment on a docker image just to deploy the contract while other resources already exist for that."}),"\n",(0,s.jsx)(t.p,{children:"Note: As the implementation is based on others work (research and specification), we will give credits and link the needed parts of it."}),"\n",(0,s.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsx)(t.p,{children:"I plan to deploy this contract on one of the parachain (for example on Shiden) of Kusama to ask the community what would be their preferred choice for the next development/feature/changes of Maki."}),"\n",(0,s.jsx)(t.p,{children:"Which led us to the long-term plan... That would be:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Add a simple UI/library (in Typescript) to interact with the contract easily.\nPlease include here."}),"\n",(0,s.jsx)(t.li,{children:"Provide different circuits for the proof"}),"\n",(0,s.jsx)(t.li,{children:"Provide a way to configure the contract to allow non-quadratic votes, or for example conviction votes"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"These are just ideas. I would also like for the community (developers) to participate, re-use, enhance or create their own version of Maki."}),"\n",(0,s.jsxs)(t.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"How did you hear about the Grants Program?"}),"\nI've been part of the program once (",(0,s.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/blob/2606f01f2fed14bb358560c8ececc9ad05e40bb8/applications/polk-auction.md",children:"polk-auction application"}),")"]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>a});var i=n(96540);const s={},r=i.createContext(s);function o(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/07cfbc78.20a34256.js b/assets/js/07cfbc78.20a34256.js new file mode 100644 index 00000000000..ad1360a7010 --- /dev/null +++ b/assets/js/07cfbc78.20a34256.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[83647],{20722:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"applications/Subcoin","title":"Subcoin","description":"- Team Name: Individual","source":"@site/applications/Subcoin.md","sourceDirName":"applications","slug":"/applications/Subcoin","permalink":"/applications/Subcoin","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/Subcoin.md","tags":[],"version":"current","frontMatter":{}}');var s=i(74848),r=i(28453);const o={},l="Subcoin",c={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles (if available)",id:"team-linkedin-profiles-if-available",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1",id:"milestone-1",level:3},{value:"Milestone 2",id:"milestone-2",level:3},{value:"Milestone 3",id:"milestone-3",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Referral Program (optional) \ud83d\udcb0",id:"referral-program-optional-moneybag",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"subcoin",children:"Subcoin"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Team Name:"})," Individual"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Payment Address:"})," 12uXLCZZkprwRBhfmhTXdfQE8faQwgNpS76wwmnEbgDwWB9e (USDT)"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsxs)(n.strong,{children:[(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 2"]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(n.p,{children:"This project aims to develop a prototype of a Bitcoin full node in Rust using the Substrate framework. The goal is to create a node capable of synchronizing the Bitcoin network from its genesis to the latest tip, utilizing the light state sync strategy provided by Substrate. This feature is currently missing in the existing Bitcoin software."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Relevance to Substrate & Polkadot"})}),"\n",(0,s.jsx)(n.p,{children:"This project showcases the versatility of Substrate as a leading blockchain development framework. With Substrate, small teams and even individuals can create production-level blockchain software efficiently. Developers within the Substrate/Polkadot ecosystem, particularly those interested in Bitcoin-related applications, stand to benefit from the tools and insights produced by this project. Specifically, the Bitcoin bridge projects can integrate the subcoin-network into their nodes to talk to the Bitcoin network directly instead of relying on the external relayers which are suffered from the single point of failure practically."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Motivation"})}),"\n",(0,s.jsx)(n.p,{children:"Despite the availability of various Bitcoin client implementations in different languages, there is currently no Substrate-based Bitcoin client. Additionally, majority of the previous attempts to build one in Rust have faced challenges and limitations. One key factor contributing to their shortcomings is the lack of essential libraries like rust-bitcoin and comprehensive blockchain development frameworks like Substrate. However, with the emergence of these tools, there's renewed potential to develop a high-quality, production-ready Rust-based Bitcoin client within the Substrate ecosystem."}),"\n",(0,s.jsx)(n.p,{children:"I\u2019m personally planning on some ideas on Bitcoin. This project may be a good starting point for exploring innovative ideas and advancements within the Bitcoin ecosystem."}),"\n",(0,s.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Key Deliverables"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["crate ",(0,s.jsx)(n.code,{children:"pallet-bitcoin"}),": This crate implements the core logic of Bitcoin protocol, handling the transaction processing and UTXO set management."]}),"\n",(0,s.jsxs)(n.li,{children:["crate ",(0,s.jsx)(n.code,{children:"subcoin-runtime"}),": A lean Bitcoin specialized Substrate runtime integrating only two pallets frame-system and pallet-bitcoin."]}),"\n",(0,s.jsxs)(n.li,{children:["crate ",(0,s.jsx)(n.code,{children:"sc-consensus-nakamoto"}),": This crate offers an import queue for Bitcoin block import and full block verification."]}),"\n",(0,s.jsxs)(n.li,{children:["crate ",(0,s.jsx)(n.code,{children:"subcoin-network"}),": This crate is responsible for basic Bitcoin P2P network functionalities, facilitating initial block download from other nodes."]}),"\n",(0,s.jsxs)(n.li,{children:["crate ",(0,s.jsx)(n.code,{children:"subcoin-node"}),": This crate orchestrates the integration of all components mentioned above, providing a binary ",(0,s.jsx)(n.code,{children:"subcoin"})," for running a fully functional Bitcoin node."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Non-Goals"})}),"\n",(0,s.jsxs)(n.p,{children:["This application does not aim to replicate the full feature set of a comprehensive Bitcoin client like ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"bitcoind"})}),". As such, functionalities such as wallet management, mining, and mempool operations are outside the scope of this project, which are expected to be pursued in the future."]}),"\n",(0,s.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsx)(n.p,{children:"The impact of this project extends beyond the Substrate and Polkadot ecosystems, contributing to the diversity of Bitcoin protocol implementation within the broader blockchain landscape."}),"\n",(0,s.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Name of team leader: Liu-Cheng Xu"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Name:"})," Liu-Cheng Xu"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Email:"})," ",(0,s.jsx)(n.a,{href:"mailto:xuliuchengxlc@gmail.com",children:"xuliuchengxlc@gmail.com"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Website:"})," ",(0,s.jsx)(n.a,{href:"https://github.com/liuchengxu",children:"https://github.com/liuchengxu"})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Individual"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Liu-Cheng Xu"}),"\n",(0,s.jsxs)(n.p,{children:["He is a seasoned protocol-level blockchain engineer with extensive experience with the Substrate framework. He was the core developer and subsequent tech lead of ChainX project from 2018 to 2021. Post-ChainX, he embarked on a venture with the permanent storage project Canyon and received the grant ",(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/blob/df34fc617c88346411319b4293db5eb9cb2769b9/applications/canyon_network.md",children:"canyon_network"})," for implementing the Proof Of Access consensus with the Substrate ecosystem. Due to regulatory changes in his country, Canyon was discontinued. He later transitioned to Subspace Labs as the lead protocol engineer, spearheading the execution layer development in Subspace's modular solution from 2021 to 2023."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/subcoin-project/subcoin",children:"https://github.com/subcoin-project/subcoin"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/liuchengxu",children:"https://github.com/liuchengxu"})}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"team-linkedin-profiles-if-available",children:"Team LinkedIn Profiles (if available)"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/liucheng-xu-2a639b116/",children:"https://www.linkedin.com/in/liucheng-xu-2a639b116/"})}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,s.jsxs)(n.p,{children:["A preliminary prototype of a Bitcoin node has been developed, featuring the capability to import Bitcoin blocks directly from the ",(0,s.jsx)(n.code,{children:"bitcoind"})," database. A document ",(0,s.jsx)(n.a,{href:"https://www.notion.so/915ff68a2b3c43b1ac37048c88d551ed?pvs=21",children:"Design Notes"})," has been compiled to outline implementation considerations and provide guidance for ongoing development efforts"]}),"\n",(0,s.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsx)(n.p,{children:"This project is planned as 3 milestones, completed in three months."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Estimated Duration:"})," 3 months"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Full-Time Equivalent (FTE):"})," 1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Costs:"})," 30,000 USD"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-1",children:"Milestone 1"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated duration:"})," 1 month"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," 10,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"MIT"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"We will provide both inline documentation of the code and a basic tutorial that explains how a user can (for example) spin up one of our Substrate nodes, which will show how the new functionality works."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0c."}),(0,s.jsx)(n.td,{children:"Testing and Testing Guide"}),(0,s.jsx)(n.td,{children:"Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0d."}),(0,s.jsx)(n.td,{children:"Docker"}),(0,s.jsx)(n.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"1."}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"pallet-bitcoin"})}),(0,s.jsx)(n.td,{children:"This pallet is used to process the Bitcoin transaction and manage the state of the UTXO set."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"2."}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"subcoin-runtime"})}),(0,s.jsx)(n.td,{children:"This is a minimal Substrate runtime specialized for Bitcoin, consisting of frame-system and pallet-bitcoin."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"3."}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"sc-consensus-nakamoto"})}),(0,s.jsx)(n.td,{children:"This crate provides the function of importing Bitcoin blocks into the node, assuming the blocks have been checked."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"4."}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"subcoin-node"})}),(0,s.jsx)(n.td,{children:"This crate will wire up the runtime and a Substate client with necessary components to build a Bitcoin node, which is able to import the Bitcoin blocks from the bitcoind database."})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-2",children:"Milestone 2"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated duration:"})," 1 month"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," 10,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"MIT"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"We will provide both inline documentation of the code and a basic tutorial that explains how a user can (for example) spin up one of our Substrate nodes, which will show how the new functionality works."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0c."}),(0,s.jsx)(n.td,{children:"Testing and Testing Guide"}),(0,s.jsx)(n.td,{children:"Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0d."}),(0,s.jsx)(n.td,{children:"Docker"}),(0,s.jsx)(n.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"1."}),(0,s.jsx)(n.td,{children:"Block Verification"}),(0,s.jsx)(n.td,{children:"We will introduce the full bitcoin block verification in the block import pipeline, via libbitcoinconsensus and optional pure Rust implementation."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"2."}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"bitcoin-network"})}),(0,s.jsx)(n.td,{children:"We will implement a basic Bitcoin networking, which can connect to other nodes in the Bitcoin peer-to-peer network and do the initial sync by downloading and processing every block in the history."})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-3",children:"Milestone 3"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated duration:"})," 1 month"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," 10,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"MIT"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"We will provide both inline documentation of the code and a basic tutorial that explains how a user can (for example) spin up one of our Substrate nodes, which will show how the new functionality works."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0c."}),(0,s.jsx)(n.td,{children:"Testing and Testing Guide"}),(0,s.jsx)(n.td,{children:"Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0d."}),(0,s.jsx)(n.td,{children:"Docker"}),(0,s.jsx)(n.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0e."}),(0,s.jsx)(n.td,{children:"Article"}),(0,s.jsx)(n.td,{children:"We will publish an article that explains what was done/achieved as part of the grant."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"1."}),(0,s.jsx)(n.td,{children:"Fast sync"}),(0,s.jsx)(n.td,{children:"A bootstrap node will be deployed to demonstrate that the new subcoin nodes can perform a fast sync from other subcoin nodes using the built-in advanced syncing strategy (e.g., light state sync) in Substrate."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"2"}),(0,s.jsx)(n.td,{children:"Bitcoin Transaction Broadcasting"}),(0,s.jsx)(n.td,{children:"We will add an RPC call for broadcasting a Bitcoin transaction to the Bitcoin network from polkadot.js.org."})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Enhance support for various aspects of the Bitcoin protocol, including wallet functionalities, mining capabilities, and even the integration of BRC20 indexer."}),"\n",(0,s.jsx)(n.li,{children:"Seek funding opportunities to ensure sustainable long-term development and maintenance of the project."}),"\n",(0,s.jsx)(n.li,{children:"Foster a contributor-friendly environment and transition towards a community-driven project, encouraging active participation and collaboration from developers and enthusiasts alike."}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"referral-program-optional-moneybag",children:["Referral Program (optional) ","\ud83d\udcb0"]}),"\n",(0,s.jsxs)(n.p,{children:["You can find more information about the program ",(0,s.jsx)(n.a,{href:"https://www.notion.so/README.md#moneybag-referral-program",children:"here"}),"."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Referrer:"})," -"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Payment Address:"})," -"]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"How did you hear about the Grants Program?"})," Personal recommendation."]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>l});var t=i(96540);const s={},r=t.createContext(s);function o(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/07cfbc78.e03d43a2.js b/assets/js/07cfbc78.e03d43a2.js deleted file mode 100644 index fc1b715c974..00000000000 --- a/assets/js/07cfbc78.e03d43a2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[83647],{30602:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"applications/Subcoin","title":"Subcoin","description":"- Team Name: Individual","source":"@site/applications/Subcoin.md","sourceDirName":"applications","slug":"/applications/Subcoin","permalink":"/applications/Subcoin","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/Subcoin.md","tags":[],"version":"current","frontMatter":{}}');var s=i(74848),r=i(28453);const o={},l="Subcoin",c={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles (if available)",id:"team-linkedin-profiles-if-available",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1",id:"milestone-1",level:3},{value:"Milestone 2",id:"milestone-2",level:3},{value:"Milestone 3",id:"milestone-3",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Referral Program (optional) \ud83d\udcb0",id:"referral-program-optional-moneybag",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"subcoin",children:"Subcoin"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Team Name:"})," Individual"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Payment Address:"})," 12uXLCZZkprwRBhfmhTXdfQE8faQwgNpS76wwmnEbgDwWB9e (USDT)"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsxs)(n.strong,{children:[(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 2"]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(n.p,{children:"This project aims to develop a prototype of a Bitcoin full node in Rust using the Substrate framework. The goal is to create a node capable of synchronizing the Bitcoin network from its genesis to the latest tip, utilizing the light state sync strategy provided by Substrate. This feature is currently missing in the existing Bitcoin software."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Relevance to Substrate & Polkadot"})}),"\n",(0,s.jsx)(n.p,{children:"This project showcases the versatility of Substrate as a leading blockchain development framework. With Substrate, small teams and even individuals can create production-level blockchain software efficiently. Developers within the Substrate/Polkadot ecosystem, particularly those interested in Bitcoin-related applications, stand to benefit from the tools and insights produced by this project. Specifically, the Bitcoin bridge projects can integrate the subcoin-network into their nodes to talk to the Bitcoin network directly instead of relying on the external relayers which are suffered from the single point of failure practically."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Motivation"})}),"\n",(0,s.jsx)(n.p,{children:"Despite the availability of various Bitcoin client implementations in different languages, there is currently no Substrate-based Bitcoin client. Additionally, majority of the previous attempts to build one in Rust have faced challenges and limitations. One key factor contributing to their shortcomings is the lack of essential libraries like rust-bitcoin and comprehensive blockchain development frameworks like Substrate. However, with the emergence of these tools, there's renewed potential to develop a high-quality, production-ready Rust-based Bitcoin client within the Substrate ecosystem."}),"\n",(0,s.jsx)(n.p,{children:"I\u2019m personally planning on some ideas on Bitcoin. This project may be a good starting point for exploring innovative ideas and advancements within the Bitcoin ecosystem."}),"\n",(0,s.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Key Deliverables"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["crate ",(0,s.jsx)(n.code,{children:"pallet-bitcoin"}),": This crate implements the core logic of Bitcoin protocol, handling the transaction processing and UTXO set management."]}),"\n",(0,s.jsxs)(n.li,{children:["crate ",(0,s.jsx)(n.code,{children:"subcoin-runtime"}),": A lean Bitcoin specialized Substrate runtime integrating only two pallets frame-system and pallet-bitcoin."]}),"\n",(0,s.jsxs)(n.li,{children:["crate ",(0,s.jsx)(n.code,{children:"sc-consensus-nakamoto"}),": This crate offers an import queue for Bitcoin block import and full block verification."]}),"\n",(0,s.jsxs)(n.li,{children:["crate ",(0,s.jsx)(n.code,{children:"subcoin-network"}),": This crate is responsible for basic Bitcoin P2P network functionalities, facilitating initial block download from other nodes."]}),"\n",(0,s.jsxs)(n.li,{children:["crate ",(0,s.jsx)(n.code,{children:"subcoin-node"}),": This crate orchestrates the integration of all components mentioned above, providing a binary ",(0,s.jsx)(n.code,{children:"subcoin"})," for running a fully functional Bitcoin node."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Non-Goals"})}),"\n",(0,s.jsxs)(n.p,{children:["This application does not aim to replicate the full feature set of a comprehensive Bitcoin client like ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"bitcoind"})}),". As such, functionalities such as wallet management, mining, and mempool operations are outside the scope of this project, which are expected to be pursued in the future."]}),"\n",(0,s.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsx)(n.p,{children:"The impact of this project extends beyond the Substrate and Polkadot ecosystems, contributing to the diversity of Bitcoin protocol implementation within the broader blockchain landscape."}),"\n",(0,s.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Name of team leader: Liu-Cheng Xu"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Name:"})," Liu-Cheng Xu"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Email:"})," ",(0,s.jsx)(n.a,{href:"mailto:xuliuchengxlc@gmail.com",children:"xuliuchengxlc@gmail.com"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Website:"})," ",(0,s.jsx)(n.a,{href:"https://github.com/liuchengxu",children:"https://github.com/liuchengxu"})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Individual"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Liu-Cheng Xu"}),"\n",(0,s.jsxs)(n.p,{children:["He is a seasoned protocol-level blockchain engineer with extensive experience with the Substrate framework. He was the core developer and subsequent tech lead of ChainX project from 2018 to 2021. Post-ChainX, he embarked on a venture with the permanent storage project Canyon and received the grant ",(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/blob/df34fc617c88346411319b4293db5eb9cb2769b9/applications/canyon_network.md",children:"canyon_network"})," for implementing the Proof Of Access consensus with the Substrate ecosystem. Due to regulatory changes in his country, Canyon was discontinued. He later transitioned to Subspace Labs as the lead protocol engineer, spearheading the execution layer development in Subspace's modular solution from 2021 to 2023."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/subcoin-project/subcoin",children:"https://github.com/subcoin-project/subcoin"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/liuchengxu",children:"https://github.com/liuchengxu"})}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"team-linkedin-profiles-if-available",children:"Team LinkedIn Profiles (if available)"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/liucheng-xu-2a639b116/",children:"https://www.linkedin.com/in/liucheng-xu-2a639b116/"})}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,s.jsxs)(n.p,{children:["A preliminary prototype of a Bitcoin node has been developed, featuring the capability to import Bitcoin blocks directly from the ",(0,s.jsx)(n.code,{children:"bitcoind"})," database. A document ",(0,s.jsx)(n.a,{href:"https://www.notion.so/915ff68a2b3c43b1ac37048c88d551ed?pvs=21",children:"Design Notes"})," has been compiled to outline implementation considerations and provide guidance for ongoing development efforts"]}),"\n",(0,s.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsx)(n.p,{children:"This project is planned as 3 milestones, completed in three months."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Estimated Duration:"})," 3 months"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Full-Time Equivalent (FTE):"})," 1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Costs:"})," 30,000 USD"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-1",children:"Milestone 1"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated duration:"})," 1 month"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," 10,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"MIT"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"We will provide both inline documentation of the code and a basic tutorial that explains how a user can (for example) spin up one of our Substrate nodes, which will show how the new functionality works."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0c."}),(0,s.jsx)(n.td,{children:"Testing and Testing Guide"}),(0,s.jsx)(n.td,{children:"Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0d."}),(0,s.jsx)(n.td,{children:"Docker"}),(0,s.jsx)(n.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"1."}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"pallet-bitcoin"})}),(0,s.jsx)(n.td,{children:"This pallet is used to process the Bitcoin transaction and manage the state of the UTXO set."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"2."}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"subcoin-runtime"})}),(0,s.jsx)(n.td,{children:"This is a minimal Substrate runtime specialized for Bitcoin, consisting of frame-system and pallet-bitcoin."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"3."}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"sc-consensus-nakamoto"})}),(0,s.jsx)(n.td,{children:"This crate provides the function of importing Bitcoin blocks into the node, assuming the blocks have been checked."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"4."}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"subcoin-node"})}),(0,s.jsx)(n.td,{children:"This crate will wire up the runtime and a Substate client with necessary components to build a Bitcoin node, which is able to import the Bitcoin blocks from the bitcoind database."})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-2",children:"Milestone 2"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated duration:"})," 1 month"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," 10,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"MIT"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"We will provide both inline documentation of the code and a basic tutorial that explains how a user can (for example) spin up one of our Substrate nodes, which will show how the new functionality works."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0c."}),(0,s.jsx)(n.td,{children:"Testing and Testing Guide"}),(0,s.jsx)(n.td,{children:"Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0d."}),(0,s.jsx)(n.td,{children:"Docker"}),(0,s.jsx)(n.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"1."}),(0,s.jsx)(n.td,{children:"Block Verification"}),(0,s.jsx)(n.td,{children:"We will introduce the full bitcoin block verification in the block import pipeline, via libbitcoinconsensus and optional pure Rust implementation."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"2."}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"bitcoin-network"})}),(0,s.jsx)(n.td,{children:"We will implement a basic Bitcoin networking, which can connect to other nodes in the Bitcoin peer-to-peer network and do the initial sync by downloading and processing every block in the history."})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-3",children:"Milestone 3"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated duration:"})," 1 month"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," 10,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"MIT"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"We will provide both inline documentation of the code and a basic tutorial that explains how a user can (for example) spin up one of our Substrate nodes, which will show how the new functionality works."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0c."}),(0,s.jsx)(n.td,{children:"Testing and Testing Guide"}),(0,s.jsx)(n.td,{children:"Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0d."}),(0,s.jsx)(n.td,{children:"Docker"}),(0,s.jsx)(n.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0e."}),(0,s.jsx)(n.td,{children:"Article"}),(0,s.jsx)(n.td,{children:"We will publish an article that explains what was done/achieved as part of the grant."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"1."}),(0,s.jsx)(n.td,{children:"Fast sync"}),(0,s.jsx)(n.td,{children:"A bootstrap node will be deployed to demonstrate that the new subcoin nodes can perform a fast sync from other subcoin nodes using the built-in advanced syncing strategy (e.g., light state sync) in Substrate."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"2"}),(0,s.jsx)(n.td,{children:"Bitcoin Transaction Broadcasting"}),(0,s.jsx)(n.td,{children:"We will add an RPC call for broadcasting a Bitcoin transaction to the Bitcoin network from polkadot.js.org."})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Enhance support for various aspects of the Bitcoin protocol, including wallet functionalities, mining capabilities, and even the integration of BRC20 indexer."}),"\n",(0,s.jsx)(n.li,{children:"Seek funding opportunities to ensure sustainable long-term development and maintenance of the project."}),"\n",(0,s.jsx)(n.li,{children:"Foster a contributor-friendly environment and transition towards a community-driven project, encouraging active participation and collaboration from developers and enthusiasts alike."}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"referral-program-optional-moneybag",children:["Referral Program (optional) ","\ud83d\udcb0"]}),"\n",(0,s.jsxs)(n.p,{children:["You can find more information about the program ",(0,s.jsx)(n.a,{href:"https://www.notion.so/README.md#moneybag-referral-program",children:"here"}),"."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Referrer:"})," -"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Payment Address:"})," -"]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"How did you hear about the Grants Program?"})," Personal recommendation."]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>l});var t=i(96540);const s={},r=t.createContext(s);function o(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/07d73d7d.743e94aa.js b/assets/js/07d73d7d.743e94aa.js new file mode 100644 index 00000000000..f630abbacbb --- /dev/null +++ b/assets/js/07d73d7d.743e94aa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[80631],{2070:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>o,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"applications/CoinFabrik_On_Ink_Integration_Tests_3","title":"CoinFabrik On Ink Integration Tests 3","description":"- Team Name: CoinFabrik (Nektra S.A)","source":"@site/applications/CoinFabrik_On_Ink_Integration_Tests_3.md","sourceDirName":"applications","slug":"/applications/CoinFabrik_On_Ink_Integration_Tests_3","permalink":"/applications/CoinFabrik_On_Ink_Integration_Tests_3","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/CoinFabrik_On_Ink_Integration_Tests_3.md","tags":[],"version":"current","frontMatter":{}}');var s=i(74848),r=i(28453);const o={},d="CoinFabrik On Ink Integration Tests 3",l={},c=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles (if available)",id:"team-linkedin-profiles-if-available",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1: Execution",id:"milestone-1-execution",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Referral Program (optional) \ud83d\udcb0",id:"referral-program-optional-moneybag",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"coinfabrik-on-ink-integration-tests-3",children:"CoinFabrik On Ink Integration Tests 3"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Team Name:"})," CoinFabrik (Nektra S.A)"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Payment Address:"})," 0xf488039EDe6B38D7689fDCC6A9FC2dd0EF39D54e (USDC)"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsxs)(n.strong,{children:[(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 2"]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(n.p,{children:"We have discovered that integration tests for ink! contracts lack some of the functionalities, or present implementation differences, when compared to E2E testing."}),"\n",(0,s.jsx)(n.p,{children:"Integration tests run significantly faster than E2E (end-to-end) tests. If a full range of functionalities were provided, it could reduce testing and QA times."}),"\n",(0,s.jsxs)(n.p,{children:["Our intention is to ",(0,s.jsx)(n.code,{children:"flatten the anvil"})," of ink! integration testing. With a properly flattened anvil, quality tools can be built."]}),"\n",(0,s.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsxs)(n.p,{children:["We have conducted a comprehensive analysis to identify any missing functionalities in integration tests and implementation differences with E2E tests, and to propose and develop new testing features based on our findings. This analysis was carried as part of two previous grants (",(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grant-Milestone-Delivery/pull/998",children:"link1"}),", ",(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grant-Milestone-Delivery/pull/1043",children:"link2"}),"). As part of the latter grant, we have developed and resolved the issues with some of the functions with implementation differences or missing implementations: ",(0,s.jsx)(n.code,{children:"default_accounts()"}),", ",(0,s.jsx)(n.code,{children:"set_contract_storage()"})," and ",(0,s.jsx)(n.code,{children:"instantiate_contract()"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["With this new grant, our objective is to implement our findings. Specifically, we aim to address functions in integration testing that have missing implementations or show differences when compared to e2e tests. We will add our contributions into the ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink",children:"ink! project repository"})," following existing ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink/blob/master/CONTRIBUTING.md",children:"contribution guidelines"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsx)(n.p,{children:"Having a comprehensive set of functionalities available for integration tests would bring numerous benefits to the entire community, including improved reliability, code quality and maturity, and faster feedback loops."}),"\n",(0,s.jsxs)(n.p,{children:["Integration tests are useful during their development and they are quicker than E2E tests. We learned this while working on fuzzing detection techniques during the ",(0,s.jsx)(n.a,{href:"https://github.com/CoinFabrik/web3-grant",children:"Proof of Concept of Scout"}),", which we performed in collaboration with ",(0,s.jsx)(n.a,{href:"https://lafhis.dc.uba.ar/home",children:"researchers from the University of Buenos Aires"}),". We believe that having a complete set of functionalities for integration tests would be useful for other teams working in the development of ink! smart contracts."]}),"\n",(0,s.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ariel Wassbein, Head of Research."}),"\n",(0,s.jsx)(n.li,{children:"Valeria Caracciolo, Business Development."}),"\n",(0,s.jsx)(n.li,{children:"CoinFabrik's development and QA teams."}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Name:"})," Valeria Caracciolo"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Email:"})," ",(0,s.jsx)(n.a,{href:"mailto:valeria.caracciolo@coinfabrik.com",children:"valeria.caracciolo@coinfabrik.com"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Website:"})," ",(0,s.jsx)(n.a,{href:"https://www.coinfabrik.com/",children:"https://www.coinfabrik.com/"})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Registered Address:"})," Dr. Emilio Ravignani 2394, C1425 CABA, Argentina"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Registered Legal Entity:"})," Nektra S.A"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsx)(n.p,{children:"We are a research and development company specialized in Web3, with a strong background in cybersecurity. Founded in 2014, we have worked on over 200 blockchain-related projects, EVM based and also for Solana, Algorand, and Polkadot. Beyond development, we offer security audits through a dedicated in-house team of senior cybersecurity professionals, currently working on code in Substrate, Solidity, Clarity, Rust, and TEAL."}),"\n",(0,s.jsx)(n.p,{children:"Our team has an academic background in computer science and mathematics, with work experience focused on cybersecurity and software development, including academic publications, patents turned into products, and conference presentations. Furthermore, we have an ongoing collaboration on knowledge transfer and open-source projects with the University of Buenos Aires."}),"\n",(0,s.jsx)(n.p,{children:"As well, CoinFabrik has been providing Quality Assurance as a service to development teams, accumulating valuable expertise in the field for a considerable period of time. Our clients highly appreciate this service, and as a result, we are eager to expand our capabilities to the ink! ecosystem."}),"\n",(0,s.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/CoinFabrik",children:"https://github.com/CoinFabrik"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/CoinFabrik/on-ink_implementations",children:"https://github.com/CoinFabrik/on-ink_implementations"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/CoinFabrik/on-ink-integration-tests",children:"https://github.com/CoinFabrik/on-ink-integration-tests"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/CoinFabrik/scout",children:"https://github.com/CoinFabrik/scout"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/CoinFabrik/web3-grant",children:"https://github.com/CoinFabrik/web3-grant"})}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"team-linkedin-profiles-if-available",children:"Team LinkedIn Profiles (if available)"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/arielwaissbein/",children:"https://www.linkedin.com/in/arielwaissbein/"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/valeriacaracciolo/",children:"https://www.linkedin.com/in/valeriacaracciolo/"})}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,s.jsxs)(n.p,{children:["We have identified and analyzed 24 functions exposed for their usage in integration and E2E tests in the file ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink/blob/master/crates/ink/src/env_access.rs",children:"env_access.rs"})," of the ink! repository. We documented these functions and provided test cases comparing their behaviour in integration and end-to-end tests. This analysis can be found in our ",(0,s.jsx)(n.a,{href:"https://github.com/CoinFabrik/on-ink-integration-tests",children:"analysis repository"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Of these 24 functions, 4 functions showed behaviour differences when comparing their implementations for integration and e2e tests, 9 showed missing implementations for integration tests and the remaining 11 functions showed a consistent implementation across both environments."}),"\n",(0,s.jsx)(n.p,{children:"In the table below, we provide the status of each function after the developments and analysis made in our previous milestones."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Table 1: Status of functions exposed in integration and e2e testing environments."})}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Issue Number"}),(0,s.jsx)(n.th,{children:"Function"}),(0,s.jsx)(n.th,{children:"Implemented Integration Tests"}),(0,s.jsx)(n.th,{children:"Implemented E2E Tests"}),(0,s.jsx)(n.th,{children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"1"}),(0,s.jsx)(n.td,{children:"default_accounts()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsxs)(n.td,{children:["Implementation Difference Corrected. ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink/pull/1955",children:"Pull request performed"}),"."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"2"}),(0,s.jsx)(n.td,{children:"set_contract_storage()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsxs)(n.td,{children:["Missing limitation on Integration Testing Implemented. ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink/pull/1961",children:"Pull request performed"}),"."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"3"}),(0,s.jsx)(n.td,{children:"invoke_contract_delegate()"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Missing Function Implementation on Integration Testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"4"}),(0,s.jsx)(n.td,{children:"invoke_contract()"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Missing Function Implementation on Integration Testing"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"5"}),(0,s.jsx)(n.td,{children:"gas_left()"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Missing Function Implementation on Integration Testing. Unfeasible Implementation."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"6"}),(0,s.jsx)(n.td,{children:"set_code_hash()"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Missing Function Implementation on Integration Testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"7"}),(0,s.jsx)(n.td,{children:"instantiate_contract()"}),(0,s.jsxs)(n.td,{children:["No. ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink/pull/1963",children:"Pull request performed"}),"."]}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsxs)(n.td,{children:["Missing Function Implementation on Integration Testing Performed. ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink/pull/1963",children:"Pull request performed"}),"."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"8"}),(0,s.jsx)(n.td,{children:"caller_is_origin()"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Missing Function Implementation on Integration Testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"9"}),(0,s.jsx)(n.td,{children:"code_hash()"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Missing Function Implementation on Integration Testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"10"}),(0,s.jsx)(n.td,{children:"own_code_hash()"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Missing Function Implementation on Integration Testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"11"}),(0,s.jsx)(n.td,{children:"call_runtime()"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Missing Function Implementation on Integration Testing. Unfeasible Implementation."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"12"}),(0,s.jsx)(n.td,{children:"caller()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"13"}),(0,s.jsx)(n.td,{children:"transferred_value()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"14"}),(0,s.jsx)(n.td,{children:"weight_to_fee()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Implementation Difference."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"15"}),(0,s.jsx)(n.td,{children:"block_timestamp()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"16"}),(0,s.jsx)(n.td,{children:"account_id()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"17"}),(0,s.jsx)(n.td,{children:"balance()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Implementation Difference."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"18"}),(0,s.jsx)(n.td,{children:"block_number()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"19"}),(0,s.jsx)(n.td,{children:"minimum_balance()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"20"}),(0,s.jsx)(n.td,{children:"terminate_contract()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"21"}),(0,s.jsx)(n.td,{children:"transfer()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"22"}),(0,s.jsx)(n.td,{children:"hash_bytes()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"23"}),(0,s.jsx)(n.td,{children:"hash_encoded()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"24"}),(0,s.jsx)(n.td,{children:"ecdsa_recover()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]})]})]}),"\n",(0,s.jsxs)(n.p,{children:["In this milestone, we will develop the remaining functions that either lack implementations in integration tests or exhibit differences in implementation when compared to E2E tests. However, we will make exceptions for ",(0,s.jsx)(n.code,{children:"gas_left()"})," and ",(0,s.jsx)(n.code,{children:"call_runtime()"}),", as our analysis has deemed implementing these functions in integration tests unfeasible."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsxs)(n.strong,{children:["Observations for function ",(0,s.jsx)(n.code,{children:"weight_to_fee()"}),":"]})}),"\n",(0,s.jsxs)(n.p,{children:["For the function ",(0,s.jsx)(n.code,{children:"weight_to_fee()"}),", we have observed in the ",(0,s.jsx)(n.a,{href:"https://github.com/CoinFabrik/on-ink-integration-tests/blob/milestone-on-ink-integration-tests-2/assets/On-Ink-Integration-Tests-2-Milestone-Report.pdf",children:"milestone report of our previous grant delivery"})," and in the provided ",(0,s.jsx)(n.a,{href:"https://github.com/CoinFabrik/on-ink-integration-tests/tree/main/test-cases/weight-to-fee",children:"test case"})," that the value obtained in e2e tests is fixed at 0 and cannot be modified. This incorrect behaviour of ",(0,s.jsx)(n.code,{children:"weight_to_fee()"})," in E2E tests is also observed in paritytech/substrate-contracts-node."]}),"\n",(0,s.jsxs)(n.p,{children:["We have reviewed the function ",(0,s.jsx)(n.code,{children:"weight_to_fee()"})," and found that it has multiple implementations. This complexity makes it challenging to identify which implementation is responsible for the E2E tests, especially given that the large size of the runtime significantly slows down debugging."]}),"\n",(0,s.jsx)(n.p,{children:"To address this issue, we will submit an initial report to the ink! development team in the first week of this milestone and collaborate to devise an implementation plan. If we deem a resolution feasible, we will include it as part of this milestone."}),"\n",(0,s.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Estimated Duration:"})," 4 weeks"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Full-Time Equivalent (FTE):"})," 4 FTE (0.50 Project Manager, 0.50 Tech Lead, 1 Full time Sr Rust Developer, 1 Full Time SemiSr Rust Developer, 1 Full Time QA Specialist)"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Costs:"})," 30,000 USD"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-1-execution",children:"Milestone 1: Execution"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated duration:"})," 4 weeks"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 4"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," 30,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"MIT"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsxs)(n.td,{children:["We will write a comprehensive report that compares the functionalities of integration tests and E2E (End-to-End) tests. This report will focus on the the functions to be implemented in this milestone, corresponding to issues ",(0,s.jsx)(n.code,{children:"3-invoke_contract_delegate()"}),", ",(0,s.jsx)(n.code,{children:"4-invoke_contract()"}),", ",(0,s.jsx)(n.code,{children:"6-set_code_hash()"}),", ",(0,s.jsx)(n.code,{children:"8-caller_is_origin()"}),", ",(0,s.jsx)(n.code,{children:"9-code_hash()"}),", ",(0,s.jsx)(n.code,{children:"10-own_code_hash()"}),", and ",(0,s.jsx)(n.code,{children:"17-balance()"}),".",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"In the first week of this milestone, we will contact the ink! development team to provide an initial report on ",(0,s.jsx)(n.code,{children:"14-weight_to_fee()"}),", documenting our efforts to identify the source of its implementation issues and seeking collaboration to assess the feasibility of resolving them. We will document any progress and implementations related to ",(0,s.jsx)(n.code,{children:"14-weight_to_fee()"})," in our final milestone report.",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"We will document any additional work that was required in order to ensure consistency between integration and e2e tests.",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"If applicable, we will suggest additional tests outside of the scope of this milestone. Particularly, for functions declared outside of the ",(0,s.jsx)(n.code,{children:"env_access.rs"})," file, but that could be related to integration or e2e testing."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0c."}),(0,s.jsx)(n.td,{children:"Testing and Testing Guide"}),(0,s.jsxs)(n.td,{children:["The newly developed functionalities will be documented and tested following existing ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink/blob/master/CONTRIBUTING.md",children:"contribution guidelines"}),". A testing guide will be included."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0d."}),(0,s.jsx)(n.td,{children:"Docker"}),(0,s.jsx)(n.td,{children:"Does not apply at this stage."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0e."}),(0,s.jsx)(n.td,{children:"Article"}),(0,s.jsxs)(n.td,{children:["We will publish an updated report summary in our blog at ",(0,s.jsx)(n.a,{href:"https://blog.coinfabrik.com/",children:"https://blog.coinfabrik.com/"}),"."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"1"})}),(0,s.jsx)(n.td,{children:"Development"}),(0,s.jsxs)(n.td,{children:["We will implement the missing functionalities or resolve implementation differences for function issues ",(0,s.jsx)(n.code,{children:"3-invoke_contract_delegate()"}),", ",(0,s.jsx)(n.code,{children:"4-invoke_contract()"}),", ",(0,s.jsx)(n.code,{children:"6-set_code_hash()"}),", ",(0,s.jsx)(n.code,{children:"8-caller_is_origin()"}),", ",(0,s.jsx)(n.code,{children:"9-code_hash()"}),", ",(0,s.jsx)(n.code,{children:"10-own_code_hash()"})," and ",(0,s.jsx)(n.code,{children:"17-balance()"}),".",(0,s.jsx)("br",{}),"We will also make the necessary changes to address the issues highlighted in our initial report on ",(0,s.jsx)(n.code,{children:"14-weight_to_fee()"}),", provided that these changes are deemed feasible during our discussions with the ink! development team.",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"All these implementations or modifications will be pushed into the ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink",children:"ink! project repository"})," following existing ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink/blob/master/CONTRIBUTING.md",children:"contribution guidelines"}),".",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"If applicable, we will develop additional tests or make ad hoc improvements to the ink codebase necessary for the completion of this milestone. Particularly for functions declared outside the ",(0,s.jsx)(n.code,{children:"env_access.rs"})," file that might be related to integration or end-to-end testing."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"2"})}),(0,s.jsx)(n.td,{children:"Quality Assurance"}),(0,s.jsxs)(n.td,{children:["We will adhere to existing ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink/blob/master/CONTRIBUTING.md",children:"contribution guidelines"})," and add necessary tests to integrate the new implemented or corrected functions to the ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink",children:"ink! project repository"}),"."]})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsx)(n.p,{children:"Moving forward, we have two projects in mind:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Research and develop an advanced testing automation solution for ink! smart contracts."}),"\n",(0,s.jsxs)(n.li,{children:["Improve our open source bug-detection tool ",(0,s.jsx)(n.a,{href:"https://coinfabrik.github.io/scout/",children:"Scout"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"referral-program-optional-moneybag",children:["Referral Program (optional) ","\ud83d\udcb0"]}),"\n",(0,s.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"How did you hear about the Grants Program?"})," Richard Casey from Parity brought this program to our attention, and we have already successfully delivered two applications as a result."]}),"\n",(0,s.jsx)(n.p,{children:"During our inquiries for this application, we briefly consulted Sam Ruberti from the ink! Team and David Hawig from the Web3 Foundation. Their encouragement motivated us to proceed with this presentation."})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>d});var t=i(96540);const s={},r=t.createContext(s);function o(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/07d73d7d.9fe7eee4.js b/assets/js/07d73d7d.9fe7eee4.js deleted file mode 100644 index 968831fda88..00000000000 --- a/assets/js/07d73d7d.9fe7eee4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[80631],{14302:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>o,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"applications/CoinFabrik_On_Ink_Integration_Tests_3","title":"CoinFabrik On Ink Integration Tests 3","description":"- Team Name: CoinFabrik (Nektra S.A)","source":"@site/applications/CoinFabrik_On_Ink_Integration_Tests_3.md","sourceDirName":"applications","slug":"/applications/CoinFabrik_On_Ink_Integration_Tests_3","permalink":"/applications/CoinFabrik_On_Ink_Integration_Tests_3","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/CoinFabrik_On_Ink_Integration_Tests_3.md","tags":[],"version":"current","frontMatter":{}}');var s=i(74848),r=i(28453);const o={},d="CoinFabrik On Ink Integration Tests 3",l={},c=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles (if available)",id:"team-linkedin-profiles-if-available",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1: Execution",id:"milestone-1-execution",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Referral Program (optional) \ud83d\udcb0",id:"referral-program-optional-moneybag",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"coinfabrik-on-ink-integration-tests-3",children:"CoinFabrik On Ink Integration Tests 3"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Team Name:"})," CoinFabrik (Nektra S.A)"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Payment Address:"})," 0xf488039EDe6B38D7689fDCC6A9FC2dd0EF39D54e (USDC)"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsxs)(n.strong,{children:[(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 2"]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(n.p,{children:"We have discovered that integration tests for ink! contracts lack some of the functionalities, or present implementation differences, when compared to E2E testing."}),"\n",(0,s.jsx)(n.p,{children:"Integration tests run significantly faster than E2E (end-to-end) tests. If a full range of functionalities were provided, it could reduce testing and QA times."}),"\n",(0,s.jsxs)(n.p,{children:["Our intention is to ",(0,s.jsx)(n.code,{children:"flatten the anvil"})," of ink! integration testing. With a properly flattened anvil, quality tools can be built."]}),"\n",(0,s.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsxs)(n.p,{children:["We have conducted a comprehensive analysis to identify any missing functionalities in integration tests and implementation differences with E2E tests, and to propose and develop new testing features based on our findings. This analysis was carried as part of two previous grants (",(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grant-Milestone-Delivery/pull/998",children:"link1"}),", ",(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grant-Milestone-Delivery/pull/1043",children:"link2"}),"). As part of the latter grant, we have developed and resolved the issues with some of the functions with implementation differences or missing implementations: ",(0,s.jsx)(n.code,{children:"default_accounts()"}),", ",(0,s.jsx)(n.code,{children:"set_contract_storage()"})," and ",(0,s.jsx)(n.code,{children:"instantiate_contract()"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["With this new grant, our objective is to implement our findings. Specifically, we aim to address functions in integration testing that have missing implementations or show differences when compared to e2e tests. We will add our contributions into the ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink",children:"ink! project repository"})," following existing ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink/blob/master/CONTRIBUTING.md",children:"contribution guidelines"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsx)(n.p,{children:"Having a comprehensive set of functionalities available for integration tests would bring numerous benefits to the entire community, including improved reliability, code quality and maturity, and faster feedback loops."}),"\n",(0,s.jsxs)(n.p,{children:["Integration tests are useful during their development and they are quicker than E2E tests. We learned this while working on fuzzing detection techniques during the ",(0,s.jsx)(n.a,{href:"https://github.com/CoinFabrik/web3-grant",children:"Proof of Concept of Scout"}),", which we performed in collaboration with ",(0,s.jsx)(n.a,{href:"https://lafhis.dc.uba.ar/home",children:"researchers from the University of Buenos Aires"}),". We believe that having a complete set of functionalities for integration tests would be useful for other teams working in the development of ink! smart contracts."]}),"\n",(0,s.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ariel Wassbein, Head of Research."}),"\n",(0,s.jsx)(n.li,{children:"Valeria Caracciolo, Business Development."}),"\n",(0,s.jsx)(n.li,{children:"CoinFabrik's development and QA teams."}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Name:"})," Valeria Caracciolo"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Email:"})," ",(0,s.jsx)(n.a,{href:"mailto:valeria.caracciolo@coinfabrik.com",children:"valeria.caracciolo@coinfabrik.com"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Website:"})," ",(0,s.jsx)(n.a,{href:"https://www.coinfabrik.com/",children:"https://www.coinfabrik.com/"})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Registered Address:"})," Dr. Emilio Ravignani 2394, C1425 CABA, Argentina"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Registered Legal Entity:"})," Nektra S.A"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsx)(n.p,{children:"We are a research and development company specialized in Web3, with a strong background in cybersecurity. Founded in 2014, we have worked on over 200 blockchain-related projects, EVM based and also for Solana, Algorand, and Polkadot. Beyond development, we offer security audits through a dedicated in-house team of senior cybersecurity professionals, currently working on code in Substrate, Solidity, Clarity, Rust, and TEAL."}),"\n",(0,s.jsx)(n.p,{children:"Our team has an academic background in computer science and mathematics, with work experience focused on cybersecurity and software development, including academic publications, patents turned into products, and conference presentations. Furthermore, we have an ongoing collaboration on knowledge transfer and open-source projects with the University of Buenos Aires."}),"\n",(0,s.jsx)(n.p,{children:"As well, CoinFabrik has been providing Quality Assurance as a service to development teams, accumulating valuable expertise in the field for a considerable period of time. Our clients highly appreciate this service, and as a result, we are eager to expand our capabilities to the ink! ecosystem."}),"\n",(0,s.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/CoinFabrik",children:"https://github.com/CoinFabrik"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/CoinFabrik/on-ink_implementations",children:"https://github.com/CoinFabrik/on-ink_implementations"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/CoinFabrik/on-ink-integration-tests",children:"https://github.com/CoinFabrik/on-ink-integration-tests"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/CoinFabrik/scout",children:"https://github.com/CoinFabrik/scout"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/CoinFabrik/web3-grant",children:"https://github.com/CoinFabrik/web3-grant"})}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"team-linkedin-profiles-if-available",children:"Team LinkedIn Profiles (if available)"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/arielwaissbein/",children:"https://www.linkedin.com/in/arielwaissbein/"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/valeriacaracciolo/",children:"https://www.linkedin.com/in/valeriacaracciolo/"})}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,s.jsxs)(n.p,{children:["We have identified and analyzed 24 functions exposed for their usage in integration and E2E tests in the file ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink/blob/master/crates/ink/src/env_access.rs",children:"env_access.rs"})," of the ink! repository. We documented these functions and provided test cases comparing their behaviour in integration and end-to-end tests. This analysis can be found in our ",(0,s.jsx)(n.a,{href:"https://github.com/CoinFabrik/on-ink-integration-tests",children:"analysis repository"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Of these 24 functions, 4 functions showed behaviour differences when comparing their implementations for integration and e2e tests, 9 showed missing implementations for integration tests and the remaining 11 functions showed a consistent implementation across both environments."}),"\n",(0,s.jsx)(n.p,{children:"In the table below, we provide the status of each function after the developments and analysis made in our previous milestones."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Table 1: Status of functions exposed in integration and e2e testing environments."})}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Issue Number"}),(0,s.jsx)(n.th,{children:"Function"}),(0,s.jsx)(n.th,{children:"Implemented Integration Tests"}),(0,s.jsx)(n.th,{children:"Implemented E2E Tests"}),(0,s.jsx)(n.th,{children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"1"}),(0,s.jsx)(n.td,{children:"default_accounts()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsxs)(n.td,{children:["Implementation Difference Corrected. ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink/pull/1955",children:"Pull request performed"}),"."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"2"}),(0,s.jsx)(n.td,{children:"set_contract_storage()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsxs)(n.td,{children:["Missing limitation on Integration Testing Implemented. ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink/pull/1961",children:"Pull request performed"}),"."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"3"}),(0,s.jsx)(n.td,{children:"invoke_contract_delegate()"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Missing Function Implementation on Integration Testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"4"}),(0,s.jsx)(n.td,{children:"invoke_contract()"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Missing Function Implementation on Integration Testing"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"5"}),(0,s.jsx)(n.td,{children:"gas_left()"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Missing Function Implementation on Integration Testing. Unfeasible Implementation."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"6"}),(0,s.jsx)(n.td,{children:"set_code_hash()"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Missing Function Implementation on Integration Testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"7"}),(0,s.jsx)(n.td,{children:"instantiate_contract()"}),(0,s.jsxs)(n.td,{children:["No. ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink/pull/1963",children:"Pull request performed"}),"."]}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsxs)(n.td,{children:["Missing Function Implementation on Integration Testing Performed. ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink/pull/1963",children:"Pull request performed"}),"."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"8"}),(0,s.jsx)(n.td,{children:"caller_is_origin()"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Missing Function Implementation on Integration Testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"9"}),(0,s.jsx)(n.td,{children:"code_hash()"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Missing Function Implementation on Integration Testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"10"}),(0,s.jsx)(n.td,{children:"own_code_hash()"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Missing Function Implementation on Integration Testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"11"}),(0,s.jsx)(n.td,{children:"call_runtime()"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Missing Function Implementation on Integration Testing. Unfeasible Implementation."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"12"}),(0,s.jsx)(n.td,{children:"caller()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"13"}),(0,s.jsx)(n.td,{children:"transferred_value()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"14"}),(0,s.jsx)(n.td,{children:"weight_to_fee()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Implementation Difference."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"15"}),(0,s.jsx)(n.td,{children:"block_timestamp()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"16"}),(0,s.jsx)(n.td,{children:"account_id()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"17"}),(0,s.jsx)(n.td,{children:"balance()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Implementation Difference."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"18"}),(0,s.jsx)(n.td,{children:"block_number()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"19"}),(0,s.jsx)(n.td,{children:"minimum_balance()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"20"}),(0,s.jsx)(n.td,{children:"terminate_contract()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"21"}),(0,s.jsx)(n.td,{children:"transfer()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"22"}),(0,s.jsx)(n.td,{children:"hash_bytes()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"23"}),(0,s.jsx)(n.td,{children:"hash_encoded()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"24"}),(0,s.jsx)(n.td,{children:"ecdsa_recover()"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:"Ok. No difference observed in testing."})]})]})]}),"\n",(0,s.jsxs)(n.p,{children:["In this milestone, we will develop the remaining functions that either lack implementations in integration tests or exhibit differences in implementation when compared to E2E tests. However, we will make exceptions for ",(0,s.jsx)(n.code,{children:"gas_left()"})," and ",(0,s.jsx)(n.code,{children:"call_runtime()"}),", as our analysis has deemed implementing these functions in integration tests unfeasible."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsxs)(n.strong,{children:["Observations for function ",(0,s.jsx)(n.code,{children:"weight_to_fee()"}),":"]})}),"\n",(0,s.jsxs)(n.p,{children:["For the function ",(0,s.jsx)(n.code,{children:"weight_to_fee()"}),", we have observed in the ",(0,s.jsx)(n.a,{href:"https://github.com/CoinFabrik/on-ink-integration-tests/blob/milestone-on-ink-integration-tests-2/assets/On-Ink-Integration-Tests-2-Milestone-Report.pdf",children:"milestone report of our previous grant delivery"})," and in the provided ",(0,s.jsx)(n.a,{href:"https://github.com/CoinFabrik/on-ink-integration-tests/tree/main/test-cases/weight-to-fee",children:"test case"})," that the value obtained in e2e tests is fixed at 0 and cannot be modified. This incorrect behaviour of ",(0,s.jsx)(n.code,{children:"weight_to_fee()"})," in E2E tests is also observed in paritytech/substrate-contracts-node."]}),"\n",(0,s.jsxs)(n.p,{children:["We have reviewed the function ",(0,s.jsx)(n.code,{children:"weight_to_fee()"})," and found that it has multiple implementations. This complexity makes it challenging to identify which implementation is responsible for the E2E tests, especially given that the large size of the runtime significantly slows down debugging."]}),"\n",(0,s.jsx)(n.p,{children:"To address this issue, we will submit an initial report to the ink! development team in the first week of this milestone and collaborate to devise an implementation plan. If we deem a resolution feasible, we will include it as part of this milestone."}),"\n",(0,s.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Estimated Duration:"})," 4 weeks"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Full-Time Equivalent (FTE):"})," 4 FTE (0.50 Project Manager, 0.50 Tech Lead, 1 Full time Sr Rust Developer, 1 Full Time SemiSr Rust Developer, 1 Full Time QA Specialist)"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Costs:"})," 30,000 USD"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-1-execution",children:"Milestone 1: Execution"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated duration:"})," 4 weeks"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 4"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," 30,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"MIT"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsxs)(n.td,{children:["We will write a comprehensive report that compares the functionalities of integration tests and E2E (End-to-End) tests. This report will focus on the the functions to be implemented in this milestone, corresponding to issues ",(0,s.jsx)(n.code,{children:"3-invoke_contract_delegate()"}),", ",(0,s.jsx)(n.code,{children:"4-invoke_contract()"}),", ",(0,s.jsx)(n.code,{children:"6-set_code_hash()"}),", ",(0,s.jsx)(n.code,{children:"8-caller_is_origin()"}),", ",(0,s.jsx)(n.code,{children:"9-code_hash()"}),", ",(0,s.jsx)(n.code,{children:"10-own_code_hash()"}),", and ",(0,s.jsx)(n.code,{children:"17-balance()"}),".",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"In the first week of this milestone, we will contact the ink! development team to provide an initial report on ",(0,s.jsx)(n.code,{children:"14-weight_to_fee()"}),", documenting our efforts to identify the source of its implementation issues and seeking collaboration to assess the feasibility of resolving them. We will document any progress and implementations related to ",(0,s.jsx)(n.code,{children:"14-weight_to_fee()"})," in our final milestone report.",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"We will document any additional work that was required in order to ensure consistency between integration and e2e tests.",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"If applicable, we will suggest additional tests outside of the scope of this milestone. Particularly, for functions declared outside of the ",(0,s.jsx)(n.code,{children:"env_access.rs"})," file, but that could be related to integration or e2e testing."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0c."}),(0,s.jsx)(n.td,{children:"Testing and Testing Guide"}),(0,s.jsxs)(n.td,{children:["The newly developed functionalities will be documented and tested following existing ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink/blob/master/CONTRIBUTING.md",children:"contribution guidelines"}),". A testing guide will be included."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0d."}),(0,s.jsx)(n.td,{children:"Docker"}),(0,s.jsx)(n.td,{children:"Does not apply at this stage."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0e."}),(0,s.jsx)(n.td,{children:"Article"}),(0,s.jsxs)(n.td,{children:["We will publish an updated report summary in our blog at ",(0,s.jsx)(n.a,{href:"https://blog.coinfabrik.com/",children:"https://blog.coinfabrik.com/"}),"."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"1"})}),(0,s.jsx)(n.td,{children:"Development"}),(0,s.jsxs)(n.td,{children:["We will implement the missing functionalities or resolve implementation differences for function issues ",(0,s.jsx)(n.code,{children:"3-invoke_contract_delegate()"}),", ",(0,s.jsx)(n.code,{children:"4-invoke_contract()"}),", ",(0,s.jsx)(n.code,{children:"6-set_code_hash()"}),", ",(0,s.jsx)(n.code,{children:"8-caller_is_origin()"}),", ",(0,s.jsx)(n.code,{children:"9-code_hash()"}),", ",(0,s.jsx)(n.code,{children:"10-own_code_hash()"})," and ",(0,s.jsx)(n.code,{children:"17-balance()"}),".",(0,s.jsx)("br",{}),"We will also make the necessary changes to address the issues highlighted in our initial report on ",(0,s.jsx)(n.code,{children:"14-weight_to_fee()"}),", provided that these changes are deemed feasible during our discussions with the ink! development team.",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"All these implementations or modifications will be pushed into the ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink",children:"ink! project repository"})," following existing ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink/blob/master/CONTRIBUTING.md",children:"contribution guidelines"}),".",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"If applicable, we will develop additional tests or make ad hoc improvements to the ink codebase necessary for the completion of this milestone. Particularly for functions declared outside the ",(0,s.jsx)(n.code,{children:"env_access.rs"})," file that might be related to integration or end-to-end testing."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"2"})}),(0,s.jsx)(n.td,{children:"Quality Assurance"}),(0,s.jsxs)(n.td,{children:["We will adhere to existing ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink/blob/master/CONTRIBUTING.md",children:"contribution guidelines"})," and add necessary tests to integrate the new implemented or corrected functions to the ",(0,s.jsx)(n.a,{href:"https://github.com/paritytech/ink",children:"ink! project repository"}),"."]})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsx)(n.p,{children:"Moving forward, we have two projects in mind:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Research and develop an advanced testing automation solution for ink! smart contracts."}),"\n",(0,s.jsxs)(n.li,{children:["Improve our open source bug-detection tool ",(0,s.jsx)(n.a,{href:"https://coinfabrik.github.io/scout/",children:"Scout"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"referral-program-optional-moneybag",children:["Referral Program (optional) ","\ud83d\udcb0"]}),"\n",(0,s.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"How did you hear about the Grants Program?"})," Richard Casey from Parity brought this program to our attention, and we have already successfully delivered two applications as a result."]}),"\n",(0,s.jsx)(n.p,{children:"During our inquiries for this application, we briefly consulted Sam Ruberti from the ink! Team and David Hawig from the Web3 Foundation. Their encouragement motivated us to proceed with this presentation."})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>d});var t=i(96540);const s={},r=t.createContext(s);function o(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/093042b1.1af43b2e.js b/assets/js/093042b1.1af43b2e.js new file mode 100644 index 00000000000..6af90c6c23b --- /dev/null +++ b/assets/js/093042b1.1af43b2e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[6278],{63197:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"applications/tokenomics-survey-2022","title":"Tokenomics Scoping Review: Annotated Bibliography","description":"- Team Name: Mark Van de Vyver PhD(Dist)","source":"@site/applications/tokenomics-survey-2022.md","sourceDirName":"applications","slug":"/applications/tokenomics-survey-2022","permalink":"/applications/tokenomics-survey-2022","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/tokenomics-survey-2022.md","tags":[],"version":"current","frontMatter":{}}');var r=i(74848),s=i(28453);const a={},o="Tokenomics Scoping Review: Annotated Bibliography",l={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:2},{value:"The problem",id:"the-problem",level:3},{value:"Research questions/hypothesis",id:"research-questionshypothesis",level:3},{value:"The Methodology",id:"the-methodology",level:3},{value:"The data collection and analysis procedures",id:"the-data-collection-and-analysis-procedures",level:3},{value:"Published articles",id:"published-articles",level:4},{value:"Polkadot Parachain whitepapers",id:"polkadot-parachain-whitepapers",level:4},{value:"The expected results",id:"the-expected-results",level:3},{value:"Relevant related work",id:"relevant-related-work",level:3},{value:"Intended venue for results publication and the timeline for publication",id:"intended-venue-for-results-publication-and-the-timeline-for-publication",level:3},{value:"Out of scope",id:"out-of-scope",level:3},{value:"Crypto-Currencies",id:"crypto-currencies",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Publications",id:"publications",level:4},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles (if available)",id:"team-linkedin-profiles-if-available",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 Data gathering & Polkadot Networks",id:"milestone-1--data-gathering--polkadot-networks",level:3},{value:"Milestone 2 \u2014 Outline Article",id:"milestone-2--outline-article",level:3},{value:"Milestone 3 \u2014 Finalize Article",id:"milestone-3--finalize-article",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const n={a:"a",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"tokenomics-scoping-review-annotated-bibliography",children:"Tokenomics Scoping Review: Annotated Bibliography"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Team Name:"})," Mark Van de Vyver ",(0,r.jsx)(n.a,{href:"https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search",children:"PhD(Dist)"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Payment Address:"})," Fiat Wed, 05 Jun 2024 18:57:53 +1000"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsxs)(n.strong,{children:[(0,r.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 1"]}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,r.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,r.jsx)(n.p,{children:"A annotated bibliography of rational expectations equilibrium (a.k.a. no-arbitrage) economic models used to develop blockchain/token economies, as well as the tokenomics of Polkadot Parachains."}),"\n",(0,r.jsxs)(n.p,{children:["This is a survey, hence limited to topics the existing literature addresses. Within the scope of the deliverables, I am not committing to solving any particular token-economy design question.\nThe report/working paper will be posted to ",(0,r.jsx)(n.a,{href:"https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004",children:"SSRN (e.g. FEN - Cryptocurrency Research eJournal)"}),", ",(0,r.jsx)(n.a,{href:"https://ideas.repec.org/",children:"IDEAS"}),", ",(0,r.jsx)(n.a,{href:"https://www.researchgate.net/publication/373739562_Tokenomics_Scoping_Review_Annotated_Bibliography",children:"ResearchGate"}),"."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Description:\nThe decision making of developers (and other stakeholders) is assisted if a hypothetical/proposed token-economy can be described by reference, or analogy, to a known working/successful token-economy. Absent an existing implementation, developers are left to invent a token-economy, try to adapt an existing non-blockchain experience to a blockchain, or try to adapt non-blockchain ideas to a blockchain."}),"\n",(0,r.jsx)(n.li,{children:"This project provides a annotated bibliography to help think through various choices and their trade-offs. It does so by reviewing the current state of play, as it is described in: a) published general-blockchain research, b) Polkadot whitepapers. It does not offer the answer to any particular token-economy design question."}),"\n",(0,r.jsx)(n.li,{children:"With general Token-Economy networks in mind, I aim to provide a annotated bibliography of existing general-blockchain token-economy research.\nFor practical context, the central features and concerns across Polkadot Parachain Token-Economy networks will be identified.\nUltimately, the reader should learn something about those features of the token-economies of Polkadot Parachain networks and understand how some of the issues raised by the general-blockchain token-economy research are addressed by Polkadot Parachain token-economy designs, while others are not.\nSummary tables will highlight the key differentiating characteristics of different Polkadot Parachain network token-economies."}),"\n",(0,r.jsxs)(n.li,{children:["Motivation:\nA project we are developing envisions the use of the ",(0,r.jsx)(n.a,{href:"https://github.com/open-web3-stack",children:"Open Web3 Stack"})," relay and Parachains in such a manner that our (imagined) token use is, apparently, novel. The state of play in Polkadot Parachain token-economics appears to be a debate ",(0,r.jsx)(n.a,{href:"https://forum.polkadot.network/t/should-parachains-have-staking-inflation/806",children:"around staking and inflation"}),'. A search of docs.substrate.io for "tokenomics" and "token-economics" returns no results. We had expected a reference to, or high-level summary of, the token-economies of parachains elected to the Polkadot relay chain. Ideally, we hoped to find high level descriptions of some token-economy features that are enabled by the distinct features of the ',(0,r.jsx)(n.a,{href:"https://github.com/open-web3-stack",children:"Open Web3 Stack"})," and its pallets, possibly with links to case studies or other resources. This annotated bibliography will provide some of that information."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"project-details",children:"Project Details"}),"\n",(0,r.jsx)(n.h3,{id:"the-problem",children:"The problem"}),"\n",(0,r.jsx)(n.p,{children:'A search of docs.substrate.io for "tokenomics" and "token-economics" returns no results. We had expected a reference to, or high-level summary of, the token-economies of parachains elected to the Polkadot relay chain. Ideally, we hoped to find high level descriptions of some token-economy features, possibly with links to case studies or other resources. This annotated bibliography will provide some of that information. Inclusion of this information in any documentation is out of scope.'}),"\n",(0,r.jsx)(n.h3,{id:"research-questionshypothesis",children:"Research questions/hypothesis"}),"\n",(0,r.jsx)(n.p,{children:"This project provides a annotated bibliography to identify relevant research, it does not offer the answer to any particular token-economy design question. It does so using: a) published general-blockchain research, b) Polkadot whitepapers."}),"\n",(0,r.jsx)(n.h3,{id:"the-methodology",children:"The Methodology"}),"\n",(0,r.jsxs)(n.p,{children:['The annotated bibliography component of this exercise will be closest to a "Scoping Review", see Grant MJ, Booth A. ',(0,r.jsx)(n.a,{href:"https://doi.org/10.1111/j.1471-1842.2009.00848.x",children:"A typology of reviews: an analysis of 14 review types and associated methodologies"}),". Health Info Libr J. 2009 Jun; 26(2):91-108. Review. PubMed PMID: 19490148."]}),"\n",(0,r.jsx)(n.p,{children:"Extract from Table 1 of Grant, M.J. and Booth, A. (2009):"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Search"}),(0,r.jsx)(n.th,{children:"Appraisal"}),(0,r.jsx)(n.th,{children:"Synthesis"}),(0,r.jsx)(n.th,{children:"Analysis"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Preliminary assessment of potential size and scope of available research literature. Aims to identify nature and extent of research evidence (usually including ongoing research)"}),(0,r.jsx)(n.td,{children:"Completeness of searching determined by time/scope constraints. May include research in progress"}),(0,r.jsx)(n.td,{children:"No formal quality assessment"}),(0,r.jsx)(n.td,{children:"Typically tabular with some narrative commentary"}),(0,r.jsx)(n.td,{children:"Characterizes quantity and quality of literature, perhaps by study design and other key features. Attempts to specify a viable review"})]})})]}),"\n",(0,r.jsxs)(n.p,{children:["Each section of the report/working paper will be developed using some subset of the following iterative process (Tsafnat, G., Glasziou, P., Choong, M.K. et al. ",(0,r.jsx)(n.a,{href:"https://doi.org/10.1186/2046-4053-3-74",children:"Systematic review automation technologies"}),", Syst Rev 3, 74 (2014))"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Review reporting guidelines, best practice handbooks, and training modules [preparation stage]"}),"\n",(0,r.jsx)(n.li,{children:"Formulate question and decide on review type [preparation stage]"}),"\n",(0,r.jsx)(n.li,{children:"Search for previous published literature [preparation stage]"}),"\n",(0,r.jsx)(n.li,{children:"Develop and test search strategies [preparation stage]"}),"\n",(0,r.jsx)(n.li,{children:"Review search strategies [preparation stage]"}),"\n",(0,r.jsx)(n.li,{children:"Execute search [retrieval stage]"}),"\n",(0,r.jsx)(n.li,{children:"De-duplicate data/information [retrieval stage]"}),"\n",(0,r.jsx)(n.li,{children:"Screen title and abstracts [screening stage]"}),"\n",(0,r.jsx)(n.li,{children:"Retrieve full-text articles [retrieval stage]"}),"\n",(0,r.jsx)(n.li,{children:"Screen articles in full-text [screening stage]"}),"\n",(0,r.jsx)(n.li,{children:"Search for grey literature (preprints, working papers) [retrieval stage]"}),"\n",(0,r.jsx)(n.li,{children:"Quality assessment and data/information extraction [synthesis stage]"}),"\n",(0,r.jsx)(n.li,{children:"Citation chasing [retrieval stage]"}),"\n",(0,r.jsx)(n.li,{children:"Update database searches [retrieval stage]"}),"\n",(0,r.jsx)(n.li,{children:"Synthesize data/information [synthesis stage]"}),"\n",(0,r.jsx)(n.li,{children:"Manuscript development [write-up stage]"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"the-data-collection-and-analysis-procedures",children:"The data collection and analysis procedures"}),"\n",(0,r.jsx)(n.h4,{id:"published-articles",children:"Published articles"}),"\n",(0,r.jsx)(n.p,{children:'The initial source of the published research will be the top-6 articles selected by the grantee, using the commercial research databases available from the State Library of New South Wales by operationalizing the following inquiry, "Refereed articles on block-chain token-economics using rational expectations equilibrium (a.k.a. no-arbitrage) arguments/analysis, ranked by journal impact factors". This initial source may be adjusted at the grantees discretion based on his expertise. The selection process will be fully described and documented.'}),"\n",(0,r.jsx)(n.h4,{id:"polkadot-parachain-whitepapers",children:"Polkadot Parachain whitepapers"}),"\n",(0,r.jsx)(n.p,{children:"These are from projects that are Polkadot-Parachains as at 19 December 2022."}),"\n",(0,r.jsx)(n.h3,{id:"the-expected-results",children:"The expected results"}),"\n",(0,r.jsx)(n.p,{children:"The objective is to arrive at a scoping review of current state of token-economy development."}),"\n",(0,r.jsx)(n.p,{children:"One of the elements will be summary tables, using attributes that arise naturally within a Rational Expectations Equilibrium framework, such as the following:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Network"}),"\n",(0,r.jsx)(n.li,{children:"Token"}),"\n",(0,r.jsx)(n.li,{children:"Token Type"}),"\n",(0,r.jsx)(n.li,{children:"Model Type"}),"\n",(0,r.jsx)(n.li,{children:"Economy Type"}),"\n",(0,r.jsx)(n.li,{children:"Sector Type"}),"\n",(0,r.jsx)(n.li,{children:"Production Type"}),"\n",(0,r.jsx)(n.li,{children:"Monetary Type"}),"\n",(0,r.jsx)(n.li,{children:"Agent Utility"}),"\n",(0,r.jsx)(n.li,{children:"Economic Sectors"}),"\n",(0,r.jsx)(n.li,{children:"Rate Curves"}),"\n",(0,r.jsx)(n.li,{children:"Riskless Rate"}),"\n",(0,r.jsx)(n.li,{children:"Risk Premium"}),"\n",(0,r.jsx)(n.li,{children:"Market Rate"}),"\n",(0,r.jsx)(n.li,{children:"Borrow/Lend"}),"\n",(0,r.jsx)(n.li,{children:"Lender of Last Resort"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Another component of this research is creating a token-categorization questionnaire or decision tree that will aid/inform the specification of a token-economy. Nonetheless, there are already schemes that are useful even at this early stage. Such as these ",(0,r.jsx)(n.a,{href:"https://doi.org/10.5195/ledger.2018.121",children:"Token Types (Burnie, Burnie and Henderson (2018))"}),":"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:'fuel-tokens: "underpin generic blockchain applications". I refine this definition as follows: The token yield is defined or modeled such that it provides holders with incentives to act for the purpose of ensuring the blockchain has the desired features/characteristics.'}),"\n",(0,r.jsx)(n.li,{children:'transaction-tokens: "act as a cash substitute"'}),"\n",(0,r.jsx)(n.li,{children:'voucher-tokens: "exchanged for a predefined asset". I include goods or services.'}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"The grants team, and any reader could reproduce the data analysis by applying the token-categorization questionaire to a parachain they are familiar with and compare their classification with the submitted result."}),"\n",(0,r.jsx)(n.h3,{id:"relevant-related-work",children:"Relevant related work"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://doi.org/10.1111/j.1471-1842.2009.00848.x",children:"A typology of reviews: an analysis of 14 review types and associated methodologies"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://doi.org/10.1186/2046-4053-3-74",children:"Systematic review automation technologies"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://doi.org/10.5195/ledger.2018.121",children:"Token Types (Burnie, Burnie and Henderson (2018))"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"intended-venue-for-results-publication-and-the-timeline-for-publication",children:"Intended venue for results publication and the timeline for publication"}),"\n",(0,r.jsxs)(n.p,{children:["The report/working paper will be posted to ",(0,r.jsx)(n.a,{href:"https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004",children:"SSRN (e.g. FEN - Cryptocurrency Research eJournal)"}),", ",(0,r.jsx)(n.a,{href:"https://ideas.repec.org/",children:"IDEAS"}),", ",(0,r.jsx)(n.a,{href:"https://www.researchgate.net/publication/373739562_Tokenomics_Scoping_Review_Annotated_Bibliography",children:"ResearchGate"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"out-of-scope",children:"Out of scope"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Crypto currencies/stable coins."}),"\n",(0,r.jsx)(n.li,{children:"What is considered a security and what is not."}),"\n",(0,r.jsxs)(n.li,{children:["Proof-of-work vs Proof-of-stake considerations, e.g. ",(0,r.jsx)(n.a,{href:"https://scholar.princeton.edu/sites/default/files/markus/files/blockchain_paper_v7a.pdf",children:"Blockchain economics"}),"."]}),"\n",(0,r.jsx)(n.li,{children:"Governance considerations, e.g. trust and reputation."}),"\n",(0,r.jsx)(n.li,{children:"Game theory, behavioral economics/finance."}),"\n",(0,r.jsx)(n.li,{children:"Empirical inference of token-economy attributes from time-series or cross-sectional regression analysis."}),"\n",(0,r.jsx)(n.li,{children:"A review of the general economic modeling literature i.e. not related to blockchains."}),"\n",(0,r.jsx)(n.li,{children:"Verifying the network token-economy has been implemented as specified in the network whitepaper."}),"\n",(0,r.jsx)(n.li,{children:"Verifying the network whitepaper assumptions are a reasonable/plausible description of the network participants."}),"\n",(0,r.jsx)(n.li,{children:"Inclusion of any of this information in any project documentation."}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"crypto-currencies",children:"Crypto-Currencies"}),"\n",(0,r.jsx)(n.p,{children:"The prevalence of crypto-currencies means the decision to exclude them warrants some explanation.\nEquilibria are generally explicitly constructed (which proves existence) using conjectured properties of the dividends (or an equivalent) from the economic activity. Specifically, a price is the present-value (i.e. discounted for time and non-diversifiable risk), of all future dividends. Since the dividends of fiat currencies are zero this approach does not work. While there are workarounds, they, being particular, are not of interest in the more general setting we wish to bring to light."}),"\n",(0,r.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Where and how does your project fit into the ecosystem?","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Research into the design of a token-economy and survey of Polkadot token-economies."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["Who is your target audience?","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Blockchain developers. Industry analysts/advisors (media and investors)."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.li,{children:"What need(s) does your project meet?\nDevelopers and analysts need to understand the relevant literature available when developing their token-economy.\nThe literature we canvas both theoretical (refereed articles) and applied (network whitepapers)."}),"\n",(0,r.jsxs)(n.li,{children:["Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem?\nNo","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"If not, are there similar projects in related ecosystems?\nNo"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,r.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Mark Van de Vyver ",(0,r.jsx)(n.a,{href:"https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search",children:"PhD(Dist)"})]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Contact Name:"})," Mark Van de Vyver ",(0,r.jsx)(n.a,{href:"https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search",children:"PhD(Dist)"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Contact Email:"})," ",(0,r.jsx)(n.a,{href:"mailto:mark@taqtiqa.com",children:"mark@taqtiqa.com"})]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Registered Address:"})," 9681 41st St NE, Saint Michael, MN 55376"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Registered Legal Entity:"})," Begley Brothers Inc."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,r.jsx)(n.p,{children:"Research interests"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Time series analysis of price series and pricing model performance."}),"\n",(0,r.jsx)(n.li,{children:"Market Microstructure theory and empirical studies."}),"\n",(0,r.jsx)(n.li,{children:"Option pricing and real options/asset pricing."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"The University of Western Australia (1994-2003):\nPostgraduate and undergraduate teaching and research supervision. Portfolio Management, Corporate Finance and Derivatives Securities. Co-developed (with Prof R. Maller and Prof A. Szimayer) the University\u2019s joint Undergraduate and Postgraduate Degrees in Mathematics and Finance."}),"\n",(0,r.jsx)(n.p,{children:"The University of Sydney (2003-2008):\nPostgraduate and undergraduate teaching and research supervision. Advanced Asset Pricing, Corporate Finance, Investments and Advanced Portfolio Management"}),"\n",(0,r.jsx)(n.h4,{id:"publications",children:"Publications"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://www.researchgate.net/publication/228464696_Order_imbalance_period_by_period",children:"Order imbalance period by period"}),", 2008, Asli Ascioglu, Thomas H. Mcinish (Wunderlich Chair) and Mark Van de Vyver"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://doi.org/10.1111/1368-423X.t01-1-00090",children:"Testing for reduction to random walk in autoregressive conditional heteroskedasticity models"}),", December 2002, Econometrics Journal, Claudia Kluppelberg, Ross Maller, Mark Van de Vyver, Derick Wee"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://doi.org/10.1111/j.1835-2561.2002.tb00191.x",children:"How Might Companies Value Esos?"}),", March 2002, Australian Accounting Review, Ross Maller, Rosemary Tan, Mark Van de Vyver"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,r.jsx)(n.p,{children:"Personal"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/taqtiqa-mark",children:"https://github.com/taqtiqa-mark"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/bbros-dev",children:"https://github.com/bbros-dev"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/taqtiqa",children:"https://github.com/taqtiqa"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/BegleyBrothers",children:"https://github.com/BegleyBrothers"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"team-linkedin-profiles-if-available",children:"Team LinkedIn Profiles (if available)"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://www.linkedin.com/in/tatiqa/",children:"https://www.linkedin.com/in/tatiqa/"})}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["links to improvement requests for proposals or ",(0,r.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/tree/master/rfp-proposal",children:"RFPs"}),":","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/pull/1309",children:"Designing UpChain: a framework for securing Substrate runtime upgrades and Substrate network upgrades"})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.li,{children:"As requested, I have adjusted the source of the research to eliminate myself as the source of bias in the collection of research papers."}),"\n",(0,r.jsxs)(n.li,{children:["academic publications relevant to the problem:\nOne of the products from this research will be such a listing under these categories:","\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:'Published articles: As requested, to eliminate bias (and constrain budget) in the collection of research papers, the initial source of the published research will be the top-6 articles provided by the State Library of New South Wales information search service in response to the following query, "Refereed articles on block-chain token-economics using rational expectations equilibrium (a.k.a. no-arbitrage) arguments/analysis, ranked by journal impact factors"'}),"\n",(0,r.jsx)(n.li,{children:"Polkadot Parachain whitepapers: These are from projects that are Polkadot-Parachains as at 19 December 2022."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["links to your research diary, blog posts, articles, forum discussions or open GitHub issues:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://forum.polkadot.network/t/tokenomics-grant-models/1266",children:"Tokenomics: Grant models"})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.li,{children:"references to conversations you might have had related to this project with anyone from the Web3 Foundation\nThere have been no conversations related to this project with anyone from the Web3 Foundation."}),"\n",(0,r.jsx)(n.li,{children:"previous interface iterations, such as mock-ups and wireframes:\nThis project is research oriented and as such there are no mock-ups and wireframes to test."}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,r.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Total Estimated Duration:"})," 3 months"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Full-Time Equivalent (FTE):"})," 0.2 FTE"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Total Costs:"})," 10,000 USD"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"milestone-1--data-gathering--polkadot-networks",children:"Milestone 1 \u2014 Data gathering & Polkadot Networks"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Estimated duration:"})," 1 month"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"FTE:"})," 0.2"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Costs:"})," 3,000 USD"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Initial analysis of the Parachain tokenomics.\nInitial flow-chart/decision-tree development that will help developers place their token in the following contexts:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Token Type"}),"\n",(0,r.jsx)(n.li,{children:"Model Type"}),"\n",(0,r.jsx)(n.li,{children:"Economy Type"}),"\n",(0,r.jsx)(n.li,{children:"Sector Type"}),"\n",(0,r.jsx)(n.li,{children:"Production Type"}),"\n",(0,r.jsx)(n.li,{children:"Monetary Type"}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{style:{textAlign:"right"},children:"Number"}),(0,r.jsx)(n.th,{children:"Deliverable"}),(0,r.jsx)(n.th,{children:"Specification"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0a."})}),(0,r.jsx)(n.td,{children:"Copyright and Licenses"}),(0,r.jsx)(n.td,{children:"Creative Commons Attribution 4.0 International License (article), Dual Apache 2 or MIT License (code)"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0b."})}),(0,r.jsx)(n.td,{children:"Documentation/Tutorial"}),(0,r.jsxs)(n.td,{children:["We will provide both ",(0,r.jsx)(n.strong,{children:"artifacts documentation"})," of the deliverables and a basic ",(0,r.jsx)(n.strong,{children:"tutorial"})," that explains how a user can (for example) execute the code included or can visualize data or use any artifacts included."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0c."})}),(0,r.jsx)(n.td,{children:"Methodology"}),(0,r.jsx)(n.td,{children:"Detailed explanation of how the results were achieved and how to reproduce/verify the results."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0d."})}),(0,r.jsx)(n.td,{children:"Infrastructure"}),(0,r.jsx)(n.td,{children:"We will provide the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e."})}),(0,r.jsx)(n.td,{children:"Article"}),(0,r.jsxs)(n.td,{children:["We create a ",(0,r.jsx)(n.strong,{children:"draft article"}),' (with source code), in the English language. There will be an acknowledgement "This work was supported by a research grant from the Web3 Foundation. The analysis and opinions expressed are the authors and do not reflect the opinions of the Web3 Foundation."']})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e.1"})}),(0,r.jsx)(n.td,{children:"- Appendix: Methodology"}),(0,r.jsx)(n.td,{children:"As described in the methodology section above"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e.2"})}),(0,r.jsx)(n.td,{children:"- Section: Polkadot Parachains"}),(0,r.jsx)(n.td,{children:"Initial Parachain summary"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:"1."}),(0,r.jsx)(n.td,{children:"List of academic papers"}),(0,r.jsx)(n.td,{children:"Collect published and network papers, as described in the methodology section above"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:"2."}),(0,r.jsx)(n.td,{children:"Data to be extracted from the papers"}),(0,r.jsx)(n.td,{children:"As described in the methodology section above"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:"3."}),(0,r.jsx)(n.td,{children:"Analysis procedures"}),(0,r.jsx)(n.td,{children:"As described in the methodology section above"})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"milestone-2--outline-article",children:"Milestone 2 \u2014 Outline Article"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Estimated duration:"})," 2 month"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"FTE:"})," 0.2"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Costs:"})," 3,000 USD"]}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{style:{textAlign:"right"},children:"Number"}),(0,r.jsx)(n.th,{children:"Deliverable"}),(0,r.jsx)(n.th,{children:"Specification"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0a."})}),(0,r.jsx)(n.td,{children:"Copyright and Licenses"}),(0,r.jsx)(n.td,{children:"Creative Commons Attribution 4.0 International License (article), Dual Apache 2 or MIT License (code)"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0b."})}),(0,r.jsx)(n.td,{children:"Documentation/Tutorial"}),(0,r.jsxs)(n.td,{children:["We will update both ",(0,r.jsx)(n.strong,{children:"artifacts documentation"})," of the deliverables and a basic ",(0,r.jsx)(n.strong,{children:"tutorial"})," that explains how a user can (for example) execute the code included or can visualize data or use any artifacts included."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0c."})}),(0,r.jsx)(n.td,{children:"Methodology"}),(0,r.jsx)(n.td,{children:"Update the detailed explanation of how the results were achieved and how to reproduce/verify the results."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0d."})}),(0,r.jsx)(n.td,{children:"Infrastructure"}),(0,r.jsx)(n.td,{children:"We will update the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e."})}),(0,r.jsx)(n.td,{children:"Article"}),(0,r.jsxs)(n.td,{children:["We will send a ",(0,r.jsx)(n.strong,{children:"draft article"}),' (with source code), in the English language. There will be an acknowledgement "This work was supported by a research grant from the Web3 Foundation. The analysis and opinions expressed are the authors and do not reflect the opinions of the Web3 Foundation."']})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e.1"})}),(0,r.jsx)(n.td,{children:"Article"}),(0,r.jsxs)(n.td,{children:["We will publish an ",(0,r.jsx)(n.strong,{children:"working paper"})," as indicated above."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e.2"})}),(0,r.jsx)(n.td,{children:"- Section: Published models"}),(0,r.jsx)(n.td,{children:"Initial annotated bibliography"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e.3"})}),(0,r.jsx)(n.td,{children:"- Section: Polkadot Parachain Economies"}),(0,r.jsx)(n.td,{children:"Parachain summary updated with references to published models"})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"milestone-3--finalize-article",children:"Milestone 3 \u2014 Finalize Article"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Estimated Duration:"})," 2 month"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"FTE:"})," 0.2"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Costs:"})," 4,000 USD"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Finalize the flow-chart/decision-tree that will help developers place their token in the following contexts:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Token Type"}),"\n",(0,r.jsx)(n.li,{children:"Model Type"}),"\n",(0,r.jsx)(n.li,{children:"Economy Type"}),"\n",(0,r.jsx)(n.li,{children:"Sector Type"}),"\n",(0,r.jsx)(n.li,{children:"Production Type"}),"\n",(0,r.jsx)(n.li,{children:"Monetary Type"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Finalize the annotated bibliography.\nPromote the working paper, incorporate feedback.\nThe report/working paper will be posted to ",(0,r.jsx)(n.a,{href:"https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004",children:"SSRN (e.g. FEN - Cryptocurrency Research eJournal)"}),", ",(0,r.jsx)(n.a,{href:"https://ideas.repec.org/",children:"IDEAS"}),", ",(0,r.jsx)(n.a,{href:"https://www.researchgate.net/publication/373739562_Tokenomics_Scoping_Review_Annotated_Bibliography",children:"ResearchGate"}),"."]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{style:{textAlign:"right"},children:"Number"}),(0,r.jsx)(n.th,{children:"Deliverable"}),(0,r.jsx)(n.th,{children:"Specification"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0a."})}),(0,r.jsx)(n.td,{children:"Copyright and Licenses"}),(0,r.jsx)(n.td,{children:"Creative Commons Attribution 4.0 International License (article), Dual Apache 2 or MIT License (code)"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0b."})}),(0,r.jsx)(n.td,{children:"Documentation/Tutorial"}),(0,r.jsxs)(n.td,{children:["We will update both ",(0,r.jsx)(n.strong,{children:"artifacts documentation"})," of the deliverables and a basic ",(0,r.jsx)(n.strong,{children:"tutorial"})," that explains how a user can (for example) execute the code included or can visualize data or use any artifacts included."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0c."})}),(0,r.jsx)(n.td,{children:"Methodology"}),(0,r.jsx)(n.td,{children:"Update the detailed explanation of how the results were achieved and how to reproduce/verify the results."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0d."})}),(0,r.jsx)(n.td,{children:"Infrastructure"}),(0,r.jsx)(n.td,{children:"We will update the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e"})}),(0,r.jsx)(n.td,{children:"Article"}),(0,r.jsxs)(n.td,{children:["We will update a ",(0,r.jsx)(n.strong,{children:"draft article"}),' (with source code), in the English language. There will be an acknowledgement "This work was supported by a research grant from the Web3 Foundation. The analysis and opinions expressed are the authors and do not reflect the opinions of the Web3 Foundation."']})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e.1"})}),(0,r.jsx)(n.td,{children:"- Section: Introduction"}),(0,r.jsx)(n.td,{children:"Place the topic in perspective and motivate non-specialist readers. Text and tables where relevant/appropriate."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e.2"})}),(0,r.jsx)(n.td,{children:"- Section: Published models"}),(0,r.jsx)(n.td,{children:"Update annotated bibliography"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e.3"})}),(0,r.jsx)(n.td,{children:"- Section: Polkadot Parachains"}),(0,r.jsx)(n.td,{children:"Parachain summary updated with references to published models"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e.4"})}),(0,r.jsx)(n.td,{children:"- Appendix: Methodology"}),(0,r.jsx)(n.td,{children:"The research methodology. Text and tables where relevant/appropriate."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e.5"})}),(0,r.jsx)(n.td,{children:"- Section: Summary"}),(0,r.jsx)(n.td,{children:"Where are we and where to next?"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:"1."}),(0,r.jsx)(n.td,{children:"Feedback"}),(0,r.jsx)(n.td,{children:"Collect published, working and network papers, as described in the methodology section above"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:"2."}),(0,r.jsx)(n.td,{children:"Publish"}),(0,r.jsxs)(n.td,{children:["The working paper will be posted to ",(0,r.jsx)(n.a,{href:"https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004",children:"SSRN (e.g. FEN - Cryptocurrency Research eJournal)"}),", ",(0,r.jsx)(n.a,{href:"https://ideas.repec.org/",children:"IDEAS"}),", ",(0,r.jsx)(n.a,{href:"https://www.researchgate.net/publication/373739562_Tokenomics_Scoping_Review_Annotated_Bibliography",children:"ResearchGate"})]})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,r.jsx)(n.p,{children:"Please include here"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["how you intend to use, enhance, promote and support your project in the short term, and","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The working paper will be posted to ",(0,r.jsx)(n.a,{href:"https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004",children:"SSRN (e.g. FEN - Cryptocurrency Research eJournal)"}),", ",(0,r.jsx)(n.a,{href:"https://ideas.repec.org/",children:"IDEAS"}),",",(0,r.jsx)(n.a,{href:"https://www.researchgate.net/publication/373739562_Tokenomics_Scoping_Review_Annotated_Bibliography",children:"ResearchGate"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["the team's long-term plans and intentions in relation to it.","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["W3F Grant Proposal to implement and document one token model as an example/template of building a blockchain on the W3F ",(0,r.jsx)(n.a,{href:"https://github.com/open-web3-stack",children:"Open Web3 Stack"})," having known 'on-paper' coin characteristics."]}),"\n",(0,r.jsx)(n.li,{children:"Create RFP's addressing pallet functionality gaps that are identified in the course of the above."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"How did you hear about the Grants Program?"})," Web3 Foundation Website"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Work underway:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Literature collation"}),"\n",(0,r.jsx)(n.li,{children:"Type definitions"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["If there are any other teams who have already contributed (financially) to the project.","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"None"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["Previous grants you may have applied for.","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"None"}),"\n"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>a,x:()=>o});var t=i(96540);const r={},s=t.createContext(r);function a(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/093042b1.d82a504c.js b/assets/js/093042b1.d82a504c.js deleted file mode 100644 index 9284864b651..00000000000 --- a/assets/js/093042b1.d82a504c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[6278],{92852:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"applications/tokenomics-survey-2022","title":"Tokenomics Scoping Review: Annotated Bibliography","description":"- Team Name: Mark Van de Vyver PhD(Dist)","source":"@site/applications/tokenomics-survey-2022.md","sourceDirName":"applications","slug":"/applications/tokenomics-survey-2022","permalink":"/applications/tokenomics-survey-2022","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/tokenomics-survey-2022.md","tags":[],"version":"current","frontMatter":{}}');var r=i(74848),s=i(28453);const a={},o="Tokenomics Scoping Review: Annotated Bibliography",l={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:2},{value:"The problem",id:"the-problem",level:3},{value:"Research questions/hypothesis",id:"research-questionshypothesis",level:3},{value:"The Methodology",id:"the-methodology",level:3},{value:"The data collection and analysis procedures",id:"the-data-collection-and-analysis-procedures",level:3},{value:"Published articles",id:"published-articles",level:4},{value:"Polkadot Parachain whitepapers",id:"polkadot-parachain-whitepapers",level:4},{value:"The expected results",id:"the-expected-results",level:3},{value:"Relevant related work",id:"relevant-related-work",level:3},{value:"Intended venue for results publication and the timeline for publication",id:"intended-venue-for-results-publication-and-the-timeline-for-publication",level:3},{value:"Out of scope",id:"out-of-scope",level:3},{value:"Crypto-Currencies",id:"crypto-currencies",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Publications",id:"publications",level:4},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles (if available)",id:"team-linkedin-profiles-if-available",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 Data gathering & Polkadot Networks",id:"milestone-1--data-gathering--polkadot-networks",level:3},{value:"Milestone 2 \u2014 Outline Article",id:"milestone-2--outline-article",level:3},{value:"Milestone 3 \u2014 Finalize Article",id:"milestone-3--finalize-article",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const n={a:"a",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"tokenomics-scoping-review-annotated-bibliography",children:"Tokenomics Scoping Review: Annotated Bibliography"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Team Name:"})," Mark Van de Vyver ",(0,r.jsx)(n.a,{href:"https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search",children:"PhD(Dist)"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Payment Address:"})," Fiat Wed, 05 Jun 2024 18:57:53 +1000"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsxs)(n.strong,{children:[(0,r.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 1"]}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,r.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,r.jsx)(n.p,{children:"A annotated bibliography of rational expectations equilibrium (a.k.a. no-arbitrage) economic models used to develop blockchain/token economies, as well as the tokenomics of Polkadot Parachains."}),"\n",(0,r.jsxs)(n.p,{children:["This is a survey, hence limited to topics the existing literature addresses. Within the scope of the deliverables, I am not committing to solving any particular token-economy design question.\nThe report/working paper will be posted to ",(0,r.jsx)(n.a,{href:"https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004",children:"SSRN (e.g. FEN - Cryptocurrency Research eJournal)"}),", ",(0,r.jsx)(n.a,{href:"https://ideas.repec.org/",children:"IDEAS"}),", ",(0,r.jsx)(n.a,{href:"https://www.researchgate.net/publication/373739562_Tokenomics_Scoping_Review_Annotated_Bibliography",children:"ResearchGate"}),"."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Description:\nThe decision making of developers (and other stakeholders) is assisted if a hypothetical/proposed token-economy can be described by reference, or analogy, to a known working/successful token-economy. Absent an existing implementation, developers are left to invent a token-economy, try to adapt an existing non-blockchain experience to a blockchain, or try to adapt non-blockchain ideas to a blockchain."}),"\n",(0,r.jsx)(n.li,{children:"This project provides a annotated bibliography to help think through various choices and their trade-offs. It does so by reviewing the current state of play, as it is described in: a) published general-blockchain research, b) Polkadot whitepapers. It does not offer the answer to any particular token-economy design question."}),"\n",(0,r.jsx)(n.li,{children:"With general Token-Economy networks in mind, I aim to provide a annotated bibliography of existing general-blockchain token-economy research.\nFor practical context, the central features and concerns across Polkadot Parachain Token-Economy networks will be identified.\nUltimately, the reader should learn something about those features of the token-economies of Polkadot Parachain networks and understand how some of the issues raised by the general-blockchain token-economy research are addressed by Polkadot Parachain token-economy designs, while others are not.\nSummary tables will highlight the key differentiating characteristics of different Polkadot Parachain network token-economies."}),"\n",(0,r.jsxs)(n.li,{children:["Motivation:\nA project we are developing envisions the use of the ",(0,r.jsx)(n.a,{href:"https://github.com/open-web3-stack",children:"Open Web3 Stack"})," relay and Parachains in such a manner that our (imagined) token use is, apparently, novel. The state of play in Polkadot Parachain token-economics appears to be a debate ",(0,r.jsx)(n.a,{href:"https://forum.polkadot.network/t/should-parachains-have-staking-inflation/806",children:"around staking and inflation"}),'. A search of docs.substrate.io for "tokenomics" and "token-economics" returns no results. We had expected a reference to, or high-level summary of, the token-economies of parachains elected to the Polkadot relay chain. Ideally, we hoped to find high level descriptions of some token-economy features that are enabled by the distinct features of the ',(0,r.jsx)(n.a,{href:"https://github.com/open-web3-stack",children:"Open Web3 Stack"})," and its pallets, possibly with links to case studies or other resources. This annotated bibliography will provide some of that information."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"project-details",children:"Project Details"}),"\n",(0,r.jsx)(n.h3,{id:"the-problem",children:"The problem"}),"\n",(0,r.jsx)(n.p,{children:'A search of docs.substrate.io for "tokenomics" and "token-economics" returns no results. We had expected a reference to, or high-level summary of, the token-economies of parachains elected to the Polkadot relay chain. Ideally, we hoped to find high level descriptions of some token-economy features, possibly with links to case studies or other resources. This annotated bibliography will provide some of that information. Inclusion of this information in any documentation is out of scope.'}),"\n",(0,r.jsx)(n.h3,{id:"research-questionshypothesis",children:"Research questions/hypothesis"}),"\n",(0,r.jsx)(n.p,{children:"This project provides a annotated bibliography to identify relevant research, it does not offer the answer to any particular token-economy design question. It does so using: a) published general-blockchain research, b) Polkadot whitepapers."}),"\n",(0,r.jsx)(n.h3,{id:"the-methodology",children:"The Methodology"}),"\n",(0,r.jsxs)(n.p,{children:['The annotated bibliography component of this exercise will be closest to a "Scoping Review", see Grant MJ, Booth A. ',(0,r.jsx)(n.a,{href:"https://doi.org/10.1111/j.1471-1842.2009.00848.x",children:"A typology of reviews: an analysis of 14 review types and associated methodologies"}),". Health Info Libr J. 2009 Jun; 26(2):91-108. Review. PubMed PMID: 19490148."]}),"\n",(0,r.jsx)(n.p,{children:"Extract from Table 1 of Grant, M.J. and Booth, A. (2009):"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Search"}),(0,r.jsx)(n.th,{children:"Appraisal"}),(0,r.jsx)(n.th,{children:"Synthesis"}),(0,r.jsx)(n.th,{children:"Analysis"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Preliminary assessment of potential size and scope of available research literature. Aims to identify nature and extent of research evidence (usually including ongoing research)"}),(0,r.jsx)(n.td,{children:"Completeness of searching determined by time/scope constraints. May include research in progress"}),(0,r.jsx)(n.td,{children:"No formal quality assessment"}),(0,r.jsx)(n.td,{children:"Typically tabular with some narrative commentary"}),(0,r.jsx)(n.td,{children:"Characterizes quantity and quality of literature, perhaps by study design and other key features. Attempts to specify a viable review"})]})})]}),"\n",(0,r.jsxs)(n.p,{children:["Each section of the report/working paper will be developed using some subset of the following iterative process (Tsafnat, G., Glasziou, P., Choong, M.K. et al. ",(0,r.jsx)(n.a,{href:"https://doi.org/10.1186/2046-4053-3-74",children:"Systematic review automation technologies"}),", Syst Rev 3, 74 (2014))"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Review reporting guidelines, best practice handbooks, and training modules [preparation stage]"}),"\n",(0,r.jsx)(n.li,{children:"Formulate question and decide on review type [preparation stage]"}),"\n",(0,r.jsx)(n.li,{children:"Search for previous published literature [preparation stage]"}),"\n",(0,r.jsx)(n.li,{children:"Develop and test search strategies [preparation stage]"}),"\n",(0,r.jsx)(n.li,{children:"Review search strategies [preparation stage]"}),"\n",(0,r.jsx)(n.li,{children:"Execute search [retrieval stage]"}),"\n",(0,r.jsx)(n.li,{children:"De-duplicate data/information [retrieval stage]"}),"\n",(0,r.jsx)(n.li,{children:"Screen title and abstracts [screening stage]"}),"\n",(0,r.jsx)(n.li,{children:"Retrieve full-text articles [retrieval stage]"}),"\n",(0,r.jsx)(n.li,{children:"Screen articles in full-text [screening stage]"}),"\n",(0,r.jsx)(n.li,{children:"Search for grey literature (preprints, working papers) [retrieval stage]"}),"\n",(0,r.jsx)(n.li,{children:"Quality assessment and data/information extraction [synthesis stage]"}),"\n",(0,r.jsx)(n.li,{children:"Citation chasing [retrieval stage]"}),"\n",(0,r.jsx)(n.li,{children:"Update database searches [retrieval stage]"}),"\n",(0,r.jsx)(n.li,{children:"Synthesize data/information [synthesis stage]"}),"\n",(0,r.jsx)(n.li,{children:"Manuscript development [write-up stage]"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"the-data-collection-and-analysis-procedures",children:"The data collection and analysis procedures"}),"\n",(0,r.jsx)(n.h4,{id:"published-articles",children:"Published articles"}),"\n",(0,r.jsx)(n.p,{children:'The initial source of the published research will be the top-6 articles selected by the grantee, using the commercial research databases available from the State Library of New South Wales by operationalizing the following inquiry, "Refereed articles on block-chain token-economics using rational expectations equilibrium (a.k.a. no-arbitrage) arguments/analysis, ranked by journal impact factors". This initial source may be adjusted at the grantees discretion based on his expertise. The selection process will be fully described and documented.'}),"\n",(0,r.jsx)(n.h4,{id:"polkadot-parachain-whitepapers",children:"Polkadot Parachain whitepapers"}),"\n",(0,r.jsx)(n.p,{children:"These are from projects that are Polkadot-Parachains as at 19 December 2022."}),"\n",(0,r.jsx)(n.h3,{id:"the-expected-results",children:"The expected results"}),"\n",(0,r.jsx)(n.p,{children:"The objective is to arrive at a scoping review of current state of token-economy development."}),"\n",(0,r.jsx)(n.p,{children:"One of the elements will be summary tables, using attributes that arise naturally within a Rational Expectations Equilibrium framework, such as the following:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Network"}),"\n",(0,r.jsx)(n.li,{children:"Token"}),"\n",(0,r.jsx)(n.li,{children:"Token Type"}),"\n",(0,r.jsx)(n.li,{children:"Model Type"}),"\n",(0,r.jsx)(n.li,{children:"Economy Type"}),"\n",(0,r.jsx)(n.li,{children:"Sector Type"}),"\n",(0,r.jsx)(n.li,{children:"Production Type"}),"\n",(0,r.jsx)(n.li,{children:"Monetary Type"}),"\n",(0,r.jsx)(n.li,{children:"Agent Utility"}),"\n",(0,r.jsx)(n.li,{children:"Economic Sectors"}),"\n",(0,r.jsx)(n.li,{children:"Rate Curves"}),"\n",(0,r.jsx)(n.li,{children:"Riskless Rate"}),"\n",(0,r.jsx)(n.li,{children:"Risk Premium"}),"\n",(0,r.jsx)(n.li,{children:"Market Rate"}),"\n",(0,r.jsx)(n.li,{children:"Borrow/Lend"}),"\n",(0,r.jsx)(n.li,{children:"Lender of Last Resort"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Another component of this research is creating a token-categorization questionnaire or decision tree that will aid/inform the specification of a token-economy. Nonetheless, there are already schemes that are useful even at this early stage. Such as these ",(0,r.jsx)(n.a,{href:"https://doi.org/10.5195/ledger.2018.121",children:"Token Types (Burnie, Burnie and Henderson (2018))"}),":"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:'fuel-tokens: "underpin generic blockchain applications". I refine this definition as follows: The token yield is defined or modeled such that it provides holders with incentives to act for the purpose of ensuring the blockchain has the desired features/characteristics.'}),"\n",(0,r.jsx)(n.li,{children:'transaction-tokens: "act as a cash substitute"'}),"\n",(0,r.jsx)(n.li,{children:'voucher-tokens: "exchanged for a predefined asset". I include goods or services.'}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"The grants team, and any reader could reproduce the data analysis by applying the token-categorization questionaire to a parachain they are familiar with and compare their classification with the submitted result."}),"\n",(0,r.jsx)(n.h3,{id:"relevant-related-work",children:"Relevant related work"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://doi.org/10.1111/j.1471-1842.2009.00848.x",children:"A typology of reviews: an analysis of 14 review types and associated methodologies"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://doi.org/10.1186/2046-4053-3-74",children:"Systematic review automation technologies"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://doi.org/10.5195/ledger.2018.121",children:"Token Types (Burnie, Burnie and Henderson (2018))"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"intended-venue-for-results-publication-and-the-timeline-for-publication",children:"Intended venue for results publication and the timeline for publication"}),"\n",(0,r.jsxs)(n.p,{children:["The report/working paper will be posted to ",(0,r.jsx)(n.a,{href:"https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004",children:"SSRN (e.g. FEN - Cryptocurrency Research eJournal)"}),", ",(0,r.jsx)(n.a,{href:"https://ideas.repec.org/",children:"IDEAS"}),", ",(0,r.jsx)(n.a,{href:"https://www.researchgate.net/publication/373739562_Tokenomics_Scoping_Review_Annotated_Bibliography",children:"ResearchGate"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"out-of-scope",children:"Out of scope"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Crypto currencies/stable coins."}),"\n",(0,r.jsx)(n.li,{children:"What is considered a security and what is not."}),"\n",(0,r.jsxs)(n.li,{children:["Proof-of-work vs Proof-of-stake considerations, e.g. ",(0,r.jsx)(n.a,{href:"https://scholar.princeton.edu/sites/default/files/markus/files/blockchain_paper_v7a.pdf",children:"Blockchain economics"}),"."]}),"\n",(0,r.jsx)(n.li,{children:"Governance considerations, e.g. trust and reputation."}),"\n",(0,r.jsx)(n.li,{children:"Game theory, behavioral economics/finance."}),"\n",(0,r.jsx)(n.li,{children:"Empirical inference of token-economy attributes from time-series or cross-sectional regression analysis."}),"\n",(0,r.jsx)(n.li,{children:"A review of the general economic modeling literature i.e. not related to blockchains."}),"\n",(0,r.jsx)(n.li,{children:"Verifying the network token-economy has been implemented as specified in the network whitepaper."}),"\n",(0,r.jsx)(n.li,{children:"Verifying the network whitepaper assumptions are a reasonable/plausible description of the network participants."}),"\n",(0,r.jsx)(n.li,{children:"Inclusion of any of this information in any project documentation."}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"crypto-currencies",children:"Crypto-Currencies"}),"\n",(0,r.jsx)(n.p,{children:"The prevalence of crypto-currencies means the decision to exclude them warrants some explanation.\nEquilibria are generally explicitly constructed (which proves existence) using conjectured properties of the dividends (or an equivalent) from the economic activity. Specifically, a price is the present-value (i.e. discounted for time and non-diversifiable risk), of all future dividends. Since the dividends of fiat currencies are zero this approach does not work. While there are workarounds, they, being particular, are not of interest in the more general setting we wish to bring to light."}),"\n",(0,r.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Where and how does your project fit into the ecosystem?","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Research into the design of a token-economy and survey of Polkadot token-economies."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["Who is your target audience?","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Blockchain developers. Industry analysts/advisors (media and investors)."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.li,{children:"What need(s) does your project meet?\nDevelopers and analysts need to understand the relevant literature available when developing their token-economy.\nThe literature we canvas both theoretical (refereed articles) and applied (network whitepapers)."}),"\n",(0,r.jsxs)(n.li,{children:["Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem?\nNo","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"If not, are there similar projects in related ecosystems?\nNo"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,r.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Mark Van de Vyver ",(0,r.jsx)(n.a,{href:"https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search",children:"PhD(Dist)"})]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Contact Name:"})," Mark Van de Vyver ",(0,r.jsx)(n.a,{href:"https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search",children:"PhD(Dist)"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Contact Email:"})," ",(0,r.jsx)(n.a,{href:"mailto:mark@taqtiqa.com",children:"mark@taqtiqa.com"})]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Registered Address:"})," 9681 41st St NE, Saint Michael, MN 55376"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Registered Legal Entity:"})," Begley Brothers Inc."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,r.jsx)(n.p,{children:"Research interests"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Time series analysis of price series and pricing model performance."}),"\n",(0,r.jsx)(n.li,{children:"Market Microstructure theory and empirical studies."}),"\n",(0,r.jsx)(n.li,{children:"Option pricing and real options/asset pricing."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"The University of Western Australia (1994-2003):\nPostgraduate and undergraduate teaching and research supervision. Portfolio Management, Corporate Finance and Derivatives Securities. Co-developed (with Prof R. Maller and Prof A. Szimayer) the University\u2019s joint Undergraduate and Postgraduate Degrees in Mathematics and Finance."}),"\n",(0,r.jsx)(n.p,{children:"The University of Sydney (2003-2008):\nPostgraduate and undergraduate teaching and research supervision. Advanced Asset Pricing, Corporate Finance, Investments and Advanced Portfolio Management"}),"\n",(0,r.jsx)(n.h4,{id:"publications",children:"Publications"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://www.researchgate.net/publication/228464696_Order_imbalance_period_by_period",children:"Order imbalance period by period"}),", 2008, Asli Ascioglu, Thomas H. Mcinish (Wunderlich Chair) and Mark Van de Vyver"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://doi.org/10.1111/1368-423X.t01-1-00090",children:"Testing for reduction to random walk in autoregressive conditional heteroskedasticity models"}),", December 2002, Econometrics Journal, Claudia Kluppelberg, Ross Maller, Mark Van de Vyver, Derick Wee"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://doi.org/10.1111/j.1835-2561.2002.tb00191.x",children:"How Might Companies Value Esos?"}),", March 2002, Australian Accounting Review, Ross Maller, Rosemary Tan, Mark Van de Vyver"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,r.jsx)(n.p,{children:"Personal"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/taqtiqa-mark",children:"https://github.com/taqtiqa-mark"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/bbros-dev",children:"https://github.com/bbros-dev"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/taqtiqa",children:"https://github.com/taqtiqa"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/BegleyBrothers",children:"https://github.com/BegleyBrothers"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"team-linkedin-profiles-if-available",children:"Team LinkedIn Profiles (if available)"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://www.linkedin.com/in/tatiqa/",children:"https://www.linkedin.com/in/tatiqa/"})}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["links to improvement requests for proposals or ",(0,r.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/tree/master/rfp-proposal",children:"RFPs"}),":","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/pull/1309",children:"Designing UpChain: a framework for securing Substrate runtime upgrades and Substrate network upgrades"})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.li,{children:"As requested, I have adjusted the source of the research to eliminate myself as the source of bias in the collection of research papers."}),"\n",(0,r.jsxs)(n.li,{children:["academic publications relevant to the problem:\nOne of the products from this research will be such a listing under these categories:","\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:'Published articles: As requested, to eliminate bias (and constrain budget) in the collection of research papers, the initial source of the published research will be the top-6 articles provided by the State Library of New South Wales information search service in response to the following query, "Refereed articles on block-chain token-economics using rational expectations equilibrium (a.k.a. no-arbitrage) arguments/analysis, ranked by journal impact factors"'}),"\n",(0,r.jsx)(n.li,{children:"Polkadot Parachain whitepapers: These are from projects that are Polkadot-Parachains as at 19 December 2022."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["links to your research diary, blog posts, articles, forum discussions or open GitHub issues:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://forum.polkadot.network/t/tokenomics-grant-models/1266",children:"Tokenomics: Grant models"})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.li,{children:"references to conversations you might have had related to this project with anyone from the Web3 Foundation\nThere have been no conversations related to this project with anyone from the Web3 Foundation."}),"\n",(0,r.jsx)(n.li,{children:"previous interface iterations, such as mock-ups and wireframes:\nThis project is research oriented and as such there are no mock-ups and wireframes to test."}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,r.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Total Estimated Duration:"})," 3 months"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Full-Time Equivalent (FTE):"})," 0.2 FTE"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Total Costs:"})," 10,000 USD"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"milestone-1--data-gathering--polkadot-networks",children:"Milestone 1 \u2014 Data gathering & Polkadot Networks"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Estimated duration:"})," 1 month"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"FTE:"})," 0.2"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Costs:"})," 3,000 USD"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Initial analysis of the Parachain tokenomics.\nInitial flow-chart/decision-tree development that will help developers place their token in the following contexts:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Token Type"}),"\n",(0,r.jsx)(n.li,{children:"Model Type"}),"\n",(0,r.jsx)(n.li,{children:"Economy Type"}),"\n",(0,r.jsx)(n.li,{children:"Sector Type"}),"\n",(0,r.jsx)(n.li,{children:"Production Type"}),"\n",(0,r.jsx)(n.li,{children:"Monetary Type"}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{style:{textAlign:"right"},children:"Number"}),(0,r.jsx)(n.th,{children:"Deliverable"}),(0,r.jsx)(n.th,{children:"Specification"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0a."})}),(0,r.jsx)(n.td,{children:"Copyright and Licenses"}),(0,r.jsx)(n.td,{children:"Creative Commons Attribution 4.0 International License (article), Dual Apache 2 or MIT License (code)"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0b."})}),(0,r.jsx)(n.td,{children:"Documentation/Tutorial"}),(0,r.jsxs)(n.td,{children:["We will provide both ",(0,r.jsx)(n.strong,{children:"artifacts documentation"})," of the deliverables and a basic ",(0,r.jsx)(n.strong,{children:"tutorial"})," that explains how a user can (for example) execute the code included or can visualize data or use any artifacts included."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0c."})}),(0,r.jsx)(n.td,{children:"Methodology"}),(0,r.jsx)(n.td,{children:"Detailed explanation of how the results were achieved and how to reproduce/verify the results."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0d."})}),(0,r.jsx)(n.td,{children:"Infrastructure"}),(0,r.jsx)(n.td,{children:"We will provide the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e."})}),(0,r.jsx)(n.td,{children:"Article"}),(0,r.jsxs)(n.td,{children:["We create a ",(0,r.jsx)(n.strong,{children:"draft article"}),' (with source code), in the English language. There will be an acknowledgement "This work was supported by a research grant from the Web3 Foundation. The analysis and opinions expressed are the authors and do not reflect the opinions of the Web3 Foundation."']})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e.1"})}),(0,r.jsx)(n.td,{children:"- Appendix: Methodology"}),(0,r.jsx)(n.td,{children:"As described in the methodology section above"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e.2"})}),(0,r.jsx)(n.td,{children:"- Section: Polkadot Parachains"}),(0,r.jsx)(n.td,{children:"Initial Parachain summary"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:"1."}),(0,r.jsx)(n.td,{children:"List of academic papers"}),(0,r.jsx)(n.td,{children:"Collect published and network papers, as described in the methodology section above"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:"2."}),(0,r.jsx)(n.td,{children:"Data to be extracted from the papers"}),(0,r.jsx)(n.td,{children:"As described in the methodology section above"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:"3."}),(0,r.jsx)(n.td,{children:"Analysis procedures"}),(0,r.jsx)(n.td,{children:"As described in the methodology section above"})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"milestone-2--outline-article",children:"Milestone 2 \u2014 Outline Article"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Estimated duration:"})," 2 month"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"FTE:"})," 0.2"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Costs:"})," 3,000 USD"]}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{style:{textAlign:"right"},children:"Number"}),(0,r.jsx)(n.th,{children:"Deliverable"}),(0,r.jsx)(n.th,{children:"Specification"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0a."})}),(0,r.jsx)(n.td,{children:"Copyright and Licenses"}),(0,r.jsx)(n.td,{children:"Creative Commons Attribution 4.0 International License (article), Dual Apache 2 or MIT License (code)"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0b."})}),(0,r.jsx)(n.td,{children:"Documentation/Tutorial"}),(0,r.jsxs)(n.td,{children:["We will update both ",(0,r.jsx)(n.strong,{children:"artifacts documentation"})," of the deliverables and a basic ",(0,r.jsx)(n.strong,{children:"tutorial"})," that explains how a user can (for example) execute the code included or can visualize data or use any artifacts included."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0c."})}),(0,r.jsx)(n.td,{children:"Methodology"}),(0,r.jsx)(n.td,{children:"Update the detailed explanation of how the results were achieved and how to reproduce/verify the results."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0d."})}),(0,r.jsx)(n.td,{children:"Infrastructure"}),(0,r.jsx)(n.td,{children:"We will update the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e."})}),(0,r.jsx)(n.td,{children:"Article"}),(0,r.jsxs)(n.td,{children:["We will send a ",(0,r.jsx)(n.strong,{children:"draft article"}),' (with source code), in the English language. There will be an acknowledgement "This work was supported by a research grant from the Web3 Foundation. The analysis and opinions expressed are the authors and do not reflect the opinions of the Web3 Foundation."']})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e.1"})}),(0,r.jsx)(n.td,{children:"Article"}),(0,r.jsxs)(n.td,{children:["We will publish an ",(0,r.jsx)(n.strong,{children:"working paper"})," as indicated above."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e.2"})}),(0,r.jsx)(n.td,{children:"- Section: Published models"}),(0,r.jsx)(n.td,{children:"Initial annotated bibliography"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e.3"})}),(0,r.jsx)(n.td,{children:"- Section: Polkadot Parachain Economies"}),(0,r.jsx)(n.td,{children:"Parachain summary updated with references to published models"})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"milestone-3--finalize-article",children:"Milestone 3 \u2014 Finalize Article"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Estimated Duration:"})," 2 month"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"FTE:"})," 0.2"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Costs:"})," 4,000 USD"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Finalize the flow-chart/decision-tree that will help developers place their token in the following contexts:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Token Type"}),"\n",(0,r.jsx)(n.li,{children:"Model Type"}),"\n",(0,r.jsx)(n.li,{children:"Economy Type"}),"\n",(0,r.jsx)(n.li,{children:"Sector Type"}),"\n",(0,r.jsx)(n.li,{children:"Production Type"}),"\n",(0,r.jsx)(n.li,{children:"Monetary Type"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Finalize the annotated bibliography.\nPromote the working paper, incorporate feedback.\nThe report/working paper will be posted to ",(0,r.jsx)(n.a,{href:"https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004",children:"SSRN (e.g. FEN - Cryptocurrency Research eJournal)"}),", ",(0,r.jsx)(n.a,{href:"https://ideas.repec.org/",children:"IDEAS"}),", ",(0,r.jsx)(n.a,{href:"https://www.researchgate.net/publication/373739562_Tokenomics_Scoping_Review_Annotated_Bibliography",children:"ResearchGate"}),"."]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{style:{textAlign:"right"},children:"Number"}),(0,r.jsx)(n.th,{children:"Deliverable"}),(0,r.jsx)(n.th,{children:"Specification"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0a."})}),(0,r.jsx)(n.td,{children:"Copyright and Licenses"}),(0,r.jsx)(n.td,{children:"Creative Commons Attribution 4.0 International License (article), Dual Apache 2 or MIT License (code)"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0b."})}),(0,r.jsx)(n.td,{children:"Documentation/Tutorial"}),(0,r.jsxs)(n.td,{children:["We will update both ",(0,r.jsx)(n.strong,{children:"artifacts documentation"})," of the deliverables and a basic ",(0,r.jsx)(n.strong,{children:"tutorial"})," that explains how a user can (for example) execute the code included or can visualize data or use any artifacts included."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0c."})}),(0,r.jsx)(n.td,{children:"Methodology"}),(0,r.jsx)(n.td,{children:"Update the detailed explanation of how the results were achieved and how to reproduce/verify the results."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0d."})}),(0,r.jsx)(n.td,{children:"Infrastructure"}),(0,r.jsx)(n.td,{children:"We will update the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e"})}),(0,r.jsx)(n.td,{children:"Article"}),(0,r.jsxs)(n.td,{children:["We will update a ",(0,r.jsx)(n.strong,{children:"draft article"}),' (with source code), in the English language. There will be an acknowledgement "This work was supported by a research grant from the Web3 Foundation. The analysis and opinions expressed are the authors and do not reflect the opinions of the Web3 Foundation."']})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e.1"})}),(0,r.jsx)(n.td,{children:"- Section: Introduction"}),(0,r.jsx)(n.td,{children:"Place the topic in perspective and motivate non-specialist readers. Text and tables where relevant/appropriate."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e.2"})}),(0,r.jsx)(n.td,{children:"- Section: Published models"}),(0,r.jsx)(n.td,{children:"Update annotated bibliography"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e.3"})}),(0,r.jsx)(n.td,{children:"- Section: Polkadot Parachains"}),(0,r.jsx)(n.td,{children:"Parachain summary updated with references to published models"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e.4"})}),(0,r.jsx)(n.td,{children:"- Appendix: Methodology"}),(0,r.jsx)(n.td,{children:"The research methodology. Text and tables where relevant/appropriate."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:(0,r.jsx)(n.strong,{children:"0e.5"})}),(0,r.jsx)(n.td,{children:"- Section: Summary"}),(0,r.jsx)(n.td,{children:"Where are we and where to next?"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:"1."}),(0,r.jsx)(n.td,{children:"Feedback"}),(0,r.jsx)(n.td,{children:"Collect published, working and network papers, as described in the methodology section above"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"right"},children:"2."}),(0,r.jsx)(n.td,{children:"Publish"}),(0,r.jsxs)(n.td,{children:["The working paper will be posted to ",(0,r.jsx)(n.a,{href:"https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004",children:"SSRN (e.g. FEN - Cryptocurrency Research eJournal)"}),", ",(0,r.jsx)(n.a,{href:"https://ideas.repec.org/",children:"IDEAS"}),", ",(0,r.jsx)(n.a,{href:"https://www.researchgate.net/publication/373739562_Tokenomics_Scoping_Review_Annotated_Bibliography",children:"ResearchGate"})]})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,r.jsx)(n.p,{children:"Please include here"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["how you intend to use, enhance, promote and support your project in the short term, and","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The working paper will be posted to ",(0,r.jsx)(n.a,{href:"https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004",children:"SSRN (e.g. FEN - Cryptocurrency Research eJournal)"}),", ",(0,r.jsx)(n.a,{href:"https://ideas.repec.org/",children:"IDEAS"}),",",(0,r.jsx)(n.a,{href:"https://www.researchgate.net/publication/373739562_Tokenomics_Scoping_Review_Annotated_Bibliography",children:"ResearchGate"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["the team's long-term plans and intentions in relation to it.","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["W3F Grant Proposal to implement and document one token model as an example/template of building a blockchain on the W3F ",(0,r.jsx)(n.a,{href:"https://github.com/open-web3-stack",children:"Open Web3 Stack"})," having known 'on-paper' coin characteristics."]}),"\n",(0,r.jsx)(n.li,{children:"Create RFP's addressing pallet functionality gaps that are identified in the course of the above."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"How did you hear about the Grants Program?"})," Web3 Foundation Website"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Work underway:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Literature collation"}),"\n",(0,r.jsx)(n.li,{children:"Type definitions"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["If there are any other teams who have already contributed (financially) to the project.","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"None"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["Previous grants you may have applied for.","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"None"}),"\n"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>a,x:()=>o});var t=i(96540);const r={},s=t.createContext(r);function a(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/09be286f.6a7d545c.js b/assets/js/09be286f.6a7d545c.js new file mode 100644 index 00000000000..f935edd1070 --- /dev/null +++ b/assets/js/09be286f.6a7d545c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[32351],{65814:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>d,contentTitle:()=>c,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>a});const t=JSON.parse('{"id":"applications/Faucet","title":"Generic sybil-resistant faucet","description":"- Team Name: MB Karolio reikalai","source":"@site/applications/Faucet.md","sourceDirName":"applications","slug":"/applications/Faucet","permalink":"/applications/Faucet","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/Faucet.md","tags":[],"version":"current","frontMatter":{}}');var s=n(74848),l=n(28453);const r={},c="Generic sybil-resistant faucet",d={},a=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Mockup",id:"mockup",level:4},{value:"Technology stack",id:"technology-stack",level:4},{value:"Architecture",id:"architecture",level:4},{value:"Configuration",id:"configuration",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 Implement the Faucet",id:"milestone-1--implement-the-faucet",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function o(e){const i={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,l.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.header,{children:(0,s.jsx)(i.h1,{id:"generic-sybil-resistant-faucet",children:"Generic sybil-resistant faucet"})}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Team Name:"})," MB Karolio reikalai"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Payment Address:"})," 0xc3e6eFA4D0847203dD4E19B7D114516Eb45840EC (DAI)"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Level:"})," 1"]}),"\n"]}),"\n",(0,s.jsxs)(i.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(i.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(i.p,{children:"Sybil-resistant faucet is a generic browser-based faucet solution that can be used on any existing parachain (substrate-based chain, either pallets or ink! smart contracts)."}),"\n",(0,s.jsx)(i.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(i.h4,{id:"mockup",children:"Mockup"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{src:"https://user-images.githubusercontent.com/3159964/182354014-6cee3694-af8a-4585-8eaf-348365981716.png",alt:"mockup"})}),"\n",(0,s.jsx)(i.h4,{id:"technology-stack",children:"Technology stack"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Next.js"}),"\n",(0,s.jsx)(i.li,{children:"TypeScript"}),"\n",(0,s.jsx)(i.li,{children:"Tailwind"}),"\n",(0,s.jsx)(i.li,{children:"Redis"}),"\n",(0,s.jsx)(i.li,{children:"@polkadot{.js}"}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"architecture",children:"Architecture"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{src:"https://user-images.githubusercontent.com/3159964/182353857-8784b612-154f-458f-b7d8-b81e0fb51f90.png",alt:"architecture"})}),"\n",(0,s.jsx)(i.h4,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsxs)(i.p,{children:["To make the faucet generic, it will store its configuration settings in ",(0,s.jsx)(i.code,{children:".env"})," file which will include the following settings:"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"DRIP_CAP"})," - how many tokens to send per drip"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"DRIP_DELAY"})," - how often user's can request to drip tokens (in ms)"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"REDIS_ENDPOINT"})," - Redis instance endpoint"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"RPC_ENDPOINT"})," - Substrate node endpoint"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"PORT"})," - Substrate node port"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"FAUCET_ACCOUNT_MNEMONIC"})," - mnemonic of faucet's wallet"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"NEXTAUTH_ENDPOINT"})," - authentication endpoint"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"NEXTAUTH_JWT_SECRET"})," - used to encrypt JWT tokens"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"TWITTER_CLIENT_ID"})," - Twitter client ID"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"TWITTER_CLIENT_SECRET"})," - Twitter client secret"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"GITHUB_CLIENT_ID"})," - GitHub client ID"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"GITHUB_CLIENT_SECRET"})," - GitHub client secret"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsx)(i.p,{children:"Many dApps are facing an issue where it\u2019s difficult to onboard new users. Thus, the goal is to simplify the process by making it easier for parachain and dApp developers to spin up their own faucets, and give users free tokens without people exploiting the system. In order to make the system sybil-resistant, centralised solutions like Twitter or GitHub login will be integrated, that will uniquely identify users, and enable dripping tokens to the account only once per given time period."}),"\n",(0,s.jsx)(i.p,{children:"Some similar projects include:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"https://github.com/paritytech/substrate-matrix-faucet",children:"https://github.com/paritytech/substrate-matrix-faucet"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"https://github.com/OAXFoundation/substrate-faucet",children:"https://github.com/OAXFoundation/substrate-faucet"})}),"\n"]}),"\n",(0,s.jsxs)(i.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(i.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Karolis Ramanauskas: full-stack developer & product designer"}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Contact Name:"})," Karolis Ramanauskas"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Contact Email:"})," ",(0,s.jsx)(i.a,{href:"mailto:hi@krl.is",children:"hi@krl.is"})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Website:"})," ",(0,s.jsx)(i.a,{href:"https://krl.is/",children:"https://krl.is/"})]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Registered Address:"})," Liep\u0173 g. 83, Klaip\u0117da 92195"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Registered Legal Entity:"})," MB Karolio reikalai"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsx)(i.p,{children:"Karolis is product-minded software engineer who enjoys the challenge of creating pleasant, easy-to-use user experiences. He has worked on large-scale projects for his employers, as well as side-projects of his own. Some of the most notable experiences include building observability tools used by thousands of engineers at Uber that alert and help resolve new incidents, and enable to build more reliable services. He has also worked on a design system for Volvo Cars, and then became responsible for building tools to replace existing translation processes at the company to make them more effective."}),"\n",(0,s.jsx)(i.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"https://github.com/karooolis",children:"https://github.com/karooolis"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"https://www.linkedin.com/in/karolisram/",children:"https://www.linkedin.com/in/karolisram/"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(i.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Total Estimated Duration:"})," 1 month"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Full-Time Equivalent (FTE):"})," 1 FTE"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Total Costs:"})," 4,000 USD"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"milestone-1--implement-the-faucet",children:"Milestone 1 \u2014 Implement the Faucet"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Estimated duration:"})," 1 month"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"FTE:"})," 1"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Costs:"})," 4,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(i.th,{children:"Deliverable"}),(0,s.jsx)(i.th,{children:"Specification"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(i.td,{children:"License"}),(0,s.jsx)(i.td,{children:"Apache 2.0"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(i.td,{children:"Documentation"}),(0,s.jsxs)(i.td,{children:["I will provide both ",(0,s.jsx)(i.strong,{children:"inline documentation"})," of the code and a ",(0,s.jsx)(i.strong,{children:"tutorial"})," that explains how a developer can spin up his/her own faucet."]})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"0c."}),(0,s.jsx)(i.td,{children:"Testing Guide"}),(0,s.jsx)(i.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"0d."}),(0,s.jsx)(i.td,{children:"Article"}),(0,s.jsxs)(i.td,{children:["I will publish an ",(0,s.jsx)(i.strong,{children:"article"})," that explains how the faucet works, why it was created, and how it can be used by developers."]})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(i.td,{children:"User Interface"}),(0,s.jsx)(i.td,{children:"I will create faucet UI with Tailwind. It will include address form, login buttons, as well as error and success states."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(i.td,{children:"Authentication"}),(0,s.jsx)(i.td,{children:"I will create a module for 0Auth user authentication that will uniquely identify users and make faucet sybil-resistant."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"3."}),(0,s.jsx)(i.td,{children:"User status"}),(0,s.jsx)(i.td,{children:"I will create a module for checking whether user is eligible to receive free tokens."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"4."}),(0,s.jsx)(i.td,{children:"Faucet drip"}),(0,s.jsx)(i.td,{children:"I wil create a module that will send user free tokens if eligible."})]})]})]}),"\n",(0,s.jsx)(i.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Keep adding additional 0Auth options or other features if needed."}),"\n",(0,s.jsx)(i.li,{children:"Keep maintaining the project in case of potential issues."}),"\n"]}),"\n",(0,s.jsxs)(i.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.strong,{children:"How did you hear about the Grants Program?"})," Developer DAO"]})]})}function h(e={}){const{wrapper:i}={...(0,l.R)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},28453:(e,i,n)=>{n.d(i,{R:()=>r,x:()=>c});var t=n(96540);const s={},l=t.createContext(s);function r(e){const i=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function c(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(l.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/09be286f.ae749716.js b/assets/js/09be286f.ae749716.js deleted file mode 100644 index 54e51d46121..00000000000 --- a/assets/js/09be286f.ae749716.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[32351],{38766:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>d,contentTitle:()=>c,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>a});const t=JSON.parse('{"id":"applications/Faucet","title":"Generic sybil-resistant faucet","description":"- Team Name: MB Karolio reikalai","source":"@site/applications/Faucet.md","sourceDirName":"applications","slug":"/applications/Faucet","permalink":"/applications/Faucet","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/Faucet.md","tags":[],"version":"current","frontMatter":{}}');var s=n(74848),l=n(28453);const r={},c="Generic sybil-resistant faucet",d={},a=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Mockup",id:"mockup",level:4},{value:"Technology stack",id:"technology-stack",level:4},{value:"Architecture",id:"architecture",level:4},{value:"Configuration",id:"configuration",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 Implement the Faucet",id:"milestone-1--implement-the-faucet",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function o(e){const i={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,l.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.header,{children:(0,s.jsx)(i.h1,{id:"generic-sybil-resistant-faucet",children:"Generic sybil-resistant faucet"})}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Team Name:"})," MB Karolio reikalai"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Payment Address:"})," 0xc3e6eFA4D0847203dD4E19B7D114516Eb45840EC (DAI)"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Level:"})," 1"]}),"\n"]}),"\n",(0,s.jsxs)(i.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(i.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(i.p,{children:"Sybil-resistant faucet is a generic browser-based faucet solution that can be used on any existing parachain (substrate-based chain, either pallets or ink! smart contracts)."}),"\n",(0,s.jsx)(i.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(i.h4,{id:"mockup",children:"Mockup"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{src:"https://user-images.githubusercontent.com/3159964/182354014-6cee3694-af8a-4585-8eaf-348365981716.png",alt:"mockup"})}),"\n",(0,s.jsx)(i.h4,{id:"technology-stack",children:"Technology stack"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Next.js"}),"\n",(0,s.jsx)(i.li,{children:"TypeScript"}),"\n",(0,s.jsx)(i.li,{children:"Tailwind"}),"\n",(0,s.jsx)(i.li,{children:"Redis"}),"\n",(0,s.jsx)(i.li,{children:"@polkadot{.js}"}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"architecture",children:"Architecture"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{src:"https://user-images.githubusercontent.com/3159964/182353857-8784b612-154f-458f-b7d8-b81e0fb51f90.png",alt:"architecture"})}),"\n",(0,s.jsx)(i.h4,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsxs)(i.p,{children:["To make the faucet generic, it will store its configuration settings in ",(0,s.jsx)(i.code,{children:".env"})," file which will include the following settings:"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"DRIP_CAP"})," - how many tokens to send per drip"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"DRIP_DELAY"})," - how often user's can request to drip tokens (in ms)"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"REDIS_ENDPOINT"})," - Redis instance endpoint"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"RPC_ENDPOINT"})," - Substrate node endpoint"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"PORT"})," - Substrate node port"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"FAUCET_ACCOUNT_MNEMONIC"})," - mnemonic of faucet's wallet"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"NEXTAUTH_ENDPOINT"})," - authentication endpoint"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"NEXTAUTH_JWT_SECRET"})," - used to encrypt JWT tokens"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"TWITTER_CLIENT_ID"})," - Twitter client ID"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"TWITTER_CLIENT_SECRET"})," - Twitter client secret"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"GITHUB_CLIENT_ID"})," - GitHub client ID"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"GITHUB_CLIENT_SECRET"})," - GitHub client secret"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsx)(i.p,{children:"Many dApps are facing an issue where it\u2019s difficult to onboard new users. Thus, the goal is to simplify the process by making it easier for parachain and dApp developers to spin up their own faucets, and give users free tokens without people exploiting the system. In order to make the system sybil-resistant, centralised solutions like Twitter or GitHub login will be integrated, that will uniquely identify users, and enable dripping tokens to the account only once per given time period."}),"\n",(0,s.jsx)(i.p,{children:"Some similar projects include:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"https://github.com/paritytech/substrate-matrix-faucet",children:"https://github.com/paritytech/substrate-matrix-faucet"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"https://github.com/OAXFoundation/substrate-faucet",children:"https://github.com/OAXFoundation/substrate-faucet"})}),"\n"]}),"\n",(0,s.jsxs)(i.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(i.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Karolis Ramanauskas: full-stack developer & product designer"}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Contact Name:"})," Karolis Ramanauskas"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Contact Email:"})," ",(0,s.jsx)(i.a,{href:"mailto:hi@krl.is",children:"hi@krl.is"})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Website:"})," ",(0,s.jsx)(i.a,{href:"https://krl.is/",children:"https://krl.is/"})]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Registered Address:"})," Liep\u0173 g. 83, Klaip\u0117da 92195"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Registered Legal Entity:"})," MB Karolio reikalai"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsx)(i.p,{children:"Karolis is product-minded software engineer who enjoys the challenge of creating pleasant, easy-to-use user experiences. He has worked on large-scale projects for his employers, as well as side-projects of his own. Some of the most notable experiences include building observability tools used by thousands of engineers at Uber that alert and help resolve new incidents, and enable to build more reliable services. He has also worked on a design system for Volvo Cars, and then became responsible for building tools to replace existing translation processes at the company to make them more effective."}),"\n",(0,s.jsx)(i.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"https://github.com/karooolis",children:"https://github.com/karooolis"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"https://www.linkedin.com/in/karolisram/",children:"https://www.linkedin.com/in/karolisram/"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(i.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Total Estimated Duration:"})," 1 month"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Full-Time Equivalent (FTE):"})," 1 FTE"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Total Costs:"})," 4,000 USD"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"milestone-1--implement-the-faucet",children:"Milestone 1 \u2014 Implement the Faucet"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Estimated duration:"})," 1 month"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"FTE:"})," 1"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Costs:"})," 4,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(i.th,{children:"Deliverable"}),(0,s.jsx)(i.th,{children:"Specification"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(i.td,{children:"License"}),(0,s.jsx)(i.td,{children:"Apache 2.0"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(i.td,{children:"Documentation"}),(0,s.jsxs)(i.td,{children:["I will provide both ",(0,s.jsx)(i.strong,{children:"inline documentation"})," of the code and a ",(0,s.jsx)(i.strong,{children:"tutorial"})," that explains how a developer can spin up his/her own faucet."]})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"0c."}),(0,s.jsx)(i.td,{children:"Testing Guide"}),(0,s.jsx)(i.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"0d."}),(0,s.jsx)(i.td,{children:"Article"}),(0,s.jsxs)(i.td,{children:["I will publish an ",(0,s.jsx)(i.strong,{children:"article"})," that explains how the faucet works, why it was created, and how it can be used by developers."]})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(i.td,{children:"User Interface"}),(0,s.jsx)(i.td,{children:"I will create faucet UI with Tailwind. It will include address form, login buttons, as well as error and success states."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(i.td,{children:"Authentication"}),(0,s.jsx)(i.td,{children:"I will create a module for 0Auth user authentication that will uniquely identify users and make faucet sybil-resistant."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"3."}),(0,s.jsx)(i.td,{children:"User status"}),(0,s.jsx)(i.td,{children:"I will create a module for checking whether user is eligible to receive free tokens."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{style:{textAlign:"right"},children:"4."}),(0,s.jsx)(i.td,{children:"Faucet drip"}),(0,s.jsx)(i.td,{children:"I wil create a module that will send user free tokens if eligible."})]})]})]}),"\n",(0,s.jsx)(i.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Keep adding additional 0Auth options or other features if needed."}),"\n",(0,s.jsx)(i.li,{children:"Keep maintaining the project in case of potential issues."}),"\n"]}),"\n",(0,s.jsxs)(i.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.strong,{children:"How did you hear about the Grants Program?"})," Developer DAO"]})]})}function h(e={}){const{wrapper:i}={...(0,l.R)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},28453:(e,i,n)=>{n.d(i,{R:()=>r,x:()=>c});var t=n(96540);const s={},l=t.createContext(s);function r(e){const i=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function c(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(l.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/09ff2bba.73bdb1b3.js b/assets/js/09ff2bba.73bdb1b3.js deleted file mode 100644 index e7e2c9d8700..00000000000 --- a/assets/js/09ff2bba.73bdb1b3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[777],{19511:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"docs/RFPs/data_analysis_tools","title":"Data Analysis Tools for Substrate-based Blockchains","description":"This Request for Proposals is currently considered under development, meaning one or more grants have been signed to address the topic. We might be interested in additional implementations, but it\u2019s better to double check this with the grants team.","source":"@site/docs/RFPs/data_analysis_tools.md","sourceDirName":"docs/RFPs","slug":"/docs/RFPs/data_analysis_tools","permalink":"/docs/RFPs/data_analysis_tools","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/docs/RFPs/data_analysis_tools.md","tags":[],"version":"current","frontMatter":{},"sidebar":"docs","previous":{"title":"Crowdloan Front End Template","permalink":"/docs/RFPs/crowdloan_front_end_template"},"next":{"title":"Decentralized Security Marketplace","permalink":"/docs/RFPs/decentralized-security-marketplace"}}');var a=n(74848),o=n(28453);const r={},i="Data Analysis Tools for Substrate-based Blockchains",c={},l=[{value:"Project Description \ud83d\udcc4",id:"project-description-page_facing_up",level:2},{value:"Deliverables \ud83d\udd29",id:"deliverables-nut_and_bolt",level:2}];function d(e){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"data-analysis-tools-for-substrate-based-blockchains",children:"Data Analysis Tools for Substrate-based Blockchains"})}),"\n",(0,a.jsx)(t.admonition,{type:"caution",children:(0,a.jsxs)(t.p,{children:["This Request for Proposals is currently considered ",(0,a.jsx)(t.strong,{children:"under development"}),", meaning one or more grants have been signed to address the topic. We might be interested in additional implementations, but it\u2019s better to double check this with the grants team."]})}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Status:"})," ",(0,a.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/pull/1716",children:"Under Development 1"}),", ",(0,a.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/pull/1768",children:"Under Development 2"}),", ",(0,a.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/pull/1883",children:"Under Development 3"})]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Proposer:"})," ",(0,a.jsx)(t.a,{href:"https://github.com/dsm-w3f",children:"dsm-w3f"}),", ",(0,a.jsx)(t.a,{href:"https://github.com/michalisFr",children:"michalisFr"})]}),"\n"]}),"\n",(0,a.jsxs)(t.h2,{id:"project-description-page_facing_up",children:["Project Description ","\ud83d\udcc4"]}),"\n",(0,a.jsx)(t.p,{children:"Block Explorers are tools that index blockchain data and allow people to easily exhibit it using a web user interface. Examples of Block Explorers in the Polkadot/Kusama ecosystem are (not exhaustive) Subscan, Calamar, and Statescan. For common users, the features commonly found in block explorers are enough. However, for advanced users, the data analysis involves accessing many screens and following long paths through blockchain data."}),"\n",(0,a.jsxs)(t.p,{children:["For example, Accounts has some provenance information that is pretty difficult or currently impossible to extract in block explorers. The account reference counter, account balance reserved provenance (see: ",(0,a.jsx)(t.a,{href:"https://docs.substrate.io/reference/account-data-structures/",children:"https://docs.substrate.io/reference/account-data-structures/"}),"), and OpenGov delegations are examples of it. Some questions raised that use this data:"]}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Which transactions/accounts were responsible for the reserved balance in an account?"}),"\n",(0,a.jsx)(t.li,{children:"What modules currently depend on consumers, providers, and sufficients reference counters for a certain account, and which transactions introduced/removed those references?"}),"\n",(0,a.jsx)(t.li,{children:"Which accounts have delegated OpenGov votes to an account or to which accounts the account in question has delegated their votes to for each track, taking into account indirect delegations too (e.g. Account A delegates to Account B which delegates to Account C)?"}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"This information is useful and requested for actual heavy users of the Polkadot/Kusama ecosystem."}),"\n",(0,a.jsx)(t.p,{children:"This RFP is not limited to the example above and intends to support other analyses. This RFP is also not limited to adding new features to the existent block explorer, as applicants can propose new analysis tools as well. Please notice that the intention here is not to create new block explorers that would have the same information, presented in the same way, as the current ones."}),"\n",(0,a.jsxs)(t.h2,{id:"deliverables-nut_and_bolt",children:["Deliverables ","\ud83d\udd29"]}),"\n",(0,a.jsx)(t.p,{children:"The expected deliverables are the tool features that provide specific data analysis. The data analysis provided by the tool should be detailed in the deliverables. Each analysis should be dynamic, reflecting the current state of the blockchain, and be presented in a web user interface, in a way that advanced non-technical users can consume, i.e., the user does not need to have programming skills. Please list each data analysis that will be supported by the tool in the deliverables including:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"The data analysis question. (ex: Which transactions were responsible to reserve the balance amount in an account?)"}),"\n",(0,a.jsx)(t.li,{children:"The expected input for the data analysis (ex: an account)"}),"\n",(0,a.jsx)(t.li,{children:"The expected output for the data analysis (ex: a set of transactions that made/removed a balance reserve in the input account)"}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"The proposed analysis should not overlap with existing ones if the information is easy to extract in block explorers of the Polkadot/Kusama ecosystem. They can, however, overlap if the information is not simple or can't intuitively be found by non-technical users in the current block explorers (ex. based on multiple steps in the block explorer or based on events data)."}),"\n",(0,a.jsx)(t.p,{children:"The user interface provided should allow the users to make or find the questions that can be answered by the tool. The tools should NOT demand that users need to know or learn technical query languages such as SQL, GraphQL, or any other."})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>i});var s=n(96540);const a={},o=s.createContext(a);function r(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/09ff2bba.ffe3894a.js b/assets/js/09ff2bba.ffe3894a.js new file mode 100644 index 00000000000..27e89b085b7 --- /dev/null +++ b/assets/js/09ff2bba.ffe3894a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[777],{58675:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"docs/RFPs/data_analysis_tools","title":"Data Analysis Tools for Substrate-based Blockchains","description":"This Request for Proposals is currently considered under development, meaning one or more grants have been signed to address the topic. We might be interested in additional implementations, but it\u2019s better to double check this with the grants team.","source":"@site/docs/RFPs/data_analysis_tools.md","sourceDirName":"docs/RFPs","slug":"/docs/RFPs/data_analysis_tools","permalink":"/docs/RFPs/data_analysis_tools","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/docs/RFPs/data_analysis_tools.md","tags":[],"version":"current","frontMatter":{},"sidebar":"docs","previous":{"title":"Crowdloan Front End Template","permalink":"/docs/RFPs/crowdloan_front_end_template"},"next":{"title":"Decentralized Security Marketplace","permalink":"/docs/RFPs/decentralized-security-marketplace"}}');var a=n(74848),o=n(28453);const r={},i="Data Analysis Tools for Substrate-based Blockchains",c={},l=[{value:"Project Description \ud83d\udcc4",id:"project-description-page_facing_up",level:2},{value:"Deliverables \ud83d\udd29",id:"deliverables-nut_and_bolt",level:2}];function d(e){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"data-analysis-tools-for-substrate-based-blockchains",children:"Data Analysis Tools for Substrate-based Blockchains"})}),"\n",(0,a.jsx)(t.admonition,{type:"caution",children:(0,a.jsxs)(t.p,{children:["This Request for Proposals is currently considered ",(0,a.jsx)(t.strong,{children:"under development"}),", meaning one or more grants have been signed to address the topic. We might be interested in additional implementations, but it\u2019s better to double check this with the grants team."]})}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Status:"})," ",(0,a.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/pull/1716",children:"Under Development 1"}),", ",(0,a.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/pull/1768",children:"Under Development 2"}),", ",(0,a.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/pull/1883",children:"Under Development 3"})]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Proposer:"})," ",(0,a.jsx)(t.a,{href:"https://github.com/dsm-w3f",children:"dsm-w3f"}),", ",(0,a.jsx)(t.a,{href:"https://github.com/michalisFr",children:"michalisFr"})]}),"\n"]}),"\n",(0,a.jsxs)(t.h2,{id:"project-description-page_facing_up",children:["Project Description ","\ud83d\udcc4"]}),"\n",(0,a.jsx)(t.p,{children:"Block Explorers are tools that index blockchain data and allow people to easily exhibit it using a web user interface. Examples of Block Explorers in the Polkadot/Kusama ecosystem are (not exhaustive) Subscan, Calamar, and Statescan. For common users, the features commonly found in block explorers are enough. However, for advanced users, the data analysis involves accessing many screens and following long paths through blockchain data."}),"\n",(0,a.jsxs)(t.p,{children:["For example, Accounts has some provenance information that is pretty difficult or currently impossible to extract in block explorers. The account reference counter, account balance reserved provenance (see: ",(0,a.jsx)(t.a,{href:"https://docs.substrate.io/reference/account-data-structures/",children:"https://docs.substrate.io/reference/account-data-structures/"}),"), and OpenGov delegations are examples of it. Some questions raised that use this data:"]}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Which transactions/accounts were responsible for the reserved balance in an account?"}),"\n",(0,a.jsx)(t.li,{children:"What modules currently depend on consumers, providers, and sufficients reference counters for a certain account, and which transactions introduced/removed those references?"}),"\n",(0,a.jsx)(t.li,{children:"Which accounts have delegated OpenGov votes to an account or to which accounts the account in question has delegated their votes to for each track, taking into account indirect delegations too (e.g. Account A delegates to Account B which delegates to Account C)?"}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"This information is useful and requested for actual heavy users of the Polkadot/Kusama ecosystem."}),"\n",(0,a.jsx)(t.p,{children:"This RFP is not limited to the example above and intends to support other analyses. This RFP is also not limited to adding new features to the existent block explorer, as applicants can propose new analysis tools as well. Please notice that the intention here is not to create new block explorers that would have the same information, presented in the same way, as the current ones."}),"\n",(0,a.jsxs)(t.h2,{id:"deliverables-nut_and_bolt",children:["Deliverables ","\ud83d\udd29"]}),"\n",(0,a.jsx)(t.p,{children:"The expected deliverables are the tool features that provide specific data analysis. The data analysis provided by the tool should be detailed in the deliverables. Each analysis should be dynamic, reflecting the current state of the blockchain, and be presented in a web user interface, in a way that advanced non-technical users can consume, i.e., the user does not need to have programming skills. Please list each data analysis that will be supported by the tool in the deliverables including:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"The data analysis question. (ex: Which transactions were responsible to reserve the balance amount in an account?)"}),"\n",(0,a.jsx)(t.li,{children:"The expected input for the data analysis (ex: an account)"}),"\n",(0,a.jsx)(t.li,{children:"The expected output for the data analysis (ex: a set of transactions that made/removed a balance reserve in the input account)"}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"The proposed analysis should not overlap with existing ones if the information is easy to extract in block explorers of the Polkadot/Kusama ecosystem. They can, however, overlap if the information is not simple or can't intuitively be found by non-technical users in the current block explorers (ex. based on multiple steps in the block explorer or based on events data)."}),"\n",(0,a.jsx)(t.p,{children:"The user interface provided should allow the users to make or find the questions that can be answered by the tool. The tools should NOT demand that users need to know or learn technical query languages such as SQL, GraphQL, or any other."})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>i});var s=n(96540);const a={},o=s.createContext(a);function r(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0ca018de.3360f809.js b/assets/js/0ca018de.3360f809.js deleted file mode 100644 index 6a71d2750d3..00000000000 --- a/assets/js/0ca018de.3360f809.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[60173],{46644:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>d});const i=JSON.parse('{"id":"applications/Standard_Protocol","title":"Standard Protocol","description":"Project Overview","source":"@site/applications/Standard_Protocol.md","sourceDirName":"applications","slug":"/applications/Standard_Protocol","permalink":"/applications/Standard_Protocol","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/Standard_Protocol.md","tags":[],"version":"current","frontMatter":{}}');var a=t(74848),s=t(28453);const r={},l="Standard Protocol",o={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Problems of current algorithmic stablecoins",id:"problems-of-current-algorithmic-stablecoins",level:3},{value:"1. Too much focus on price stability, no sustainable use case for interoperability",id:"1-too-much-focus-on-price-stability-no-sustainable-use-case-for-interoperability",level:4},{value:"2. Oracles are centralized, and there is no decentralized ecosystem to reward them",id:"2-oracles-are-centralized-and-there-is-no-decentralized-ecosystem-to-reward-them",level:4},{value:"3. Auctions are hard to track and centralized",id:"3-auctions-are-hard-to-track-and-centralized",level:4},{value:"Solutions",id:"solutions",level:3},{value:"1. Elastic supply",id:"1-elastic-supply",level:4},{value:"2. Decentralized oracles",id:"2-decentralized-oracles",level:4},{value:"3. Democratization of auction via automated market maker",id:"3-democratization-of-auction-via-automated-market-maker",level:4},{value:"Documentation",id:"documentation",level:3},{value:"Core Runtime Modules",id:"core-runtime-modules",level:3},{value:"token regisrty /token",id:"token-regisrty-token",level:4},{value:"oracle reward module /oracle",id:"oracle-reward-module-oracle",level:4},{value:"market module /market",id:"market-module-market",level:4},{value:"vault module /vault",id:"vault-module-vault",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 - Middleware for data submission and runtime integration",id:"milestone-1---middleware-for-data-submission-and-runtime-integration",level:3},{value:"Oracle provider client",id:"oracle-provider-client",level:3},{value:"Unit tests",id:"unit-tests",level:2},{value:"Oracle",id:"oracle",level:2},{value:"Milestone 2 - PoS oracle reward distribution",id:"milestone-2---pos-oracle-reward-distribution",level:3},{value:"Vault",id:"vault",level:2},{value:"Oracle",id:"oracle-1",level:2},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"standard-protocol",children:"Standard Protocol"})}),"\n",(0,a.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,a.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,a.jsx)(n.p,{children:"Standard Protocol is a collaterized algorithmic stablecoin protocol for synthetic assets."}),"\n",(0,a.jsx)(n.h3,{id:"problems-of-current-algorithmic-stablecoins",children:"Problems of current algorithmic stablecoins"}),"\n",(0,a.jsx)(n.h4,{id:"1-too-much-focus-on-price-stability-no-sustainable-use-case-for-interoperability",children:"1. Too much focus on price stability, no sustainable use case for interoperability"}),"\n",(0,a.jsx)(n.p,{children:"Current algorithmic stablecoins focus only on automated price stability. Although they provide some interoperability between tokens with initial distribution in yield farming, but currently there is no sustainable way for them to interoperate with financial activities without the reward. Also, other algorithmic stablecoins which uses incentives in cases regarding circulating supply(e.g. contractionary, expansionary cases) are not showing sustainability to preserve 1 dollar peg."}),"\n",(0,a.jsx)(n.h4,{id:"2-oracles-are-centralized-and-there-is-no-decentralized-ecosystem-to-reward-them",children:"2. Oracles are centralized, and there is no decentralized ecosystem to reward them"}),"\n",(0,a.jsx)(n.p,{children:"One can be dependant to dexes, but they are prone to flash loans, making arbitrage data compared to centralized exchange. In order to provide aggregated and balanced data, oracle providers must be rewarded."}),"\n",(0,a.jsx)(n.h4,{id:"3-auctions-are-hard-to-track-and-centralized",children:"3. Auctions are hard to track and centralized"}),"\n",(0,a.jsx)(n.p,{children:"Auctions after liquidation are hard to track and participate, leaving only hardcore traders to take advantage of arbitrage. More decentralized way to provide liquidation must be considered. Auction orders come in high volume of collateral, and this can lead to plutocracy."}),"\n",(0,a.jsx)(n.h3,{id:"solutions",children:"Solutions"}),"\n",(0,a.jsx)(n.h4,{id:"1-elastic-supply",children:"1. Elastic supply"}),"\n",(0,a.jsx)(n.p,{children:"As Amplforth(AMPL) used elastic supply to rebase its total supply of stablecoin, Standard rebases its stablecoin supply in each era, and it uses overcollaterization to mint its stablecoin, meter(MTR)."}),"\n",(0,a.jsx)(n.h4,{id:"2-decentralized-oracles",children:"2. Decentralized oracles"}),"\n",(0,a.jsx)(n.p,{children:"Oracle client from various sources (e.g. binance, coinbase, hydra dx, etc) can provide aggregated price information so that the price cannot be manipulated from one source."}),"\n",(0,a.jsx)(n.h4,{id:"3-democratization-of-auction-via-automated-market-maker",children:"3. Democratization of auction via automated market maker"}),"\n",(0,a.jsx)(n.p,{children:"Instead of hosting an auction for liquidating collaterals, Standard protocol deposits liquidated collateral to its amm pair so that meter(MTR) holders can purchase other digital assets from liquidation."}),"\n",(0,a.jsx)(n.h3,{id:"documentation",children:"Documentation"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.a,{href:"https://docs.standardprotocol.org",children:"https://docs.standardprotocol.org"})}),"\n",(0,a.jsx)(n.h3,{id:"core-runtime-modules",children:"Core Runtime Modules"}),"\n",(0,a.jsxs)(n.h4,{id:"token-regisrty-token",children:["token regisrty ",(0,a.jsx)(n.code,{children:"/token"})]}),"\n",(0,a.jsx)(n.p,{children:"Token manages asset that flows in and out with xcmp in polkadot ecosystem. assets are managed with unique identifier."}),"\n",(0,a.jsxs)(n.h4,{id:"oracle-reward-module-oracle",children:["oracle reward module ",(0,a.jsx)(n.code,{children:"/oracle"})]}),"\n",(0,a.jsx)(n.p,{children:"Oracles in standard protocol are rewarded in each era on each block reward.\nprices are stored in the state, and oracle providers are updated in each era."}),"\n",(0,a.jsxs)(n.h4,{id:"market-module-market",children:["market module ",(0,a.jsx)(n.code,{children:"/market"})]}),"\n",(0,a.jsx)(n.p,{children:"Market module in standard protocol manages pair for automated market maker(AMM) between collateral and its stablecoin meter(MTR)."}),"\n",(0,a.jsxs)(n.h4,{id:"vault-module-vault",children:["vault module ",(0,a.jsx)(n.code,{children:"/vault"})]}),"\n",(0,a.jsx)(n.p,{children:"Vault module in standard protocol is a collateral debt position engine where"}),"\n",(0,a.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,a.jsx)(n.p,{children:"Standard protocol will act as the catalyst for other parachain's financial activities for enabling leverage trading and Arbitrage in AMM created from liquidation. It will also open a protocol for synthetic asset market with decentralized oracle ecosystem."}),"\n",(0,a.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,a.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,a.jsx)(n.p,{children:"Hyungsuk Kang, team leader"}),"\n",(0,a.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,a.jsx)(n.p,{children:"Standard protocol is being made with Apache 2.0 license. Legal entity is being built in Singapore right now."}),"\n",(0,a.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,a.jsx)(n.p,{children:"Hyungsuk is Plasm network's core developer. He developed Subswap, AMM in substrate, and he wants to extend it to make the next finance in Polkadot ecosytem using XCM module and collateral debt position. He is also kernel and tendermint fellow."}),"\n",(0,a.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://github.com/digitalnativeinc/standard-substrate",children:"https://github.com/digitalnativeinc/standard-substrate"})}),"\n"]}),"\n",(0,a.jsx)(n.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://www.linkedin.com/in/hyungsukkang",children:"https://www.linkedin.com/in/hyungsukkang"})}),"\n"]}),"\n",(0,a.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,a.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,a.jsx)(n.p,{children:"As a synthetic asset protocol,Standard protocol heavily depends on the oracle for maintaining the system. Oracles should be formed in a sustainable way to be motivated for people to provide computing power.\nTo reward the network participant, Standard protocol proposes new PoS reward system by splitting block rewards from block validators to oracle providers."}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Total Estimated Duration:"})," 2 months"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Full-time equivalent (FTE):"})," 1"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Total Costs:"})," 1000DAI"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Payment Address:"})," ",(0,a.jsx)(n.code,{children:"0xd2234E506862991ADA75f930c6D79B4236e3E265"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Status:"})," ",(0,a.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/pull/244#issuecomment-1014764739",children:"Terminated"})]}),"\n"]}),"\n",(0,a.jsx)(n.h3,{id:"milestone-1---middleware-for-data-submission-and-runtime-integration",children:"Milestone 1 - Middleware for data submission and runtime integration"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Estimated Duration:"})," 1 month"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"FTE:"})," 1"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Costs:"})," 500DAI"]}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["This milestone focuses on building a oracle provider client middleware which submits off-chain data to the blockchain. An authoritive module for testing connection between oracle provider and the protocol is provided in this phase. Then, Standard will extend the oracle module to distribute reward from session callback connected between ",(0,a.jsx)(n.code,{children:"pallet_session"})," and ",(0,a.jsx)(n.code,{children:"pallet_staking"}),". When oracle provider submits outliers or does not submit values that are out of sync from other oracle providers, a slash can be applied from anyone to report. Outliers are detected with ",(0,a.jsx)(n.a,{href:"https://online.stat.psu.edu/stat200/lesson/3/3.2",children:"IQR method"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"oracle-provider-client",children:"Oracle provider client"}),"\n",(0,a.jsxs)(n.p,{children:["As chainlink and other oracle solution has a middleware or submitting client from off-chain, Standard also has its oracle client. Oracle provider client is actually a bot that uses ",(0,a.jsx)(n.a,{href:"https://github.com/scs/substrate-api-client/blob/master/tutorials/api-client-tutorial/src/main.rs",children:"polkadot-js api"})," to submit information in oracle module in a certain periods(e.g. 2 hour, 4 hour). For example, to send an oracle xt from an oracle client,"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-javascript=",children:'// Loads config\nimport LumenConfig from "@digitalnative/lumen-config";\n// Fetch functions for acquiring off-chain data\nimport fetchData from "@digitalnative/lumen-fetch";\n// Submit function for submitting data to on-chain\nimport submitData from "@digitalnative/lumen-submit";\n// Async Apis for polkadot\nimport { ApiPromise, WsProvider } from "@polkadot/api";\n\nconst runClient = async (dir) => {\n const cron = require("node-cron");\n const config = LumenConfig.default({ dir });\n const { events } = config;\n events.emit("client:start");\n const api = await polkadotApi(config);\n // register cron job to execute in every minute\n cron.schedule("*/90 * * * * *", async function() {\n events.emit("client:next");\n // fetch data\n const data = await fetchData(false, config);\n // Submit data\n await submitData(data, config, api);\n });\n // Declare cron job has been set\n events.emit("client:init");\n};\n\nexport default runClient;\n\nasync function polkadotApi(config: LumenConfig) {\n const provider = new WsProvider(config.rpc);\n const definitions = require("@digitalnative/type-definitions/opportunity");\n let types = definitions.types[0].types;\n const api = await new ApiPromise({\n provider,\n types,\n });\n await api.isReady;\n return api;\n}\n'})}),"\n",(0,a.jsx)(n.p,{children:"Here is the overall workflow for the client operation, and add-ons and options are expected to be added in each function in the library."}),"\n",(0,a.jsx)(n.h2,{id:"unit-tests",children:"Unit tests"}),"\n",(0,a.jsx)(n.p,{children:"Standard protocol applies test driven development(TDD) on building runtime modules for the grant.\nHere are unit tests that will be done along the development in the runtime module."}),"\n",(0,a.jsx)(n.h2,{id:"oracle",children:"Oracle"}),"\n",(0,a.jsx)(n.p,{children:"oracle in milestone 1 should achieve:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Only Root account can register oracle providers for slots to submit off-chain data"}),"\n",(0,a.jsx)(n.li,{children:"If slots are not open for an entity in the storage, a new oracle provider initializes the slot with the oracle provider count."}),"\n",(0,a.jsx)(n.li,{children:"When the provider is designated for a slot, it can only submit data for a designated slot"}),"\n",(0,a.jsx)(n.li,{children:"If one reports slashing for the slot, runtime validates the slot data with iqr rule and remove provider and set the value as zero if the value violates it."}),"\n",(0,a.jsx)(n.li,{children:"zero values are excluded and the median is calculated in both even and odd cases"}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"To check this, oracle provider module should have these test functions:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"add_oracle_provider_works"}),": Oracle should be added by the root account for now until the module includes session callback between ",(0,a.jsx)(n.code,{children:"pallet-staking"})," and ",(0,a.jsx)(n.code,{children:"pallet-session"})," as a impl of ",(0,a.jsx)(n.code,{children:"SessionManager"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"oracle_report_works"}),": Oracle provider should only be able to submit data only in designated slot, and create new batch if the price data has not been reported yet."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"oracle_slash_works"}),": when one reports slashing for oracle provider in a slot, the runtime should run iqr rule to find out whether the slot value violates the rule from the collected oracle data batch."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"oracle_excludes_zeros_and_return_median"}),": Oracle runtime should exclude zero-values since it means the data is empty or not available due to violation. median should be returned from the remainder of filtered batch."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"oracle_excludes_zeros_and_return_median_even"}),": the purpose is also same with the previous test function, but the batch length is even."]}),"\n"]}),"\n",(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:"Number"}),(0,a.jsx)(n.th,{children:"Deliverable"}),(0,a.jsx)(n.th,{children:"Specification"})]})}),(0,a.jsxs)(n.tbody,{children:[(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"0a."}),(0,a.jsx)(n.td,{children:"License"}),(0,a.jsx)(n.td,{children:"Apache 2.0"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"0b."}),(0,a.jsx)(n.td,{children:"Documentation"}),(0,a.jsx)(n.td,{children:"Documentation will introduce how to install the oracle and participate to get block reward"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"1."}),(0,a.jsx)(n.td,{children:"Oracle client"}),(0,a.jsx)(n.td,{children:"Oracle client to receive information from external sources then submit information regularly to substrate runtime"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"2."}),(0,a.jsx)(n.td,{children:"Modified Oracle module"}),(0,a.jsx)(n.td,{children:"Oracle module to register operators and batch"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"3."}),(0,a.jsx)(n.td,{children:"Unit test codes"}),(0,a.jsxs)(n.td,{children:["Unit test codes in ",(0,a.jsx)(n.code,{children:"tests.rs"})," in each runtime module"]})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"4."}),(0,a.jsx)(n.td,{children:"Npm binary"}),(0,a.jsx)(n.td,{children:"We will provide a npm binary for oracle providers to install and run an oracle client"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"5."}),(0,a.jsx)(n.td,{children:"Dockerfile"}),(0,a.jsx)(n.td,{children:"Dockerfile for running Standard protocol binary will be provided"})]})]})]}),"\n",(0,a.jsx)(n.h3,{id:"milestone-2---pos-oracle-reward-distribution",children:"Milestone 2 - PoS oracle reward distribution"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Estimated Duration:"})," 1 month"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"FTE:"})," 1"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Costs:"})," 500DAI"]}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["This milestone focuses on including session callbacks related to sessions in implementations of ",(0,a.jsx)(n.code,{children:"SessionManager"})," trait in ",(0,a.jsx)(n.code,{children:"pallet-staking"})," module, and all related module will be tested with its separate implementation of ",(0,a.jsx)(n.code,{children:"SessionManager"})," connected to ",(0,a.jsx)(n.code,{children:"pallet-session"})," in a mock environment."]}),"\n",(0,a.jsx)(n.h2,{id:"vault",children:"Vault"}),"\n",(0,a.jsx)(n.p,{children:"Vault in milestone 2 should have a trait for dependency Injection:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust=",children:"pub trait RebaseCallback {\n fn rebase(); // where it initiates rebase in the session\n}\n"})}),"\n",(0,a.jsxs)(n.p,{children:["The dependency injection will take place in the ",(0,a.jsx)(n.code,{children:"pallet-staking"}),"'s config as well as the oracle"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust=",children:"impl pallet_custom_staking::Config for Runtime{\n ...\n type Rebase = RebaseCallback; // for vault rebase\n type Oracle = OracleCallback; // for oracle callback used as same as staking callbacks\n}\n"})}),"\n",(0,a.jsxs)(n.p,{children:["where the it will be included in ",(0,a.jsx)(n.code,{children:"pallet-staking"})," module's ",(0,a.jsx)(n.code,{children:"SessionManager"})," trait implementation in ",(0,a.jsx)(n.code,{children:"end_session"})," function like:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust=",children:'/// In this implementation `new_session(session)` must be called before `end_session(session-1)`\n/// i.e. the new session must be planned before the ending of the previous session.\n///\n/// Once the first new_session is planned, all session must start and then end in order, though\n/// some session can lag in between the newest session planned and the latest session started.\nimpl pallet_session::SessionManager for Module {\n fn new_session(new_index: SessionIndex) -> Option> {\n frame_support::debug::native::trace!(\n target: LOG_TARGET,\n "[{}] planning new_session({})",\n >::block_number(),\n new_index\n );\n Self::new_session(new_index)\n }\n fn start_session(start_index: SessionIndex) {\n frame_support::debug::native::trace!(\n target: LOG_TARGET,\n "[{}] starting start_session({})",\n >::block_number(),\n start_index\n );\n Self::start_session(start_index)\n }\n fn end_session(end_index: SessionIndex) {\n frame_support::debug::native::trace!(\n target: LOG_TARGET,\n "[{}] ending end_session({}) with rebase",\n >::block_number(),\n end_index\n );\n T::Rebase::rebase();\n Self::end_session(end_index)\n }\n}\n'})}),"\n",(0,a.jsx)(n.p,{children:"vault in milestone 2 should achieve:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["In each era, vault module should bring registered stablecoin price from oracle module with its asset id (1) and rebase its total supply to ",(0,a.jsx)(n.code,{children:"(circulating supply) / (oracle price)"})," in order to satisfy the ratio ",(0,a.jsx)(n.code,{children:"(circulating supply) : (oracle price) = (total supply) : (1.0(USD) in decimal configured in the substrate chain)"}),"."]}),"\n",(0,a.jsx)(n.li,{children:"Vault module should burn or mint stablecoin's module account's balance according to rebased balance"}),"\n",(0,a.jsx)(n.li,{children:"Alert community when total supply cannot be decreased anymore to keep the ratio(in case where decreased total supply exceeds circulating supply) in order to propose emergency shutdown or take further actions(e.g. issuing bonds, using community vault from stability fee to stabilize the ratio)"}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"To check this, vault module should have these test functions:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"supply_is_rebased_in_each_era"}),": Using an oracle module, set an oracle price and start an era so that the vault module can executes rebase mechanism. The total supply of the stablecoin is checked whether it changed to the right amount."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"report_emergency"}),": check whether vault module reports when the rebased next total supply is less than the circulating supply."]}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"oracle-1",children:"Oracle"}),"\n",(0,a.jsxs)(n.p,{children:["oracle will replicate the ",(0,a.jsx)(n.code,{children:"pallet-staking"})," module regarding election of the oracle provider and the reward logic. However, there will be difference in how the elected provider(or validator) is allocated to the slot. The module only accepts the stash account to submit oracle data once ",(0,a.jsx)(n.code,{children:"validate()"})," tx has been finalized."]}),"\n",(0,a.jsxs)(n.p,{children:["For example, there will be addition in the ",(0,a.jsx)(n.code,{children:"select_and_update_validators"})," function code"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust=",children:'/// Select the new validator set at the end of the era.\n ///\n /// Runs [`try_do_phragmen`] and updates the following storage items:\n /// - [`EraElectionStatus`]: with `None`.\n /// - [`ErasStakers`]: with the new staker set.\n /// - [`ErasStakersClipped`].\n /// - [`ErasValidatorPrefs`].\n /// - [`ErasTotalStake`]: with the new total stake.\n /// - [`SnapshotValidators`] and [`SnapshotNominators`] are both removed.\n ///\n /// Internally, [`QueuedElected`], snapshots and [`QueuedScore`] are also consumed.\n ///\n /// If the election has been successful, It passes the new set upwards.\n ///\n /// This should only be called at the end of an era.\n fn select_and_update_validators(current_era: EraIndex) -> Option> {\n if let Some(ElectionResult::> {\n elected_stashes,\n exposures,\n compute,\n }) = Self::try_do_election() {\n // Totally close the election round and data.\n Self::close_election_window();\n\n // Populate Stakers and write slot stake.\n let mut total_stake: BalanceOf = Zero::zero();\n exposures.into_iter().for_each(|(stash, exposure)| {\n total_stake = total_stake.saturating_add(exposure.total);\n >::insert(current_era, &stash, &exposure);\n\n let mut exposure_clipped = exposure;\n let clipped_max_len = T::MaxNominatorRewardedPerValidator::get() as usize;\n if exposure_clipped.others.len() > clipped_max_len {\n exposure_clipped.others.sort_by(|a, b| a.value.cmp(&b.value).reverse());\n exposure_clipped.others.truncate(clipped_max_len);\n }\n >::insert(¤t_era, &stash, exposure_clipped);\n });\n\n // Insert current era staking information\n >::insert(¤t_era, total_stake);\n\n // collect the pref of all winners\n for (i, stash) in elected_stashes.iter().enumerate() {\n >::insert(i, stash.clone()); // allocating slots for elected oracle provider\n let pref = Self::validators(stash);\n >::insert(¤t_era, stash, pref);\n }\n \n\n // emit event\n Self::deposit_event(RawEvent::StakingElection(compute));\n\n log!(\n info,\n "\ud83d\udcb8 new validator set of size {:?} has been elected via {:?} for era {:?}",\n elected_stashes.len(),\n compute,\n current_era,\n );\n\n Some(elected_stashes)\n } else {\n None\n }\n }\n'})}),"\n",(0,a.jsx)(n.p,{children:"Also, slash module function should include verifier from milestone 1."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust=",children:"/// Slash the validator for a given amount of balance. This can grow the value\n /// of the slash in the case that the validator has less than `minimum_balance`\n /// active funds. Returns the amount of funds actually slashed.\n ///\n /// Slashes from `active` funds first, and then `unlocking`, starting with the\n /// chunks that are closest to unlocking.\n fn slash(\n &mut self,\n mut value: Balance,\n minimum_balance: Balance,\n slot: SlotIndex,\n ) -> Balance {\n let batch = Prices::get(_id).unwrap();\n let value = batch[_slot as usize];\n let det = Self::determine_outlier(batch, value);\n ensure!(det, Error::::NotOutlier);\n let pre_total = self.total;\n let total = &mut self.total;\n let active = &mut self.active;\n\n let slash_out_of = |\n total_remaining: &mut Balance,\n target: &mut Balance,\n value: &mut Balance,\n | {\n let mut slash_from_target = (*value).min(*target);\n\n if !slash_from_target.is_zero() {\n *target -= slash_from_target;\n\n // don't leave a dust balance in the staking system.\n if *target <= minimum_balance {\n slash_from_target += *target;\n *value += sp_std::mem::replace(target, Zero::zero());\n }\n\n *total_remaining = total_remaining.saturating_sub(slash_from_target);\n *value -= slash_from_target;\n }\n };\n\n slash_out_of(total, active, &mut value);\n\n let i = self.unlocking.iter_mut()\n .map(|chunk| {\n slash_out_of(total, &mut chunk.value, &mut value);\n chunk.value\n })\n .take_while(|value| value.is_zero()) // take all fully-consumed chunks out.\n .count();\n\n // kill all drained chunks.\n let _ = self.unlocking.drain(..i);\n\n pre_total.saturating_sub(*total)\n }\n}\n"})}),"\n",(0,a.jsx)(n.h1,{id:"unit-test",children:"Unit test"}),"\n",(0,a.jsx)(n.p,{children:"Unit tests are all identical with the staking module's test in that all logics are identical regarding slash, reward and validation."}),"\n",(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:"Number"}),(0,a.jsx)(n.th,{children:"Deliverable"}),(0,a.jsx)(n.th,{children:"Specification"})]})}),(0,a.jsxs)(n.tbody,{children:[(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"0a."}),(0,a.jsx)(n.td,{children:"License"}),(0,a.jsx)(n.td,{children:"Apache 2.0"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"0c."}),(0,a.jsx)(n.td,{children:"Documentation"}),(0,a.jsx)(n.td,{children:"Documentation will introduce how to nominate"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"1."}),(0,a.jsx)(n.td,{children:"Vault module"}),(0,a.jsxs)(n.td,{children:["Vault module will declare dependancy injection trait to use session callback in ",(0,a.jsx)(n.code,{children:"pallet-staking"})," module and the test code with separate ",(0,a.jsx)(n.code,{children:"SessionManager"})," implementation will be provided"]})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"2."}),(0,a.jsx)(n.td,{children:"Modified Staking module"}),(0,a.jsxs)(n.td,{children:[(0,a.jsx)(n.code,{children:"pallet_staking"})," module which has two config trait for rebase callback and oracle staking callback will be provided"]})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"3."}),(0,a.jsx)(n.td,{children:"Oracle module"}),(0,a.jsx)(n.td,{children:"same as staking module including curve integration but difference in slot allocation and separate slashing verifier will be included"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"4."}),(0,a.jsx)(n.td,{children:"Unit test code"}),(0,a.jsxs)(n.td,{children:["Unit test codes in ",(0,a.jsx)(n.code,{children:"tests.rs"})," in each runtime module with separate ",(0,a.jsx)(n.code,{children:"SessionManager"})," implementation"]})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"5."}),(0,a.jsx)(n.td,{children:"Docker"}),(0,a.jsx)(n.td,{children:"We will provide a dockerfile to demonstrate the full functionality of Standard protocol chain"})]})]})]}),"\n",(0,a.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Add more prices to add from the oracle (e.g. stock prices, commodities, etc) provider"}),"\n"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Full function test on Kusama/Rococo."}),"\n",(0,a.jsx)(n.li,{children:"Full function test on Polkadot."}),"\n"]}),"\n",(0,a.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["Pitch: ",(0,a.jsx)(n.a,{href:"https://whitepaper.standardprotocol.org",children:"https://whitepaper.standardprotocol.org"})]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>l});var i=t(96540);const a={},s=i.createContext(a);function r(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0ca018de.632ceb20.js b/assets/js/0ca018de.632ceb20.js new file mode 100644 index 00000000000..1e12a654c35 --- /dev/null +++ b/assets/js/0ca018de.632ceb20.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[60173],{20868:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>d});const i=JSON.parse('{"id":"applications/Standard_Protocol","title":"Standard Protocol","description":"Project Overview","source":"@site/applications/Standard_Protocol.md","sourceDirName":"applications","slug":"/applications/Standard_Protocol","permalink":"/applications/Standard_Protocol","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/Standard_Protocol.md","tags":[],"version":"current","frontMatter":{}}');var a=t(74848),s=t(28453);const r={},l="Standard Protocol",o={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Problems of current algorithmic stablecoins",id:"problems-of-current-algorithmic-stablecoins",level:3},{value:"1. Too much focus on price stability, no sustainable use case for interoperability",id:"1-too-much-focus-on-price-stability-no-sustainable-use-case-for-interoperability",level:4},{value:"2. Oracles are centralized, and there is no decentralized ecosystem to reward them",id:"2-oracles-are-centralized-and-there-is-no-decentralized-ecosystem-to-reward-them",level:4},{value:"3. Auctions are hard to track and centralized",id:"3-auctions-are-hard-to-track-and-centralized",level:4},{value:"Solutions",id:"solutions",level:3},{value:"1. Elastic supply",id:"1-elastic-supply",level:4},{value:"2. Decentralized oracles",id:"2-decentralized-oracles",level:4},{value:"3. Democratization of auction via automated market maker",id:"3-democratization-of-auction-via-automated-market-maker",level:4},{value:"Documentation",id:"documentation",level:3},{value:"Core Runtime Modules",id:"core-runtime-modules",level:3},{value:"token regisrty /token",id:"token-regisrty-token",level:4},{value:"oracle reward module /oracle",id:"oracle-reward-module-oracle",level:4},{value:"market module /market",id:"market-module-market",level:4},{value:"vault module /vault",id:"vault-module-vault",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 - Middleware for data submission and runtime integration",id:"milestone-1---middleware-for-data-submission-and-runtime-integration",level:3},{value:"Oracle provider client",id:"oracle-provider-client",level:3},{value:"Unit tests",id:"unit-tests",level:2},{value:"Oracle",id:"oracle",level:2},{value:"Milestone 2 - PoS oracle reward distribution",id:"milestone-2---pos-oracle-reward-distribution",level:3},{value:"Vault",id:"vault",level:2},{value:"Oracle",id:"oracle-1",level:2},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"standard-protocol",children:"Standard Protocol"})}),"\n",(0,a.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,a.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,a.jsx)(n.p,{children:"Standard Protocol is a collaterized algorithmic stablecoin protocol for synthetic assets."}),"\n",(0,a.jsx)(n.h3,{id:"problems-of-current-algorithmic-stablecoins",children:"Problems of current algorithmic stablecoins"}),"\n",(0,a.jsx)(n.h4,{id:"1-too-much-focus-on-price-stability-no-sustainable-use-case-for-interoperability",children:"1. Too much focus on price stability, no sustainable use case for interoperability"}),"\n",(0,a.jsx)(n.p,{children:"Current algorithmic stablecoins focus only on automated price stability. Although they provide some interoperability between tokens with initial distribution in yield farming, but currently there is no sustainable way for them to interoperate with financial activities without the reward. Also, other algorithmic stablecoins which uses incentives in cases regarding circulating supply(e.g. contractionary, expansionary cases) are not showing sustainability to preserve 1 dollar peg."}),"\n",(0,a.jsx)(n.h4,{id:"2-oracles-are-centralized-and-there-is-no-decentralized-ecosystem-to-reward-them",children:"2. Oracles are centralized, and there is no decentralized ecosystem to reward them"}),"\n",(0,a.jsx)(n.p,{children:"One can be dependant to dexes, but they are prone to flash loans, making arbitrage data compared to centralized exchange. In order to provide aggregated and balanced data, oracle providers must be rewarded."}),"\n",(0,a.jsx)(n.h4,{id:"3-auctions-are-hard-to-track-and-centralized",children:"3. Auctions are hard to track and centralized"}),"\n",(0,a.jsx)(n.p,{children:"Auctions after liquidation are hard to track and participate, leaving only hardcore traders to take advantage of arbitrage. More decentralized way to provide liquidation must be considered. Auction orders come in high volume of collateral, and this can lead to plutocracy."}),"\n",(0,a.jsx)(n.h3,{id:"solutions",children:"Solutions"}),"\n",(0,a.jsx)(n.h4,{id:"1-elastic-supply",children:"1. Elastic supply"}),"\n",(0,a.jsx)(n.p,{children:"As Amplforth(AMPL) used elastic supply to rebase its total supply of stablecoin, Standard rebases its stablecoin supply in each era, and it uses overcollaterization to mint its stablecoin, meter(MTR)."}),"\n",(0,a.jsx)(n.h4,{id:"2-decentralized-oracles",children:"2. Decentralized oracles"}),"\n",(0,a.jsx)(n.p,{children:"Oracle client from various sources (e.g. binance, coinbase, hydra dx, etc) can provide aggregated price information so that the price cannot be manipulated from one source."}),"\n",(0,a.jsx)(n.h4,{id:"3-democratization-of-auction-via-automated-market-maker",children:"3. Democratization of auction via automated market maker"}),"\n",(0,a.jsx)(n.p,{children:"Instead of hosting an auction for liquidating collaterals, Standard protocol deposits liquidated collateral to its amm pair so that meter(MTR) holders can purchase other digital assets from liquidation."}),"\n",(0,a.jsx)(n.h3,{id:"documentation",children:"Documentation"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.a,{href:"https://docs.standardprotocol.org",children:"https://docs.standardprotocol.org"})}),"\n",(0,a.jsx)(n.h3,{id:"core-runtime-modules",children:"Core Runtime Modules"}),"\n",(0,a.jsxs)(n.h4,{id:"token-regisrty-token",children:["token regisrty ",(0,a.jsx)(n.code,{children:"/token"})]}),"\n",(0,a.jsx)(n.p,{children:"Token manages asset that flows in and out with xcmp in polkadot ecosystem. assets are managed with unique identifier."}),"\n",(0,a.jsxs)(n.h4,{id:"oracle-reward-module-oracle",children:["oracle reward module ",(0,a.jsx)(n.code,{children:"/oracle"})]}),"\n",(0,a.jsx)(n.p,{children:"Oracles in standard protocol are rewarded in each era on each block reward.\nprices are stored in the state, and oracle providers are updated in each era."}),"\n",(0,a.jsxs)(n.h4,{id:"market-module-market",children:["market module ",(0,a.jsx)(n.code,{children:"/market"})]}),"\n",(0,a.jsx)(n.p,{children:"Market module in standard protocol manages pair for automated market maker(AMM) between collateral and its stablecoin meter(MTR)."}),"\n",(0,a.jsxs)(n.h4,{id:"vault-module-vault",children:["vault module ",(0,a.jsx)(n.code,{children:"/vault"})]}),"\n",(0,a.jsx)(n.p,{children:"Vault module in standard protocol is a collateral debt position engine where"}),"\n",(0,a.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,a.jsx)(n.p,{children:"Standard protocol will act as the catalyst for other parachain's financial activities for enabling leverage trading and Arbitrage in AMM created from liquidation. It will also open a protocol for synthetic asset market with decentralized oracle ecosystem."}),"\n",(0,a.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,a.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,a.jsx)(n.p,{children:"Hyungsuk Kang, team leader"}),"\n",(0,a.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,a.jsx)(n.p,{children:"Standard protocol is being made with Apache 2.0 license. Legal entity is being built in Singapore right now."}),"\n",(0,a.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,a.jsx)(n.p,{children:"Hyungsuk is Plasm network's core developer. He developed Subswap, AMM in substrate, and he wants to extend it to make the next finance in Polkadot ecosytem using XCM module and collateral debt position. He is also kernel and tendermint fellow."}),"\n",(0,a.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://github.com/digitalnativeinc/standard-substrate",children:"https://github.com/digitalnativeinc/standard-substrate"})}),"\n"]}),"\n",(0,a.jsx)(n.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://www.linkedin.com/in/hyungsukkang",children:"https://www.linkedin.com/in/hyungsukkang"})}),"\n"]}),"\n",(0,a.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,a.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,a.jsx)(n.p,{children:"As a synthetic asset protocol,Standard protocol heavily depends on the oracle for maintaining the system. Oracles should be formed in a sustainable way to be motivated for people to provide computing power.\nTo reward the network participant, Standard protocol proposes new PoS reward system by splitting block rewards from block validators to oracle providers."}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Total Estimated Duration:"})," 2 months"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Full-time equivalent (FTE):"})," 1"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Total Costs:"})," 1000DAI"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Payment Address:"})," ",(0,a.jsx)(n.code,{children:"0xd2234E506862991ADA75f930c6D79B4236e3E265"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Status:"})," ",(0,a.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/pull/244#issuecomment-1014764739",children:"Terminated"})]}),"\n"]}),"\n",(0,a.jsx)(n.h3,{id:"milestone-1---middleware-for-data-submission-and-runtime-integration",children:"Milestone 1 - Middleware for data submission and runtime integration"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Estimated Duration:"})," 1 month"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"FTE:"})," 1"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Costs:"})," 500DAI"]}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["This milestone focuses on building a oracle provider client middleware which submits off-chain data to the blockchain. An authoritive module for testing connection between oracle provider and the protocol is provided in this phase. Then, Standard will extend the oracle module to distribute reward from session callback connected between ",(0,a.jsx)(n.code,{children:"pallet_session"})," and ",(0,a.jsx)(n.code,{children:"pallet_staking"}),". When oracle provider submits outliers or does not submit values that are out of sync from other oracle providers, a slash can be applied from anyone to report. Outliers are detected with ",(0,a.jsx)(n.a,{href:"https://online.stat.psu.edu/stat200/lesson/3/3.2",children:"IQR method"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"oracle-provider-client",children:"Oracle provider client"}),"\n",(0,a.jsxs)(n.p,{children:["As chainlink and other oracle solution has a middleware or submitting client from off-chain, Standard also has its oracle client. Oracle provider client is actually a bot that uses ",(0,a.jsx)(n.a,{href:"https://github.com/scs/substrate-api-client/blob/master/tutorials/api-client-tutorial/src/main.rs",children:"polkadot-js api"})," to submit information in oracle module in a certain periods(e.g. 2 hour, 4 hour). For example, to send an oracle xt from an oracle client,"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-javascript=",children:'// Loads config\nimport LumenConfig from "@digitalnative/lumen-config";\n// Fetch functions for acquiring off-chain data\nimport fetchData from "@digitalnative/lumen-fetch";\n// Submit function for submitting data to on-chain\nimport submitData from "@digitalnative/lumen-submit";\n// Async Apis for polkadot\nimport { ApiPromise, WsProvider } from "@polkadot/api";\n\nconst runClient = async (dir) => {\n const cron = require("node-cron");\n const config = LumenConfig.default({ dir });\n const { events } = config;\n events.emit("client:start");\n const api = await polkadotApi(config);\n // register cron job to execute in every minute\n cron.schedule("*/90 * * * * *", async function() {\n events.emit("client:next");\n // fetch data\n const data = await fetchData(false, config);\n // Submit data\n await submitData(data, config, api);\n });\n // Declare cron job has been set\n events.emit("client:init");\n};\n\nexport default runClient;\n\nasync function polkadotApi(config: LumenConfig) {\n const provider = new WsProvider(config.rpc);\n const definitions = require("@digitalnative/type-definitions/opportunity");\n let types = definitions.types[0].types;\n const api = await new ApiPromise({\n provider,\n types,\n });\n await api.isReady;\n return api;\n}\n'})}),"\n",(0,a.jsx)(n.p,{children:"Here is the overall workflow for the client operation, and add-ons and options are expected to be added in each function in the library."}),"\n",(0,a.jsx)(n.h2,{id:"unit-tests",children:"Unit tests"}),"\n",(0,a.jsx)(n.p,{children:"Standard protocol applies test driven development(TDD) on building runtime modules for the grant.\nHere are unit tests that will be done along the development in the runtime module."}),"\n",(0,a.jsx)(n.h2,{id:"oracle",children:"Oracle"}),"\n",(0,a.jsx)(n.p,{children:"oracle in milestone 1 should achieve:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Only Root account can register oracle providers for slots to submit off-chain data"}),"\n",(0,a.jsx)(n.li,{children:"If slots are not open for an entity in the storage, a new oracle provider initializes the slot with the oracle provider count."}),"\n",(0,a.jsx)(n.li,{children:"When the provider is designated for a slot, it can only submit data for a designated slot"}),"\n",(0,a.jsx)(n.li,{children:"If one reports slashing for the slot, runtime validates the slot data with iqr rule and remove provider and set the value as zero if the value violates it."}),"\n",(0,a.jsx)(n.li,{children:"zero values are excluded and the median is calculated in both even and odd cases"}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"To check this, oracle provider module should have these test functions:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"add_oracle_provider_works"}),": Oracle should be added by the root account for now until the module includes session callback between ",(0,a.jsx)(n.code,{children:"pallet-staking"})," and ",(0,a.jsx)(n.code,{children:"pallet-session"})," as a impl of ",(0,a.jsx)(n.code,{children:"SessionManager"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"oracle_report_works"}),": Oracle provider should only be able to submit data only in designated slot, and create new batch if the price data has not been reported yet."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"oracle_slash_works"}),": when one reports slashing for oracle provider in a slot, the runtime should run iqr rule to find out whether the slot value violates the rule from the collected oracle data batch."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"oracle_excludes_zeros_and_return_median"}),": Oracle runtime should exclude zero-values since it means the data is empty or not available due to violation. median should be returned from the remainder of filtered batch."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"oracle_excludes_zeros_and_return_median_even"}),": the purpose is also same with the previous test function, but the batch length is even."]}),"\n"]}),"\n",(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:"Number"}),(0,a.jsx)(n.th,{children:"Deliverable"}),(0,a.jsx)(n.th,{children:"Specification"})]})}),(0,a.jsxs)(n.tbody,{children:[(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"0a."}),(0,a.jsx)(n.td,{children:"License"}),(0,a.jsx)(n.td,{children:"Apache 2.0"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"0b."}),(0,a.jsx)(n.td,{children:"Documentation"}),(0,a.jsx)(n.td,{children:"Documentation will introduce how to install the oracle and participate to get block reward"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"1."}),(0,a.jsx)(n.td,{children:"Oracle client"}),(0,a.jsx)(n.td,{children:"Oracle client to receive information from external sources then submit information regularly to substrate runtime"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"2."}),(0,a.jsx)(n.td,{children:"Modified Oracle module"}),(0,a.jsx)(n.td,{children:"Oracle module to register operators and batch"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"3."}),(0,a.jsx)(n.td,{children:"Unit test codes"}),(0,a.jsxs)(n.td,{children:["Unit test codes in ",(0,a.jsx)(n.code,{children:"tests.rs"})," in each runtime module"]})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"4."}),(0,a.jsx)(n.td,{children:"Npm binary"}),(0,a.jsx)(n.td,{children:"We will provide a npm binary for oracle providers to install and run an oracle client"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"5."}),(0,a.jsx)(n.td,{children:"Dockerfile"}),(0,a.jsx)(n.td,{children:"Dockerfile for running Standard protocol binary will be provided"})]})]})]}),"\n",(0,a.jsx)(n.h3,{id:"milestone-2---pos-oracle-reward-distribution",children:"Milestone 2 - PoS oracle reward distribution"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Estimated Duration:"})," 1 month"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"FTE:"})," 1"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Costs:"})," 500DAI"]}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["This milestone focuses on including session callbacks related to sessions in implementations of ",(0,a.jsx)(n.code,{children:"SessionManager"})," trait in ",(0,a.jsx)(n.code,{children:"pallet-staking"})," module, and all related module will be tested with its separate implementation of ",(0,a.jsx)(n.code,{children:"SessionManager"})," connected to ",(0,a.jsx)(n.code,{children:"pallet-session"})," in a mock environment."]}),"\n",(0,a.jsx)(n.h2,{id:"vault",children:"Vault"}),"\n",(0,a.jsx)(n.p,{children:"Vault in milestone 2 should have a trait for dependency Injection:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust=",children:"pub trait RebaseCallback {\n fn rebase(); // where it initiates rebase in the session\n}\n"})}),"\n",(0,a.jsxs)(n.p,{children:["The dependency injection will take place in the ",(0,a.jsx)(n.code,{children:"pallet-staking"}),"'s config as well as the oracle"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust=",children:"impl pallet_custom_staking::Config for Runtime{\n ...\n type Rebase = RebaseCallback; // for vault rebase\n type Oracle = OracleCallback; // for oracle callback used as same as staking callbacks\n}\n"})}),"\n",(0,a.jsxs)(n.p,{children:["where the it will be included in ",(0,a.jsx)(n.code,{children:"pallet-staking"})," module's ",(0,a.jsx)(n.code,{children:"SessionManager"})," trait implementation in ",(0,a.jsx)(n.code,{children:"end_session"})," function like:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust=",children:'/// In this implementation `new_session(session)` must be called before `end_session(session-1)`\n/// i.e. the new session must be planned before the ending of the previous session.\n///\n/// Once the first new_session is planned, all session must start and then end in order, though\n/// some session can lag in between the newest session planned and the latest session started.\nimpl pallet_session::SessionManager for Module {\n fn new_session(new_index: SessionIndex) -> Option> {\n frame_support::debug::native::trace!(\n target: LOG_TARGET,\n "[{}] planning new_session({})",\n >::block_number(),\n new_index\n );\n Self::new_session(new_index)\n }\n fn start_session(start_index: SessionIndex) {\n frame_support::debug::native::trace!(\n target: LOG_TARGET,\n "[{}] starting start_session({})",\n >::block_number(),\n start_index\n );\n Self::start_session(start_index)\n }\n fn end_session(end_index: SessionIndex) {\n frame_support::debug::native::trace!(\n target: LOG_TARGET,\n "[{}] ending end_session({}) with rebase",\n >::block_number(),\n end_index\n );\n T::Rebase::rebase();\n Self::end_session(end_index)\n }\n}\n'})}),"\n",(0,a.jsx)(n.p,{children:"vault in milestone 2 should achieve:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["In each era, vault module should bring registered stablecoin price from oracle module with its asset id (1) and rebase its total supply to ",(0,a.jsx)(n.code,{children:"(circulating supply) / (oracle price)"})," in order to satisfy the ratio ",(0,a.jsx)(n.code,{children:"(circulating supply) : (oracle price) = (total supply) : (1.0(USD) in decimal configured in the substrate chain)"}),"."]}),"\n",(0,a.jsx)(n.li,{children:"Vault module should burn or mint stablecoin's module account's balance according to rebased balance"}),"\n",(0,a.jsx)(n.li,{children:"Alert community when total supply cannot be decreased anymore to keep the ratio(in case where decreased total supply exceeds circulating supply) in order to propose emergency shutdown or take further actions(e.g. issuing bonds, using community vault from stability fee to stabilize the ratio)"}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"To check this, vault module should have these test functions:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"supply_is_rebased_in_each_era"}),": Using an oracle module, set an oracle price and start an era so that the vault module can executes rebase mechanism. The total supply of the stablecoin is checked whether it changed to the right amount."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"report_emergency"}),": check whether vault module reports when the rebased next total supply is less than the circulating supply."]}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"oracle-1",children:"Oracle"}),"\n",(0,a.jsxs)(n.p,{children:["oracle will replicate the ",(0,a.jsx)(n.code,{children:"pallet-staking"})," module regarding election of the oracle provider and the reward logic. However, there will be difference in how the elected provider(or validator) is allocated to the slot. The module only accepts the stash account to submit oracle data once ",(0,a.jsx)(n.code,{children:"validate()"})," tx has been finalized."]}),"\n",(0,a.jsxs)(n.p,{children:["For example, there will be addition in the ",(0,a.jsx)(n.code,{children:"select_and_update_validators"})," function code"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust=",children:'/// Select the new validator set at the end of the era.\n ///\n /// Runs [`try_do_phragmen`] and updates the following storage items:\n /// - [`EraElectionStatus`]: with `None`.\n /// - [`ErasStakers`]: with the new staker set.\n /// - [`ErasStakersClipped`].\n /// - [`ErasValidatorPrefs`].\n /// - [`ErasTotalStake`]: with the new total stake.\n /// - [`SnapshotValidators`] and [`SnapshotNominators`] are both removed.\n ///\n /// Internally, [`QueuedElected`], snapshots and [`QueuedScore`] are also consumed.\n ///\n /// If the election has been successful, It passes the new set upwards.\n ///\n /// This should only be called at the end of an era.\n fn select_and_update_validators(current_era: EraIndex) -> Option> {\n if let Some(ElectionResult::> {\n elected_stashes,\n exposures,\n compute,\n }) = Self::try_do_election() {\n // Totally close the election round and data.\n Self::close_election_window();\n\n // Populate Stakers and write slot stake.\n let mut total_stake: BalanceOf = Zero::zero();\n exposures.into_iter().for_each(|(stash, exposure)| {\n total_stake = total_stake.saturating_add(exposure.total);\n >::insert(current_era, &stash, &exposure);\n\n let mut exposure_clipped = exposure;\n let clipped_max_len = T::MaxNominatorRewardedPerValidator::get() as usize;\n if exposure_clipped.others.len() > clipped_max_len {\n exposure_clipped.others.sort_by(|a, b| a.value.cmp(&b.value).reverse());\n exposure_clipped.others.truncate(clipped_max_len);\n }\n >::insert(¤t_era, &stash, exposure_clipped);\n });\n\n // Insert current era staking information\n >::insert(¤t_era, total_stake);\n\n // collect the pref of all winners\n for (i, stash) in elected_stashes.iter().enumerate() {\n >::insert(i, stash.clone()); // allocating slots for elected oracle provider\n let pref = Self::validators(stash);\n >::insert(¤t_era, stash, pref);\n }\n \n\n // emit event\n Self::deposit_event(RawEvent::StakingElection(compute));\n\n log!(\n info,\n "\ud83d\udcb8 new validator set of size {:?} has been elected via {:?} for era {:?}",\n elected_stashes.len(),\n compute,\n current_era,\n );\n\n Some(elected_stashes)\n } else {\n None\n }\n }\n'})}),"\n",(0,a.jsx)(n.p,{children:"Also, slash module function should include verifier from milestone 1."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust=",children:"/// Slash the validator for a given amount of balance. This can grow the value\n /// of the slash in the case that the validator has less than `minimum_balance`\n /// active funds. Returns the amount of funds actually slashed.\n ///\n /// Slashes from `active` funds first, and then `unlocking`, starting with the\n /// chunks that are closest to unlocking.\n fn slash(\n &mut self,\n mut value: Balance,\n minimum_balance: Balance,\n slot: SlotIndex,\n ) -> Balance {\n let batch = Prices::get(_id).unwrap();\n let value = batch[_slot as usize];\n let det = Self::determine_outlier(batch, value);\n ensure!(det, Error::::NotOutlier);\n let pre_total = self.total;\n let total = &mut self.total;\n let active = &mut self.active;\n\n let slash_out_of = |\n total_remaining: &mut Balance,\n target: &mut Balance,\n value: &mut Balance,\n | {\n let mut slash_from_target = (*value).min(*target);\n\n if !slash_from_target.is_zero() {\n *target -= slash_from_target;\n\n // don't leave a dust balance in the staking system.\n if *target <= minimum_balance {\n slash_from_target += *target;\n *value += sp_std::mem::replace(target, Zero::zero());\n }\n\n *total_remaining = total_remaining.saturating_sub(slash_from_target);\n *value -= slash_from_target;\n }\n };\n\n slash_out_of(total, active, &mut value);\n\n let i = self.unlocking.iter_mut()\n .map(|chunk| {\n slash_out_of(total, &mut chunk.value, &mut value);\n chunk.value\n })\n .take_while(|value| value.is_zero()) // take all fully-consumed chunks out.\n .count();\n\n // kill all drained chunks.\n let _ = self.unlocking.drain(..i);\n\n pre_total.saturating_sub(*total)\n }\n}\n"})}),"\n",(0,a.jsx)(n.h1,{id:"unit-test",children:"Unit test"}),"\n",(0,a.jsx)(n.p,{children:"Unit tests are all identical with the staking module's test in that all logics are identical regarding slash, reward and validation."}),"\n",(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:"Number"}),(0,a.jsx)(n.th,{children:"Deliverable"}),(0,a.jsx)(n.th,{children:"Specification"})]})}),(0,a.jsxs)(n.tbody,{children:[(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"0a."}),(0,a.jsx)(n.td,{children:"License"}),(0,a.jsx)(n.td,{children:"Apache 2.0"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"0c."}),(0,a.jsx)(n.td,{children:"Documentation"}),(0,a.jsx)(n.td,{children:"Documentation will introduce how to nominate"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"1."}),(0,a.jsx)(n.td,{children:"Vault module"}),(0,a.jsxs)(n.td,{children:["Vault module will declare dependancy injection trait to use session callback in ",(0,a.jsx)(n.code,{children:"pallet-staking"})," module and the test code with separate ",(0,a.jsx)(n.code,{children:"SessionManager"})," implementation will be provided"]})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"2."}),(0,a.jsx)(n.td,{children:"Modified Staking module"}),(0,a.jsxs)(n.td,{children:[(0,a.jsx)(n.code,{children:"pallet_staking"})," module which has two config trait for rebase callback and oracle staking callback will be provided"]})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"3."}),(0,a.jsx)(n.td,{children:"Oracle module"}),(0,a.jsx)(n.td,{children:"same as staking module including curve integration but difference in slot allocation and separate slashing verifier will be included"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"4."}),(0,a.jsx)(n.td,{children:"Unit test code"}),(0,a.jsxs)(n.td,{children:["Unit test codes in ",(0,a.jsx)(n.code,{children:"tests.rs"})," in each runtime module with separate ",(0,a.jsx)(n.code,{children:"SessionManager"})," implementation"]})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"5."}),(0,a.jsx)(n.td,{children:"Docker"}),(0,a.jsx)(n.td,{children:"We will provide a dockerfile to demonstrate the full functionality of Standard protocol chain"})]})]})]}),"\n",(0,a.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Add more prices to add from the oracle (e.g. stock prices, commodities, etc) provider"}),"\n"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Full function test on Kusama/Rococo."}),"\n",(0,a.jsx)(n.li,{children:"Full function test on Polkadot."}),"\n"]}),"\n",(0,a.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["Pitch: ",(0,a.jsx)(n.a,{href:"https://whitepaper.standardprotocol.org",children:"https://whitepaper.standardprotocol.org"})]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>l});var i=t(96540);const a={},s=i.createContext(a);function r(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0cf91a3d.78ac1f03.js b/assets/js/0cf91a3d.78ac1f03.js deleted file mode 100644 index 8567aed2205..00000000000 --- a/assets/js/0cf91a3d.78ac1f03.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[66592],{98687:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"applications/deip","title":"DEIP IP Management/Governance Module","description":"Proposer:* aliakseikulik","source":"@site/applications/deip.md","sourceDirName":"applications","slug":"/applications/deip","permalink":"/applications/deip","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/deip.md","tags":[],"version":"current","frontMatter":{}}');var s=i(74848),a=i(28453);const o={},r="DEIP IP Management/Governance Module",l={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Integration",id:"integration",level:4},{value:"Motivation",id:"motivation",level:4},{value:"Project Details",id:"project-details",level:3},{value:"DEIP IP Management/Governance (IPMG) Module",id:"deip-ip-managementgovernance-ipmg-module",level:4},{value:"Technology stack",id:"technology-stack",level:4},{value:"PoC/MVP",id:"pocmvp",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 Implement IP Management/Governance Module",id:"milestone-1-implement-ip-managementgovernance-module",level:3},{value:"Milestone 2 Implement Web-base UI (Human Capital Tokeization Use-Case (Vedai))",id:"milestone-2-implement-web-base-ui-human-capital-tokeization-use-case-vedai",level:3},{value:"Use-case description",id:"use-case-description",level:4},{value:"Future Plans",id:"future-plans",level:2},{value:"IP Tokenization (IPT) module",id:"ip-tokenization-ipt-module",level:4},{value:"IP Financing (IPF) module",id:"ip-financing-ipf-module",level:4},{value:"IP Licensing (IPL) module",id:"ip-licensing-ipl-module",level:4},{value:"IP Exchange (IPE) module",id:"ip-exchange-ipe-module",level:4},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const n={a:"a",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"deip-ip-managementgovernance-module",children:"DEIP IP Management/Governance Module"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Proposer:"})," ",(0,s.jsx)(n.a,{href:"https://github.com/aliakseikulik",children:"aliakseikulik"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Payment Address:"})," bc1q6dnhvxt93rtdalrtgezzwtsn2krglktv68e7nr"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Status:"})," ",(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/pull/130#issuecomment-1168471336",children:"Terminated"})]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(n.p,{children:"DEIP builds an IP assets management platform which allows discovering, evaluation, and exchange of IP assets on the blockchain. It can be applied to any type of IP assets. The platform implements registration of IP assets on the blockchain, tokenization of IP assets, and governance of IP assets. With such infrastructure, DEIP becomes a foundation for DeFI and DAO around IP assets. In the future, DEIP will also provide a no-code/low code SDK to build custom Dapps for specific IP assets management cases (patents, art, movies, technologies, etc.)."}),"\n",(0,s.jsx)(n.h4,{id:"integration",children:"Integration"}),"\n",(0,s.jsx)(n.p,{children:"DEIP is a Polkadot Parachain built on Substrate 2.0 Framework and designed specifically for IP governance, tokenization, and exchange. We see integration with Polkadot ecosystem as an important step towards a truly decentralized way to govern and exhange tokenized IP assets."}),"\n",(0,s.jsx)(n.h4,{id:"motivation",children:"Motivation"}),"\n",(0,s.jsx)(n.p,{children:"DEIP team has been building a solutions for tokenization and exhange of IP assets since 2017. We have a vision of a more innovative world where individuals and companies are able to push their innovations to market faster and with less expenses."}),"\n",(0,s.jsx)(n.p,{children:"We see Polkadot as a the best ecosystem for us to join. We believe that our protocol will be useful for other companies in the Polkadot ecosystem and even could drive adoption of both Polkadot and DEIP solutions."}),"\n",(0,s.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(n.h4,{id:"deip-ip-managementgovernance-ipmg-module",children:"DEIP IP Management/Governance (IPMG) Module"}),"\n",(0,s.jsx)(n.p,{children:"IPMG is a core module for managing technology assets, and assessment and evaluation of IP assets. It enables a collaborative approach in the creation and governance of IP assets via working groups as DAOs, advanced access control & sharing capabilities with Proof of Share. Furthermore, the IPMG module enables a collaborative assessment and evaluation of IP assets via a Decentralized Assessment System that allows to crowdsource expertise from the network. Working groups are managed as DAOs via specific smart-contracts that create delayed transactions with multi-sig to be executed."}),"\n",(0,s.jsx)(n.p,{children:"Within the scope of this grant we will implement a parachain and web-based UI with basic functionality for the management of working groups via DAOs, and governance and registration of IP on the blockchain. Core features to be implemented during this phase:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Management of working groups (creation, membership management, decision-making mechanisms (voting));"}),"\n",(0,s.jsx)(n.li,{children:"Creation of project(s);"}),"\n",(0,s.jsx)(n.li,{children:"Creation of IP asset(s) within a project;"}),"\n",(0,s.jsx)(n.li,{children:"Registration of IP asset(s) ownership on the blockchain with certification (a digital certificate that embeds a signature of IP asset creator, creation timestamp and hash of the certified IP asset);"}),"\n",(0,s.jsx)(n.li,{children:"Access control (with Proof of Share);"}),"\n",(0,s.jsx)(n.li,{children:"Ownership validation tool (a web-based tool used to verify the owner/creator of IP asset and creation timestamp using the provided certification data such as hash of IP asset or certified IP asset file);"}),"\n"]}),"\n",(0,s.jsx)("img",{src:"https://user-images.githubusercontent.com/13851716/99986481-47698300-2dc0-11eb-8523-68f03d1a6b2c.png",width:"480px"}),"\n",(0,s.jsx)(n.h4,{id:"technology-stack",children:"Technology stack"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Blockchain: Substrate + C++/Rust"}),"\n",(0,s.jsx)(n.li,{children:"Backend: Node.js + MongoDb"}),"\n",(0,s.jsx)(n.li,{children:"Frontend: Vue.js"}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"pocmvp",children:"PoC/MVP"}),"\n",(0,s.jsxs)(n.p,{children:["Live demo of the platform is available at ",(0,s.jsx)(n.a,{href:"https://demo.deip.world",children:"https://demo.deip.world"})]}),"\n",(0,s.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsx)(n.p,{children:"As far as our team knows there are no other projects working on IP governance, tokenization or exhange solitions within the Polkadot ecosystem."}),"\n",(0,s.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Yahor Tsaryk - CTO, Project Lead, Blockchain Developer"}),"\n",(0,s.jsx)(n.li,{children:"Alex Shkor - Product director, Blockchain Architect"}),"\n",(0,s.jsx)(n.li,{children:"Alexey Kulik - System Architect"}),"\n",(0,s.jsx)(n.li,{children:"Euheny Bondarovich - Full-stack Developer"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Name:"})," Alexey Kulik"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Email:"})," ",(0,s.jsx)(n.a,{href:"mailto:alexey.kulik@deip.world",children:"alexey.kulik@deip.world"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Website:"})," ",(0,s.jsx)(n.a,{href:"https://deip.world",children:"https://deip.world"})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Registered Legal Entity:"})," DEIPWORLD INC."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Yahor Tsaryk"})}),"\n",(0,s.jsx)(n.p,{children:"More than 7 years of experience\nProfessional in front-end and backend development, Big Data and distributed systems."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Alex Shkor"})}),"\n",(0,s.jsx)(n.p,{children:"An expert in blockchain architectures, crypto economies modeling and has more than 10 years of experience in designing distributed systems. He held executive positions in Paralect.com. Alex is thinktank member and expert at Blockchain for Science, and public speaker at various events (presentations in Vienna (Scientific Publishing on the Blockchain), Zurich (CRYPTSCIENCE2018), ETH Zurich). Author of articles about the distributed system, especially CQRS and Event Sourcing."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Alexey Kulik"})}),"\n",(0,s.jsx)(n.p,{children:"Expert in software architectures and blockchain with 10 years of hands-on experience. Speaker on blockchain/DLT topics and lecturer at Belarusian National Technical University."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Euheny Bondarovich"})}),"\n",(0,s.jsx)(n.p,{children:"Full-stack developer since 2004."}),"\n",(0,s.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(n.p,{children:["The existing code is not fully open-sourced at the moment. DEIP team is fully commited to open-source the code and protocol in early 2021. We will provide access to our current GitLab repositories upon request from Polkadot team. ",(0,s.jsx)(n.strong,{children:"All developments within the Polkadot Open Grants Program will be open-sourced from day one on GitHub"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/yahor-tsaryk-92032a68/",children:"Yahor Tsaryk"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/alexshkor/",children:"Alex Shkor"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/alexeykulik/",children:"Alexey Kulik"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/euheny/",children:"Euheny Bondarovich"})}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Estimated Duration:"})," 2 months"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Full-time equivalent (FTE):"})," 4.5"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Costs:"})," 1.21 BTC"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-1-implement-ip-managementgovernance-module",children:"Milestone 1 Implement IP Management/Governance Module"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated Duration:"})," 2 months"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 3.5"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," 0.94 BTC"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"Apache 2.0"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"Documentation describing the DEIP protocol and basic workflows implemented in the IPMG module."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0c."}),(0,s.jsx)(n.td,{children:"Testing Guide"}),(0,s.jsx)(n.td,{children:"Complete test-suite with acceptable unit-test coverage, and instructions how to run these tests."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0d."}),(0,s.jsx)(n.td,{children:"Docker"}),(0,s.jsx)(n.td,{children:"DEIP will provide a Docker file to start up a node for testing the functionality."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"1."}),(0,s.jsx)(n.td,{children:"Basic working group management (DAO)"}),(0,s.jsx)(n.td,{children:"We need some way to minimally manage organizations because assets are owned by organization initially. We will implement a minimal needed governance operations for IP assets, but will also implement an adapter which will allow to connect DAO pallets in the future. \u0421++/Rust"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"2."}),(0,s.jsx)(n.td,{children:"Project and IP management"}),(0,s.jsx)(n.td,{children:"Create project, edit project, create IP asset within project. C++/Rust"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"3."}),(0,s.jsx)(n.td,{children:"IP registration"}),(0,s.jsx)(n.td,{children:"Register (timestamp) a fact of creation and/or ownership of specific IP asset on the blockchain. C++/Rust"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"4."}),(0,s.jsx)(n.td,{children:"Access control"}),(0,s.jsx)(n.td,{children:"Manage access permissions to specific IP asset with unique Proof of Share entries that confirm a specific user was granted access to an asset. C++/Rust"})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-2-implement-web-base-ui-human-capital-tokeization-use-case-vedai",children:"Milestone 2 Implement Web-base UI (Human Capital Tokeization Use-Case (Vedai))"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated Duration:"})," 2 months"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated Completion:"})," End of January 2022"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," 11000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"Apache 2.0"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"User stories describing the use-case features and documentation with details on application stucture and DEIP modules used to built it."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0c."}),(0,s.jsx)(n.td,{children:"Testing guide"}),(0,s.jsx)(n.td,{children:"Testing guide on how to test functionality (described in user stories provided in 0b) of the web application delivered."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0d."}),(0,s.jsx)(n.td,{children:"Docker"}),(0,s.jsx)(n.td,{children:"Docker file to run both test node and Web-base UI for testing the functionality delivered within milestone #2."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0e."}),(0,s.jsx)(n.td,{children:"Article"}),(0,s.jsx)(n.td,{children:"DEIP will publish an article to explain the purpose, applications and functionality of the application implemented in the scope of this milestone. Article will be published on DEIP blog (Medium) as well as it will be shared in DEIP media channels (e.g. official Telegram channel with 20k members, Twitter, Facebook)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"1."}),(0,s.jsx)(n.td,{children:"Web-based UI"}),(0,s.jsx)(n.td,{children:"Manage working groups (DAOs), project management, IP asset creation and registration (tokenized Income Share Agreements). Vue.js & Node.js + MongoDb for web-based app backend"})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"use-case-description",children:"Use-case description"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://vedai.org",children:"Vedai"})," is an investment platform that enables companies and individuals to invest into coding bootcamp Income Share Agreement (ISA) programs and receive a share of the bootcamp profits in ISA returns. This novel investment mechanism allows to align incentives for all participants of the educational market and advance the development of global human capital."]}),"\n",(0,s.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsx)(n.p,{children:"We are planning to continuusly evolve the project adding new modules and make a first decentralized exchnage for IP assets."}),"\n",(0,s.jsx)(n.h4,{id:"ip-tokenization-ipt-module",children:"IP Tokenization (IPT) module"}),"\n",(0,s.jsx)(n.p,{children:"IPT module enables securitization and tokenization of IP assets. It introduces advanced mechanics for the management of IP ownership, such as the distribution of shares of IP, co-ownership, and royalties distribution via smart-contracts."}),"\n",(0,s.jsx)("img",{src:"https://user-images.githubusercontent.com/13851716/100002424-966de300-2dd5-11eb-9b84-f7b1e0a51b4f.png",width:"480px"}),"\n",(0,s.jsx)(n.h4,{id:"ip-financing-ipf-module",children:"IP Financing (IPF) module"}),"\n",(0,s.jsx)(n.p,{children:"IPF module provides various models of funding and financing for projects that produce IP assets. Funding models include (but not limited to): crowd investing, private investing, grants, open innovation (OI) challenges."}),"\n",(0,s.jsx)("img",{src:"https://user-images.githubusercontent.com/13851716/100002434-98d03d00-2dd5-11eb-8c1b-33b5403f81c3.png",width:"480px"}),"\n",(0,s.jsx)(n.h4,{id:"ip-licensing-ipl-module",children:"IP Licensing (IPL) module"}),"\n",(0,s.jsx)(n.p,{children:"IPL module enables the licensing of IP assets. Allows tracking of all licensing transactions and provides evidence of licensing.\nVarious licensing agreements, instant licensing, proof of licensing, licensing transactions overview."}),"\n",(0,s.jsx)("img",{src:"https://user-images.githubusercontent.com/13851716/100002436-9968d380-2dd5-11eb-8c68-74644984dfef.png",width:"480px"}),"\n",(0,s.jsx)(n.h4,{id:"ip-exchange-ipe-module",children:"IP Exchange (IPE) module"}),"\n",(0,s.jsx)(n.p,{children:"IPE module enables the exchange of IP assets. Any IP asset can be exchanged for any other IP asset on the platform, as well as it can be exchanged for various crypto assets (e.g. DOT, ETH, or BTC)."}),"\n",(0,s.jsx)("img",{src:"https://user-images.githubusercontent.com/13851716/100002431-9837a680-2dd5-11eb-9046-4800f8031f59.png",width:"480px"}),"\n",(0,s.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"What work has been done so far?"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"We already have a working prototype and pilots."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Are there are any teams who have already contributed (financially) to the project?"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"No"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Have you applied for other grants so far?"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"We have not applied for any other grants with this exact project. But we have applied for multiple grants related to the application of our Decentralized Assessment System (a system we designed for crowdsourcing of domain expertise to assess various IP assets). We are currently implementing pilots as part of Blockchers program, as well as part of EOSC Digital Innovation Hub."})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>r});var t=i(96540);const s={},a=t.createContext(s);function o(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0cf91a3d.83fd797d.js b/assets/js/0cf91a3d.83fd797d.js new file mode 100644 index 00000000000..916a14f9705 --- /dev/null +++ b/assets/js/0cf91a3d.83fd797d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[66592],{57991:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"applications/deip","title":"DEIP IP Management/Governance Module","description":"Proposer:* aliakseikulik","source":"@site/applications/deip.md","sourceDirName":"applications","slug":"/applications/deip","permalink":"/applications/deip","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/deip.md","tags":[],"version":"current","frontMatter":{}}');var s=i(74848),a=i(28453);const o={},r="DEIP IP Management/Governance Module",l={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Integration",id:"integration",level:4},{value:"Motivation",id:"motivation",level:4},{value:"Project Details",id:"project-details",level:3},{value:"DEIP IP Management/Governance (IPMG) Module",id:"deip-ip-managementgovernance-ipmg-module",level:4},{value:"Technology stack",id:"technology-stack",level:4},{value:"PoC/MVP",id:"pocmvp",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 Implement IP Management/Governance Module",id:"milestone-1-implement-ip-managementgovernance-module",level:3},{value:"Milestone 2 Implement Web-base UI (Human Capital Tokeization Use-Case (Vedai))",id:"milestone-2-implement-web-base-ui-human-capital-tokeization-use-case-vedai",level:3},{value:"Use-case description",id:"use-case-description",level:4},{value:"Future Plans",id:"future-plans",level:2},{value:"IP Tokenization (IPT) module",id:"ip-tokenization-ipt-module",level:4},{value:"IP Financing (IPF) module",id:"ip-financing-ipf-module",level:4},{value:"IP Licensing (IPL) module",id:"ip-licensing-ipl-module",level:4},{value:"IP Exchange (IPE) module",id:"ip-exchange-ipe-module",level:4},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const n={a:"a",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"deip-ip-managementgovernance-module",children:"DEIP IP Management/Governance Module"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Proposer:"})," ",(0,s.jsx)(n.a,{href:"https://github.com/aliakseikulik",children:"aliakseikulik"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Payment Address:"})," bc1q6dnhvxt93rtdalrtgezzwtsn2krglktv68e7nr"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Status:"})," ",(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/pull/130#issuecomment-1168471336",children:"Terminated"})]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(n.p,{children:"DEIP builds an IP assets management platform which allows discovering, evaluation, and exchange of IP assets on the blockchain. It can be applied to any type of IP assets. The platform implements registration of IP assets on the blockchain, tokenization of IP assets, and governance of IP assets. With such infrastructure, DEIP becomes a foundation for DeFI and DAO around IP assets. In the future, DEIP will also provide a no-code/low code SDK to build custom Dapps for specific IP assets management cases (patents, art, movies, technologies, etc.)."}),"\n",(0,s.jsx)(n.h4,{id:"integration",children:"Integration"}),"\n",(0,s.jsx)(n.p,{children:"DEIP is a Polkadot Parachain built on Substrate 2.0 Framework and designed specifically for IP governance, tokenization, and exchange. We see integration with Polkadot ecosystem as an important step towards a truly decentralized way to govern and exhange tokenized IP assets."}),"\n",(0,s.jsx)(n.h4,{id:"motivation",children:"Motivation"}),"\n",(0,s.jsx)(n.p,{children:"DEIP team has been building a solutions for tokenization and exhange of IP assets since 2017. We have a vision of a more innovative world where individuals and companies are able to push their innovations to market faster and with less expenses."}),"\n",(0,s.jsx)(n.p,{children:"We see Polkadot as a the best ecosystem for us to join. We believe that our protocol will be useful for other companies in the Polkadot ecosystem and even could drive adoption of both Polkadot and DEIP solutions."}),"\n",(0,s.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(n.h4,{id:"deip-ip-managementgovernance-ipmg-module",children:"DEIP IP Management/Governance (IPMG) Module"}),"\n",(0,s.jsx)(n.p,{children:"IPMG is a core module for managing technology assets, and assessment and evaluation of IP assets. It enables a collaborative approach in the creation and governance of IP assets via working groups as DAOs, advanced access control & sharing capabilities with Proof of Share. Furthermore, the IPMG module enables a collaborative assessment and evaluation of IP assets via a Decentralized Assessment System that allows to crowdsource expertise from the network. Working groups are managed as DAOs via specific smart-contracts that create delayed transactions with multi-sig to be executed."}),"\n",(0,s.jsx)(n.p,{children:"Within the scope of this grant we will implement a parachain and web-based UI with basic functionality for the management of working groups via DAOs, and governance and registration of IP on the blockchain. Core features to be implemented during this phase:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Management of working groups (creation, membership management, decision-making mechanisms (voting));"}),"\n",(0,s.jsx)(n.li,{children:"Creation of project(s);"}),"\n",(0,s.jsx)(n.li,{children:"Creation of IP asset(s) within a project;"}),"\n",(0,s.jsx)(n.li,{children:"Registration of IP asset(s) ownership on the blockchain with certification (a digital certificate that embeds a signature of IP asset creator, creation timestamp and hash of the certified IP asset);"}),"\n",(0,s.jsx)(n.li,{children:"Access control (with Proof of Share);"}),"\n",(0,s.jsx)(n.li,{children:"Ownership validation tool (a web-based tool used to verify the owner/creator of IP asset and creation timestamp using the provided certification data such as hash of IP asset or certified IP asset file);"}),"\n"]}),"\n",(0,s.jsx)("img",{src:"https://user-images.githubusercontent.com/13851716/99986481-47698300-2dc0-11eb-8523-68f03d1a6b2c.png",width:"480px"}),"\n",(0,s.jsx)(n.h4,{id:"technology-stack",children:"Technology stack"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Blockchain: Substrate + C++/Rust"}),"\n",(0,s.jsx)(n.li,{children:"Backend: Node.js + MongoDb"}),"\n",(0,s.jsx)(n.li,{children:"Frontend: Vue.js"}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"pocmvp",children:"PoC/MVP"}),"\n",(0,s.jsxs)(n.p,{children:["Live demo of the platform is available at ",(0,s.jsx)(n.a,{href:"https://demo.deip.world",children:"https://demo.deip.world"})]}),"\n",(0,s.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsx)(n.p,{children:"As far as our team knows there are no other projects working on IP governance, tokenization or exhange solitions within the Polkadot ecosystem."}),"\n",(0,s.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Yahor Tsaryk - CTO, Project Lead, Blockchain Developer"}),"\n",(0,s.jsx)(n.li,{children:"Alex Shkor - Product director, Blockchain Architect"}),"\n",(0,s.jsx)(n.li,{children:"Alexey Kulik - System Architect"}),"\n",(0,s.jsx)(n.li,{children:"Euheny Bondarovich - Full-stack Developer"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Name:"})," Alexey Kulik"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Email:"})," ",(0,s.jsx)(n.a,{href:"mailto:alexey.kulik@deip.world",children:"alexey.kulik@deip.world"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Website:"})," ",(0,s.jsx)(n.a,{href:"https://deip.world",children:"https://deip.world"})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Registered Legal Entity:"})," DEIPWORLD INC."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Yahor Tsaryk"})}),"\n",(0,s.jsx)(n.p,{children:"More than 7 years of experience\nProfessional in front-end and backend development, Big Data and distributed systems."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Alex Shkor"})}),"\n",(0,s.jsx)(n.p,{children:"An expert in blockchain architectures, crypto economies modeling and has more than 10 years of experience in designing distributed systems. He held executive positions in Paralect.com. Alex is thinktank member and expert at Blockchain for Science, and public speaker at various events (presentations in Vienna (Scientific Publishing on the Blockchain), Zurich (CRYPTSCIENCE2018), ETH Zurich). Author of articles about the distributed system, especially CQRS and Event Sourcing."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Alexey Kulik"})}),"\n",(0,s.jsx)(n.p,{children:"Expert in software architectures and blockchain with 10 years of hands-on experience. Speaker on blockchain/DLT topics and lecturer at Belarusian National Technical University."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Euheny Bondarovich"})}),"\n",(0,s.jsx)(n.p,{children:"Full-stack developer since 2004."}),"\n",(0,s.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(n.p,{children:["The existing code is not fully open-sourced at the moment. DEIP team is fully commited to open-source the code and protocol in early 2021. We will provide access to our current GitLab repositories upon request from Polkadot team. ",(0,s.jsx)(n.strong,{children:"All developments within the Polkadot Open Grants Program will be open-sourced from day one on GitHub"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/yahor-tsaryk-92032a68/",children:"Yahor Tsaryk"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/alexshkor/",children:"Alex Shkor"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/alexeykulik/",children:"Alexey Kulik"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/euheny/",children:"Euheny Bondarovich"})}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Estimated Duration:"})," 2 months"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Full-time equivalent (FTE):"})," 4.5"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Costs:"})," 1.21 BTC"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-1-implement-ip-managementgovernance-module",children:"Milestone 1 Implement IP Management/Governance Module"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated Duration:"})," 2 months"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 3.5"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," 0.94 BTC"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"Apache 2.0"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"Documentation describing the DEIP protocol and basic workflows implemented in the IPMG module."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0c."}),(0,s.jsx)(n.td,{children:"Testing Guide"}),(0,s.jsx)(n.td,{children:"Complete test-suite with acceptable unit-test coverage, and instructions how to run these tests."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0d."}),(0,s.jsx)(n.td,{children:"Docker"}),(0,s.jsx)(n.td,{children:"DEIP will provide a Docker file to start up a node for testing the functionality."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"1."}),(0,s.jsx)(n.td,{children:"Basic working group management (DAO)"}),(0,s.jsx)(n.td,{children:"We need some way to minimally manage organizations because assets are owned by organization initially. We will implement a minimal needed governance operations for IP assets, but will also implement an adapter which will allow to connect DAO pallets in the future. \u0421++/Rust"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"2."}),(0,s.jsx)(n.td,{children:"Project and IP management"}),(0,s.jsx)(n.td,{children:"Create project, edit project, create IP asset within project. C++/Rust"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"3."}),(0,s.jsx)(n.td,{children:"IP registration"}),(0,s.jsx)(n.td,{children:"Register (timestamp) a fact of creation and/or ownership of specific IP asset on the blockchain. C++/Rust"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"4."}),(0,s.jsx)(n.td,{children:"Access control"}),(0,s.jsx)(n.td,{children:"Manage access permissions to specific IP asset with unique Proof of Share entries that confirm a specific user was granted access to an asset. C++/Rust"})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-2-implement-web-base-ui-human-capital-tokeization-use-case-vedai",children:"Milestone 2 Implement Web-base UI (Human Capital Tokeization Use-Case (Vedai))"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated Duration:"})," 2 months"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated Completion:"})," End of January 2022"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," 11000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"Apache 2.0"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"User stories describing the use-case features and documentation with details on application stucture and DEIP modules used to built it."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0c."}),(0,s.jsx)(n.td,{children:"Testing guide"}),(0,s.jsx)(n.td,{children:"Testing guide on how to test functionality (described in user stories provided in 0b) of the web application delivered."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0d."}),(0,s.jsx)(n.td,{children:"Docker"}),(0,s.jsx)(n.td,{children:"Docker file to run both test node and Web-base UI for testing the functionality delivered within milestone #2."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"0e."}),(0,s.jsx)(n.td,{children:"Article"}),(0,s.jsx)(n.td,{children:"DEIP will publish an article to explain the purpose, applications and functionality of the application implemented in the scope of this milestone. Article will be published on DEIP blog (Medium) as well as it will be shared in DEIP media channels (e.g. official Telegram channel with 20k members, Twitter, Facebook)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"1."}),(0,s.jsx)(n.td,{children:"Web-based UI"}),(0,s.jsx)(n.td,{children:"Manage working groups (DAOs), project management, IP asset creation and registration (tokenized Income Share Agreements). Vue.js & Node.js + MongoDb for web-based app backend"})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"use-case-description",children:"Use-case description"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://vedai.org",children:"Vedai"})," is an investment platform that enables companies and individuals to invest into coding bootcamp Income Share Agreement (ISA) programs and receive a share of the bootcamp profits in ISA returns. This novel investment mechanism allows to align incentives for all participants of the educational market and advance the development of global human capital."]}),"\n",(0,s.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsx)(n.p,{children:"We are planning to continuusly evolve the project adding new modules and make a first decentralized exchnage for IP assets."}),"\n",(0,s.jsx)(n.h4,{id:"ip-tokenization-ipt-module",children:"IP Tokenization (IPT) module"}),"\n",(0,s.jsx)(n.p,{children:"IPT module enables securitization and tokenization of IP assets. It introduces advanced mechanics for the management of IP ownership, such as the distribution of shares of IP, co-ownership, and royalties distribution via smart-contracts."}),"\n",(0,s.jsx)("img",{src:"https://user-images.githubusercontent.com/13851716/100002424-966de300-2dd5-11eb-9b84-f7b1e0a51b4f.png",width:"480px"}),"\n",(0,s.jsx)(n.h4,{id:"ip-financing-ipf-module",children:"IP Financing (IPF) module"}),"\n",(0,s.jsx)(n.p,{children:"IPF module provides various models of funding and financing for projects that produce IP assets. Funding models include (but not limited to): crowd investing, private investing, grants, open innovation (OI) challenges."}),"\n",(0,s.jsx)("img",{src:"https://user-images.githubusercontent.com/13851716/100002434-98d03d00-2dd5-11eb-8c1b-33b5403f81c3.png",width:"480px"}),"\n",(0,s.jsx)(n.h4,{id:"ip-licensing-ipl-module",children:"IP Licensing (IPL) module"}),"\n",(0,s.jsx)(n.p,{children:"IPL module enables the licensing of IP assets. Allows tracking of all licensing transactions and provides evidence of licensing.\nVarious licensing agreements, instant licensing, proof of licensing, licensing transactions overview."}),"\n",(0,s.jsx)("img",{src:"https://user-images.githubusercontent.com/13851716/100002436-9968d380-2dd5-11eb-8c68-74644984dfef.png",width:"480px"}),"\n",(0,s.jsx)(n.h4,{id:"ip-exchange-ipe-module",children:"IP Exchange (IPE) module"}),"\n",(0,s.jsx)(n.p,{children:"IPE module enables the exchange of IP assets. Any IP asset can be exchanged for any other IP asset on the platform, as well as it can be exchanged for various crypto assets (e.g. DOT, ETH, or BTC)."}),"\n",(0,s.jsx)("img",{src:"https://user-images.githubusercontent.com/13851716/100002431-9837a680-2dd5-11eb-9046-4800f8031f59.png",width:"480px"}),"\n",(0,s.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"What work has been done so far?"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"We already have a working prototype and pilots."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Are there are any teams who have already contributed (financially) to the project?"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"No"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Have you applied for other grants so far?"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"We have not applied for any other grants with this exact project. But we have applied for multiple grants related to the application of our Decentralized Assessment System (a system we designed for crowdsourcing of domain expertise to assess various IP assets). We are currently implementing pilots as part of Blockchers program, as well as part of EOSC Digital Innovation Hub."})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>r});var t=i(96540);const s={},a=t.createContext(s);function o(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0d247f98.1b76899a.js b/assets/js/0d247f98.1b76899a.js new file mode 100644 index 00000000000..6cddebd3dbc --- /dev/null +++ b/assets/js/0d247f98.1b76899a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[57153],{416:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>l,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"applications/Primis","title":"Primis","description":"- Team Name: Primis","source":"@site/applications/Primis.md","sourceDirName":"applications","slug":"/applications/Primis","permalink":"/applications/Primis","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/Primis.md","tags":[],"version":"current","frontMatter":{}}');var n=t(74848),r=t(28453);const l={},a="Primis",o={},d=[{value:"Project Overview",id:"project-overview",level:2},{value:"Overview",id:"overview",level:3},{value:"Primis Web3 Desktop for Polkadot",id:"primis-web3-desktop-for-polkadot",level:3},{value:"Tech Stack",id:"tech-stack",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team",id:"team",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles (if available)",id:"team-linkedin-profiles-if-available",level:3},{value:"Development Status",id:"development-status",level:2},{value:"Development Roadmap",id:"development-roadmap",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 - Polkadot ECO Wallet",id:"milestone-1---polkadot-eco-wallet",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information",id:"additional-information",level:2}];function c(e){const i={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.header,{children:(0,n.jsx)(i.h1,{id:"primis",children:"Primis"})}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Team Name:"})," Primis"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Payment Address:"})," 0x0Ad212E301AD590f4E70dA0c0Aa2912273cB4098 (USDC)"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsxs)(i.strong,{children:[(0,n.jsx)(i.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 1"]}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"project-overview",children:"Project Overview"}),"\n",(0,n.jsx)(i.h3,{id:"overview",children:"Overview"}),"\n",(0,n.jsx)(i.p,{children:"Primis Desktop provides a one-stop Web3 integrated client for the Polkadot ecosystem."}),"\n",(0,n.jsx)(i.h3,{id:"primis-web3-desktop-for-polkadot",children:"Primis Web3 Desktop for Polkadot"}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.strong,{children:"Primis Wallet"})}),"\n",(0,n.jsx)(i.p,{children:"Primis Desktop Wallet is the best tool to manage multi-chain assets on the Polkadot ecosystem, such as Polkadot, Kusama, and other parachains. Asset management mainly includes digital/NFT assets checking, sending, receiving, and trading records on the Polkadot ecosystem."}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.strong,{children:"P2P Chat"})}),"\n",(0,n.jsx)(i.p,{children:"Primis Desktop provides encrypted chat groups for Polkadot ecosystem users to discuss decentralized Gov2 governance and Proposal freely. ZK-Proof technology will be combined into Primis chat groups to offer more privacy and decentralized DAO governance space."}),"\n",(0,n.jsx)(i.p,{children:"Primis Desktop could automatically create encrypted chat groups for Polkadot ecosystem DApps, each DApp has its own independent chat group."}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"Channels For Chat"}),"\n"]}),"\n",(0,n.jsx)("img",{width:"1364",alt:"image",src:"https://user-images.githubusercontent.com/108513186/184348893-45e19826-b056-466e-9fe2-802d12e6f1aa.png"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"P2P Chat"}),"\n"]}),"\n",(0,n.jsx)("img",{width:"1371",alt:"image",src:"https://user-images.githubusercontent.com/108513186/184348981-7ef266b8-d48a-4dc5-9412-868a0485b831.png"}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.strong,{children:"Subscribe"})}),"\n",(0,n.jsx)(i.p,{children:"Primis Desktop also is a place for users to subscribe to Polkadot decentralized notifications like EPNS. Initially, Primis Desktop will provide asset change notifications for Polkadot, Kusama, and other parachains. More on-chain DApps notifications to exploit in the future."}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.strong,{children:"Primis Web3 PNS Browser"})}),"\n",(0,n.jsx)(i.p,{children:"Primis Desktop will gestate a Chrome-compatible PNS browser for the Polkadot ecosystem, allowing Polkadot ecosystem users to access Web2 pages and interact with Web3 DApps freely. Primis Web3 PNS Browser supports Polkadot ecosystem PNS domains\u2019 resolution and visit."}),"\n",(0,n.jsx)(i.p,{children:"Unlike traditional browsers such as Chrome, Brave, and Web2 centralized Cloud Service, Primis Web3 PNS Browser is based on a data relay network, where access and application data are transmitted to clients or Primis terminals through a relay network of Primis nodes."}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.strong,{children:"DApp Self-Hosting Platform"})}),"\n",(0,n.jsx)(i.p,{children:"Primis Desktop provides the plug-in function. All DApps on the Polkadot ecosystem can integrate and deploy on the Primis relay node network and upgrade and confirm through the reliable connection contract in a smart contract to ensure applications\u2019 security."}),"\n",(0,n.jsx)(i.hr,{}),"\n",(0,n.jsx)(i.p,{children:"Due to being the first Web3 desktop, Primis will interact with Polkadot's Web3 Ecosystem and bring the brand-new desktop concept to web3 users of Polkadot."}),"\n",(0,n.jsx)(i.p,{children:"All of our teammates truly believed in the Web3 Revolution! That's why we want to boot this Web3 project."}),"\n",(0,n.jsx)(i.h3,{id:"tech-stack",children:"Tech Stack"}),"\n",(0,n.jsx)(i.p,{children:"Supported Chains: Polkadot, Kusama, and other Parachains such as Acala, Astar, and Moonbeam."}),"\n",(0,n.jsx)(i.p,{children:"Client language: Electron, React"}),"\n",(0,n.jsx)(i.p,{children:"Server language: Nodejs"}),"\n",(0,n.jsx)(i.p,{children:"P2P language: Golang"}),"\n",(0,n.jsx)(i.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,n.jsx)(i.p,{children:"Primis is the first blockchain project known as the web3 desktop. And we want to attract more other ecosystems' web3 users to Polkadot ECO. Since primis is based on the concept of Web3, it has strong relationships with the most famous web3 organization W3F, and must be born here."}),"\n",(0,n.jsx)(i.h2,{id:"team",children:"Team"}),"\n",(0,n.jsx)(i.h3,{id:"team-members",children:"Team members"}),"\n",(0,n.jsx)(i.p,{children:"Primis team has rich experience in the fields of the public chain, infrastructure, and defi. Team members' info will be released after reviewing."}),"\n",(0,n.jsx)(i.h3,{id:"contact",children:"Contact"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Contact Name:"})," Andy"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Contact Email:"})," Contact email (",(0,n.jsx)(i.a,{href:"mailto:contact@primis.cc",children:"contact@primis.cc"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Website:"})," primis.cc"]}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Registered Address:"})," This info will be released after reviewing"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Registered Legal Entity:"})," Also, this info will be released after reviewing."]}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,n.jsxs)(i.p,{children:["Primis team has developed some blockchain projects, like ",(0,n.jsx)(i.a,{href:"metauce.org",children:"Metauce"})]}),"\n",(0,n.jsx)(i.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.a,{href:"https://github.com/Primis-Labs/client",children:"Github"})}),"\n",(0,n.jsx)(i.h3,{id:"team-linkedin-profiles-if-available",children:"Team LinkedIn Profiles (if available)"}),"\n",(0,n.jsx)(i.p,{children:"This info will be released after reviewing"}),"\n",(0,n.jsx)(i.h2,{id:"development-status",children:"Development Status"}),"\n",(0,n.jsx)(i.p,{children:"Primis Team already completed the designing work of Primis Desktop and started working on Milestone 1 Tech Tasks."}),"\n",(0,n.jsx)(i.h2,{id:"development-roadmap",children:"Development Roadmap"}),"\n",(0,n.jsx)(i.h3,{id:"overview-1",children:"Overview"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Total Estimated Duration:"})," 6 weeks"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Full-Time Equivalent (FTE):"})," 3 FTE"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Total Costs:"})," 10,000 USD"]}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"milestone-1---polkadot-eco-wallet",children:"Milestone 1 - Polkadot ECO Wallet"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Estimated duration:"})," 6 weeks"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"FTE:"})," 3"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Costs:"})," 10 ,000 USD"]}),"\n"]}),"\n",(0,n.jsxs)(i.table,{children:[(0,n.jsx)(i.thead,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.th,{style:{textAlign:"right"},children:"Number"}),(0,n.jsx)(i.th,{children:"Deliverable"}),(0,n.jsx)(i.th,{children:"Specification"})]})}),(0,n.jsxs)(i.tbody,{children:[(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{style:{textAlign:"right"},children:"0a."}),(0,n.jsx)(i.td,{children:"License"}),(0,n.jsx)(i.td,{children:"MIT"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{style:{textAlign:"right"},children:"0b."}),(0,n.jsx)(i.td,{children:"Documentation"}),(0,n.jsxs)(i.td,{children:["We would provide an ",(0,n.jsx)(i.strong,{children:"inline document"})," of code and tutorial docs that explain how users can install it."]})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{style:{textAlign:"right"},children:"0c."}),(0,n.jsx)(i.td,{children:"Testing Guide"}),(0,n.jsx)(i.td,{children:"Unit tests will cover all core functions to ensure functionality and viability.\xa0We will describe how to run the tests in the tutorial."})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{style:{textAlign:"right"},children:"0d."}),(0,n.jsx)(i.td,{children:"Docker"}),(0,n.jsx)(i.td,{children:"Wallet application does not require Docker, and we would provide a client for users to install under Windows/MacOS system."})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{style:{textAlign:"right"},children:"1."}),(0,n.jsx)(i.td,{children:"Build app structure"}),(0,n.jsx)(i.td,{children:"We will have the core structure of the application in place."})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{style:{textAlign:"right"},children:"2."}),(0,n.jsx)(i.td,{children:"Implement wallet view"}),(0,n.jsx)(i.td,{children:"Create, import, view, and transfer functions will be provided by the integrated Polkadot wallet."})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{style:{textAlign:"right"},children:"3."}),(0,n.jsx)(i.td,{children:"Build Polkadot ECO wallet"}),(0,n.jsx)(i.td,{children:"Checking, sending, receiveing assets of Kusama, Moonbeam, and Acala will be provided for Primis users."})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{style:{textAlign:"right"},children:"4."}),(0,n.jsx)(i.td,{children:"NFT assets management"}),(0,n.jsx)(i.td,{children:"NFT assets can be viewed, sent, and received under Primis."})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{style:{textAlign:"right"},children:"5."}),(0,n.jsx)(i.td,{children:"Setup Primis NFT avatar"}),(0,n.jsx)(i.td,{children:"Users can set NFTs as their wallet avatars."})]})]})]}),"\n",(0,n.jsx)(i.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,n.jsx)(i.p,{children:"Short-term: After finishing all milestones, the users' amount of Primis web3 desktop will be over 50K."}),"\n",(0,n.jsx)(i.p,{children:"Long-term: The most influenced Web3 desktop"}),"\n",(0,n.jsx)(i.h2,{id:"additional-information",children:"Additional Information"}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"How did you hear about the Grants Program?"})," Web3 Foundation Website"]})]})}function h(e={}){const{wrapper:i}={...(0,r.R)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},28453:(e,i,t)=>{t.d(i,{R:()=>l,x:()=>a});var s=t(96540);const n={},r=s.createContext(n);function l(e){const i=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:l(e.components),s.createElement(r.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0d247f98.e6842365.js b/assets/js/0d247f98.e6842365.js deleted file mode 100644 index e7afe19f75c..00000000000 --- a/assets/js/0d247f98.e6842365.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[57153],{43996:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>l,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"applications/Primis","title":"Primis","description":"- Team Name: Primis","source":"@site/applications/Primis.md","sourceDirName":"applications","slug":"/applications/Primis","permalink":"/applications/Primis","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/Primis.md","tags":[],"version":"current","frontMatter":{}}');var n=t(74848),r=t(28453);const l={},a="Primis",o={},d=[{value:"Project Overview",id:"project-overview",level:2},{value:"Overview",id:"overview",level:3},{value:"Primis Web3 Desktop for Polkadot",id:"primis-web3-desktop-for-polkadot",level:3},{value:"Tech Stack",id:"tech-stack",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team",id:"team",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles (if available)",id:"team-linkedin-profiles-if-available",level:3},{value:"Development Status",id:"development-status",level:2},{value:"Development Roadmap",id:"development-roadmap",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 - Polkadot ECO Wallet",id:"milestone-1---polkadot-eco-wallet",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information",id:"additional-information",level:2}];function c(e){const i={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.header,{children:(0,n.jsx)(i.h1,{id:"primis",children:"Primis"})}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Team Name:"})," Primis"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Payment Address:"})," 0x0Ad212E301AD590f4E70dA0c0Aa2912273cB4098 (USDC)"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsxs)(i.strong,{children:[(0,n.jsx)(i.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 1"]}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"project-overview",children:"Project Overview"}),"\n",(0,n.jsx)(i.h3,{id:"overview",children:"Overview"}),"\n",(0,n.jsx)(i.p,{children:"Primis Desktop provides a one-stop Web3 integrated client for the Polkadot ecosystem."}),"\n",(0,n.jsx)(i.h3,{id:"primis-web3-desktop-for-polkadot",children:"Primis Web3 Desktop for Polkadot"}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.strong,{children:"Primis Wallet"})}),"\n",(0,n.jsx)(i.p,{children:"Primis Desktop Wallet is the best tool to manage multi-chain assets on the Polkadot ecosystem, such as Polkadot, Kusama, and other parachains. Asset management mainly includes digital/NFT assets checking, sending, receiving, and trading records on the Polkadot ecosystem."}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.strong,{children:"P2P Chat"})}),"\n",(0,n.jsx)(i.p,{children:"Primis Desktop provides encrypted chat groups for Polkadot ecosystem users to discuss decentralized Gov2 governance and Proposal freely. ZK-Proof technology will be combined into Primis chat groups to offer more privacy and decentralized DAO governance space."}),"\n",(0,n.jsx)(i.p,{children:"Primis Desktop could automatically create encrypted chat groups for Polkadot ecosystem DApps, each DApp has its own independent chat group."}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"Channels For Chat"}),"\n"]}),"\n",(0,n.jsx)("img",{width:"1364",alt:"image",src:"https://user-images.githubusercontent.com/108513186/184348893-45e19826-b056-466e-9fe2-802d12e6f1aa.png"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"P2P Chat"}),"\n"]}),"\n",(0,n.jsx)("img",{width:"1371",alt:"image",src:"https://user-images.githubusercontent.com/108513186/184348981-7ef266b8-d48a-4dc5-9412-868a0485b831.png"}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.strong,{children:"Subscribe"})}),"\n",(0,n.jsx)(i.p,{children:"Primis Desktop also is a place for users to subscribe to Polkadot decentralized notifications like EPNS. Initially, Primis Desktop will provide asset change notifications for Polkadot, Kusama, and other parachains. More on-chain DApps notifications to exploit in the future."}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.strong,{children:"Primis Web3 PNS Browser"})}),"\n",(0,n.jsx)(i.p,{children:"Primis Desktop will gestate a Chrome-compatible PNS browser for the Polkadot ecosystem, allowing Polkadot ecosystem users to access Web2 pages and interact with Web3 DApps freely. Primis Web3 PNS Browser supports Polkadot ecosystem PNS domains\u2019 resolution and visit."}),"\n",(0,n.jsx)(i.p,{children:"Unlike traditional browsers such as Chrome, Brave, and Web2 centralized Cloud Service, Primis Web3 PNS Browser is based on a data relay network, where access and application data are transmitted to clients or Primis terminals through a relay network of Primis nodes."}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.strong,{children:"DApp Self-Hosting Platform"})}),"\n",(0,n.jsx)(i.p,{children:"Primis Desktop provides the plug-in function. All DApps on the Polkadot ecosystem can integrate and deploy on the Primis relay node network and upgrade and confirm through the reliable connection contract in a smart contract to ensure applications\u2019 security."}),"\n",(0,n.jsx)(i.hr,{}),"\n",(0,n.jsx)(i.p,{children:"Due to being the first Web3 desktop, Primis will interact with Polkadot's Web3 Ecosystem and bring the brand-new desktop concept to web3 users of Polkadot."}),"\n",(0,n.jsx)(i.p,{children:"All of our teammates truly believed in the Web3 Revolution! That's why we want to boot this Web3 project."}),"\n",(0,n.jsx)(i.h3,{id:"tech-stack",children:"Tech Stack"}),"\n",(0,n.jsx)(i.p,{children:"Supported Chains: Polkadot, Kusama, and other Parachains such as Acala, Astar, and Moonbeam."}),"\n",(0,n.jsx)(i.p,{children:"Client language: Electron, React"}),"\n",(0,n.jsx)(i.p,{children:"Server language: Nodejs"}),"\n",(0,n.jsx)(i.p,{children:"P2P language: Golang"}),"\n",(0,n.jsx)(i.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,n.jsx)(i.p,{children:"Primis is the first blockchain project known as the web3 desktop. And we want to attract more other ecosystems' web3 users to Polkadot ECO. Since primis is based on the concept of Web3, it has strong relationships with the most famous web3 organization W3F, and must be born here."}),"\n",(0,n.jsx)(i.h2,{id:"team",children:"Team"}),"\n",(0,n.jsx)(i.h3,{id:"team-members",children:"Team members"}),"\n",(0,n.jsx)(i.p,{children:"Primis team has rich experience in the fields of the public chain, infrastructure, and defi. Team members' info will be released after reviewing."}),"\n",(0,n.jsx)(i.h3,{id:"contact",children:"Contact"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Contact Name:"})," Andy"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Contact Email:"})," Contact email (",(0,n.jsx)(i.a,{href:"mailto:contact@primis.cc",children:"contact@primis.cc"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Website:"})," primis.cc"]}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Registered Address:"})," This info will be released after reviewing"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Registered Legal Entity:"})," Also, this info will be released after reviewing."]}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,n.jsxs)(i.p,{children:["Primis team has developed some blockchain projects, like ",(0,n.jsx)(i.a,{href:"metauce.org",children:"Metauce"})]}),"\n",(0,n.jsx)(i.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.a,{href:"https://github.com/Primis-Labs/client",children:"Github"})}),"\n",(0,n.jsx)(i.h3,{id:"team-linkedin-profiles-if-available",children:"Team LinkedIn Profiles (if available)"}),"\n",(0,n.jsx)(i.p,{children:"This info will be released after reviewing"}),"\n",(0,n.jsx)(i.h2,{id:"development-status",children:"Development Status"}),"\n",(0,n.jsx)(i.p,{children:"Primis Team already completed the designing work of Primis Desktop and started working on Milestone 1 Tech Tasks."}),"\n",(0,n.jsx)(i.h2,{id:"development-roadmap",children:"Development Roadmap"}),"\n",(0,n.jsx)(i.h3,{id:"overview-1",children:"Overview"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Total Estimated Duration:"})," 6 weeks"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Full-Time Equivalent (FTE):"})," 3 FTE"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Total Costs:"})," 10,000 USD"]}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"milestone-1---polkadot-eco-wallet",children:"Milestone 1 - Polkadot ECO Wallet"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Estimated duration:"})," 6 weeks"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"FTE:"})," 3"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Costs:"})," 10 ,000 USD"]}),"\n"]}),"\n",(0,n.jsxs)(i.table,{children:[(0,n.jsx)(i.thead,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.th,{style:{textAlign:"right"},children:"Number"}),(0,n.jsx)(i.th,{children:"Deliverable"}),(0,n.jsx)(i.th,{children:"Specification"})]})}),(0,n.jsxs)(i.tbody,{children:[(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{style:{textAlign:"right"},children:"0a."}),(0,n.jsx)(i.td,{children:"License"}),(0,n.jsx)(i.td,{children:"MIT"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{style:{textAlign:"right"},children:"0b."}),(0,n.jsx)(i.td,{children:"Documentation"}),(0,n.jsxs)(i.td,{children:["We would provide an ",(0,n.jsx)(i.strong,{children:"inline document"})," of code and tutorial docs that explain how users can install it."]})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{style:{textAlign:"right"},children:"0c."}),(0,n.jsx)(i.td,{children:"Testing Guide"}),(0,n.jsx)(i.td,{children:"Unit tests will cover all core functions to ensure functionality and viability.\xa0We will describe how to run the tests in the tutorial."})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{style:{textAlign:"right"},children:"0d."}),(0,n.jsx)(i.td,{children:"Docker"}),(0,n.jsx)(i.td,{children:"Wallet application does not require Docker, and we would provide a client for users to install under Windows/MacOS system."})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{style:{textAlign:"right"},children:"1."}),(0,n.jsx)(i.td,{children:"Build app structure"}),(0,n.jsx)(i.td,{children:"We will have the core structure of the application in place."})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{style:{textAlign:"right"},children:"2."}),(0,n.jsx)(i.td,{children:"Implement wallet view"}),(0,n.jsx)(i.td,{children:"Create, import, view, and transfer functions will be provided by the integrated Polkadot wallet."})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{style:{textAlign:"right"},children:"3."}),(0,n.jsx)(i.td,{children:"Build Polkadot ECO wallet"}),(0,n.jsx)(i.td,{children:"Checking, sending, receiveing assets of Kusama, Moonbeam, and Acala will be provided for Primis users."})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{style:{textAlign:"right"},children:"4."}),(0,n.jsx)(i.td,{children:"NFT assets management"}),(0,n.jsx)(i.td,{children:"NFT assets can be viewed, sent, and received under Primis."})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{style:{textAlign:"right"},children:"5."}),(0,n.jsx)(i.td,{children:"Setup Primis NFT avatar"}),(0,n.jsx)(i.td,{children:"Users can set NFTs as their wallet avatars."})]})]})]}),"\n",(0,n.jsx)(i.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,n.jsx)(i.p,{children:"Short-term: After finishing all milestones, the users' amount of Primis web3 desktop will be over 50K."}),"\n",(0,n.jsx)(i.p,{children:"Long-term: The most influenced Web3 desktop"}),"\n",(0,n.jsx)(i.h2,{id:"additional-information",children:"Additional Information"}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"How did you hear about the Grants Program?"})," Web3 Foundation Website"]})]})}function h(e={}){const{wrapper:i}={...(0,r.R)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},28453:(e,i,t)=>{t.d(i,{R:()=>l,x:()=>a});var s=t(96540);const n={},r=s.createContext(n);function l(e){const i=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:l(e.components),s.createElement(r.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0d2ec03f.034dbe1e.js b/assets/js/0d2ec03f.034dbe1e.js new file mode 100644 index 00000000000..57762440f6e --- /dev/null +++ b/assets/js/0d2ec03f.034dbe1e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[73378],{30045:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"applications/deeper_network","title":"Deeper Chain","description":"- Proposer: deeper.network","source":"@site/applications/deeper_network.md","sourceDirName":"applications","slug":"/applications/deeper_network","permalink":"/applications/deeper_network","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/deeper_network.md","tags":[],"version":"current","frontMatter":{}}');var r=t(74848),a=t(28453);const s={},o="Deeper Chain",d={},l=[{value:"Note to the grant approvers",id:"note-to-the-grant-approvers",level:2},{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Delegated Proof of Credit",id:"delegated-proof-of-credit",level:4},{value:"Micropayment and credit update",id:"micropayment-and-credit-update",level:4},{value:"Network topology of light nodes",id:"network-topology-of-light-nodes",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Team Website",id:"team-website",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's Experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"M1: Micropayments \u2013 4 weeks",id:"m1-micropayments--4-weeks",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2},{value:"What work has been done so far?",id:"what-work-has-been-done-so-far",level:3},{value:"Have you applied for other grants so far?",id:"have-you-applied-for-other-grants-so-far",level:3}];function c(e){const n={a:"a",br:"br",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"deeper-chain",children:"Deeper Chain"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Proposer:"})," ",(0,r.jsx)(n.a,{href:"https://deeper.network",children:"deeper.network"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Payment Address:"})," 1ZgK8ic8gmVSS3jJUwLJiWHaK5rhZVppF"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"note-to-the-grant-approvers",children:(0,r.jsx)(n.em,{children:"Note to the grant approvers"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.em,{children:"We have delayed the milestone completion for the following 2 reasons:"})}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.em,{children:"The original application submitter left the team in May 2021 and the grant application was not handed over to any other team members and hence overlooked."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.em,{children:"Deeper Network has been busy recently preparing the mainnet launch at the end of this month (Aug 2021)"})}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.em,{children:"We request that the starting date for the milestone will be the approval of this amendment. Much appreciated!"})}),"\n",(0,r.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,r.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,r.jsx)(n.p,{children:"Deeper's vision is to combine network security, network sharing, and blockchain technology to create a safer, freer, and faster decentralized network. Our flagship product is called Deeper Connect. Its security protection, privacy protection, and network acceleration functions can significantly improve users\u2019 Internet access experience. Deeper Network, a decentralized p2p network, is composed of thousands to millions of Deeper Connect devices. We are developing the following decentralized network services on Deeper Network:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["DPN (Decentralized Private Network)",(0,r.jsx)("br",{}),"\nDPN is a decentralized P2P bandwidth sharing private network. By leveraging the power of interconnected user devices, each user can access the Internet privately and safely. There is no need to worry about being eavesdropped and censored by the ISP."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Decentralized DNS",(0,r.jsx)("br",{}),"\nDNS is the infrastructure for resolving IP addresses and querying the Internet. The centralized DNS layout makes the Internet extremely fragile, and site IPs may be blocked by centralized organizations at any time. Decentralized DNS services make the Internet more democratic and cannot be monopolized by institutions."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Decentralized web",(0,r.jsx)("br",{}),"\nAnyone can build their own website and register it in the Deeper Network. In Deeper Network, the IP address of the web server is hidden, which comes with the benefit of anti-censorship and anti-DDoS attacks."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Decentralized gateway",(0,r.jsx)("br",{}),"\nDeeper Connect is a decentralized gateway to web3.0. True decentralization means that no single organization can dominate over the entire network. It also means that a single point of failure will affect the functioning of the entire network. Decentralized gateways, decentralized public chains, and decentralized applications. For example, Ethereum Network remains centralized at the gateway level and is overly dependent on the API interface services provided by Infura for major dApps. Infura itself relies on AWS cloud services provided by Amazon. This means that the Ethereum ecosystem cannot be uncoupled from centralized network structures and is not truly decentralized. This naturally lends itself to the pitfalls of centralized network structures. This is evident as the recent Infura downtime has led to the paralysis of most Ethereum dApps. Deeper, on the other hand, has achieved true decentralization on all levels: decentralized gateways, decentralized public chains, and decentralized applications."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,r.jsx)(n.h4,{id:"delegated-proof-of-credit",children:"Delegated Proof of Credit"}),"\n",(0,r.jsx)(n.p,{children:"The deeper network consists of two layers. The top layer will contain hundreds of validators that generate new blocks constantly. The deeper layer will consist of millions of deeper network devices. Proof of credit allows deeper network devices to mine new tokens by sharing their bandwidth. Each device will be associated with an account, i.e., public address. The more bandwidth a device shares, the more credit will be earned by the account. Each device will delegate its credit to a validator. The consensus of the deeper chain will be the GRANDPA/BABE hybrid consensus built in the Substrate node. The validator election algorithm is initially based on both popularity of the validator and a white list, and the white list will be removed in future so that any party can run validator nodes once the network run smoothly for a certain period and is proved to be stable and secure. The popularity of a validator is simply calculated as the number of deeper network devices that delegate its credit to the validator. We call this election algorithm as Delegated Proof of Credit (DPoC). Each era (or each day according to the time setting) the devices will be rewarded DPR tokens proportional to their credits. As in any credit systems of modern society, each account\u2019s credit accumulation in a short period is capped by some maximum value Cmax."}),"\n",(0,r.jsx)(n.h4,{id:"micropayment-and-credit-update",children:"Micropayment and credit update"}),"\n",(0,r.jsx)(n.p,{children:"There are two roles of deeper network devices \u2013 a server device is a device that shares data/bandwidth with others; a client device is a device that is consuming the data/bandwidth served. For each MB of data that the server provides to the client, the client will pay the server a certain amount of DPR tokens. This is called micropayments. If the client does not make the micropayment, the server can stop providing bandwidth anytime. We allow the server to choose the micropayment period, i.e., the server can stop the service after serving a threshold amount of data without receiving any micropayments. The micropayments happen in the deeper layer which is off-chain. Whenever a device claims micropayment, its credit is updated according to the rules on the chain."}),"\n",(0,r.jsx)(n.h4,{id:"network-topology-of-light-nodes",children:"Network topology of light nodes"}),"\n",(0,r.jsxs)(n.p,{children:["The topology of the deeper layer is a big graph that contains potentially millions of nodes (i.e., one node is one deeper device). During each epoch, we consider the graph is fixed. Between two epochs, the graph is randomly generated by some distributed random seed, e.g. modified from BABE random seed. We use the randomness generated at the end of each epoch to construct the deeper layer topology of next epoch. More specifically, given a node, we will randomly assign 8 to 16 neighbor nodes to it. Thus, the degree of a node in the graph is between 8 to 16. This can be done by a smart contract. The security of Proof of Credit depends on the distributed random seed. For the detail analysis of DPoC security, please refer to our ",(0,r.jsx)(n.a,{href:"https://deeper.network/assets/pdf/whitepaper/Deeper-WP-EN-1009.pdf",children:"whitepaper"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,r.jsx)(n.p,{children:"The biggest problem with web3.0 is not technological innovation from 0 to 1, but rather market adoption from 1 to n. Namely, how to expand awareness and transition users from web2.0 applications to web3.0 applications."}),"\n",(0,r.jsx)(n.p,{children:"Deeper's goal is to provide a product similar to the iPhone, starting with users\u2019 real needs, focusing user experience, and improving the user's Internet access experience and gradually attracting them to the web3.0 ecosystem. A standout feature of our product is its intuitive plug and play usability. Users do not need any technical knowledge and blockchain background. A user only needs to plug the device between the modem and the router, and gain benefit from the network security and privacy protection that our product provides, as well as network acceleration and fair mining. The user experience of our products is top notch. We did a product pre-sale on Indiegogo this year. In two months, we achieved 650,000 U.S. dollars in sales, surpassing 99.9% of Indiegogo projects."}),"\n",(0,r.jsx)(n.p,{children:"The smartphone is a user's portal to the mobile Internet. It enabled an influx of massive user base into the mobile era of web2.0. Similarly, Deeper Connect is a home gateway product. Everyone in the house and all devices need to go online through this device. It can be regarded as a web3.0 portal. Deeper Connect can attract a large number of web2.0 users, and then let them seamlessly join the web3.0 revolution. The audience of most blockchain projects is limited to the blockchain community that accounts for an insignificant percentage of the total number of Internet users; the target audience of Deeper is all Internet users."}),"\n",(0,r.jsx)(n.p,{children:"From a technical perspective, our Deeper Chain is implemented using Substrate. Deeper Connect can not only connect to the Deeper Chain, but also connect to any other public chain in the Polkadot ecosystem. Through a simple development process, a user interface for other public chain dApps can be provided. Deeper Connect is also a dApp Store. In the future, we will also support the plug-in mode and provide third-party developers with plug-in development APIs. Third-party developers can developed and distribute dApps in the dApp Store. The developers of these application-type public chains have since eliminated the work of acquiring users from scratch and developing a public chain client from scratch. In addition, the management background of our device integrates the function of a hardware wallet. Users can directly use the DPR token or other tokens in their wallets in these third-party dApps. Deeper Connect also has the security function of an enterprise-level firewall, which also provides a strong security guarantee for users' digital assets in the process of storage and use."}),"\n",(0,r.jsx)(n.p,{children:"We are developing a hardware product with a cost of only US$5, and we are confident that this product can bring millions of users to Polkadot."}),"\n",(0,r.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,r.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Hui Liu"}),"\n",(0,r.jsx)(n.li,{children:"Zhiwu Liu"}),"\n",(0,r.jsx)(n.li,{children:"Zhuang Jin"}),"\n",(0,r.jsx)(n.li,{children:"Yang Liu"}),"\n",(0,r.jsx)(n.li,{children:"Fei Yang"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Contact Name:"})," Fei Yang"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Contact Email:"})," ",(0,r.jsx)(n.a,{href:"mailto:fei.yang@deeper.network",children:"fei.yang@deeper.network"})]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"team-website",children:"Team Website"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://deepernetwork.io/",children:"https://deepernetwork.io/"}),"\n",(0,r.jsx)(n.a,{href:"https://deeper.network/",children:"https://deeper.network/"})]}),"\n",(0,r.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Registered Address:"})," 5200 Great America pkwy, Santa Clara CA USA 95054"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Registered Legal Entity:"})," Deeper Network Inc"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"teams-experience",children:"Team's Experience"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Hui Liu"}),(0,r.jsx)(n.br,{}),"\n","Hui worked at Intel, Fortinet, and Palo Alto Networks, where he held positions such as R&D Manager and Chief Engineer. He brings more than ten years of experience in network security and operating system development. He spearheaded the development of the cloud firewall engine which still brings billions of dollars in annual revenue for the company."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Zhiwu Liu"}),(0,r.jsx)(n.br,{}),"\n","Zhiwu has a master\u2019s degree in Computer Science. He has been engaged in the software development of high security systems, from airborne embedded software development to blockchain software development."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Zhuang Jin"}),(0,r.jsx)(n.br,{}),"\n","Zhuang has a master\u2019s degree in Electrical Engineering. He has working experience in network security, distributed system, and embedded system development."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Yang Liu"}),(0,r.jsx)(n.br,{}),"\n","Yang worked at Bytedance, Alibaba, Windriver, and has working experience in cloud infrastructure, operating system and embedded system."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Fei Yang"}),(0,r.jsx)(n.br,{}),"\n","Fei has been active in blockchain space since early 2017. He has worked as software engineer in blockchain startups, crypto exchanges and other blockchain project grants. He has led teams organised on the Internet to win a couple of blockchain hackathons."]}),"\n",(0,r.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"https://github.com/e2chain-dev/deeper-chain",children:"deeper-chain"})}),"\n",(0,r.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,r.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Total Estimated Duration:"})," 1 month"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Full-time equivalent (FTE):"})," 5 FTE."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Total Costs:"})," 20,000 USD"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"In this application, the deliverables are the micropayment pallet, the client codes and tutorial document. The micropayment pallet contains all the necessary functions for a user to interact with the blockchain including open channel, close channel, claim micropayments etc. The client codes contains two parts: one is for a user to interact with blockchain, the other is for a user to interact with another user. The micropayment design, use cases as well as detailed examples will be given in the totorial document. In the next phases/applications, we will add Proof of Credit and light node discovery pallets as well as their corresponding client codes."}),"\n",(0,r.jsx)(n.h3,{id:"m1-micropayments--4-weeks",children:"M1: Micropayments \u2013 4 weeks"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Estimated Duration:"})," 4 weeks"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"FTE:"})," 5"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Costs:"})," 20,000 USD"]}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Number"}),(0,r.jsx)(n.th,{children:"Deliverable"}),(0,r.jsx)(n.th,{children:"Specification"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0a."}),(0,r.jsx)(n.td,{children:"License"}),(0,r.jsx)(n.td,{children:"Apache 2.0"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0b."}),(0,r.jsx)(n.td,{children:"Description"}),(0,r.jsx)(n.td,{children:"For our testnet, we use one-way micropayment protocol. There are 2 parties: Sender (Client) and Receiver (Server). There are 3 steps: Sender opens a channel; sender sends accumulated micropayments to receiver; Receiver closes a channel or the channel closed after expiration. When sending the accumulated micropayments, the sender will sign the following data: (receiver, address, nonce, sessionId, accumulateAmount). Each time a new (sender, receiver) channel is opened, nonce is increased by 1 to avoid replay attack. sessionId represents one unique session inside one channel. When a channel is open/active, it can contain multiple sessions. The receiver can only claim once for each unique (nonce,sessionId) pair."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0c."}),(0,r.jsx)(n.td,{children:"Testing Guide"}),(0,r.jsx)(n.td,{children:"The tests will verify the basic functionalities like opening channels, sending micropayments, claiming payments, and closing channels. 1. Opening channels: verify that sender has enough balance to reserve and the channels are unique; 2. Sending micropayments: verify that receiver info and payment amount is correct, the payment is indeed signed by sender, and sender has enough reserved balance. Verify that micropayments are received in each service period; 3. Claiming payments: Verify that balance transfer is submitted on chain; 4. Closing channels: only receiver can close the channel. Clear any outstanding micropayment balances and free reserved balance of sender."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0d."}),(0,r.jsx)(n.td,{children:"Language/Framework"}),(0,r.jsx)(n.td,{children:"Rust/Substrate"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0e."}),(0,r.jsx)(n.td,{children:"Tutorial"}),(0,r.jsx)(n.td,{children:"Add tutorial documentation including blockchain setup, client setup. Add code examples to demonstrate the interaction between clients to blockchain, as well as clients to clients."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"1."}),(0,r.jsx)(n.td,{children:"Channel open"}),(0,r.jsx)(n.td,{children:"sender who opens the channel should reserve enough funds for accumulated micropayments. Channel data structure contains sender, receiver, nonce (to avoid replay attack), expiration time."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"2."}),(0,r.jsx)(n.td,{children:"Channel close"}),(0,r.jsx)(n.td,{children:"channel will be closed after expiration time passed. Only the receiver can close the channel before the expiration time. The remaining amount which is not claimed by the receiver will be refunded to sender during close."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"3."}),(0,r.jsx)(n.td,{children:"Claim payments"}),(0,r.jsx)(n.td,{children:"During the lifetime of the channel, the receiver can claim accumulated micropayments. The sessionId becomes invalid after claim, and the sender should start using a different sessionId for a different micropayment session."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"4."}),(0,r.jsx)(n.td,{children:"Client to Blockchain"}),(0,r.jsx)(n.td,{children:"The client inside a deeper device (light node) can automatically interact with blockchain: open channel (client only), close channel (server only), claim payment (server only), add balance (client only), and close expired channels (client only)"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"5."}),(0,r.jsx)(n.td,{children:"Client to Client"}),(0,r.jsx)(n.td,{children:"The client inside a deeper device (light node) can automatically interact with each other: start services, send micropayments, stop services."})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Light node discovery. Each deeper device is acting as a light node in deeper layer. There are potential millions of light nodes in p2p network. We need pairing light nodes with unbiased randomness and design discovery mechanism in a decentralized way."}),"\n",(0,r.jsx)(n.li,{children:"Proof of Credit is a core component in deeper network. We already have built MVP functions for PoC. But there are more work to be done."}),"\n",(0,r.jsx)(n.li,{children:"Testnet: Build an end to end blockchain system that running deeper devices smoothly."}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,r.jsx)(n.h3,{id:"what-work-has-been-done-so-far",children:"What work has been done so far?"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["Code is open source at ",(0,r.jsx)(n.a,{href:"https://github.com/deeper-chain/deeper-chain",children:"https://github.com/deeper-chain/deeper-chain"})]}),"\n",(0,r.jsx)(n.li,{children:"MVP is developed for core features: micropayments(master branch), light node(master branch), delegated proof of credit(master branch)."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"have-you-applied-for-other-grants-so-far",children:"Have you applied for other grants so far?"}),"\n",(0,r.jsx)(n.p,{children:"We have applied for Substrate Builder's program and got accepted."})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>o});var i=t(96540);const r={},a=i.createContext(r);function s(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0d2ec03f.93316a91.js b/assets/js/0d2ec03f.93316a91.js deleted file mode 100644 index 217ecae5101..00000000000 --- a/assets/js/0d2ec03f.93316a91.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[73378],{82236:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"applications/deeper_network","title":"Deeper Chain","description":"- Proposer: deeper.network","source":"@site/applications/deeper_network.md","sourceDirName":"applications","slug":"/applications/deeper_network","permalink":"/applications/deeper_network","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/deeper_network.md","tags":[],"version":"current","frontMatter":{}}');var r=t(74848),a=t(28453);const s={},o="Deeper Chain",d={},l=[{value:"Note to the grant approvers",id:"note-to-the-grant-approvers",level:2},{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Delegated Proof of Credit",id:"delegated-proof-of-credit",level:4},{value:"Micropayment and credit update",id:"micropayment-and-credit-update",level:4},{value:"Network topology of light nodes",id:"network-topology-of-light-nodes",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Team Website",id:"team-website",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's Experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"M1: Micropayments \u2013 4 weeks",id:"m1-micropayments--4-weeks",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2},{value:"What work has been done so far?",id:"what-work-has-been-done-so-far",level:3},{value:"Have you applied for other grants so far?",id:"have-you-applied-for-other-grants-so-far",level:3}];function c(e){const n={a:"a",br:"br",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"deeper-chain",children:"Deeper Chain"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Proposer:"})," ",(0,r.jsx)(n.a,{href:"https://deeper.network",children:"deeper.network"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Payment Address:"})," 1ZgK8ic8gmVSS3jJUwLJiWHaK5rhZVppF"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"note-to-the-grant-approvers",children:(0,r.jsx)(n.em,{children:"Note to the grant approvers"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.em,{children:"We have delayed the milestone completion for the following 2 reasons:"})}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.em,{children:"The original application submitter left the team in May 2021 and the grant application was not handed over to any other team members and hence overlooked."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.em,{children:"Deeper Network has been busy recently preparing the mainnet launch at the end of this month (Aug 2021)"})}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.em,{children:"We request that the starting date for the milestone will be the approval of this amendment. Much appreciated!"})}),"\n",(0,r.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,r.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,r.jsx)(n.p,{children:"Deeper's vision is to combine network security, network sharing, and blockchain technology to create a safer, freer, and faster decentralized network. Our flagship product is called Deeper Connect. Its security protection, privacy protection, and network acceleration functions can significantly improve users\u2019 Internet access experience. Deeper Network, a decentralized p2p network, is composed of thousands to millions of Deeper Connect devices. We are developing the following decentralized network services on Deeper Network:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["DPN (Decentralized Private Network)",(0,r.jsx)("br",{}),"\nDPN is a decentralized P2P bandwidth sharing private network. By leveraging the power of interconnected user devices, each user can access the Internet privately and safely. There is no need to worry about being eavesdropped and censored by the ISP."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Decentralized DNS",(0,r.jsx)("br",{}),"\nDNS is the infrastructure for resolving IP addresses and querying the Internet. The centralized DNS layout makes the Internet extremely fragile, and site IPs may be blocked by centralized organizations at any time. Decentralized DNS services make the Internet more democratic and cannot be monopolized by institutions."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Decentralized web",(0,r.jsx)("br",{}),"\nAnyone can build their own website and register it in the Deeper Network. In Deeper Network, the IP address of the web server is hidden, which comes with the benefit of anti-censorship and anti-DDoS attacks."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Decentralized gateway",(0,r.jsx)("br",{}),"\nDeeper Connect is a decentralized gateway to web3.0. True decentralization means that no single organization can dominate over the entire network. It also means that a single point of failure will affect the functioning of the entire network. Decentralized gateways, decentralized public chains, and decentralized applications. For example, Ethereum Network remains centralized at the gateway level and is overly dependent on the API interface services provided by Infura for major dApps. Infura itself relies on AWS cloud services provided by Amazon. This means that the Ethereum ecosystem cannot be uncoupled from centralized network structures and is not truly decentralized. This naturally lends itself to the pitfalls of centralized network structures. This is evident as the recent Infura downtime has led to the paralysis of most Ethereum dApps. Deeper, on the other hand, has achieved true decentralization on all levels: decentralized gateways, decentralized public chains, and decentralized applications."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,r.jsx)(n.h4,{id:"delegated-proof-of-credit",children:"Delegated Proof of Credit"}),"\n",(0,r.jsx)(n.p,{children:"The deeper network consists of two layers. The top layer will contain hundreds of validators that generate new blocks constantly. The deeper layer will consist of millions of deeper network devices. Proof of credit allows deeper network devices to mine new tokens by sharing their bandwidth. Each device will be associated with an account, i.e., public address. The more bandwidth a device shares, the more credit will be earned by the account. Each device will delegate its credit to a validator. The consensus of the deeper chain will be the GRANDPA/BABE hybrid consensus built in the Substrate node. The validator election algorithm is initially based on both popularity of the validator and a white list, and the white list will be removed in future so that any party can run validator nodes once the network run smoothly for a certain period and is proved to be stable and secure. The popularity of a validator is simply calculated as the number of deeper network devices that delegate its credit to the validator. We call this election algorithm as Delegated Proof of Credit (DPoC). Each era (or each day according to the time setting) the devices will be rewarded DPR tokens proportional to their credits. As in any credit systems of modern society, each account\u2019s credit accumulation in a short period is capped by some maximum value Cmax."}),"\n",(0,r.jsx)(n.h4,{id:"micropayment-and-credit-update",children:"Micropayment and credit update"}),"\n",(0,r.jsx)(n.p,{children:"There are two roles of deeper network devices \u2013 a server device is a device that shares data/bandwidth with others; a client device is a device that is consuming the data/bandwidth served. For each MB of data that the server provides to the client, the client will pay the server a certain amount of DPR tokens. This is called micropayments. If the client does not make the micropayment, the server can stop providing bandwidth anytime. We allow the server to choose the micropayment period, i.e., the server can stop the service after serving a threshold amount of data without receiving any micropayments. The micropayments happen in the deeper layer which is off-chain. Whenever a device claims micropayment, its credit is updated according to the rules on the chain."}),"\n",(0,r.jsx)(n.h4,{id:"network-topology-of-light-nodes",children:"Network topology of light nodes"}),"\n",(0,r.jsxs)(n.p,{children:["The topology of the deeper layer is a big graph that contains potentially millions of nodes (i.e., one node is one deeper device). During each epoch, we consider the graph is fixed. Between two epochs, the graph is randomly generated by some distributed random seed, e.g. modified from BABE random seed. We use the randomness generated at the end of each epoch to construct the deeper layer topology of next epoch. More specifically, given a node, we will randomly assign 8 to 16 neighbor nodes to it. Thus, the degree of a node in the graph is between 8 to 16. This can be done by a smart contract. The security of Proof of Credit depends on the distributed random seed. For the detail analysis of DPoC security, please refer to our ",(0,r.jsx)(n.a,{href:"https://deeper.network/assets/pdf/whitepaper/Deeper-WP-EN-1009.pdf",children:"whitepaper"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,r.jsx)(n.p,{children:"The biggest problem with web3.0 is not technological innovation from 0 to 1, but rather market adoption from 1 to n. Namely, how to expand awareness and transition users from web2.0 applications to web3.0 applications."}),"\n",(0,r.jsx)(n.p,{children:"Deeper's goal is to provide a product similar to the iPhone, starting with users\u2019 real needs, focusing user experience, and improving the user's Internet access experience and gradually attracting them to the web3.0 ecosystem. A standout feature of our product is its intuitive plug and play usability. Users do not need any technical knowledge and blockchain background. A user only needs to plug the device between the modem and the router, and gain benefit from the network security and privacy protection that our product provides, as well as network acceleration and fair mining. The user experience of our products is top notch. We did a product pre-sale on Indiegogo this year. In two months, we achieved 650,000 U.S. dollars in sales, surpassing 99.9% of Indiegogo projects."}),"\n",(0,r.jsx)(n.p,{children:"The smartphone is a user's portal to the mobile Internet. It enabled an influx of massive user base into the mobile era of web2.0. Similarly, Deeper Connect is a home gateway product. Everyone in the house and all devices need to go online through this device. It can be regarded as a web3.0 portal. Deeper Connect can attract a large number of web2.0 users, and then let them seamlessly join the web3.0 revolution. The audience of most blockchain projects is limited to the blockchain community that accounts for an insignificant percentage of the total number of Internet users; the target audience of Deeper is all Internet users."}),"\n",(0,r.jsx)(n.p,{children:"From a technical perspective, our Deeper Chain is implemented using Substrate. Deeper Connect can not only connect to the Deeper Chain, but also connect to any other public chain in the Polkadot ecosystem. Through a simple development process, a user interface for other public chain dApps can be provided. Deeper Connect is also a dApp Store. In the future, we will also support the plug-in mode and provide third-party developers with plug-in development APIs. Third-party developers can developed and distribute dApps in the dApp Store. The developers of these application-type public chains have since eliminated the work of acquiring users from scratch and developing a public chain client from scratch. In addition, the management background of our device integrates the function of a hardware wallet. Users can directly use the DPR token or other tokens in their wallets in these third-party dApps. Deeper Connect also has the security function of an enterprise-level firewall, which also provides a strong security guarantee for users' digital assets in the process of storage and use."}),"\n",(0,r.jsx)(n.p,{children:"We are developing a hardware product with a cost of only US$5, and we are confident that this product can bring millions of users to Polkadot."}),"\n",(0,r.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,r.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Hui Liu"}),"\n",(0,r.jsx)(n.li,{children:"Zhiwu Liu"}),"\n",(0,r.jsx)(n.li,{children:"Zhuang Jin"}),"\n",(0,r.jsx)(n.li,{children:"Yang Liu"}),"\n",(0,r.jsx)(n.li,{children:"Fei Yang"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Contact Name:"})," Fei Yang"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Contact Email:"})," ",(0,r.jsx)(n.a,{href:"mailto:fei.yang@deeper.network",children:"fei.yang@deeper.network"})]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"team-website",children:"Team Website"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://deepernetwork.io/",children:"https://deepernetwork.io/"}),"\n",(0,r.jsx)(n.a,{href:"https://deeper.network/",children:"https://deeper.network/"})]}),"\n",(0,r.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Registered Address:"})," 5200 Great America pkwy, Santa Clara CA USA 95054"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Registered Legal Entity:"})," Deeper Network Inc"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"teams-experience",children:"Team's Experience"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Hui Liu"}),(0,r.jsx)(n.br,{}),"\n","Hui worked at Intel, Fortinet, and Palo Alto Networks, where he held positions such as R&D Manager and Chief Engineer. He brings more than ten years of experience in network security and operating system development. He spearheaded the development of the cloud firewall engine which still brings billions of dollars in annual revenue for the company."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Zhiwu Liu"}),(0,r.jsx)(n.br,{}),"\n","Zhiwu has a master\u2019s degree in Computer Science. He has been engaged in the software development of high security systems, from airborne embedded software development to blockchain software development."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Zhuang Jin"}),(0,r.jsx)(n.br,{}),"\n","Zhuang has a master\u2019s degree in Electrical Engineering. He has working experience in network security, distributed system, and embedded system development."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Yang Liu"}),(0,r.jsx)(n.br,{}),"\n","Yang worked at Bytedance, Alibaba, Windriver, and has working experience in cloud infrastructure, operating system and embedded system."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Fei Yang"}),(0,r.jsx)(n.br,{}),"\n","Fei has been active in blockchain space since early 2017. He has worked as software engineer in blockchain startups, crypto exchanges and other blockchain project grants. He has led teams organised on the Internet to win a couple of blockchain hackathons."]}),"\n",(0,r.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"https://github.com/e2chain-dev/deeper-chain",children:"deeper-chain"})}),"\n",(0,r.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,r.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Total Estimated Duration:"})," 1 month"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Full-time equivalent (FTE):"})," 5 FTE."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Total Costs:"})," 20,000 USD"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"In this application, the deliverables are the micropayment pallet, the client codes and tutorial document. The micropayment pallet contains all the necessary functions for a user to interact with the blockchain including open channel, close channel, claim micropayments etc. The client codes contains two parts: one is for a user to interact with blockchain, the other is for a user to interact with another user. The micropayment design, use cases as well as detailed examples will be given in the totorial document. In the next phases/applications, we will add Proof of Credit and light node discovery pallets as well as their corresponding client codes."}),"\n",(0,r.jsx)(n.h3,{id:"m1-micropayments--4-weeks",children:"M1: Micropayments \u2013 4 weeks"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Estimated Duration:"})," 4 weeks"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"FTE:"})," 5"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Costs:"})," 20,000 USD"]}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Number"}),(0,r.jsx)(n.th,{children:"Deliverable"}),(0,r.jsx)(n.th,{children:"Specification"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0a."}),(0,r.jsx)(n.td,{children:"License"}),(0,r.jsx)(n.td,{children:"Apache 2.0"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0b."}),(0,r.jsx)(n.td,{children:"Description"}),(0,r.jsx)(n.td,{children:"For our testnet, we use one-way micropayment protocol. There are 2 parties: Sender (Client) and Receiver (Server). There are 3 steps: Sender opens a channel; sender sends accumulated micropayments to receiver; Receiver closes a channel or the channel closed after expiration. When sending the accumulated micropayments, the sender will sign the following data: (receiver, address, nonce, sessionId, accumulateAmount). Each time a new (sender, receiver) channel is opened, nonce is increased by 1 to avoid replay attack. sessionId represents one unique session inside one channel. When a channel is open/active, it can contain multiple sessions. The receiver can only claim once for each unique (nonce,sessionId) pair."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0c."}),(0,r.jsx)(n.td,{children:"Testing Guide"}),(0,r.jsx)(n.td,{children:"The tests will verify the basic functionalities like opening channels, sending micropayments, claiming payments, and closing channels. 1. Opening channels: verify that sender has enough balance to reserve and the channels are unique; 2. Sending micropayments: verify that receiver info and payment amount is correct, the payment is indeed signed by sender, and sender has enough reserved balance. Verify that micropayments are received in each service period; 3. Claiming payments: Verify that balance transfer is submitted on chain; 4. Closing channels: only receiver can close the channel. Clear any outstanding micropayment balances and free reserved balance of sender."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0d."}),(0,r.jsx)(n.td,{children:"Language/Framework"}),(0,r.jsx)(n.td,{children:"Rust/Substrate"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0e."}),(0,r.jsx)(n.td,{children:"Tutorial"}),(0,r.jsx)(n.td,{children:"Add tutorial documentation including blockchain setup, client setup. Add code examples to demonstrate the interaction between clients to blockchain, as well as clients to clients."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"1."}),(0,r.jsx)(n.td,{children:"Channel open"}),(0,r.jsx)(n.td,{children:"sender who opens the channel should reserve enough funds for accumulated micropayments. Channel data structure contains sender, receiver, nonce (to avoid replay attack), expiration time."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"2."}),(0,r.jsx)(n.td,{children:"Channel close"}),(0,r.jsx)(n.td,{children:"channel will be closed after expiration time passed. Only the receiver can close the channel before the expiration time. The remaining amount which is not claimed by the receiver will be refunded to sender during close."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"3."}),(0,r.jsx)(n.td,{children:"Claim payments"}),(0,r.jsx)(n.td,{children:"During the lifetime of the channel, the receiver can claim accumulated micropayments. The sessionId becomes invalid after claim, and the sender should start using a different sessionId for a different micropayment session."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"4."}),(0,r.jsx)(n.td,{children:"Client to Blockchain"}),(0,r.jsx)(n.td,{children:"The client inside a deeper device (light node) can automatically interact with blockchain: open channel (client only), close channel (server only), claim payment (server only), add balance (client only), and close expired channels (client only)"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"5."}),(0,r.jsx)(n.td,{children:"Client to Client"}),(0,r.jsx)(n.td,{children:"The client inside a deeper device (light node) can automatically interact with each other: start services, send micropayments, stop services."})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Light node discovery. Each deeper device is acting as a light node in deeper layer. There are potential millions of light nodes in p2p network. We need pairing light nodes with unbiased randomness and design discovery mechanism in a decentralized way."}),"\n",(0,r.jsx)(n.li,{children:"Proof of Credit is a core component in deeper network. We already have built MVP functions for PoC. But there are more work to be done."}),"\n",(0,r.jsx)(n.li,{children:"Testnet: Build an end to end blockchain system that running deeper devices smoothly."}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,r.jsx)(n.h3,{id:"what-work-has-been-done-so-far",children:"What work has been done so far?"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["Code is open source at ",(0,r.jsx)(n.a,{href:"https://github.com/deeper-chain/deeper-chain",children:"https://github.com/deeper-chain/deeper-chain"})]}),"\n",(0,r.jsx)(n.li,{children:"MVP is developed for core features: micropayments(master branch), light node(master branch), delegated proof of credit(master branch)."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"have-you-applied-for-other-grants-so-far",children:"Have you applied for other grants so far?"}),"\n",(0,r.jsx)(n.p,{children:"We have applied for Substrate Builder's program and got accepted."})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>o});var i=t(96540);const r={},a=i.createContext(r);function s(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0dbc99ef.27d89c13.js b/assets/js/0dbc99ef.27d89c13.js new file mode 100644 index 00000000000..163e3e43df5 --- /dev/null +++ b/assets/js/0dbc99ef.27d89c13.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[33629],{45684:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>n,toc:()=>c});const n=JSON.parse('{"id":"applications/CosmWasmVM-CoreProduct","title":"CosmWasm VM - Core product","description":"- Team Name: Composable Finance LTD","source":"@site/applications/CosmWasmVM-CoreProduct.md","sourceDirName":"applications","slug":"/applications/CosmWasmVM-CoreProduct","permalink":"/applications/CosmWasmVM-CoreProduct","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/CosmWasmVM-CoreProduct.md","tags":[],"version":"current","frontMatter":{}}');var i=s(74848),r=s(28453);const o={},a="CosmWasm VM - Core product",l={},c=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles (if available)",id:"team-linkedin-profiles-if-available",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 Pallet CosmWasm VM",id:"milestone-1--pallet-cosmwasm-vm",level:3},{value:"Milestone 2 \u2014 PolkadotJS Integration",id:"milestone-2--polkadotjs-integration",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function d(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"cosmwasm-vm---core-product",children:"CosmWasm VM - Core product"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Team Name:"})," Composable Finance LTD"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Payment Address:"})," (USDC) 0x7C0776FBfadcB5EeEA5eF1DC5b50d603c9a40621"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsxs)(t.strong,{children:[(0,i.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 2"]}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,i.jsx)(t.p,{children:"Composable Finance focuses on trustless, cross-chain communications between Polkadot and other ecosystems.\nIn this case, a CosmWasm VM is a supplementary component to onboarding a new developer community and a widely adopted smart contract framework."}),"\n",(0,i.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(t.p,{children:"The first CosmWasm VM implementation in Substrate for the Polkadot and Kusama ecosystems."}),"\n",(0,i.jsx)(t.p,{children:"CosmWasm, short for Cosmos Webassembly, is a smart contract framework designed for use in the Cosmos ecosystem.\nOriginally, the CosmWasm specification was built as a Cosmos SDK module and currently provides a plug-and-play functionality for Cosmos chains.\nCosmWasm was written in half Rust and half Golang (Go), with low-level calls in Rust and high-level dispatching logic, handled in Go.\nThe actor model is implemented in Go which then calls the low-level Rust library to execute contracts effectively."}),"\n",(0,i.jsx)(t.p,{children:"CosmWasm offers a high degree of customization as part of its design philosophy.\nA key feature of CosmWasm is that it allows for multi-chain contracts; one dApp, one contract, but multiple chains.\nAs a result, CosmWasm allows users to benefit from the utility across chains instead of being forced to choose between them.\nImplementing the CosmWasm framework in Substrate will allow developers and parachains in the Polkadot and Kusama ecosystems\nto seamlessly interact with a well-tested and heavily adopted smart contract framework."}),"\n",(0,i.jsx)(t.p,{children:"In terms of security, CosmWasm is designed to avoid the attack vectors found in Ethereum and Solidity, such as Reentrancy, and Default Visibilities.\nIts security is further reinforced by its well-developed tooling and testing mechanisms prioritized early in its conception.\nDue to these benefits, many projects have adopted CosmWasm as their smart contract framework,\nincluding notable examples like Juno, OKX, and Osmosis."}),"\n",(0,i.jsx)(t.p,{children:"Overall, the CosmWasm VM proved to be the best VM for our needs as we found it to be the most portable and robust solution.\nCosmWasm was built with interoperability in mind from the very beginning,\nthe goal being to build a smart contracting framework capable of operating across multiple blockchains.\nBy utilizing the XCMP as a transport layer,\nCosmWasm contracts would be able to communicate with each other on different parachains without the need for any trusted parties.\nThe entire Dotsama ecosystem has the potential to benefit from CosmWasm.\nThis means that any team building on Dotsama will have unparalleled reach,\nand the potential to create applications that have never been seen before."}),"\n",(0,i.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,i.jsx)(t.p,{children:"In its current state, Confio\u2019s implementation of the CosmWasm VM excludes library components and consists of a single implementation targeting the Cosmos SDK.\nOur team is building a library implementation of CosmWasm that can be utilized by different host implementations to minimize the work to port Cosmwasm to different ecosystems.\nCurrently, the only implementation of CosmWasm consists of half of it written in Rust and half Golang.\nTherefore, the current version was not compatible with Substrate and has never been leveraged outside of Cosmos.\nThis meant we had to build a VM from scratch."}),"\n",(0,i.jsx)(t.p,{children:"Furthermore, we have two host implementations which allows developers to integrate CosmWasm in their ecosystems in a straightforward manner.\nThis ensures that our CosmWasm VM is highly portable with consistent execution semantics regardless of its host.\nAs a result, this would enable developers to integrate our CosmWasm VM as a pallet, within a frontend app, or inside a CLI tool."}),"\n",(0,i.jsx)(t.p,{children:"The official CosmWasm VM uses Wasmd for the runtime.\nIt ensures that developers follow the same execution semantics,\nthus, all CosmWasm contracts will function the same irrespective of the Cosmos blockchain they are executed on.\nWe utilized the Wasmd reference material to rewrite the Go portions of CosmWasm in Rust for implementation on our parachains."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://drive.google.com/uc?id=1zcIT6UHveRrUfZunNx6otKuMCerEdX2J",alt:"high_level_overview"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Documentation of core components, protocols, architecture, etc. to be deployed"}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"https://book.cosmwasm.com/",children:"https://book.cosmwasm.com/"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"https://docs.cosmwasm.com/docs/1.0/",children:"https://docs.cosmwasm.com/docs/1.0/"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"https://cosmwasm.com/resources",children:"https://cosmwasm.com/resources"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"PoC/MVP or other relevant prior work or research on the topic:"}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"https://medium.com/cosmwasm/cosmwasm-for-ctos-f1ffa19cccb8",children:"https://medium.com/cosmwasm/cosmwasm-for-ctos-f1ffa19cccb8"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"https://medium.com/cosmwasm/cosmwasm-for-ctos-i-the-architecture-59a3e52d9b9c",children:"https://medium.com/cosmwasm/cosmwasm-for-ctos-i-the-architecture-59a3e52d9b9c"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"https://medium.com/cosmwasm",children:"https://medium.com/cosmwasm"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,i.jsx)(t.p,{children:"CosmWasm would be able to facilitate the orchestration of cross-chain smart contracts between different parachains."}),"\n",(0,i.jsx)(t.p,{children:"Our target audience consists of parachain builders,\nand dApps in the Dotsama ecosystem that want to leverage a WASM based smart contracting framework.\nWe hope this VM enables and incentivizes developers to build in the Polkadot ecosystem as CosmWasm has been adopted by a large developer community."}),"\n",(0,i.jsx)(t.p,{children:"We are the only team in the Substrate/Polkadot/Kusama ecosystem implementing CosmWasm for Substrate."}),"\n",(0,i.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,i.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Name of team leader: Blas Rodriguez"}),"\n",(0,i.jsx)(t.li,{children:"Names of team members: Dzmitry Lahoda, Kostya Kastsevich"}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Name:"})," Ahmad Wehbi"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Email:"})," ",(0,i.jsx)(t.a,{href:"mailto:ahmad@composable.finance",children:"ahmad@composable.finance"})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Website:"})," ",(0,i.jsx)(t.a,{href:"https://www.composable.finance/",children:"https://www.composable.finance/"})]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Registered Address:"})}),"\n",(0,i.jsx)(t.p,{children:"FortGate Offshore Investment and Legal Services LTD,"}),"\n",(0,i.jsx)(t.p,{children:"1st Floor, The Sotheby Building, Rodney Bay, Gros-Islet,"}),"\n",(0,i.jsx)(t.p,{children:"P.O. Box 838, Castries, Saint Lucia"}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"Registered Legal Entity:"})," Composable Finance LTD"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Blas Rodriguez: CTO at Composable Finance"}),"\n",(0,i.jsx)(t.li,{children:"Dzmitry Lahoda: Senior staff engineer at Composable Finance"}),"\n",(0,i.jsx)(t.li,{children:"Kostya Kastsevich: Parachain Lead at Composable Finance"}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/ComposableFi/cosmwasm-vm",children:"https://github.com/ComposableFi/cosmwasm-vm"})}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"GitHub accounts of all team members:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/blasrodri",children:"https://github.com/blasrodri"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/dzmitry-lahoda",children:"https://github.com/dzmitry-lahoda"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/kkast",children:"https://github.com/kkast"})}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"team-linkedin-profiles-if-available",children:"Team LinkedIn Profiles (if available)"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://ar.linkedin.com/in/blas-rodriguez-irizar",children:"https://ar.linkedin.com/in/blas-rodriguez-irizar"})}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"https://medium.com/supercolony/a-look-into-virtual-machines-and-smart-contract-runtimes-313cd7d494e3",children:"https://medium.com/supercolony/a-look-into-virtual-machines-and-smart-contract-runtimes-313cd7d494e3"})}),"\n",(0,i.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,i.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Estimated Duration:"})," February 2023 - September 2023"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Full-Time Equivalent (FTE):"})," 1,5 FTE"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Costs:"})," 29,700 USD"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-1--pallet-cosmwasm-vm",children:"Milestone 1 \u2014 Pallet CosmWasm VM"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated duration:"})," 8 weeks"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"})," 1,5"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"})," $21,600"]}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"0a."})}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"GPLv3 / MIT /"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"0b."})}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"We will provide both inline documentation of the code and a basic tutorial that explains how a user can test and execute transactions using cosmwasm vm pallet."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"0c."})}),(0,i.jsx)(t.td,{children:"Testing Guide"}),(0,i.jsx)(t.td,{children:"Core functions will be fully covered by integration tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"0d."})}),(0,i.jsx)(t.td,{children:"Docker"}),(0,i.jsx)(t.td,{children:"We will provide a Dockerfile that can be used to test the pallet functionality."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"1a."})}),(0,i.jsx)(t.td,{children:"Development"}),(0,i.jsx)(t.td,{children:"We will deliver the core pallet for the CosmWasm VM"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"1b."})}),(0,i.jsx)(t.td,{children:"Development"}),(0,i.jsx)(t.td,{children:"This milestone includes the pallet supporting the following features: XCM integration, native asset support, allow calling extrinsics, verification through Fuzzing & Kani and Benchmarking."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"1c."})}),(0,i.jsx)(t.td,{children:"Testing"}),(0,i.jsx)(t.td,{children:"A local network setup running a substrate chain with the pallet and a contract showing the functionality described in the milestones, so that it can be inspected and called through Polkadotjs.org."})]})]})]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-2--polkadotjs-integration",children:"Milestone 2 \u2014 PolkadotJS Integration"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated duration:"})," 3 weeks"]}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.strong,{children:"FTE: 1.5"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.strong,{children:"$8,100"})}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"0a."})}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"GPLv3 / MIT"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"0b."})}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"We will provide both inline documentation of the code and a basic tutorial that explains how contracts interact with PolkadotJS."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"0c."})}),(0,i.jsx)(t.td,{children:"Testing Guide"}),(0,i.jsx)(t.td,{children:"Core functions will be fully covered by integration tests to ensure functionality and robustness."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"0d."})}),(0,i.jsx)(t.td,{children:"Docker"}),(0,i.jsx)(t.td,{children:"We will provide a Dockerfile that can be used to test all the functionality delivered with this milestone"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"0e."})}),(0,i.jsx)(t.td,{children:"Article"}),(0,i.jsx)(t.td,{children:"We intend to publish an article which outlines what was achieved as part of the grant, how it benefits the Substrate ecosystem and how other parachains can utilize the pallet."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"1."})}),(0,i.jsx)(t.td,{children:"Development"}),(0,i.jsx)(t.td,{children:"This milestone would include PolkadotJS support querying contracts\u2019 state and interacting with CosmWam contracts"})]})]})]}),"\n",(0,i.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,i.jsx)(t.p,{children:"Composable is continuing to contribute upstream, further pushing the boundaries of cryptographic research and opening up endless possibilities for the Dotama ecosystem as we work in line with our cross-chain/cross-layer interoperability goals."}),"\n",(0,i.jsxs)(t.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"How did you hear about the Grants Program?"})}),"\n",(0,i.jsx)(t.p,{children:"Web3 Foundation Medium and Twitter"})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>o,x:()=>a});var n=s(96540);const i={},r=n.createContext(i);function o(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0dbc99ef.cc1d0128.js b/assets/js/0dbc99ef.cc1d0128.js deleted file mode 100644 index 2073f1ff87f..00000000000 --- a/assets/js/0dbc99ef.cc1d0128.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[33629],{75892:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>n,toc:()=>c});const n=JSON.parse('{"id":"applications/CosmWasmVM-CoreProduct","title":"CosmWasm VM - Core product","description":"- Team Name: Composable Finance LTD","source":"@site/applications/CosmWasmVM-CoreProduct.md","sourceDirName":"applications","slug":"/applications/CosmWasmVM-CoreProduct","permalink":"/applications/CosmWasmVM-CoreProduct","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/CosmWasmVM-CoreProduct.md","tags":[],"version":"current","frontMatter":{}}');var i=s(74848),r=s(28453);const o={},a="CosmWasm VM - Core product",l={},c=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles (if available)",id:"team-linkedin-profiles-if-available",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 Pallet CosmWasm VM",id:"milestone-1--pallet-cosmwasm-vm",level:3},{value:"Milestone 2 \u2014 PolkadotJS Integration",id:"milestone-2--polkadotjs-integration",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function d(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"cosmwasm-vm---core-product",children:"CosmWasm VM - Core product"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Team Name:"})," Composable Finance LTD"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Payment Address:"})," (USDC) 0x7C0776FBfadcB5EeEA5eF1DC5b50d603c9a40621"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsxs)(t.strong,{children:[(0,i.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 2"]}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,i.jsx)(t.p,{children:"Composable Finance focuses on trustless, cross-chain communications between Polkadot and other ecosystems.\nIn this case, a CosmWasm VM is a supplementary component to onboarding a new developer community and a widely adopted smart contract framework."}),"\n",(0,i.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(t.p,{children:"The first CosmWasm VM implementation in Substrate for the Polkadot and Kusama ecosystems."}),"\n",(0,i.jsx)(t.p,{children:"CosmWasm, short for Cosmos Webassembly, is a smart contract framework designed for use in the Cosmos ecosystem.\nOriginally, the CosmWasm specification was built as a Cosmos SDK module and currently provides a plug-and-play functionality for Cosmos chains.\nCosmWasm was written in half Rust and half Golang (Go), with low-level calls in Rust and high-level dispatching logic, handled in Go.\nThe actor model is implemented in Go which then calls the low-level Rust library to execute contracts effectively."}),"\n",(0,i.jsx)(t.p,{children:"CosmWasm offers a high degree of customization as part of its design philosophy.\nA key feature of CosmWasm is that it allows for multi-chain contracts; one dApp, one contract, but multiple chains.\nAs a result, CosmWasm allows users to benefit from the utility across chains instead of being forced to choose between them.\nImplementing the CosmWasm framework in Substrate will allow developers and parachains in the Polkadot and Kusama ecosystems\nto seamlessly interact with a well-tested and heavily adopted smart contract framework."}),"\n",(0,i.jsx)(t.p,{children:"In terms of security, CosmWasm is designed to avoid the attack vectors found in Ethereum and Solidity, such as Reentrancy, and Default Visibilities.\nIts security is further reinforced by its well-developed tooling and testing mechanisms prioritized early in its conception.\nDue to these benefits, many projects have adopted CosmWasm as their smart contract framework,\nincluding notable examples like Juno, OKX, and Osmosis."}),"\n",(0,i.jsx)(t.p,{children:"Overall, the CosmWasm VM proved to be the best VM for our needs as we found it to be the most portable and robust solution.\nCosmWasm was built with interoperability in mind from the very beginning,\nthe goal being to build a smart contracting framework capable of operating across multiple blockchains.\nBy utilizing the XCMP as a transport layer,\nCosmWasm contracts would be able to communicate with each other on different parachains without the need for any trusted parties.\nThe entire Dotsama ecosystem has the potential to benefit from CosmWasm.\nThis means that any team building on Dotsama will have unparalleled reach,\nand the potential to create applications that have never been seen before."}),"\n",(0,i.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,i.jsx)(t.p,{children:"In its current state, Confio\u2019s implementation of the CosmWasm VM excludes library components and consists of a single implementation targeting the Cosmos SDK.\nOur team is building a library implementation of CosmWasm that can be utilized by different host implementations to minimize the work to port Cosmwasm to different ecosystems.\nCurrently, the only implementation of CosmWasm consists of half of it written in Rust and half Golang.\nTherefore, the current version was not compatible with Substrate and has never been leveraged outside of Cosmos.\nThis meant we had to build a VM from scratch."}),"\n",(0,i.jsx)(t.p,{children:"Furthermore, we have two host implementations which allows developers to integrate CosmWasm in their ecosystems in a straightforward manner.\nThis ensures that our CosmWasm VM is highly portable with consistent execution semantics regardless of its host.\nAs a result, this would enable developers to integrate our CosmWasm VM as a pallet, within a frontend app, or inside a CLI tool."}),"\n",(0,i.jsx)(t.p,{children:"The official CosmWasm VM uses Wasmd for the runtime.\nIt ensures that developers follow the same execution semantics,\nthus, all CosmWasm contracts will function the same irrespective of the Cosmos blockchain they are executed on.\nWe utilized the Wasmd reference material to rewrite the Go portions of CosmWasm in Rust for implementation on our parachains."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://drive.google.com/uc?id=1zcIT6UHveRrUfZunNx6otKuMCerEdX2J",alt:"high_level_overview"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Documentation of core components, protocols, architecture, etc. to be deployed"}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"https://book.cosmwasm.com/",children:"https://book.cosmwasm.com/"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"https://docs.cosmwasm.com/docs/1.0/",children:"https://docs.cosmwasm.com/docs/1.0/"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"https://cosmwasm.com/resources",children:"https://cosmwasm.com/resources"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"PoC/MVP or other relevant prior work or research on the topic:"}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"https://medium.com/cosmwasm/cosmwasm-for-ctos-f1ffa19cccb8",children:"https://medium.com/cosmwasm/cosmwasm-for-ctos-f1ffa19cccb8"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"https://medium.com/cosmwasm/cosmwasm-for-ctos-i-the-architecture-59a3e52d9b9c",children:"https://medium.com/cosmwasm/cosmwasm-for-ctos-i-the-architecture-59a3e52d9b9c"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"https://medium.com/cosmwasm",children:"https://medium.com/cosmwasm"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,i.jsx)(t.p,{children:"CosmWasm would be able to facilitate the orchestration of cross-chain smart contracts between different parachains."}),"\n",(0,i.jsx)(t.p,{children:"Our target audience consists of parachain builders,\nand dApps in the Dotsama ecosystem that want to leverage a WASM based smart contracting framework.\nWe hope this VM enables and incentivizes developers to build in the Polkadot ecosystem as CosmWasm has been adopted by a large developer community."}),"\n",(0,i.jsx)(t.p,{children:"We are the only team in the Substrate/Polkadot/Kusama ecosystem implementing CosmWasm for Substrate."}),"\n",(0,i.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,i.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Name of team leader: Blas Rodriguez"}),"\n",(0,i.jsx)(t.li,{children:"Names of team members: Dzmitry Lahoda, Kostya Kastsevich"}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Name:"})," Ahmad Wehbi"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Email:"})," ",(0,i.jsx)(t.a,{href:"mailto:ahmad@composable.finance",children:"ahmad@composable.finance"})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Website:"})," ",(0,i.jsx)(t.a,{href:"https://www.composable.finance/",children:"https://www.composable.finance/"})]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Registered Address:"})}),"\n",(0,i.jsx)(t.p,{children:"FortGate Offshore Investment and Legal Services LTD,"}),"\n",(0,i.jsx)(t.p,{children:"1st Floor, The Sotheby Building, Rodney Bay, Gros-Islet,"}),"\n",(0,i.jsx)(t.p,{children:"P.O. Box 838, Castries, Saint Lucia"}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"Registered Legal Entity:"})," Composable Finance LTD"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Blas Rodriguez: CTO at Composable Finance"}),"\n",(0,i.jsx)(t.li,{children:"Dzmitry Lahoda: Senior staff engineer at Composable Finance"}),"\n",(0,i.jsx)(t.li,{children:"Kostya Kastsevich: Parachain Lead at Composable Finance"}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/ComposableFi/cosmwasm-vm",children:"https://github.com/ComposableFi/cosmwasm-vm"})}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"GitHub accounts of all team members:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/blasrodri",children:"https://github.com/blasrodri"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/dzmitry-lahoda",children:"https://github.com/dzmitry-lahoda"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/kkast",children:"https://github.com/kkast"})}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"team-linkedin-profiles-if-available",children:"Team LinkedIn Profiles (if available)"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://ar.linkedin.com/in/blas-rodriguez-irizar",children:"https://ar.linkedin.com/in/blas-rodriguez-irizar"})}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"https://medium.com/supercolony/a-look-into-virtual-machines-and-smart-contract-runtimes-313cd7d494e3",children:"https://medium.com/supercolony/a-look-into-virtual-machines-and-smart-contract-runtimes-313cd7d494e3"})}),"\n",(0,i.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,i.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Estimated Duration:"})," February 2023 - September 2023"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Full-Time Equivalent (FTE):"})," 1,5 FTE"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Costs:"})," 29,700 USD"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-1--pallet-cosmwasm-vm",children:"Milestone 1 \u2014 Pallet CosmWasm VM"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated duration:"})," 8 weeks"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"})," 1,5"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"})," $21,600"]}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"0a."})}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"GPLv3 / MIT /"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"0b."})}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"We will provide both inline documentation of the code and a basic tutorial that explains how a user can test and execute transactions using cosmwasm vm pallet."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"0c."})}),(0,i.jsx)(t.td,{children:"Testing Guide"}),(0,i.jsx)(t.td,{children:"Core functions will be fully covered by integration tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"0d."})}),(0,i.jsx)(t.td,{children:"Docker"}),(0,i.jsx)(t.td,{children:"We will provide a Dockerfile that can be used to test the pallet functionality."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"1a."})}),(0,i.jsx)(t.td,{children:"Development"}),(0,i.jsx)(t.td,{children:"We will deliver the core pallet for the CosmWasm VM"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"1b."})}),(0,i.jsx)(t.td,{children:"Development"}),(0,i.jsx)(t.td,{children:"This milestone includes the pallet supporting the following features: XCM integration, native asset support, allow calling extrinsics, verification through Fuzzing & Kani and Benchmarking."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"1c."})}),(0,i.jsx)(t.td,{children:"Testing"}),(0,i.jsx)(t.td,{children:"A local network setup running a substrate chain with the pallet and a contract showing the functionality described in the milestones, so that it can be inspected and called through Polkadotjs.org."})]})]})]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-2--polkadotjs-integration",children:"Milestone 2 \u2014 PolkadotJS Integration"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated duration:"})," 3 weeks"]}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.strong,{children:"FTE: 1.5"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.strong,{children:"$8,100"})}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"0a."})}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"GPLv3 / MIT"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"0b."})}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"We will provide both inline documentation of the code and a basic tutorial that explains how contracts interact with PolkadotJS."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"0c."})}),(0,i.jsx)(t.td,{children:"Testing Guide"}),(0,i.jsx)(t.td,{children:"Core functions will be fully covered by integration tests to ensure functionality and robustness."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"0d."})}),(0,i.jsx)(t.td,{children:"Docker"}),(0,i.jsx)(t.td,{children:"We will provide a Dockerfile that can be used to test all the functionality delivered with this milestone"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"0e."})}),(0,i.jsx)(t.td,{children:"Article"}),(0,i.jsx)(t.td,{children:"We intend to publish an article which outlines what was achieved as part of the grant, how it benefits the Substrate ecosystem and how other parachains can utilize the pallet."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"right"},children:(0,i.jsx)(t.strong,{children:"1."})}),(0,i.jsx)(t.td,{children:"Development"}),(0,i.jsx)(t.td,{children:"This milestone would include PolkadotJS support querying contracts\u2019 state and interacting with CosmWam contracts"})]})]})]}),"\n",(0,i.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,i.jsx)(t.p,{children:"Composable is continuing to contribute upstream, further pushing the boundaries of cryptographic research and opening up endless possibilities for the Dotama ecosystem as we work in line with our cross-chain/cross-layer interoperability goals."}),"\n",(0,i.jsxs)(t.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"How did you hear about the Grants Program?"})}),"\n",(0,i.jsx)(t.p,{children:"Web3 Foundation Medium and Twitter"})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>o,x:()=>a});var n=s(96540);const i={},r=n.createContext(i);function o(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0e9d4fd1.20b719f0.js b/assets/js/0e9d4fd1.20b719f0.js deleted file mode 100644 index 4c1bfabea79..00000000000 --- a/assets/js/0e9d4fd1.20b719f0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[13270],{3298:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>h});const i=JSON.parse('{"id":"docs/Introduction/team","title":"Team","description":"W3F Grants Committee","source":"@site/docs/Introduction/team.md","sourceDirName":"docs/Introduction","slug":"/docs/Introduction/team","permalink":"/docs/Introduction/team","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/docs/Introduction/team.md","tags":[],"version":"current","sidebarPosition":5,"frontMatter":{"sidebar_position":5},"sidebar":"docs","previous":{"title":"Support","permalink":"/docs/Introduction/support"},"next":{"title":"Apply","permalink":"/docs/process"}}');var r=n(74848),s=n(28453);const a={sidebar_position:5},o="Team",l={},h=[{value:"W3F Grants Committee",id:"w3f-grants-committee",level:2},{value:"W3F Grants Evaluators",id:"w3f-grants-evaluators",level:2},{value:"W3F Operations Team",id:"w3f-operations-team",level:2}];function c(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"team",children:"Team"})}),"\n",(0,r.jsx)(t.h2,{id:"w3f-grants-committee",children:"W3F Grants Committee"}),"\n",(0,r.jsx)(t.p,{children:"The committee consists of individuals who know the funding priorities of the Polkadot ecosystem and is responsible for evaluating grant applications and providing feedback on these."}),"\n",(0,r.jsx)(t.p,{children:"In cases where a niche expert opinion is desirable, one of the committee members may request such a review."}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/SBalaguer",children:"Santiago Balaguer"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/aeronbuchanan",children:"Aeron Buchanan"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/Noc2",children:"David Hawig"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/semuelle",children:"Sebastian M\xfcller"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/laboon",children:"Bill Laboon"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/keeganquigley",children:"Keegan Quigley"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/rrtti",children:"Raul Romanutti"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/takahser",children:"Seraya Takahashi"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/gavofyork",children:"Gavin Wood"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/PieWol",children:"Piet Wolff"})}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"w3f-grants-evaluators",children:"W3F Grants Evaluators"}),"\n",(0,r.jsx)(t.p,{children:"Evaluators are individuals able to evaluate the technology delivered as a result of the Grants Program. The committee has the right to add or remove evaluators on the basis of supermajority."}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/Noc2",children:"David Hawig"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/semuelle",children:"Sebastian M\xfcller"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/keeganquigley",children:"Keegan Quigley"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/takahser",children:"Seraya Takahashi"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/PieWol",children:"Piet Wolff"})}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"w3f-operations-team",children:"W3F Operations Team"}),"\n",(0,r.jsx)(t.p,{children:"The Operations Team takes care of legal documents, invoicing and remittances."}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/meldien",children:"Melanie Diener"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/RouvenP",children:"Rouven P\xe9rez"})}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>o});var i=n(96540);const r={},s=i.createContext(r);function a(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0e9d4fd1.44851eee.js b/assets/js/0e9d4fd1.44851eee.js new file mode 100644 index 00000000000..84164c5fdd0 --- /dev/null +++ b/assets/js/0e9d4fd1.44851eee.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[13270],{93110:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>h});const i=JSON.parse('{"id":"docs/Introduction/team","title":"Team","description":"W3F Grants Committee","source":"@site/docs/Introduction/team.md","sourceDirName":"docs/Introduction","slug":"/docs/Introduction/team","permalink":"/docs/Introduction/team","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/docs/Introduction/team.md","tags":[],"version":"current","sidebarPosition":5,"frontMatter":{"sidebar_position":5},"sidebar":"docs","previous":{"title":"Support","permalink":"/docs/Introduction/support"},"next":{"title":"Apply","permalink":"/docs/process"}}');var r=n(74848),s=n(28453);const a={sidebar_position:5},o="Team",l={},h=[{value:"W3F Grants Committee",id:"w3f-grants-committee",level:2},{value:"W3F Grants Evaluators",id:"w3f-grants-evaluators",level:2},{value:"W3F Operations Team",id:"w3f-operations-team",level:2}];function c(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"team",children:"Team"})}),"\n",(0,r.jsx)(t.h2,{id:"w3f-grants-committee",children:"W3F Grants Committee"}),"\n",(0,r.jsx)(t.p,{children:"The committee consists of individuals who know the funding priorities of the Polkadot ecosystem and is responsible for evaluating grant applications and providing feedback on these."}),"\n",(0,r.jsx)(t.p,{children:"In cases where a niche expert opinion is desirable, one of the committee members may request such a review."}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/SBalaguer",children:"Santiago Balaguer"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/aeronbuchanan",children:"Aeron Buchanan"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/Noc2",children:"David Hawig"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/semuelle",children:"Sebastian M\xfcller"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/laboon",children:"Bill Laboon"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/keeganquigley",children:"Keegan Quigley"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/rrtti",children:"Raul Romanutti"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/takahser",children:"Seraya Takahashi"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/gavofyork",children:"Gavin Wood"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/PieWol",children:"Piet Wolff"})}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"w3f-grants-evaluators",children:"W3F Grants Evaluators"}),"\n",(0,r.jsx)(t.p,{children:"Evaluators are individuals able to evaluate the technology delivered as a result of the Grants Program. The committee has the right to add or remove evaluators on the basis of supermajority."}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/Noc2",children:"David Hawig"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/semuelle",children:"Sebastian M\xfcller"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/keeganquigley",children:"Keegan Quigley"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/takahser",children:"Seraya Takahashi"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/PieWol",children:"Piet Wolff"})}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"w3f-operations-team",children:"W3F Operations Team"}),"\n",(0,r.jsx)(t.p,{children:"The Operations Team takes care of legal documents, invoicing and remittances."}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/meldien",children:"Melanie Diener"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/RouvenP",children:"Rouven P\xe9rez"})}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>o});var i=n(96540);const r={},s=i.createContext(r);function a(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0ea959d4.4494f2c4.js b/assets/js/0ea959d4.4494f2c4.js new file mode 100644 index 00000000000..95c484991a3 --- /dev/null +++ b/assets/js/0ea959d4.4494f2c4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[73442],{22966:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>h,frontMatter:()=>l,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"applications/clover_network","title":"Clover","description":"This document is referenced in the terms and conditions and therefore needs to contain all the required information. Don\'t remove any of the mandatory parts presented in bold letters or as headlines! See the Open Grants Program Process on how to submit a proposal.","source":"@site/applications/clover_network.md","sourceDirName":"applications","slug":"/applications/clover_network","permalink":"/applications/clover_network","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/clover_network.md","tags":[],"version":"current","frontMatter":{}}');var r=i(74848),o=i(28453);const l={},s="Clover",a={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Introduction",id:"introduction",level:4},{value:"Integration",id:"integration",level:4},{value:"Team Interest",id:"team-interest",level:4},{value:"Project Details",id:"project-details",level:3},{value:"Mockups/designs",id:"mockupsdesigns",level:4},{value:"API specs",id:"api-specs",level:4},{value:"An overview of the technology stack",id:"an-overview-of-the-technology-stack",level:4},{value:"Documentation of core components, protocols, architecture",id:"documentation-of-core-components-protocols-architecture",level:4},{value:"PoC/MVP",id:"pocmvp",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"January 2021 Milestones",id:"january-2021-milestones",level:3},{value:"February 2021 Milestones",id:"february-2021-milestones",level:3},{value:"March 2021 Milestones",id:"march-2021-milestones",level:3},{value:"Future Plans",id:"future-plans",level:2}];function c(e){const t={a:"a",blockquote:"blockquote",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"clover",children:"Clover"})}),"\n",(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsxs)(t.p,{children:["This document is referenced in the terms and conditions and therefore needs to contain all the required information. Don't remove any of the mandatory parts presented in bold letters or as headlines! See the ",(0,r.jsx)(t.a,{href:"https://github.com/w3f/Open-Grants-Program/blob/master/README_2.md",children:"Open Grants Program Process"})," on how to submit a proposal."]}),"\n"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Team Name:"})," Clover Team"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Payment Address:"})," 1HsVhJeeFx5AGGBRQzrvEqGC8FM8YfW6b6"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Status:"})," ",(0,r.jsx)(t.a,{href:"https://github.com/w3f/Grant-Milestone-Delivery/pull/106#issuecomment-794570629",children:"Terminated"})]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.em,{children:"The above combination of your GitHub account submitting the application and payment address will be your unique identifier during the program. Please keep them safe."})}),"\n",(0,r.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,r.jsx)(t.p,{children:"If this application in response to an RFP then please indicate this on the first line of this section."}),"\n",(0,r.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,r.jsx)(t.h4,{id:"introduction",children:"Introduction"}),"\n",(0,r.jsx)(t.p,{children:"Clover is a Substrate-based Polkadot parachain which is committed to providing easy-to-use blockchain infrastructure by creating a one-stop comprehensive infrastructure that ultimately reduces the threshold and cost for the DeFi community."}),"\n",(0,r.jsx)(t.p,{children:"Clover provides a perfect gateway to DeFi for everyone including those who are completely new to DeFi. We bridge the gap between the crowd and the DeFi world via a user-friendly front end portal with an easy-to-navigate multi-chain wallet, block explorer/DeFi application market for regular users and a user-friendly built-in protocol library that allows developers to easily deploy their own applications. Without the need of managing multiple assets in different accounts, Clover enables users to keep track of what\u2019s happening real-time in one place."}),"\n",(0,r.jsx)(t.h4,{id:"integration",children:"Integration"}),"\n",(0,r.jsx)(t.p,{children:"We decided to develop on Polkadot mainly because of its enhanced scalability and low-in-cost among other smart contract platforms in the space. As a sharded multichain network, Polkadot allows the processing of many transactions on different chains in parallel that most legacy networks do not. While providing scaling solutions through parachains, Polkadot development is steadily advanced, has gathered a large number of developers from the community, and numerous projects are emerging endlessly in the ecosystem. On the other hand, Polkadot\u2019s Substrate technology provides a relatively easy-to-use and highly customizable framework that allows us to build our platform to communicate with other ledgers, which in a sense will likely attract more users to onboard in the future."}),"\n",(0,r.jsx)(t.p,{children:"Clover will compete to join as parachain for Polkadot and is committed to becoming a digital finance portal and DeFi service provider on Polkadot. Focusing on both to-C and to-B users, Clover will provide a series of DeFi related products and services to meet the diverse needs of different users. At the same time, developing and providing a modular DeFi protocol, which greatly reduces the technology development threshold for upper-layer applications. Clover will put together a large user base and different projects into a one-stop open and integrated financial service platform on Polkadot, using Substrate framework, to communicate with other existing parachains such as Bitcoin and Ethereum parachains. Namely, Clover will be another parachain on Polkadot. Once the parachain gets the slot to join the Polkadot relay chain, they can communicate with each other through Cross-chain Message Passing (XCMP) protocol. That means Clover can build its DeFi with the other parachain assets, like the DeFi protocols on Ethereum."}),"\n",(0,r.jsx)(t.h4,{id:"team-interest",children:"Team Interest"}),"\n",(0,r.jsx)(t.p,{children:"We are a team of like-minded people who have a dream of building a groundbreaking technology towards censorship resistance on utilizing newest additions to DLT technologies. Apart from incentivizing our core team with a structured/periodic compensation plan throughout the next 5 years with cliffs imposed in between, we give ourselves a high degree of autonomy and lots of space for creativity overall."}),"\n",(0,r.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,r.jsx)(t.h4,{id:"mockupsdesigns",children:"Mockups/designs"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://www.figma.com/file/SWg7LONt81ot05S1nlszcH/Clover-Wallet?node-id=0%3A1",children:"https://www.figma.com/file/SWg7LONt81ot05S1nlszcH/Clover-Wallet?node-id=0%3A1"})}),"\n",(0,r.jsx)(t.h4,{id:"api-specs",children:"API specs"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://docs.google.com/spreadsheets/d/1BccgFYHS8YLEX5H9NpQf4ENE9Qwniq8YNpLEXXSAaRo/edit?usp=sharing",children:"https://docs.google.com/spreadsheets/d/1BccgFYHS8YLEX5H9NpQf4ENE9Qwniq8YNpLEXXSAaRo/edit?usp=sharing"})}),"\n",(0,r.jsx)(t.h4,{id:"an-overview-of-the-technology-stack",children:"An overview of the technology stack"}),"\n",(0,r.jsx)(t.p,{children:"The bottom layer of Clover OS is built on blockchain. Application states are built on the Polkadot network, and the storage is built on IPFS. Leveraging on Polkadot\u2019s parachain technology, Clover\u2019s core advantage lies in its control panel. It can easily dock various user actions provided by its backend that has been integrated by a variety of tools including Wallet, Block Explorer, Polkadot-JS, and more. As a result, users can be connected, transact on various chains and integrate their corresponding functions with the support of Clover. Clover will collect incoming data and clean them, with our proprietary database and inhouse algorithm, data will undergo different sets of validation and analysis before they get applied and translated into visualizable data. Building on Substrate, Clover\u2019s application terminal is determined to become the entrance to the global digital finance world with state-of-art simplicities. With accessible tools, better support, and lower cost, we are likely to see more applications to be developed on Polkadot in the future. Clover will foster a diversified and scalable DeFi environment that allows for more possibilities."}),"\n",(0,r.jsx)(t.h4,{id:"documentation-of-core-components-protocols-architecture",children:"Documentation of core components, protocols, architecture"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://docs.google.com/presentation/d/1XQTdfY8IhYGsTiiFBIeTTh25eaIEck7WJ5Tz2bBTJv4/edit?usp=sharing",children:"https://docs.google.com/presentation/d/1XQTdfY8IhYGsTiiFBIeTTh25eaIEck7WJ5Tz2bBTJv4/edit?usp=sharing"})}),"\n",(0,r.jsx)(t.h4,{id:"pocmvp",children:"PoC/MVP"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://docs.google.com/document/d/1c4KecPdFp6T51YIGv45e37s7CR46MtcZEF0NSSU6Dbc/edit?usp=sharing",children:"https://docs.google.com/document/d/1c4KecPdFp6T51YIGv45e37s7CR46MtcZEF0NSSU6Dbc/edit?usp=sharing"})}),"\n",(0,r.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,r.jsx)(t.p,{children:"As a decentralized financial service provider on Polkadot, Clover provides modular DeFi protocols and application tools, which greatly reduces the repeated efforts needed in the protocol development. Modular DeFi protocols include Staking Liquidity Protocol, Decentralized Trading Protocol, Decentralized Lending Protocol, Token Dividend Protocol, Governance Protocol, and Synthetic Asset Protocols. Clover allows its upper-layer application projects to focus on improving user experiences and accelerate innovations of diversified financial applications through its composability. Clover can potentially convert a large number of DeFi users into users of its upper-layer applications. This way, upper-layer applications will be able to bootstrap its community and inject more market values."}),"\n",(0,r.jsx)(t.p,{children:"Clover will also establish a developer-centric community. In addition to giving rewards to those who provide constructive contributions, Clover will encourage its third party developers to continuously build innovative dApps on top of Clover. Each project built on Clover by the third party developers will require a solid financial foundation, and generally donations from the community are insufficient to cover development expenses which results in stagnated growth. Therefore a sound funding mechanism has been established, The Developer Incentive Program, where all the projects building on Clover can benefit from a share of transaction fees. The Developer Incentive Program (DIP) is a Clover-native consensus feature that aims to direct a percentage of transaction fees to registered smart contracts to incentivize in Clover third party contract developers and commons, mainly to boost external dApp development which ultimately enlarges the Clover DeFi ecosystem overall. The program is consistent with Clover\u2019s properties of being a decentralized operating system which does not touch the inflation schedule or alter the scarcity of CLV, but effectively increases the security of smart contracts against bugs and software vulnerabilities by enabling external development to be properly funded. Overall the benefits of the plan create the potential for a very exciting future in which Clover can grow and compete, and can reach its goal of becoming the best possible DeFi platform for all. Therefore Clover, whose key role is to be the service provider of which will allow a variety of applications to be built on top, aims to become a one-stop financial services platform that highly incentives users, developers, and upper-layer applications to innovate."}),"\n",(0,r.jsx)(t.p,{children:"With the rapid development of DeFi, the demand for insurance protocols is also increasing and has become an important part of the DeFi protocols. At the current stage of DeFi development, it is not yet possible to directly trade assets such as stocks, precious metals, and commodities. However, the synthetic asset protocol will allow simulations of assets price and facilitate transactions on the blockchain. In addition, the developer community we established will also become a source of innovative DeFi protocols. Clover allows modularization of the different protocols, thereby providing a resourceful module library for upper-layer applications, which will ultimately enable the creation of more diversified financial applications. With the help of Bithumb Global bootstrapping the liquidity of Clover by co-sharing its marketing and community resources, we will be advising Clover on the go-to-market strategies and PR placements as well as launching campaigns, educating Bithumb users, and distributing to our network."}),"\n",(0,r.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,r.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Burak Keceli - Tecnical Lead"}),"\n",(0,r.jsx)(t.li,{children:"Chris Li - Strategy Lead"}),"\n",(0,r.jsx)(t.li,{children:"Norelle Ng - Operations"}),"\n",(0,r.jsx)(t.li,{children:"Chris Williamson - Co-strategy Lead"}),"\n",(0,r.jsx)(t.li,{children:"Barek Sekandari - Merketing Lead"}),"\n",(0,r.jsx)(t.li,{children:"Marina Danylyuk - Chief Legal Advisor"}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"mailto:burak@buraks.blog",children:"burak@buraks.blog"})}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,r.jsx)(t.p,{children:"Clover, Inc. (Registration Number: 2045136)\nUnit 8, 3/F, Qwomar Trading Complex, Blackburne Road, Port Purcell, Road Town, Tortola, British Virgin Islands, VG1110"}),"\n",(0,r.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,r.jsx)(t.p,{children:"As a collective, the founding team has been working together for 8 months that has been in the industry for over 2 years, of which have crossed paths multiple times in different industry conferences. Within the team Burak is mainly based in the Bay Area, Chris in Hong Kong, Norelle in Canada, and Barek is based in the UK."}),"\n",(0,r.jsx)(t.p,{children:"We all come from different and unique walks of life, backgrounds, and experiences which really makes us a dynamic and strong team complementing one another's skill sets. It is neat operating as a team across the globe because we can tap into different markets and bring different things to the table. Our team has been formed to optimize and complement one another\u2019s skill sets; from DLT engineering to economics, to operational, and marketing expertise. We have a team capable of building, executing, and scaling Clover to its fullest potential."}),"\n",(0,r.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/clover",children:"https://github.com/clover-network/clover"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/clover-web3-wallet",children:"https://github.com/clover-network/clover-web3-wallet"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/website",children:"https://github.com/clover-network/website"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/clover-defi-wallet",children:"https://github.com/clover-network/clover-defi-wallet"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/clover-sdk",children:"https://github.com/clover-network/clover-sdk"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/clover-wallet",children:"https://github.com/clover-network/clover-wallet"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/clover-mobile-wallet",children:"https://github.com/clover-network/clover-mobile-wallet"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/clover-dapp-uniswap",children:"https://github.com/clover-network/clover-dapp-uniswap"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/clover-store-core",children:"https://github.com/clover-network/clover-store-core"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/clover-store-sdk",children:"https://github.com/clover-network/clover-store-sdk"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/clover-store-upload",children:"ttps://github.com/clover-network/clover-store-upload"})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/burak-ke%C3%A7eli/",children:"Burak Keceli"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/chrislky/",children:"Chris Li"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/norelleng/",children:"Norelle Ng"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/chris-williamson-aa90b290/",children:"Chris Williamson"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/barek-sekandari-597752153/",children:"Barek Sekandari"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/marinadanylyuk/",children:"Marina Danylyuk"})}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,r.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Total Estimated Duration:"})," 3 months"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Full-time equivalent (FTE):"})," 11.5"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Total Costs:"})," 0.87 BTC"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"january-2021-milestones",children:"January 2021 Milestones"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Estimated Duration:"})," 1 month"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"FTE:"})," 11.5"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Costs:"})," 0.29 BTC"]}),"\n"]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Number"}),(0,r.jsx)(t.th,{children:"Deliverable"}),(0,r.jsx)(t.th,{children:"Language/Framework"}),(0,r.jsx)(t.th,{children:"Specification"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"1."}),(0,r.jsx)(t.td,{children:"Documentation"}),(0,r.jsx)(t.td,{children:"Text"}),(0,r.jsx)(t.td,{children:"Start documenting on the various aspect of the Clover product matrix."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"2."}),(0,r.jsx)(t.td,{children:"Unit Test"}),(0,r.jsx)(t.td,{children:"TypeScript"}),(0,r.jsx)(t.td,{children:"The chain specific unit tests will cover 50% at the end of Jan."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"3."}),(0,r.jsx)(t.td,{children:"License"}),(0,r.jsx)(t.td,{children:"Text"}),(0,r.jsx)(t.td,{children:"MIT license"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"4."}),(0,r.jsx)(t.td,{children:"Article/Tutorials"}),(0,r.jsx)(t.td,{children:"Text"}),(0,r.jsx)(t.td,{children:"Writing varios tutorials to demonstrate how to setup clover nodes"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"5."}),(0,r.jsx)(t.td,{children:"Clover Rosetta Services"}),(0,r.jsx)(t.td,{children:"NodeJS"}),(0,r.jsx)(t.td,{children:"Integrating Coinbase Rosetta services to ensure the cross-chain compatibility"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"6."}),(0,r.jsx)(t.td,{children:"Clover Chain"}),(0,r.jsx)(t.td,{children:"Rust"}),(0,r.jsx)(t.td,{children:"Fully implementing distributing gas fee functionality for EVM contract deployers"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"7."}),(0,r.jsx)(t.td,{children:"Clover Explorer"}),(0,r.jsx)(t.td,{children:"Vue/NodeJS/SpringCloud"}),(0,r.jsx)(t.td,{children:"Creating first alpha build for Clover cross-chain block explorer based on Rosetta protocol"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"8."}),(0,r.jsx)(t.td,{children:"Clover Store"}),(0,r.jsx)(t.td,{children:"Android/iOS Native/IPFS/Solidity"}),(0,r.jsx)(t.td,{children:"Delivering initial build of clover store app to be able download/execute eAPPs"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"9."}),(0,r.jsx)(t.td,{children:"Clover Testnet"}),(0,r.jsx)(t.td,{children:"Rust"}),(0,r.jsx)(t.td,{children:"We will finalize the Clover testnet and the faucet to receive test tokens"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"10."}),(0,r.jsx)(t.td,{children:"Clover Wallet App"}),(0,r.jsx)(t.td,{children:"Android/iOS Native"}),(0,r.jsx)(t.td,{children:"Delivering initial build of Clover official wallet on both android/iOS"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"11."}),(0,r.jsx)(t.td,{children:"Clover Wallet Chrome Extension"}),(0,r.jsx)(t.td,{children:"JavaScript/H5"}),(0,r.jsx)(t.td,{children:"Delivering initial build of Chrome Extension of Clover web3 wallet"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"12."}),(0,r.jsx)(t.td,{children:"Substrate module: Frontier-EVM pallet"}),(0,r.jsx)(t.td,{children:"Rust"}),(0,r.jsx)(t.td,{children:"Rolling out minor EVM adjustments with Clover chain"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"february-2021-milestones",children:"February 2021 Milestones"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Estimated Duration:"})," 1 month"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"FTE:"})," 11.5"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Costs:"})," 0.29 BTC"]}),"\n"]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Number"}),(0,r.jsx)(t.th,{children:"Deliverable"}),(0,r.jsx)(t.th,{children:"Language/Framework"}),(0,r.jsx)(t.th,{children:"Specification"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"1."}),(0,r.jsx)(t.td,{children:"Documentation"}),(0,r.jsx)(t.td,{children:"Text"}),(0,r.jsx)(t.td,{children:"Covering 50% of the overall features on Clover Network"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"2."}),(0,r.jsx)(t.td,{children:"Unit Test"}),(0,r.jsx)(t.td,{children:"TypeScript"}),(0,r.jsx)(t.td,{children:"The chain specific unit tests will cover 90% by the end of Feb."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"3."}),(0,r.jsx)(t.td,{children:"Clover Chain"}),(0,r.jsx)(t.td,{children:"Rust"}),(0,r.jsx)(t.td,{children:"Implementing enterprise developers' achitecture with in the low level logic"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"4."}),(0,r.jsx)(t.td,{children:"Clover Explorer"}),(0,r.jsx)(t.td,{children:"Vue/NodeJS/SpringCloud"}),(0,r.jsx)(t.td,{children:"Delivering the beta build of Clover cross chain explorer with support of BTC/ETH/DOT/CLV"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"5."}),(0,r.jsx)(t.td,{children:"Clover OS SDK"}),(0,r.jsx)(t.td,{children:"Native/JS"}),(0,r.jsx)(t.td,{children:"The first version of Clover OS SDK with Android/iOS version will be released by the end of Feb."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"6."}),(0,r.jsx)(t.td,{children:"Clover Wallet App"}),(0,r.jsx)(t.td,{children:"Android/iOS Native"}),(0,r.jsx)(t.td,{children:"Integrating Clover OS on Clover Wallet App"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"7."}),(0,r.jsx)(t.td,{children:"Clover Wallet Chrome Extension"}),(0,r.jsx)(t.td,{children:"JavaScript/Vue"}),(0,r.jsx)(t.td,{children:"Finalizing Clover chrome extension and distribute it on google store"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"8."}),(0,r.jsx)(t.td,{children:"Tulip Editor"}),(0,r.jsx)(t.td,{children:"Vue/NodeJS/Solidity"}),(0,r.jsx)(t.td,{children:"Deliverig first POC version of Tulip editor"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"9."}),(0,r.jsx)(t.td,{children:"Clover Developer Portal"}),(0,r.jsx)(t.td,{children:"Vue/Java/NodeJS/PostgreSQL"}),(0,r.jsx)(t.td,{children:"Delivering basic functionalities of developer portal with account creation/upload/upgrade eAPP"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"10."}),(0,r.jsx)(t.td,{children:"IPFS Integration"}),(0,r.jsx)(t.td,{children:"NodeJS/Go"}),(0,r.jsx)(t.td,{children:"Integrating IPFS node along with Clover node into single Docker file for distribution"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"march-2021-milestones",children:"March 2021 Milestones"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Estimated Duration:"})," 1 month"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"FTE:"})," 11.5"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Costs:"})," 0.29 BTC"]}),"\n"]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Number"}),(0,r.jsx)(t.th,{children:"Deliverable"}),(0,r.jsx)(t.th,{children:"Language/Framework"}),(0,r.jsx)(t.th,{children:"Specification"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"1."}),(0,r.jsx)(t.td,{children:"Documentation"}),(0,r.jsx)(t.td,{children:"Text"}),(0,r.jsx)(t.td,{children:"Documentation will be ready at 1.0 version to cover 100% of the current features"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"2."}),(0,r.jsx)(t.td,{children:"Tulip Editor"}),(0,r.jsx)(t.td,{children:"Vue/NodeJS/Solidity"}),(0,r.jsx)(t.td,{children:"Delivering alpha build for Tulip Editor with EVM support"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"3."}),(0,r.jsx)(t.td,{children:"Clover Wallet App"}),(0,r.jsx)(t.td,{children:"Android/iOS Native"}),(0,r.jsx)(t.td,{children:"Releasing Clover wallet app on Google Play and Apple Store"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"4."}),(0,r.jsx)(t.td,{children:"Clover OS"}),(0,r.jsx)(t.td,{children:"Native/JS"}),(0,r.jsx)(t.td,{children:"Having Clover OS support for iOS/Android/Embedded by the end of Mar."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"5."}),(0,r.jsx)(t.td,{children:"Clover Store"}),(0,r.jsx)(t.td,{children:"Vue/IPFS/Solidity/NodeJS"}),(0,r.jsx)(t.td,{children:"Delivering the official release of Clover Store."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"6."}),(0,r.jsx)(t.td,{children:"Clover Developer Portal"}),(0,r.jsx)(t.td,{children:"Vue/Java/NodeJS/PostgreSQL"}),(0,r.jsx)(t.td,{children:"Rolling out Clover developer portal for the public with incentivize program"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"7."}),(0,r.jsx)(t.td,{children:"Clover Wallet Firefox/Safari Extension"}),(0,r.jsx)(t.td,{children:"Javascript/Vue"}),(0,r.jsx)(t.td,{children:"Delivering Clover Firefox/Safari extension"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"8."}),(0,r.jsx)(t.td,{children:"Clover Governance"}),(0,r.jsx)(t.td,{children:"Solidity/Rust"}),(0,r.jsx)(t.td,{children:"Releasing first build of Clover governance system"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"9."}),(0,r.jsx)(t.td,{children:"Storage"}),(0,r.jsx)(t.td,{children:"NodeJS"}),(0,r.jsx)(t.td,{children:"Adding IPFS/AR/CRUST support as the Storage service"})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,r.jsx)(t.p,{children:"We will start to build the developer community when TestNet is ready and SDKs are available in Q1 and Q2 2021. Detailed documentations will be provided and more contents about developing applications on Clover will be released by then. We will work with some existing developer community to hold events, as well as holding/supporting hackathons to acquire more developers once developer kits are ready in Q2/Q3 2021. Bug bounty programs will be held when Mainnet is launched.\nFor the user community, we plan to work with some industry media to release publications. Clover maintains its social media including Twitter, Youtube, Medium, and more to provide self-generated content, and covert followers and users to our Telegram, Discord, and Kakao groups. Marketing campaigns will be held to keep user activeness while Clover will focus on incentivizing users to participate in liquidity mining and governance activities. Key metrics of campaigns include the number of new user growth, the number of token holders, the number of members in the developer and the overall community, social media followers, total value locked (on liquidity mining applications), and number of votes."})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,t,i)=>{i.d(t,{R:()=>l,x:()=>s});var n=i(96540);const r={},o=n.createContext(r);function l(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0ea959d4.f28189e0.js b/assets/js/0ea959d4.f28189e0.js deleted file mode 100644 index 5591c0c91a2..00000000000 --- a/assets/js/0ea959d4.f28189e0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[73442],{29723:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>h,frontMatter:()=>l,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"applications/clover_network","title":"Clover","description":"This document is referenced in the terms and conditions and therefore needs to contain all the required information. Don\'t remove any of the mandatory parts presented in bold letters or as headlines! See the Open Grants Program Process on how to submit a proposal.","source":"@site/applications/clover_network.md","sourceDirName":"applications","slug":"/applications/clover_network","permalink":"/applications/clover_network","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/clover_network.md","tags":[],"version":"current","frontMatter":{}}');var r=i(74848),o=i(28453);const l={},s="Clover",a={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Introduction",id:"introduction",level:4},{value:"Integration",id:"integration",level:4},{value:"Team Interest",id:"team-interest",level:4},{value:"Project Details",id:"project-details",level:3},{value:"Mockups/designs",id:"mockupsdesigns",level:4},{value:"API specs",id:"api-specs",level:4},{value:"An overview of the technology stack",id:"an-overview-of-the-technology-stack",level:4},{value:"Documentation of core components, protocols, architecture",id:"documentation-of-core-components-protocols-architecture",level:4},{value:"PoC/MVP",id:"pocmvp",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"January 2021 Milestones",id:"january-2021-milestones",level:3},{value:"February 2021 Milestones",id:"february-2021-milestones",level:3},{value:"March 2021 Milestones",id:"march-2021-milestones",level:3},{value:"Future Plans",id:"future-plans",level:2}];function c(e){const t={a:"a",blockquote:"blockquote",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"clover",children:"Clover"})}),"\n",(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsxs)(t.p,{children:["This document is referenced in the terms and conditions and therefore needs to contain all the required information. Don't remove any of the mandatory parts presented in bold letters or as headlines! See the ",(0,r.jsx)(t.a,{href:"https://github.com/w3f/Open-Grants-Program/blob/master/README_2.md",children:"Open Grants Program Process"})," on how to submit a proposal."]}),"\n"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Team Name:"})," Clover Team"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Payment Address:"})," 1HsVhJeeFx5AGGBRQzrvEqGC8FM8YfW6b6"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Status:"})," ",(0,r.jsx)(t.a,{href:"https://github.com/w3f/Grant-Milestone-Delivery/pull/106#issuecomment-794570629",children:"Terminated"})]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.em,{children:"The above combination of your GitHub account submitting the application and payment address will be your unique identifier during the program. Please keep them safe."})}),"\n",(0,r.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,r.jsx)(t.p,{children:"If this application in response to an RFP then please indicate this on the first line of this section."}),"\n",(0,r.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,r.jsx)(t.h4,{id:"introduction",children:"Introduction"}),"\n",(0,r.jsx)(t.p,{children:"Clover is a Substrate-based Polkadot parachain which is committed to providing easy-to-use blockchain infrastructure by creating a one-stop comprehensive infrastructure that ultimately reduces the threshold and cost for the DeFi community."}),"\n",(0,r.jsx)(t.p,{children:"Clover provides a perfect gateway to DeFi for everyone including those who are completely new to DeFi. We bridge the gap between the crowd and the DeFi world via a user-friendly front end portal with an easy-to-navigate multi-chain wallet, block explorer/DeFi application market for regular users and a user-friendly built-in protocol library that allows developers to easily deploy their own applications. Without the need of managing multiple assets in different accounts, Clover enables users to keep track of what\u2019s happening real-time in one place."}),"\n",(0,r.jsx)(t.h4,{id:"integration",children:"Integration"}),"\n",(0,r.jsx)(t.p,{children:"We decided to develop on Polkadot mainly because of its enhanced scalability and low-in-cost among other smart contract platforms in the space. As a sharded multichain network, Polkadot allows the processing of many transactions on different chains in parallel that most legacy networks do not. While providing scaling solutions through parachains, Polkadot development is steadily advanced, has gathered a large number of developers from the community, and numerous projects are emerging endlessly in the ecosystem. On the other hand, Polkadot\u2019s Substrate technology provides a relatively easy-to-use and highly customizable framework that allows us to build our platform to communicate with other ledgers, which in a sense will likely attract more users to onboard in the future."}),"\n",(0,r.jsx)(t.p,{children:"Clover will compete to join as parachain for Polkadot and is committed to becoming a digital finance portal and DeFi service provider on Polkadot. Focusing on both to-C and to-B users, Clover will provide a series of DeFi related products and services to meet the diverse needs of different users. At the same time, developing and providing a modular DeFi protocol, which greatly reduces the technology development threshold for upper-layer applications. Clover will put together a large user base and different projects into a one-stop open and integrated financial service platform on Polkadot, using Substrate framework, to communicate with other existing parachains such as Bitcoin and Ethereum parachains. Namely, Clover will be another parachain on Polkadot. Once the parachain gets the slot to join the Polkadot relay chain, they can communicate with each other through Cross-chain Message Passing (XCMP) protocol. That means Clover can build its DeFi with the other parachain assets, like the DeFi protocols on Ethereum."}),"\n",(0,r.jsx)(t.h4,{id:"team-interest",children:"Team Interest"}),"\n",(0,r.jsx)(t.p,{children:"We are a team of like-minded people who have a dream of building a groundbreaking technology towards censorship resistance on utilizing newest additions to DLT technologies. Apart from incentivizing our core team with a structured/periodic compensation plan throughout the next 5 years with cliffs imposed in between, we give ourselves a high degree of autonomy and lots of space for creativity overall."}),"\n",(0,r.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,r.jsx)(t.h4,{id:"mockupsdesigns",children:"Mockups/designs"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://www.figma.com/file/SWg7LONt81ot05S1nlszcH/Clover-Wallet?node-id=0%3A1",children:"https://www.figma.com/file/SWg7LONt81ot05S1nlszcH/Clover-Wallet?node-id=0%3A1"})}),"\n",(0,r.jsx)(t.h4,{id:"api-specs",children:"API specs"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://docs.google.com/spreadsheets/d/1BccgFYHS8YLEX5H9NpQf4ENE9Qwniq8YNpLEXXSAaRo/edit?usp=sharing",children:"https://docs.google.com/spreadsheets/d/1BccgFYHS8YLEX5H9NpQf4ENE9Qwniq8YNpLEXXSAaRo/edit?usp=sharing"})}),"\n",(0,r.jsx)(t.h4,{id:"an-overview-of-the-technology-stack",children:"An overview of the technology stack"}),"\n",(0,r.jsx)(t.p,{children:"The bottom layer of Clover OS is built on blockchain. Application states are built on the Polkadot network, and the storage is built on IPFS. Leveraging on Polkadot\u2019s parachain technology, Clover\u2019s core advantage lies in its control panel. It can easily dock various user actions provided by its backend that has been integrated by a variety of tools including Wallet, Block Explorer, Polkadot-JS, and more. As a result, users can be connected, transact on various chains and integrate their corresponding functions with the support of Clover. Clover will collect incoming data and clean them, with our proprietary database and inhouse algorithm, data will undergo different sets of validation and analysis before they get applied and translated into visualizable data. Building on Substrate, Clover\u2019s application terminal is determined to become the entrance to the global digital finance world with state-of-art simplicities. With accessible tools, better support, and lower cost, we are likely to see more applications to be developed on Polkadot in the future. Clover will foster a diversified and scalable DeFi environment that allows for more possibilities."}),"\n",(0,r.jsx)(t.h4,{id:"documentation-of-core-components-protocols-architecture",children:"Documentation of core components, protocols, architecture"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://docs.google.com/presentation/d/1XQTdfY8IhYGsTiiFBIeTTh25eaIEck7WJ5Tz2bBTJv4/edit?usp=sharing",children:"https://docs.google.com/presentation/d/1XQTdfY8IhYGsTiiFBIeTTh25eaIEck7WJ5Tz2bBTJv4/edit?usp=sharing"})}),"\n",(0,r.jsx)(t.h4,{id:"pocmvp",children:"PoC/MVP"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://docs.google.com/document/d/1c4KecPdFp6T51YIGv45e37s7CR46MtcZEF0NSSU6Dbc/edit?usp=sharing",children:"https://docs.google.com/document/d/1c4KecPdFp6T51YIGv45e37s7CR46MtcZEF0NSSU6Dbc/edit?usp=sharing"})}),"\n",(0,r.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,r.jsx)(t.p,{children:"As a decentralized financial service provider on Polkadot, Clover provides modular DeFi protocols and application tools, which greatly reduces the repeated efforts needed in the protocol development. Modular DeFi protocols include Staking Liquidity Protocol, Decentralized Trading Protocol, Decentralized Lending Protocol, Token Dividend Protocol, Governance Protocol, and Synthetic Asset Protocols. Clover allows its upper-layer application projects to focus on improving user experiences and accelerate innovations of diversified financial applications through its composability. Clover can potentially convert a large number of DeFi users into users of its upper-layer applications. This way, upper-layer applications will be able to bootstrap its community and inject more market values."}),"\n",(0,r.jsx)(t.p,{children:"Clover will also establish a developer-centric community. In addition to giving rewards to those who provide constructive contributions, Clover will encourage its third party developers to continuously build innovative dApps on top of Clover. Each project built on Clover by the third party developers will require a solid financial foundation, and generally donations from the community are insufficient to cover development expenses which results in stagnated growth. Therefore a sound funding mechanism has been established, The Developer Incentive Program, where all the projects building on Clover can benefit from a share of transaction fees. The Developer Incentive Program (DIP) is a Clover-native consensus feature that aims to direct a percentage of transaction fees to registered smart contracts to incentivize in Clover third party contract developers and commons, mainly to boost external dApp development which ultimately enlarges the Clover DeFi ecosystem overall. The program is consistent with Clover\u2019s properties of being a decentralized operating system which does not touch the inflation schedule or alter the scarcity of CLV, but effectively increases the security of smart contracts against bugs and software vulnerabilities by enabling external development to be properly funded. Overall the benefits of the plan create the potential for a very exciting future in which Clover can grow and compete, and can reach its goal of becoming the best possible DeFi platform for all. Therefore Clover, whose key role is to be the service provider of which will allow a variety of applications to be built on top, aims to become a one-stop financial services platform that highly incentives users, developers, and upper-layer applications to innovate."}),"\n",(0,r.jsx)(t.p,{children:"With the rapid development of DeFi, the demand for insurance protocols is also increasing and has become an important part of the DeFi protocols. At the current stage of DeFi development, it is not yet possible to directly trade assets such as stocks, precious metals, and commodities. However, the synthetic asset protocol will allow simulations of assets price and facilitate transactions on the blockchain. In addition, the developer community we established will also become a source of innovative DeFi protocols. Clover allows modularization of the different protocols, thereby providing a resourceful module library for upper-layer applications, which will ultimately enable the creation of more diversified financial applications. With the help of Bithumb Global bootstrapping the liquidity of Clover by co-sharing its marketing and community resources, we will be advising Clover on the go-to-market strategies and PR placements as well as launching campaigns, educating Bithumb users, and distributing to our network."}),"\n",(0,r.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,r.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Burak Keceli - Tecnical Lead"}),"\n",(0,r.jsx)(t.li,{children:"Chris Li - Strategy Lead"}),"\n",(0,r.jsx)(t.li,{children:"Norelle Ng - Operations"}),"\n",(0,r.jsx)(t.li,{children:"Chris Williamson - Co-strategy Lead"}),"\n",(0,r.jsx)(t.li,{children:"Barek Sekandari - Merketing Lead"}),"\n",(0,r.jsx)(t.li,{children:"Marina Danylyuk - Chief Legal Advisor"}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"mailto:burak@buraks.blog",children:"burak@buraks.blog"})}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,r.jsx)(t.p,{children:"Clover, Inc. (Registration Number: 2045136)\nUnit 8, 3/F, Qwomar Trading Complex, Blackburne Road, Port Purcell, Road Town, Tortola, British Virgin Islands, VG1110"}),"\n",(0,r.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,r.jsx)(t.p,{children:"As a collective, the founding team has been working together for 8 months that has been in the industry for over 2 years, of which have crossed paths multiple times in different industry conferences. Within the team Burak is mainly based in the Bay Area, Chris in Hong Kong, Norelle in Canada, and Barek is based in the UK."}),"\n",(0,r.jsx)(t.p,{children:"We all come from different and unique walks of life, backgrounds, and experiences which really makes us a dynamic and strong team complementing one another's skill sets. It is neat operating as a team across the globe because we can tap into different markets and bring different things to the table. Our team has been formed to optimize and complement one another\u2019s skill sets; from DLT engineering to economics, to operational, and marketing expertise. We have a team capable of building, executing, and scaling Clover to its fullest potential."}),"\n",(0,r.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/clover",children:"https://github.com/clover-network/clover"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/clover-web3-wallet",children:"https://github.com/clover-network/clover-web3-wallet"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/website",children:"https://github.com/clover-network/website"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/clover-defi-wallet",children:"https://github.com/clover-network/clover-defi-wallet"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/clover-sdk",children:"https://github.com/clover-network/clover-sdk"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/clover-wallet",children:"https://github.com/clover-network/clover-wallet"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/clover-mobile-wallet",children:"https://github.com/clover-network/clover-mobile-wallet"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/clover-dapp-uniswap",children:"https://github.com/clover-network/clover-dapp-uniswap"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/clover-store-core",children:"https://github.com/clover-network/clover-store-core"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/clover-store-sdk",children:"https://github.com/clover-network/clover-store-sdk"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/clover-network/clover-store-upload",children:"ttps://github.com/clover-network/clover-store-upload"})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/burak-ke%C3%A7eli/",children:"Burak Keceli"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/chrislky/",children:"Chris Li"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/norelleng/",children:"Norelle Ng"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/chris-williamson-aa90b290/",children:"Chris Williamson"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/barek-sekandari-597752153/",children:"Barek Sekandari"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/marinadanylyuk/",children:"Marina Danylyuk"})}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,r.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Total Estimated Duration:"})," 3 months"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Full-time equivalent (FTE):"})," 11.5"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Total Costs:"})," 0.87 BTC"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"january-2021-milestones",children:"January 2021 Milestones"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Estimated Duration:"})," 1 month"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"FTE:"})," 11.5"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Costs:"})," 0.29 BTC"]}),"\n"]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Number"}),(0,r.jsx)(t.th,{children:"Deliverable"}),(0,r.jsx)(t.th,{children:"Language/Framework"}),(0,r.jsx)(t.th,{children:"Specification"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"1."}),(0,r.jsx)(t.td,{children:"Documentation"}),(0,r.jsx)(t.td,{children:"Text"}),(0,r.jsx)(t.td,{children:"Start documenting on the various aspect of the Clover product matrix."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"2."}),(0,r.jsx)(t.td,{children:"Unit Test"}),(0,r.jsx)(t.td,{children:"TypeScript"}),(0,r.jsx)(t.td,{children:"The chain specific unit tests will cover 50% at the end of Jan."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"3."}),(0,r.jsx)(t.td,{children:"License"}),(0,r.jsx)(t.td,{children:"Text"}),(0,r.jsx)(t.td,{children:"MIT license"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"4."}),(0,r.jsx)(t.td,{children:"Article/Tutorials"}),(0,r.jsx)(t.td,{children:"Text"}),(0,r.jsx)(t.td,{children:"Writing varios tutorials to demonstrate how to setup clover nodes"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"5."}),(0,r.jsx)(t.td,{children:"Clover Rosetta Services"}),(0,r.jsx)(t.td,{children:"NodeJS"}),(0,r.jsx)(t.td,{children:"Integrating Coinbase Rosetta services to ensure the cross-chain compatibility"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"6."}),(0,r.jsx)(t.td,{children:"Clover Chain"}),(0,r.jsx)(t.td,{children:"Rust"}),(0,r.jsx)(t.td,{children:"Fully implementing distributing gas fee functionality for EVM contract deployers"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"7."}),(0,r.jsx)(t.td,{children:"Clover Explorer"}),(0,r.jsx)(t.td,{children:"Vue/NodeJS/SpringCloud"}),(0,r.jsx)(t.td,{children:"Creating first alpha build for Clover cross-chain block explorer based on Rosetta protocol"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"8."}),(0,r.jsx)(t.td,{children:"Clover Store"}),(0,r.jsx)(t.td,{children:"Android/iOS Native/IPFS/Solidity"}),(0,r.jsx)(t.td,{children:"Delivering initial build of clover store app to be able download/execute eAPPs"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"9."}),(0,r.jsx)(t.td,{children:"Clover Testnet"}),(0,r.jsx)(t.td,{children:"Rust"}),(0,r.jsx)(t.td,{children:"We will finalize the Clover testnet and the faucet to receive test tokens"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"10."}),(0,r.jsx)(t.td,{children:"Clover Wallet App"}),(0,r.jsx)(t.td,{children:"Android/iOS Native"}),(0,r.jsx)(t.td,{children:"Delivering initial build of Clover official wallet on both android/iOS"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"11."}),(0,r.jsx)(t.td,{children:"Clover Wallet Chrome Extension"}),(0,r.jsx)(t.td,{children:"JavaScript/H5"}),(0,r.jsx)(t.td,{children:"Delivering initial build of Chrome Extension of Clover web3 wallet"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"12."}),(0,r.jsx)(t.td,{children:"Substrate module: Frontier-EVM pallet"}),(0,r.jsx)(t.td,{children:"Rust"}),(0,r.jsx)(t.td,{children:"Rolling out minor EVM adjustments with Clover chain"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"february-2021-milestones",children:"February 2021 Milestones"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Estimated Duration:"})," 1 month"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"FTE:"})," 11.5"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Costs:"})," 0.29 BTC"]}),"\n"]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Number"}),(0,r.jsx)(t.th,{children:"Deliverable"}),(0,r.jsx)(t.th,{children:"Language/Framework"}),(0,r.jsx)(t.th,{children:"Specification"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"1."}),(0,r.jsx)(t.td,{children:"Documentation"}),(0,r.jsx)(t.td,{children:"Text"}),(0,r.jsx)(t.td,{children:"Covering 50% of the overall features on Clover Network"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"2."}),(0,r.jsx)(t.td,{children:"Unit Test"}),(0,r.jsx)(t.td,{children:"TypeScript"}),(0,r.jsx)(t.td,{children:"The chain specific unit tests will cover 90% by the end of Feb."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"3."}),(0,r.jsx)(t.td,{children:"Clover Chain"}),(0,r.jsx)(t.td,{children:"Rust"}),(0,r.jsx)(t.td,{children:"Implementing enterprise developers' achitecture with in the low level logic"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"4."}),(0,r.jsx)(t.td,{children:"Clover Explorer"}),(0,r.jsx)(t.td,{children:"Vue/NodeJS/SpringCloud"}),(0,r.jsx)(t.td,{children:"Delivering the beta build of Clover cross chain explorer with support of BTC/ETH/DOT/CLV"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"5."}),(0,r.jsx)(t.td,{children:"Clover OS SDK"}),(0,r.jsx)(t.td,{children:"Native/JS"}),(0,r.jsx)(t.td,{children:"The first version of Clover OS SDK with Android/iOS version will be released by the end of Feb."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"6."}),(0,r.jsx)(t.td,{children:"Clover Wallet App"}),(0,r.jsx)(t.td,{children:"Android/iOS Native"}),(0,r.jsx)(t.td,{children:"Integrating Clover OS on Clover Wallet App"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"7."}),(0,r.jsx)(t.td,{children:"Clover Wallet Chrome Extension"}),(0,r.jsx)(t.td,{children:"JavaScript/Vue"}),(0,r.jsx)(t.td,{children:"Finalizing Clover chrome extension and distribute it on google store"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"8."}),(0,r.jsx)(t.td,{children:"Tulip Editor"}),(0,r.jsx)(t.td,{children:"Vue/NodeJS/Solidity"}),(0,r.jsx)(t.td,{children:"Deliverig first POC version of Tulip editor"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"9."}),(0,r.jsx)(t.td,{children:"Clover Developer Portal"}),(0,r.jsx)(t.td,{children:"Vue/Java/NodeJS/PostgreSQL"}),(0,r.jsx)(t.td,{children:"Delivering basic functionalities of developer portal with account creation/upload/upgrade eAPP"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"10."}),(0,r.jsx)(t.td,{children:"IPFS Integration"}),(0,r.jsx)(t.td,{children:"NodeJS/Go"}),(0,r.jsx)(t.td,{children:"Integrating IPFS node along with Clover node into single Docker file for distribution"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"march-2021-milestones",children:"March 2021 Milestones"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Estimated Duration:"})," 1 month"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"FTE:"})," 11.5"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Costs:"})," 0.29 BTC"]}),"\n"]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Number"}),(0,r.jsx)(t.th,{children:"Deliverable"}),(0,r.jsx)(t.th,{children:"Language/Framework"}),(0,r.jsx)(t.th,{children:"Specification"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"1."}),(0,r.jsx)(t.td,{children:"Documentation"}),(0,r.jsx)(t.td,{children:"Text"}),(0,r.jsx)(t.td,{children:"Documentation will be ready at 1.0 version to cover 100% of the current features"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"2."}),(0,r.jsx)(t.td,{children:"Tulip Editor"}),(0,r.jsx)(t.td,{children:"Vue/NodeJS/Solidity"}),(0,r.jsx)(t.td,{children:"Delivering alpha build for Tulip Editor with EVM support"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"3."}),(0,r.jsx)(t.td,{children:"Clover Wallet App"}),(0,r.jsx)(t.td,{children:"Android/iOS Native"}),(0,r.jsx)(t.td,{children:"Releasing Clover wallet app on Google Play and Apple Store"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"4."}),(0,r.jsx)(t.td,{children:"Clover OS"}),(0,r.jsx)(t.td,{children:"Native/JS"}),(0,r.jsx)(t.td,{children:"Having Clover OS support for iOS/Android/Embedded by the end of Mar."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"5."}),(0,r.jsx)(t.td,{children:"Clover Store"}),(0,r.jsx)(t.td,{children:"Vue/IPFS/Solidity/NodeJS"}),(0,r.jsx)(t.td,{children:"Delivering the official release of Clover Store."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"6."}),(0,r.jsx)(t.td,{children:"Clover Developer Portal"}),(0,r.jsx)(t.td,{children:"Vue/Java/NodeJS/PostgreSQL"}),(0,r.jsx)(t.td,{children:"Rolling out Clover developer portal for the public with incentivize program"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"7."}),(0,r.jsx)(t.td,{children:"Clover Wallet Firefox/Safari Extension"}),(0,r.jsx)(t.td,{children:"Javascript/Vue"}),(0,r.jsx)(t.td,{children:"Delivering Clover Firefox/Safari extension"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"8."}),(0,r.jsx)(t.td,{children:"Clover Governance"}),(0,r.jsx)(t.td,{children:"Solidity/Rust"}),(0,r.jsx)(t.td,{children:"Releasing first build of Clover governance system"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"9."}),(0,r.jsx)(t.td,{children:"Storage"}),(0,r.jsx)(t.td,{children:"NodeJS"}),(0,r.jsx)(t.td,{children:"Adding IPFS/AR/CRUST support as the Storage service"})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,r.jsx)(t.p,{children:"We will start to build the developer community when TestNet is ready and SDKs are available in Q1 and Q2 2021. Detailed documentations will be provided and more contents about developing applications on Clover will be released by then. We will work with some existing developer community to hold events, as well as holding/supporting hackathons to acquire more developers once developer kits are ready in Q2/Q3 2021. Bug bounty programs will be held when Mainnet is launched.\nFor the user community, we plan to work with some industry media to release publications. Clover maintains its social media including Twitter, Youtube, Medium, and more to provide self-generated content, and covert followers and users to our Telegram, Discord, and Kakao groups. Marketing campaigns will be held to keep user activeness while Clover will focus on incentivizing users to participate in liquidity mining and governance activities. Key metrics of campaigns include the number of new user growth, the number of token holders, the number of members in the developer and the overall community, social media followers, total value locked (on liquidity mining applications), and number of votes."})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,t,i)=>{i.d(t,{R:()=>l,x:()=>s});var n=i(96540);const r={},o=n.createContext(r);function l(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0f0e6e72.2b96c9f2.js b/assets/js/0f0e6e72.2b96c9f2.js deleted file mode 100644 index 0cfc1a84872..00000000000 --- a/assets/js/0f0e6e72.2b96c9f2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[91216],{11346:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"applications/Gluon_decentralized_hardware_crypto_wallet_services","title":"Gluon - Decentralized Hardware Crypto Wallet Services","description":"This document is referenced in the terms and conditions and therefore needs to contain all the required information. Don\'t remove any of the mandatory parts presented in bold letters or as headlines! See the Open Grants Program Process on how to submit a proposal.","source":"@site/applications/Gluon_decentralized_hardware_crypto_wallet_services.md","sourceDirName":"applications","slug":"/applications/Gluon_decentralized_hardware_crypto_wallet_services","permalink":"/applications/Gluon_decentralized_hardware_crypto_wallet_services","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/Gluon_decentralized_hardware_crypto_wallet_services.md","tags":[],"version":"current","frontMatter":{}}');var i=t(74848),r=t(28453);const o={},a="Gluon - Decentralized Hardware Crypto Wallet Services",l={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Unique features of Gluon",id:"unique-features-of-gluon",level:4},{value:"Key distribution and protection",id:"key-distribution-and-protection",level:4},{value:"Hardware Secure Module",id:"hardware-secure-module",level:4},{value:"Access control logic",id:"access-control-logic",level:4},{value:"User experiences",id:"user-experiences",level:4},{value:"Relationship between Gluon and T-rust",id:"relationship-between-gluon-and-t-rust",level:4},{value:"Gluon and T-rust's root of trust and PoT (Proof of Trust) consensus",id:"gluon-and-t-rusts-root-of-trust-and-pot-proof-of-trust-consensus",level:4},{value:"How other blockchains or dApps integrate with Gluon",id:"how-other-blockchains-or-dapps-integrate-with-gluon",level:4},{value:"UI mockups",id:"ui-mockups",level:4},{value:"Technology stack to be used",id:"technology-stack-to-be-used",level:4},{value:"TEA's four pillars",id:"teas-four-pillars",level:5},{value:"Prior works and demo",id:"prior-works-and-demo",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 Example \u2014 Web app and mobile app pairing",id:"milestone-1-example--web-app-and-mobile-app-pairing",level:3},{value:"Milestone 2 - Phone upgrading and social recovery",id:"milestone-2---phone-upgrading-and-social-recovery",level:3},{value:"Milestone 3 - Generate DOT asset on test net",id:"milestone-3---generate-dot-asset-on-test-net",level:3},{value:"Milestone 4 - Sign DOT transaction on testnet",id:"milestone-4---sign-dot-transaction-on-testnet",level:3},{value:"Milestone 5 - Migrate to real hardware and test on Polkadot",id:"milestone-5---migrate-to-real-hardware-and-test-on-polkadot",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const n={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"gluon---decentralized-hardware-crypto-wallet-services",children:"Gluon - Decentralized Hardware Crypto Wallet Services"})}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["This document is referenced in the terms and conditions and therefore needs to contain all the required information. Don't remove any of the mandatory parts presented in bold letters or as headlines! See the ",(0,i.jsx)(n.a,{href:"https://github.com/w3f/Open-Grants-Program/blob/master/README_2.md",children:"Open Grants Program Process"})," on how to submit a proposal."]}),"\n"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Team Name:"})," TEA Project"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Payment Address:"})," ERC20(DAI etc.):0x0cE6254832D553590349Ef7a427519d1eb8af70F"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Status:"})," ",(0,i.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/pull/182#issuecomment-1571885497",children:"Cancelled"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"The above combination of your GitHub account submitting the application and payment address will be your unique identifier during the program. Please keep them safe."})}),"\n"]}),"\n",(0,i.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"If this application is in response to an RFP, please indicate this on the first line of this section."}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(n.p,{children:"Leaking or losing private keys are the primary concerns of most blockchain users. Gluon uses a new approach to prevent such issues."}),"\n",(0,i.jsx)(n.p,{children:"Gluon is a TaaS (Trust-as-a-Service) application that provides hardware crypto wallet services to crypto users. Our main goal is to create an all-in-one private key manager for Polkadot ecosystem blockchains."}),"\n",(0,i.jsx)(n.p,{children:"Features:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Passwordless. Users won't have to take responsibility for backup mnemonic phrases. Social recovery is available for users who have lost all their authentication devices."}),"\n",(0,i.jsx)(n.li,{children:"Gluon manages Schnorr Multisig Keys that are randomly distributed and encrypted by hardware-secure-modules (HSM). We call them TEA nodes."}),"\n",(0,i.jsx)(n.li,{children:"Users only need to submit a transaction to Gluon, and it will take over the signing and committing to blockchains."}),"\n",(0,i.jsx)(n.li,{children:"Leverages popular biometric technologies in mobile devices to attain better user experiences without compromising security."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Gluon is built into a WebAssembly module loaded and ran inside the T-rust framework (they are both TEA projects). Gluon is an application (we call TeaLeaf); T-rust is a framework (TeaTree). T-rust contains layer1 and layer2; Layer1 is a blockchain built using Substrate, while Layer2 is an exceptionally designed mini OS along with WebAssembly modules that run on wasm runtime powered by ",(0,i.jsx)(n.a,{href:"https://wascc.dev",children:"WaSCC"}),". Gluon also contains layer1 and layer2. Layer1 is a Substrate pellet running inside Tea Layer1 blockchain, and layer2 is a set of WebAssembly actors running in every TEA node's TeaRuntime."]}),"\n",(0,i.jsx)(n.p,{children:"Gluon serves all Polkadot ecosystem dApps and other blockchains as an entry point (portal); it is transparent to other client chains. There is no integration needed."}),"\n",(0,i.jsx)(n.p,{children:"We designed and developed Gluon to:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Lower the barrier to blockchain end-users; improve user experiences."}),"\n",(0,i.jsx)(n.li,{children:"Protect users' crypto assets."}),"\n",(0,i.jsx)(n.li,{children:"Demonstrate the potential of the Substrate framework and TEA project."}),"\n"]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"Please provide the following:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"A brief description of the project."}),"\n",(0,i.jsx)(n.li,{children:"An indication of how you will integrate this project into Substrate / Polkadot / Kusama."}),"\n",(0,i.jsx)(n.li,{children:"An indication of why your team is interested in creating this project."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,i.jsx)(n.h4,{id:"unique-features-of-gluon",children:"Unique features of Gluon"}),"\n",(0,i.jsx)(n.p,{children:"From a users point of view, Gluon works just like a hardware wallet, but with a few differences:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"A traditional hardware wallet is just one single hardware secure module (HSM), but Gluon is a group of potentially thousands of HSM running consensus together to protect clients' assets. (Every TEA Mining Node is an HSM which can be considered as a hardware wallet)"}),"\n",(0,i.jsx)(n.li,{children:"Users need both a Polkadot extension and a Gluon mobile app to access their Gluon account as 2FA."}),"\n",(0,i.jsx)(n.li,{children:"Users can transfer authentication factors from one device to another without backing up and restoring mnemonic phases."}),"\n",(0,i.jsx)(n.li,{children:"If users lose both their computer (web auth) and phone (mobile auth), social recovery can still protect and recover their new accounts' crypto assets."}),"\n",(0,i.jsx)(n.li,{children:"Users only need to submit a transaction then Gluon will submit the signature to the client blockchain without further user interaction."}),"\n"]}),"\n",(0,i.jsx)(n.h4,{id:"key-distribution-and-protection",children:"Key distribution and protection"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://raw.githubusercontent.com/tearust/gluon-docs/d5526500c3a27deaa36fc0c0e4a2f2b8e18b1c60/res/Gluonwallet_p123.svg",alt:"p1 p2 p3"})}),"\n",(0,i.jsx)(n.p,{children:"Gluon generates Polkadot accounts for users using the 2-out-of-3 Schnorr Threshold Multsig Algorithm implemented by Schnorrkel. The account public key is aggregated from the 3 key pairs while the private keys are kept by 3 individual parties. They are called P1, P2, and P3."}),"\n",(0,i.jsx)(n.p,{children:"Among them, P1 is a single sign key stored in the users' mobile phones. Both P2 and P3 are Schnorr multisig keys. Gluon owns P2 for additional security policy control, while Guardians (assigned by the User) owns P3."}),"\n",(0,i.jsx)(n.p,{children:"P2 is a Schnorr threshold multisig key, which means instead of a single signer, a group of signers control P2. For example, we call them key-pieces such as P2-1, P2-2, P2-3, and so on. They are separately generated and stored by different TEA nodes. Multiple TEA nodes distribute the private key of each signer as the replica. We do not allow a single TEA node to hold more than one key piece of any P2 to prevent any TEA node has enough key-pieces to reach the multisig threshold. This policy also guarantees better distribution of key-pieces over TEA nodes. The signature algorithm is implemented by Schnorrkel too."}),"\n",(0,i.jsxs)(n.p,{children:["P3 is also a Schnorr threshold multisig key but each key-pieces owned by different guardians. Users need to assign their friends or legal entities as guardians. K of n guardians could sign the social recovery transaction to restore a user's account if it lost its P1. This process is called ",(0,i.jsx)(n.a,{href:"https://www.parity.io/social-recovery-on-substrate/",children:"Social Recovery"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"P1 is stored in the users' Gluon mobile app. P1 will never be exposed beyond the phone, even when upgrading devices. However, Gluon doesn't require users to take responsibility to backup mnemonic phrases. When upgrading to a new phone, the Gluon app can transfer P1 securely to the new device without exposing it to the network. If users lose their phones, there is no way to restore P1 because there are no backup mnemonic phrases. Lost or being hacked of P1 does not lead to a loss of assets, as one can use P2+P3 for recovery, and bad actors would need two keys to access crypto assets in the case of a leak. As mentioned above, Gluon can transfer all assets to one's new account by running a social recovery process."}),"\n",(0,i.jsx)(n.h4,{id:"hardware-secure-module",children:"Hardware Secure Module"}),"\n",(0,i.jsx)(n.p,{children:"TEA nodes are HSM (Hardware Secure Module). One can consider commonly used hardware wallets as special-purpose HSM, but TEA nodes are a general-purpose HSM that can do much more. The secret will never be exposed outside of hardware-protected TEA node's RAM nor saved to any storage media persistently. When transferring secrets between TEA nodes (for example, distributing replica), every TEA nodes will run Remote Attestation before an end to end encryption and send. When using P2 co-signing a transaction, the TEA Node will query the layer1 blockchain to verify the signing conditions first and then sign the transaction inside HSM. No secret leaves the HSM except the digital signature. Each co-signer sign using its holding key-piece to a signature-piece. These signature-pieces get aggregated in layer-1 blockchain to become a single signature. As long as the number of co-signers reaches the threshold, this signature can pass verification by Polkadot."}),"\n",(0,i.jsx)(n.h4,{id:"access-control-logic",children:"Access control logic"}),"\n",(0,i.jsx)(n.p,{children:"Polkadot allows unlocking User's DOT based on 2 of 3 mutisig from P1 P2 and P3. Gluon has no control over P1 (owned by the User) and P3 (owned by the User's friend - guardians). If a user no longer trusts Gluon, it can ask its guardians to sign P3 along with its P1, and the User still has full control over its assets. If a user lost its P1, it could create a new P1 then recover its assets by running the social recovery process by P2 and P3. If a user wants to update its guardians' list, it can create a new P3 since P1 and P2 are available."}),"\n",(0,i.jsx)(n.p,{children:"P1 is stored in users' mobile apps. Gluon mobile app uses general mobile security protections to protect P1. Such as Biometric ID, Symmetric encryption (6 digits user input passcode), Hardware security chip for some particular model when available. P1 along won't be more secure than other modern crypto wallet mobile apps. That's why we have additional P2 and P3 to protect the User's crypto assets."}),"\n",(0,i.jsx)(n.p,{children:"P2 is the only key owned by Gluon. When a user requests to sign a transaction, each TEA node that holds a key-piece will run authentication logic separately. The authentication logic includes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Verifying web and mobile 2FA. The User has to submit a signing request using both the Polkadot browser extension and Gluon mobile app."}),"\n",(0,i.jsx)(n.li,{children:"For spending transactions, verify the daily limit or other constraints set by the User in layer1. For example, when the User claims loss of P1 and sets its assets in the Social Recovery frozen period, Gluon will suspend the request."}),"\n",(0,i.jsx)(n.li,{children:"For social recovery transactions, verify the guardians' signature follow the predefined logic. For example, suppose a user lost both their computer and mobile phone (all 2FA). In that case, additional requirements apply to social recovery processes such as time window, sequence, or geolocation to mitigate phishing attacks."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Given such logic run on the Gluon Pellet (on-chain) and Gluon Wasm Actors (off-chain), in the future, we can easily add more complex logic without on-chain limitations."}),"\n",(0,i.jsx)(n.p,{children:"P3 is only used for Social Recovery. Because of Schnorr Mutisig Algorithm, the guardians' list never exposes in the clear on the blockchain. Even the guardians themself won't know they are selected guardians or know other guardians in the same group. There is little chance for guardians to collude and sign P3 without the User's permission."}),"\n",(0,i.jsx)(n.h4,{id:"user-experiences",children:"User experiences"}),"\n",(0,i.jsx)(n.p,{children:"From the end user's point of view, Gluon is a mobile app and a web extension. The end-user needs to install the Polkadot web extension on their browser to visit any dApp sites to generate transactions to be signed. They also will need to install a Gluon mobile app as a decentralized 2FA (not the traditional centralized 2FA)."}),"\n",(0,i.jsx)(n.p,{children:"Users can go to the Gluonwallet.com website or any other compatible dApp to create a transaction. The web extension will generate a transaction like a QR code on the web page. Users will use the Gluon mobile app to scan this QR code, verify the transaction details, then fingerprint-unlock the partial signing on the phone. Once the phone sends the partial signature to the Gluon network, TEA nodes will multisign the same tx using P2. Once two partial signatures are complete, they are aggregated and committed to the client blockchain to continue processing the transaction."}),"\n",(0,i.jsx)(n.h4,{id:"relationship-between-gluon-and-t-rust",children:"Relationship between Gluon and T-rust"}),"\n",(0,i.jsx)(n.p,{children:'From the miners\' point of view, Gluon is a dApp that runs on top of the T-rust framework. When compiling the source code, a WebAssembly file "gluon.wasm" is generated. This wasm file is loaded to the miner\'s TEA node by adding Gluon.wasm file hash to their TEA nodes\' manifest file. Miners can load this wasm module from IPFS directly. Once "gluon.wasm" is loaded into TEA runtime, this TEA node becomes a TEA hardware wallet capability provider.'}),"\n",(0,i.jsx)(n.p,{children:"Gluon.wasm only handles crypto wallet related logic. All other consensuses, security, network, and hardware validation happens in the T-rust framework."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://cdn-images-1.medium.com/max/1120/1*2O7WDwTwH4DlIr4zbOMxng.png",alt:"relationship tea"})}),"\n",(0,i.jsx)(n.h4,{id:"gluon-and-t-rusts-root-of-trust-and-pot-proof-of-trust-consensus",children:"Gluon and T-rust's root of trust and PoT (Proof of Trust) consensus"}),"\n",(0,i.jsx)(n.p,{children:"T-rust is a layer2 trusted computing solution on top of a Substrate-based blockchain (layer1). Unlike most blockchain, whose root-of-trust comes from cryptography and consensus, T-rust introduces hardware root-of-trust as the third dimension. Unlike most other blockchains that make consensus on the result, T-rust makes consensus on the proof of trust that comes from hardware TPM chips. Using hardware RoT makes the consensus much more efficient than many blockchains. T-rust can run complex or privacy-sensitive computations, which are not likely possible in other blockchains. Distributed storage of private keys needs both privacy and complex computing, so Gluon is an ideal dApp running on top of T-rust. Gluon and T-rust are two TEA Projects."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://cdn-images-1.medium.com/max/1120/1*5cLoCE4mLRw7hhDjcuaAxA.png",alt:"root of trust"})}),"\n",(0,i.jsx)(n.h4,{id:"how-other-blockchains-or-dapps-integrate-with-gluon",children:"How other blockchains or dApps integrate with Gluon"}),"\n",(0,i.jsx)(n.p,{children:"There is nothing that needs to be done for other blockchains when integrating with Gluon as long as the client blockchain supports Schnorr Multisig. Gluon is transparent to other client blockchains. Gluon is virtually a client who commits the signed transaction and listens to block events. Polkadot will support off-line Schnorr Multisig very soon."}),"\n",(0,i.jsx)(n.p,{children:"For other dApps, integrating with Gluon is as simple as adding one js API. This js API does three things:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Gathering input transaction details and show in a QR code. Prompt the User to scan this QR code using Gluon mobile app."}),"\n",(0,i.jsx)(n.li,{children:"Sending the hash of transaction and client_id in a TEA transaction to the TEA blockchain."}),"\n"]}),"\n",(0,i.jsx)(n.h4,{id:"ui-mockups",children:"UI mockups"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://github.com/tearust/gluon-docs/blob/master/res/typical-workflow.png?raw=true",alt:"typical workflow"})}),"\n",(0,i.jsx)(n.p,{children:"The diagram above shows a typical UI workflow, which is signing a DOT spending transaction."}),"\n",(0,i.jsx)(n.p,{children:"Users start a task from the web browser. It could be the Gluon web portal or any dApps' website embedded with our js API. A hash of the transaction detail is sent to Gluon TeaLeaf. A QR code is shown on the web page for the paired Gluon mobile app to scan."}),"\n",(0,i.jsx)(n.p,{children:"After scanning the QR code, the Gluon mobile app shows the transaction's detail for users to confirm visually. Users approve this transaction by fingerprinting and six digits wallet passcode."}),"\n",(0,i.jsx)(n.p,{children:"Gluon mobile app partially signs the transaction using P1. Both the signature and transaction details are sent to Gluon TeaLeaf to continue."}),"\n",(0,i.jsx)(n.p,{children:"Gluon TeaLeaf takes over the rest of the task by verifying and signing using P2. Finally, Gluon TeaLeaf sends the signature by P1 and P2 to Polkadot to complete the transaction."}),"\n",(0,i.jsx)(n.p,{children:"The User will receive the confirmation event of a completed task."}),"\n",(0,i.jsx)(n.p,{children:"All other tasks are pretty much the same workflow."}),"\n",(0,i.jsx)(n.h4,{id:"technology-stack-to-be-used",children:"Technology stack to be used"}),"\n",(0,i.jsx)(n.p,{children:"T-rust is a bit more complicated."}),"\n",(0,i.jsx)(n.h5,{id:"teas-four-pillars",children:"TEA's four pillars"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.img,{src:"https://github.com/tearust/tea-docs/raw/main/res/s8.jpg",alt:"four pillars"}),"\nIn general, TEA is based on four technologies:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Substrate: This is layer 1 of T-rust. The blockchain runs consensus on Proof-of-Trust, and immutably stores, processes, and verifies PoT (the hashes from the hardware chips)."}),"\n",(0,i.jsx)(n.li,{children:"IPFS: This is the file system and network layer of T-rust. All public code and data are stored in IPFS, but all secrets are kept inside TEA modules (the HSM)."}),"\n",(0,i.jsx)(n.li,{children:"Trusted Computing: This is where the hardware root of trust comes from. We use the TPM chips inside the TEA module (HSM) to generate Proof of Trust."}),"\n",(0,i.jsx)(n.li,{children:"WebAssembly: All running executable code is in wasm format and runs inside secure wasm runtime except for our OS, runtime, and system providers."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"90% of the source code is written in Rust. The other 6% is written in JS and the remaining 4% in Golang."}),"\n",(0,i.jsx)(n.p,{children:"For more detail on the TEA project and T-rust framework, you may visit teaproject.org."}),"\n",(0,i.jsx)(n.h4,{id:"prior-works-and-demo",children:"Prior works and demo"}),"\n",(0,i.jsx)(n.p,{children:"Gluon is a dApp and a wasm module running on top of T-rust. We currently do not have the Gluon demo running (but it will be available soon). We do have another demo app showing the capability of the T-rust framework.\nThis demo is a Tensorflow image recognization running on Substrate blockchain.\nHere is the video link:"}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["Click to play the demo video\n",(0,i.jsx)(n.a,{href:"https://youtu.be/6GYwrITSfJo",children:(0,i.jsx)(n.img,{src:"https://github.com/tearust/tea-docs/raw/main/res/start-demo-video.jpg",alt:""})})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Here's another video introduction to the TEA project:"}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["Click to play the introduction video\n",(0,i.jsx)(n.a,{href:"http://www.youtube.com/watch?v=-NgR3ySWwXg",children:(0,i.jsx)(n.img,{src:"https://github.com/tearust/tea-docs/raw/main/res/blog/WX20201215-115720@2x.png",alt:""})})]}),"\n"]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"Therefore, we ask the teams to submit (where relevant):"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Mockups/designs of any UI components"}),"\n",(0,i.jsx)(n.li,{children:"API specifications of the core functionality"}),"\n",(0,i.jsx)(n.li,{children:"An overview of the technology stack to be used"}),"\n",(0,i.jsx)(n.li,{children:"Documentation of core components, protocols, architecture, etc. to be deployed"}),"\n",(0,i.jsx)(n.li,{children:"PoC/MVP or other relevant prior work or research on the topic"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,i.jsx)(n.p,{children:"Are there any other projects similar to yours? If so, how is your project different?"}),"\n",(0,i.jsxs)(n.p,{children:["There are many existing crypto wallets in the market. They either store the private keys on client devices (phone, hardware wallet) or centralized servers. There are quite a few wallets in Web3 applications. For example: ",(0,i.jsx)(n.a,{href:"https://github.com/tearust/Open-Grants-Program/blob/master/applications/bdwallet.md",children:"bdwallet"}),", or ",(0,i.jsx)(n.a,{href:"https://github.com/tearust/Open-Grants-Program/blob/master/applications/subwallet.md",children:"subwallet"})]}),"\n",(0,i.jsx)(n.p,{children:"Gluon has a very decentralized approach. We do not store the original keys anywhere. Instead, we use the TEA project's decentralized trusted computing infrastructure to scramble, store, and multisign. This approach prevents users from losing or leaking their keys."}),"\n",(0,i.jsx)(n.p,{children:"A few crypto wallets outside of the Polkadot ecosystem are a little bit similar to ours."}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://zengo.com/security/",children:"ZenGo"}),' provides "passwordless" but still require centralized servers to store encrypted secrets. We do everything decentralized.']}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://github.com/paritytech/substrate/tree/master/frame/recovery",children:"Recovery pellets"})," is not a wallet but a Substrate pellet with the social recovery idea. We did not know it until we search for a similar project just now."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://www.ledger.com/",children:"Ledger"})," or ",(0,i.jsx)(n.a,{href:"https://trezor.io/",children:"Trezor"})," are hardware wallets. We do not sell hardware wallet units to end-users. We provide Trust-as-a-Service instead."]}),"\n",(0,i.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,i.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Name of the team leader: Kevin Zhang"}),"\n",(0,i.jsx)(n.li,{children:"Names of team members:"}),"\n"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"William Zhang"}),"\n"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Jacky Li"}),"\n",(0,i.jsx)(n.li,{children:"Raindust Yan"}),"\n",(0,i.jsx)(n.li,{children:"Zehua Jiang"}),"\n",(0,i.jsx)(n.li,{children:"Lex Pablo"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Contact Name:"})," Kevin G. Zhang"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Contact Email:"})," ",(0,i.jsx)(n.a,{href:"mailto:kevin.zhang.canada@gmail.com",children:"kevin.zhang.canada@gmail.com"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Web site:"})," teaproject.org gluonwallet.com"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Registered Address:"})," 4006 Hastings Park Ct, San Jose, CA 95136 U.S.A."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Registered Legal Entity:"})," Elk Insight LLC."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,i.jsx)(n.p,{children:"Please describe the team's relevant experience. If the project involves development work, we'd appreciated if you can single out a few interesting code commits made by team members on their past projects. For research-related grants, references to past publications and projects in a related domain are helpful."}),"\n",(0,i.jsxs)(n.p,{children:["The TEA-Project started in the year 2019. The idea originally came to the team leader, Kevin Zhang, seven years ago when working as the CTO of iHealthLabs. Utilizing patients' health data for scientific research while preventing health data breaches has always been a major problem. He initially tried to solve the dilemma using blockchain but realized that the existing blockchain technologies were far too slow to be practical. He then decided to add the root of trust alongside existing blockchain cryptography + consensus. This is the hardware root of trust. TEA uses existing mature Trusted Computing technologies to provide secure computing services to client blockchains without requiring specialized CPU features such as Phala's (TEE) Intel SGX CPU or Bitcoin's ASIC CPU. Besides the Tensorflow demo app on TEA, making a practical crypto wallet can demonstrate how TEA can do better, so they started the Gluon. The full story of the project can be found here: [Sweeping Monk Medium Blog] (",(0,i.jsx)(n.a,{href:"https://pushbar.medium.com/0-of-n-cover-letter-of-the-trusted-webassembly-runtime-on-ipfs-12a4fd8c4338",children:"https://pushbar.medium.com/0-of-n-cover-letter-of-the-trusted-webassembly-runtime-on-ipfs-12a4fd8c4338"}),")"]}),"\n",(0,i.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/tearust/Gluon_Actor",children:"https://github.com/tearust/Gluon_Actor"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/tearust/Gluon_Pellet",children:"https://github.com/tearust/Gluon_Pellet"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/tearust/gluon-docs",children:"https://github.com/tearust/gluon-docs"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/tearust/tea-docs",children:"https://github.com/tearust/tea-docs"})}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.linkedin.com/in/kevingzhang/",children:"https://www.linkedin.com/in/kevingzhang/"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.linkedin.com/in/zhijun/",children:"https://www.linkedin.com/in/zhijun/"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.linkedin.com/in/jacky-li-4039747b/",children:"https://www.linkedin.com/in/jacky-li-4039747b/"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.linkedin.com/in/mingzhi-yan-7544b9203/",children:"https://www.linkedin.com/in/mingzhi-yan-7544b9203/"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.linkedin.com/in/zehua-jiang-7494a8203/",children:"https://www.linkedin.com/in/zehua-jiang-7494a8203/"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.linkedin.com/in/lex-pablo-a638941ba/",children:"https://www.linkedin.com/in/lex-pablo-a638941ba/"})}),"\n"]}),"\n",(0,i.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"This section should break out the development roadmap into several milestones. Since the milestones will appear in the grant contract, it helps to describe the functionality we should expect, plus how we can check that such functionality exists in the product. Whenever milestones are delivered, we refer to the contract to ensure that everything has been delivered as expected."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Below, we provided an ",(0,i.jsx)(n.strong,{children:"example roadmap"}),". In the descriptions, it should be clear how the project is related to Substrate and/or Polkadot. We recommend to fit the scope of the work within a 3 month period and for teams to structure their roadmap as 1 month = 1 milestone."]}),"\n",(0,i.jsx)(n.p,{children:"For each milestone:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Please be sure to include a specification of your software. Treat it as a contract - the level of detail must be enough to later verify that the software meets the specification.\nTo assist you in defining it, we created a document with examples for some grant categories ",(0,i.jsx)(n.a,{href:"../src/grant_guidelines_per_category.md",children:"here"}),"."]}),"\n",(0,i.jsx)(n.li,{children:"Please include the total amount of funding requested per milestone."}),"\n",(0,i.jsx)(n.li,{children:"Please note that we require documentation (e.g. tutorials, API specifications, architecture details) in each milestone. This ensures that the code can be widely used by the community."}),"\n",(0,i.jsx)(n.li,{children:"Please provide a test suite, comprising unit and integration tests, along with a guide on how to run these."}),"\n",(0,i.jsx)(n.li,{children:"Please commit to providing a dockerfiles for the delivery of your project."}),"\n",(0,i.jsx)(n.li,{children:"Please indicate the milestone duration, as well as a number of Full-Time Employees working on each milestone, and include the number of days along with their cost per day."}),"\n",(0,i.jsxs)(n.li,{children:["Deliverables 0a-0d are mandatory and should not be removed, unless you explicitly specify a reason within the PR's ",(0,i.jsx)(n.code,{children:"Additional Notes"})," section (e.g. Milestone X is research-oriented and as such there is no code to test)"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Total Estimated Duration:"})," 5 months"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Full-time equivalent (FTE):"})," 2.5 FTE"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Total Costs:"})," 28k USD"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"milestone-1-example--web-app-and-mobile-app-pairing",children:"Milestone 1 Example \u2014 Web app and mobile app pairing"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Estimated Duration:"})," 4 Weeks"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"FTE:"})," 2.5 FTE"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Costs:"})," 5.6k USD"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Number"}),(0,i.jsx)(n.th,{children:"Deliverable"}),(0,i.jsx)(n.th,{children:"Specification"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0"}),(0,i.jsx)(n.td,{children:"Gluon Website and Web Portal Framework"}),(0,i.jsx)(n.td,{children:"The gluonwallet.com website; homepage, documents, and web app menu structure"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1"}),(0,i.jsx)(n.td,{children:"Milestone1 feature list and test instruction"}),(0,i.jsx)(n.td,{children:"features: Users can create Gluon accounts and pair the Gluon mobile App with the web portal."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2"}),(0,i.jsx)(n.td,{children:"Test docker-compose"}),(0,i.jsx)(n.td,{children:"Testers can run TEA simulator to run locally to test completed features"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3"}),(0,i.jsx)(n.td,{children:"Source code on GitHub"}),(0,i.jsx)(n.td,{children:"Anyone can download, build, and run local testing environments"})]})]})]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Task ID"}),(0,i.jsx)(n.th,{children:"Module name"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0.1"}),(0,i.jsx)(n.td,{children:"Add faucet page"}),(0,i.jsx)(n.td,{children:"users can add free test tokens to accounts to start testing"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1.1"}),(0,i.jsx)(n.td,{children:"User portal web page"}),(0,i.jsx)(n.td,{children:"Search user public profiles by users' Polkadot address. All information is open public from the blockchain. Users can see pairing mobile app id. This is the feature in milestone 1"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1.2"}),(0,i.jsx)(n.td,{children:"Pairing web UI"}),(0,i.jsx)(n.td,{children:"This is the web UI to start mobile app pairing"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2.0"}),(0,i.jsx)(n.td,{children:"Mobile app framework"}),(0,i.jsx)(n.td,{children:"Gluon mobile app framework. We will add features one by one"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2.1"}),(0,i.jsx)(n.td,{children:"Pairing mobile UI, scan QR code to start"}),(0,i.jsx)(n.td,{children:"After the mobile app is installed, scan web pairing page to start pairing"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2.2"}),(0,i.jsx)(n.td,{children:"Mobile user profile page"}),(0,i.jsx)(n.td,{children:"After pairing, show user profile. This is the same as the WebUI user profile content"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3.0"}),(0,i.jsx)(n.td,{children:"Gluon substrate pellet: Pairing/Unpairing API"}),(0,i.jsx)(n.td,{children:"Add mobile app pub id to existing Gluon account. Pair the mobile to this user"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3.1"}),(0,i.jsx)(n.td,{children:"Gluon substrate pellet: Search API"}),(0,i.jsx)(n.td,{children:"Search user public information"})]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"milestone-2---phone-upgrading-and-social-recovery",children:"Milestone 2 - Phone upgrading and social recovery"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Estimated Duration:"})," 4 Weeks"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"FTE"})," 2.5 FTE"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Cost:"})," 5.6k USD"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Number"}),(0,i.jsx)(n.th,{children:"Deliverable"}),(0,i.jsx)(n.th,{children:"Specification"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0"}),(0,i.jsx)(n.td,{children:"Testable features"}),(0,i.jsx)(n.td,{children:"User upgrade new phone and transfer P1 from old phone to new phone. Use social recovery to keep assets and transfer to a new account in case of lost web and mobile app"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1"}),(0,i.jsx)(n.td,{children:"Update test instruction"}),(0,i.jsx)(n.td,{children:"update with new features"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2"}),(0,i.jsx)(n.td,{children:"Source code"}),(0,i.jsx)(n.td,{})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3"}),(0,i.jsx)(n.td,{children:"Video tutorial"}),(0,i.jsx)(n.td,{children:"Full User's manual"})]})]})]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Task ID"}),(0,i.jsx)(n.th,{children:"Module name"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1.0"}),(0,i.jsx)(n.td,{children:"layer1"}),(0,i.jsx)(n.td,{children:"Add social recovery API"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2.0"}),(0,i.jsx)(n.td,{children:"Web Portal"}),(0,i.jsx)(n.td,{children:"Create social recovery page"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3.0"}),(0,i.jsx)(n.td,{children:"Mobile app"}),(0,i.jsx)(n.td,{children:"Social recovery if initiated from phone"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3.1"}),(0,i.jsx)(n.td,{children:"Mobile app"}),(0,i.jsx)(n.td,{children:"Scan QR code to confirm friends recovery request"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"4.1"}),(0,i.jsx)(n.td,{children:"Layer1"}),(0,i.jsx)(n.td,{children:"Suspend old account activity during the recovering process"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"4.2"}),(0,i.jsx)(n.td,{children:"Gluon TeaLeaf"}),(0,i.jsx)(n.td,{children:"Generate a new account to accept assets"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"5.0"}),(0,i.jsx)(n.td,{children:"Layer1"}),(0,i.jsx)(n.td,{children:"Verify all social recovery confirmation, transfer assets to new account"})]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"milestone-3---generate-dot-asset-on-test-net",children:"Milestone 3 - Generate DOT asset on test net"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Estimated Duration:"})," 4 Weeks"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"FTE:"})," 2.5 FTE"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Costs:"})," 5.6k USD\nPrerequisites:\nThis milestone require Schnorrkel threshold signature issue ",(0,i.jsx)(n.a,{href:"https://github.com/w3f/schnorrkel/issues/11%3E",children:"https://github.com/w3f/schnorrkel/issues/11>"})," completes."]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Number"}),(0,i.jsx)(n.th,{children:"Deliverable"}),(0,i.jsx)(n.th,{children:"Specification"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0"}),(0,i.jsx)(n.td,{children:"Testable features"}),(0,i.jsx)(n.td,{children:"User can generate DOT addresses"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1"}),(0,i.jsx)(n.td,{children:"Update test instruction"}),(0,i.jsx)(n.td,{children:"update with new features"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2"}),(0,i.jsx)(n.td,{children:"Source code"}),(0,i.jsx)(n.td,{})]})]})]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Task ID"}),(0,i.jsx)(n.th,{children:"Module name"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1.0"}),(0,i.jsx)(n.td,{children:'Add a "generate DOT asset" page on web UI'}),(0,i.jsx)(n.td,{children:"user can trigger create new DOT address. Input (k,n) and other parameters"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1.1"}),(0,i.jsx)(n.td,{children:"List user assets on web UI"}),(0,i.jsx)(n.td,{children:"When successfully generated DOT address, it will show on web UI"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2.0"}),(0,i.jsx)(n.td,{children:'Add a "generate DOT asset" page on mobile app'}),(0,i.jsx)(n.td,{children:"users scan the QR code on web UI. Review all tx parameters. Fingerprint unlock to commit tx to layer-1 blockchain"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2.1"}),(0,i.jsx)(n.td,{children:"List user assets on mobile app"}),(0,i.jsx)(n.td,{children:"When successfully generated DOT address, it will show mobile app"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2.2"}),(0,i.jsx)(n.td,{children:"Mobile app"}),(0,i.jsx)(n.td,{children:"Generate P1"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3.0"}),(0,i.jsx)(n.td,{children:'Substrate pellet: Create "generate DOT asset" task'}),(0,i.jsx)(n.td,{children:"Layer 1 verify user auth, create a task in the blockchain so that layer-2 can handle"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"4.0"}),(0,i.jsx)(n.td,{children:"Gluon wasm module (TeaLeaf)"}),(0,i.jsx)(n.td,{children:"Select delegator and executor"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"4.1"}),(0,i.jsx)(n.td,{children:"Gluon TeaLeaf"}),(0,i.jsx)(n.td,{children:"Executor aggregates public key from initial pinners"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"4.2"}),(0,i.jsx)(n.td,{children:"Gluon TeaLeaf"}),(0,i.jsx)(n.td,{children:"Delegator verify and response to Layer 1"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"4.3"}),(0,i.jsx)(n.td,{children:"Gluon TeaLeaf"}),(0,i.jsx)(n.td,{children:"Suspend old P2 P3 when a social recovery task in progress"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"5.0"}),(0,i.jsx)(n.td,{children:"Layer1"}),(0,i.jsx)(n.td,{children:"Create Schnorr multisig test chain"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"5.1"}),(0,i.jsx)(n.td,{children:"Layer1"}),(0,i.jsx)(n.td,{children:"Update user assets"})]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"milestone-4---sign-dot-transaction-on-testnet",children:"Milestone 4 - Sign DOT transaction on testnet"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Estimated Duration:"})," 4 Weeks"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"FTE"})," 2.5 FTE"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Cost:"})," 5.6k USD"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Number"}),(0,i.jsx)(n.th,{children:"Deliverable"}),(0,i.jsx)(n.th,{children:"Specification"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0"}),(0,i.jsx)(n.td,{children:"Testable features"}),(0,i.jsx)(n.td,{children:"User send DOT transfer transaction. Gluon sign the transaction and send it to test chain"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1"}),(0,i.jsx)(n.td,{children:"Update test instruction"}),(0,i.jsx)(n.td,{children:"update with new features"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2"}),(0,i.jsx)(n.td,{children:"Source code"}),(0,i.jsx)(n.td,{})]})]})]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Task ID"}),(0,i.jsx)(n.th,{children:"Module name"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1.0"}),(0,i.jsx)(n.td,{children:"Gluon TeaLeaf"}),(0,i.jsx)(n.td,{children:"DOT SPV light node in layer2 to communicate with DOT chain"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2.0"}),(0,i.jsx)(n.td,{children:"Web Portal"}),(0,i.jsx)(n.td,{children:"Create DOT transaction page"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3.0"}),(0,i.jsx)(n.td,{children:"Mobile app"}),(0,i.jsx)(n.td,{children:"Scan, verify DOT transaction, and send to layer 1"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3.1"}),(0,i.jsx)(n.td,{children:"Mobile app"}),(0,i.jsx)(n.td,{children:"Partial Sign tx using P1. Send the P1 signature to DOT light node"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"4.0"}),(0,i.jsx)(n.td,{children:"Gluon TeaLeaf"}),(0,i.jsx)(n.td,{children:"Executor find pinners and organize them to multisign tx individually"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"4.1"}),(0,i.jsx)(n.td,{children:"Gluon TeaLeaf"}),(0,i.jsx)(n.td,{children:"Executor verify and aggregates signatures. Send the P2 signatures to test net"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"5.0"}),(0,i.jsx)(n.td,{children:"Layer 1"}),(0,i.jsx)(n.td,{children:"Settle payment distribution"})]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"milestone-5---migrate-to-real-hardware-and-test-on-polkadot",children:"Milestone 5 - Migrate to real hardware and test on Polkadot"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Estimated Duration:"})," 4 Weeks"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"FTE"})," 2.5 FTE"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Cost:"})," 5.6k USD"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Number"}),(0,i.jsx)(n.th,{children:"Deliverable"}),(0,i.jsx)(n.th,{children:"Specification"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0"}),(0,i.jsx)(n.td,{children:"Testable features"}),(0,i.jsx)(n.td,{children:"All logic runs on Polkadot mainnet"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1"}),(0,i.jsx)(n.td,{children:"Update test instruction"}),(0,i.jsx)(n.td,{children:"update with new features"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2"}),(0,i.jsx)(n.td,{children:"Source code"}),(0,i.jsx)(n.td,{})]})]})]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Task ID"}),(0,i.jsx)(n.th,{children:"Module name"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1.0"}),(0,i.jsx)(n.td,{children:"All modules"}),(0,i.jsx)(n.td,{children:"Migrate to AWS Nitro enclave and Integration test"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2.0"}),(0,i.jsx)(n.td,{children:"Web Portal"}),(0,i.jsx)(n.td,{children:"User's manual, instruction"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3.0"}),(0,i.jsx)(n.td,{children:"Documents"}),(0,i.jsx)(n.td,{children:"Integration API for 3rd party"})]})]})]}),"\n",(0,i.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,i.jsx)(n.p,{children:"Gluon will be a full-featured demo application for the TEA project once it is ready. So far, there are a few limitations that we are working on."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Integrate with ",(0,i.jsx)(n.a,{href:"https://github.com/parallaxsecond/parsec",children:"Parsec"}),". Parsec can be an abstract layer between TeaRuntime and security-related hardware. It makes TEA agnostic to different hardware platforms. It may increase the adaption of TEA."]}),"\n",(0,i.jsx)(n.li,{children:"Besides DOT, we will all Polkadot ecosystem chains and other Schnorr signature compatible chains."}),"\n",(0,i.jsx)(n.li,{children:"We will retire our facade interface service and use off-chain workers instead."}),"\n",(0,i.jsx)(n.li,{children:"Besides hardware protection and Schnorr Multisig algorithm, we open eyes to SMPC and FHE algorithm such as BLS Signature Scheme."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Most items in this to-do list are part of the TEA Project plan. When TEA is ready, most of the features will be available too."}),"\n",(0,i.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,i.jsx)(n.p,{children:"We started the TEA project in 2019. It has been under the radar until recently when it was released to the public. We believe the TEA project could grow large and become the backend service platform for a new type of dApps. These dApps can go beyond the limit of traditional blockchain technologies. Gluon is just one of the many possible demo apps. Once our honor gets granted, we will start looking for investors and hire a CEO and more developers to join us. We hope to maintain a long term and close relationship with the Polkadot community."})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>a});var s=t(96540);const i={},r=s.createContext(i);function o(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0f0e6e72.4eece97f.js b/assets/js/0f0e6e72.4eece97f.js new file mode 100644 index 00000000000..fe03d19aa65 --- /dev/null +++ b/assets/js/0f0e6e72.4eece97f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[91216],{70267:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"applications/Gluon_decentralized_hardware_crypto_wallet_services","title":"Gluon - Decentralized Hardware Crypto Wallet Services","description":"This document is referenced in the terms and conditions and therefore needs to contain all the required information. Don\'t remove any of the mandatory parts presented in bold letters or as headlines! See the Open Grants Program Process on how to submit a proposal.","source":"@site/applications/Gluon_decentralized_hardware_crypto_wallet_services.md","sourceDirName":"applications","slug":"/applications/Gluon_decentralized_hardware_crypto_wallet_services","permalink":"/applications/Gluon_decentralized_hardware_crypto_wallet_services","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/Gluon_decentralized_hardware_crypto_wallet_services.md","tags":[],"version":"current","frontMatter":{}}');var i=t(74848),r=t(28453);const o={},a="Gluon - Decentralized Hardware Crypto Wallet Services",l={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Unique features of Gluon",id:"unique-features-of-gluon",level:4},{value:"Key distribution and protection",id:"key-distribution-and-protection",level:4},{value:"Hardware Secure Module",id:"hardware-secure-module",level:4},{value:"Access control logic",id:"access-control-logic",level:4},{value:"User experiences",id:"user-experiences",level:4},{value:"Relationship between Gluon and T-rust",id:"relationship-between-gluon-and-t-rust",level:4},{value:"Gluon and T-rust's root of trust and PoT (Proof of Trust) consensus",id:"gluon-and-t-rusts-root-of-trust-and-pot-proof-of-trust-consensus",level:4},{value:"How other blockchains or dApps integrate with Gluon",id:"how-other-blockchains-or-dapps-integrate-with-gluon",level:4},{value:"UI mockups",id:"ui-mockups",level:4},{value:"Technology stack to be used",id:"technology-stack-to-be-used",level:4},{value:"TEA's four pillars",id:"teas-four-pillars",level:5},{value:"Prior works and demo",id:"prior-works-and-demo",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 Example \u2014 Web app and mobile app pairing",id:"milestone-1-example--web-app-and-mobile-app-pairing",level:3},{value:"Milestone 2 - Phone upgrading and social recovery",id:"milestone-2---phone-upgrading-and-social-recovery",level:3},{value:"Milestone 3 - Generate DOT asset on test net",id:"milestone-3---generate-dot-asset-on-test-net",level:3},{value:"Milestone 4 - Sign DOT transaction on testnet",id:"milestone-4---sign-dot-transaction-on-testnet",level:3},{value:"Milestone 5 - Migrate to real hardware and test on Polkadot",id:"milestone-5---migrate-to-real-hardware-and-test-on-polkadot",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const n={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"gluon---decentralized-hardware-crypto-wallet-services",children:"Gluon - Decentralized Hardware Crypto Wallet Services"})}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["This document is referenced in the terms and conditions and therefore needs to contain all the required information. Don't remove any of the mandatory parts presented in bold letters or as headlines! See the ",(0,i.jsx)(n.a,{href:"https://github.com/w3f/Open-Grants-Program/blob/master/README_2.md",children:"Open Grants Program Process"})," on how to submit a proposal."]}),"\n"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Team Name:"})," TEA Project"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Payment Address:"})," ERC20(DAI etc.):0x0cE6254832D553590349Ef7a427519d1eb8af70F"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Status:"})," ",(0,i.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/pull/182#issuecomment-1571885497",children:"Cancelled"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"The above combination of your GitHub account submitting the application and payment address will be your unique identifier during the program. Please keep them safe."})}),"\n"]}),"\n",(0,i.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"If this application is in response to an RFP, please indicate this on the first line of this section."}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(n.p,{children:"Leaking or losing private keys are the primary concerns of most blockchain users. Gluon uses a new approach to prevent such issues."}),"\n",(0,i.jsx)(n.p,{children:"Gluon is a TaaS (Trust-as-a-Service) application that provides hardware crypto wallet services to crypto users. Our main goal is to create an all-in-one private key manager for Polkadot ecosystem blockchains."}),"\n",(0,i.jsx)(n.p,{children:"Features:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Passwordless. Users won't have to take responsibility for backup mnemonic phrases. Social recovery is available for users who have lost all their authentication devices."}),"\n",(0,i.jsx)(n.li,{children:"Gluon manages Schnorr Multisig Keys that are randomly distributed and encrypted by hardware-secure-modules (HSM). We call them TEA nodes."}),"\n",(0,i.jsx)(n.li,{children:"Users only need to submit a transaction to Gluon, and it will take over the signing and committing to blockchains."}),"\n",(0,i.jsx)(n.li,{children:"Leverages popular biometric technologies in mobile devices to attain better user experiences without compromising security."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Gluon is built into a WebAssembly module loaded and ran inside the T-rust framework (they are both TEA projects). Gluon is an application (we call TeaLeaf); T-rust is a framework (TeaTree). T-rust contains layer1 and layer2; Layer1 is a blockchain built using Substrate, while Layer2 is an exceptionally designed mini OS along with WebAssembly modules that run on wasm runtime powered by ",(0,i.jsx)(n.a,{href:"https://wascc.dev",children:"WaSCC"}),". Gluon also contains layer1 and layer2. Layer1 is a Substrate pellet running inside Tea Layer1 blockchain, and layer2 is a set of WebAssembly actors running in every TEA node's TeaRuntime."]}),"\n",(0,i.jsx)(n.p,{children:"Gluon serves all Polkadot ecosystem dApps and other blockchains as an entry point (portal); it is transparent to other client chains. There is no integration needed."}),"\n",(0,i.jsx)(n.p,{children:"We designed and developed Gluon to:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Lower the barrier to blockchain end-users; improve user experiences."}),"\n",(0,i.jsx)(n.li,{children:"Protect users' crypto assets."}),"\n",(0,i.jsx)(n.li,{children:"Demonstrate the potential of the Substrate framework and TEA project."}),"\n"]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"Please provide the following:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"A brief description of the project."}),"\n",(0,i.jsx)(n.li,{children:"An indication of how you will integrate this project into Substrate / Polkadot / Kusama."}),"\n",(0,i.jsx)(n.li,{children:"An indication of why your team is interested in creating this project."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,i.jsx)(n.h4,{id:"unique-features-of-gluon",children:"Unique features of Gluon"}),"\n",(0,i.jsx)(n.p,{children:"From a users point of view, Gluon works just like a hardware wallet, but with a few differences:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"A traditional hardware wallet is just one single hardware secure module (HSM), but Gluon is a group of potentially thousands of HSM running consensus together to protect clients' assets. (Every TEA Mining Node is an HSM which can be considered as a hardware wallet)"}),"\n",(0,i.jsx)(n.li,{children:"Users need both a Polkadot extension and a Gluon mobile app to access their Gluon account as 2FA."}),"\n",(0,i.jsx)(n.li,{children:"Users can transfer authentication factors from one device to another without backing up and restoring mnemonic phases."}),"\n",(0,i.jsx)(n.li,{children:"If users lose both their computer (web auth) and phone (mobile auth), social recovery can still protect and recover their new accounts' crypto assets."}),"\n",(0,i.jsx)(n.li,{children:"Users only need to submit a transaction then Gluon will submit the signature to the client blockchain without further user interaction."}),"\n"]}),"\n",(0,i.jsx)(n.h4,{id:"key-distribution-and-protection",children:"Key distribution and protection"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://raw.githubusercontent.com/tearust/gluon-docs/d5526500c3a27deaa36fc0c0e4a2f2b8e18b1c60/res/Gluonwallet_p123.svg",alt:"p1 p2 p3"})}),"\n",(0,i.jsx)(n.p,{children:"Gluon generates Polkadot accounts for users using the 2-out-of-3 Schnorr Threshold Multsig Algorithm implemented by Schnorrkel. The account public key is aggregated from the 3 key pairs while the private keys are kept by 3 individual parties. They are called P1, P2, and P3."}),"\n",(0,i.jsx)(n.p,{children:"Among them, P1 is a single sign key stored in the users' mobile phones. Both P2 and P3 are Schnorr multisig keys. Gluon owns P2 for additional security policy control, while Guardians (assigned by the User) owns P3."}),"\n",(0,i.jsx)(n.p,{children:"P2 is a Schnorr threshold multisig key, which means instead of a single signer, a group of signers control P2. For example, we call them key-pieces such as P2-1, P2-2, P2-3, and so on. They are separately generated and stored by different TEA nodes. Multiple TEA nodes distribute the private key of each signer as the replica. We do not allow a single TEA node to hold more than one key piece of any P2 to prevent any TEA node has enough key-pieces to reach the multisig threshold. This policy also guarantees better distribution of key-pieces over TEA nodes. The signature algorithm is implemented by Schnorrkel too."}),"\n",(0,i.jsxs)(n.p,{children:["P3 is also a Schnorr threshold multisig key but each key-pieces owned by different guardians. Users need to assign their friends or legal entities as guardians. K of n guardians could sign the social recovery transaction to restore a user's account if it lost its P1. This process is called ",(0,i.jsx)(n.a,{href:"https://www.parity.io/social-recovery-on-substrate/",children:"Social Recovery"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"P1 is stored in the users' Gluon mobile app. P1 will never be exposed beyond the phone, even when upgrading devices. However, Gluon doesn't require users to take responsibility to backup mnemonic phrases. When upgrading to a new phone, the Gluon app can transfer P1 securely to the new device without exposing it to the network. If users lose their phones, there is no way to restore P1 because there are no backup mnemonic phrases. Lost or being hacked of P1 does not lead to a loss of assets, as one can use P2+P3 for recovery, and bad actors would need two keys to access crypto assets in the case of a leak. As mentioned above, Gluon can transfer all assets to one's new account by running a social recovery process."}),"\n",(0,i.jsx)(n.h4,{id:"hardware-secure-module",children:"Hardware Secure Module"}),"\n",(0,i.jsx)(n.p,{children:"TEA nodes are HSM (Hardware Secure Module). One can consider commonly used hardware wallets as special-purpose HSM, but TEA nodes are a general-purpose HSM that can do much more. The secret will never be exposed outside of hardware-protected TEA node's RAM nor saved to any storage media persistently. When transferring secrets between TEA nodes (for example, distributing replica), every TEA nodes will run Remote Attestation before an end to end encryption and send. When using P2 co-signing a transaction, the TEA Node will query the layer1 blockchain to verify the signing conditions first and then sign the transaction inside HSM. No secret leaves the HSM except the digital signature. Each co-signer sign using its holding key-piece to a signature-piece. These signature-pieces get aggregated in layer-1 blockchain to become a single signature. As long as the number of co-signers reaches the threshold, this signature can pass verification by Polkadot."}),"\n",(0,i.jsx)(n.h4,{id:"access-control-logic",children:"Access control logic"}),"\n",(0,i.jsx)(n.p,{children:"Polkadot allows unlocking User's DOT based on 2 of 3 mutisig from P1 P2 and P3. Gluon has no control over P1 (owned by the User) and P3 (owned by the User's friend - guardians). If a user no longer trusts Gluon, it can ask its guardians to sign P3 along with its P1, and the User still has full control over its assets. If a user lost its P1, it could create a new P1 then recover its assets by running the social recovery process by P2 and P3. If a user wants to update its guardians' list, it can create a new P3 since P1 and P2 are available."}),"\n",(0,i.jsx)(n.p,{children:"P1 is stored in users' mobile apps. Gluon mobile app uses general mobile security protections to protect P1. Such as Biometric ID, Symmetric encryption (6 digits user input passcode), Hardware security chip for some particular model when available. P1 along won't be more secure than other modern crypto wallet mobile apps. That's why we have additional P2 and P3 to protect the User's crypto assets."}),"\n",(0,i.jsx)(n.p,{children:"P2 is the only key owned by Gluon. When a user requests to sign a transaction, each TEA node that holds a key-piece will run authentication logic separately. The authentication logic includes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Verifying web and mobile 2FA. The User has to submit a signing request using both the Polkadot browser extension and Gluon mobile app."}),"\n",(0,i.jsx)(n.li,{children:"For spending transactions, verify the daily limit or other constraints set by the User in layer1. For example, when the User claims loss of P1 and sets its assets in the Social Recovery frozen period, Gluon will suspend the request."}),"\n",(0,i.jsx)(n.li,{children:"For social recovery transactions, verify the guardians' signature follow the predefined logic. For example, suppose a user lost both their computer and mobile phone (all 2FA). In that case, additional requirements apply to social recovery processes such as time window, sequence, or geolocation to mitigate phishing attacks."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Given such logic run on the Gluon Pellet (on-chain) and Gluon Wasm Actors (off-chain), in the future, we can easily add more complex logic without on-chain limitations."}),"\n",(0,i.jsx)(n.p,{children:"P3 is only used for Social Recovery. Because of Schnorr Mutisig Algorithm, the guardians' list never exposes in the clear on the blockchain. Even the guardians themself won't know they are selected guardians or know other guardians in the same group. There is little chance for guardians to collude and sign P3 without the User's permission."}),"\n",(0,i.jsx)(n.h4,{id:"user-experiences",children:"User experiences"}),"\n",(0,i.jsx)(n.p,{children:"From the end user's point of view, Gluon is a mobile app and a web extension. The end-user needs to install the Polkadot web extension on their browser to visit any dApp sites to generate transactions to be signed. They also will need to install a Gluon mobile app as a decentralized 2FA (not the traditional centralized 2FA)."}),"\n",(0,i.jsx)(n.p,{children:"Users can go to the Gluonwallet.com website or any other compatible dApp to create a transaction. The web extension will generate a transaction like a QR code on the web page. Users will use the Gluon mobile app to scan this QR code, verify the transaction details, then fingerprint-unlock the partial signing on the phone. Once the phone sends the partial signature to the Gluon network, TEA nodes will multisign the same tx using P2. Once two partial signatures are complete, they are aggregated and committed to the client blockchain to continue processing the transaction."}),"\n",(0,i.jsx)(n.h4,{id:"relationship-between-gluon-and-t-rust",children:"Relationship between Gluon and T-rust"}),"\n",(0,i.jsx)(n.p,{children:'From the miners\' point of view, Gluon is a dApp that runs on top of the T-rust framework. When compiling the source code, a WebAssembly file "gluon.wasm" is generated. This wasm file is loaded to the miner\'s TEA node by adding Gluon.wasm file hash to their TEA nodes\' manifest file. Miners can load this wasm module from IPFS directly. Once "gluon.wasm" is loaded into TEA runtime, this TEA node becomes a TEA hardware wallet capability provider.'}),"\n",(0,i.jsx)(n.p,{children:"Gluon.wasm only handles crypto wallet related logic. All other consensuses, security, network, and hardware validation happens in the T-rust framework."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://cdn-images-1.medium.com/max/1120/1*2O7WDwTwH4DlIr4zbOMxng.png",alt:"relationship tea"})}),"\n",(0,i.jsx)(n.h4,{id:"gluon-and-t-rusts-root-of-trust-and-pot-proof-of-trust-consensus",children:"Gluon and T-rust's root of trust and PoT (Proof of Trust) consensus"}),"\n",(0,i.jsx)(n.p,{children:"T-rust is a layer2 trusted computing solution on top of a Substrate-based blockchain (layer1). Unlike most blockchain, whose root-of-trust comes from cryptography and consensus, T-rust introduces hardware root-of-trust as the third dimension. Unlike most other blockchains that make consensus on the result, T-rust makes consensus on the proof of trust that comes from hardware TPM chips. Using hardware RoT makes the consensus much more efficient than many blockchains. T-rust can run complex or privacy-sensitive computations, which are not likely possible in other blockchains. Distributed storage of private keys needs both privacy and complex computing, so Gluon is an ideal dApp running on top of T-rust. Gluon and T-rust are two TEA Projects."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://cdn-images-1.medium.com/max/1120/1*5cLoCE4mLRw7hhDjcuaAxA.png",alt:"root of trust"})}),"\n",(0,i.jsx)(n.h4,{id:"how-other-blockchains-or-dapps-integrate-with-gluon",children:"How other blockchains or dApps integrate with Gluon"}),"\n",(0,i.jsx)(n.p,{children:"There is nothing that needs to be done for other blockchains when integrating with Gluon as long as the client blockchain supports Schnorr Multisig. Gluon is transparent to other client blockchains. Gluon is virtually a client who commits the signed transaction and listens to block events. Polkadot will support off-line Schnorr Multisig very soon."}),"\n",(0,i.jsx)(n.p,{children:"For other dApps, integrating with Gluon is as simple as adding one js API. This js API does three things:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Gathering input transaction details and show in a QR code. Prompt the User to scan this QR code using Gluon mobile app."}),"\n",(0,i.jsx)(n.li,{children:"Sending the hash of transaction and client_id in a TEA transaction to the TEA blockchain."}),"\n"]}),"\n",(0,i.jsx)(n.h4,{id:"ui-mockups",children:"UI mockups"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://github.com/tearust/gluon-docs/blob/master/res/typical-workflow.png?raw=true",alt:"typical workflow"})}),"\n",(0,i.jsx)(n.p,{children:"The diagram above shows a typical UI workflow, which is signing a DOT spending transaction."}),"\n",(0,i.jsx)(n.p,{children:"Users start a task from the web browser. It could be the Gluon web portal or any dApps' website embedded with our js API. A hash of the transaction detail is sent to Gluon TeaLeaf. A QR code is shown on the web page for the paired Gluon mobile app to scan."}),"\n",(0,i.jsx)(n.p,{children:"After scanning the QR code, the Gluon mobile app shows the transaction's detail for users to confirm visually. Users approve this transaction by fingerprinting and six digits wallet passcode."}),"\n",(0,i.jsx)(n.p,{children:"Gluon mobile app partially signs the transaction using P1. Both the signature and transaction details are sent to Gluon TeaLeaf to continue."}),"\n",(0,i.jsx)(n.p,{children:"Gluon TeaLeaf takes over the rest of the task by verifying and signing using P2. Finally, Gluon TeaLeaf sends the signature by P1 and P2 to Polkadot to complete the transaction."}),"\n",(0,i.jsx)(n.p,{children:"The User will receive the confirmation event of a completed task."}),"\n",(0,i.jsx)(n.p,{children:"All other tasks are pretty much the same workflow."}),"\n",(0,i.jsx)(n.h4,{id:"technology-stack-to-be-used",children:"Technology stack to be used"}),"\n",(0,i.jsx)(n.p,{children:"T-rust is a bit more complicated."}),"\n",(0,i.jsx)(n.h5,{id:"teas-four-pillars",children:"TEA's four pillars"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.img,{src:"https://github.com/tearust/tea-docs/raw/main/res/s8.jpg",alt:"four pillars"}),"\nIn general, TEA is based on four technologies:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Substrate: This is layer 1 of T-rust. The blockchain runs consensus on Proof-of-Trust, and immutably stores, processes, and verifies PoT (the hashes from the hardware chips)."}),"\n",(0,i.jsx)(n.li,{children:"IPFS: This is the file system and network layer of T-rust. All public code and data are stored in IPFS, but all secrets are kept inside TEA modules (the HSM)."}),"\n",(0,i.jsx)(n.li,{children:"Trusted Computing: This is where the hardware root of trust comes from. We use the TPM chips inside the TEA module (HSM) to generate Proof of Trust."}),"\n",(0,i.jsx)(n.li,{children:"WebAssembly: All running executable code is in wasm format and runs inside secure wasm runtime except for our OS, runtime, and system providers."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"90% of the source code is written in Rust. The other 6% is written in JS and the remaining 4% in Golang."}),"\n",(0,i.jsx)(n.p,{children:"For more detail on the TEA project and T-rust framework, you may visit teaproject.org."}),"\n",(0,i.jsx)(n.h4,{id:"prior-works-and-demo",children:"Prior works and demo"}),"\n",(0,i.jsx)(n.p,{children:"Gluon is a dApp and a wasm module running on top of T-rust. We currently do not have the Gluon demo running (but it will be available soon). We do have another demo app showing the capability of the T-rust framework.\nThis demo is a Tensorflow image recognization running on Substrate blockchain.\nHere is the video link:"}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["Click to play the demo video\n",(0,i.jsx)(n.a,{href:"https://youtu.be/6GYwrITSfJo",children:(0,i.jsx)(n.img,{src:"https://github.com/tearust/tea-docs/raw/main/res/start-demo-video.jpg",alt:""})})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Here's another video introduction to the TEA project:"}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["Click to play the introduction video\n",(0,i.jsx)(n.a,{href:"http://www.youtube.com/watch?v=-NgR3ySWwXg",children:(0,i.jsx)(n.img,{src:"https://github.com/tearust/tea-docs/raw/main/res/blog/WX20201215-115720@2x.png",alt:""})})]}),"\n"]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"Therefore, we ask the teams to submit (where relevant):"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Mockups/designs of any UI components"}),"\n",(0,i.jsx)(n.li,{children:"API specifications of the core functionality"}),"\n",(0,i.jsx)(n.li,{children:"An overview of the technology stack to be used"}),"\n",(0,i.jsx)(n.li,{children:"Documentation of core components, protocols, architecture, etc. to be deployed"}),"\n",(0,i.jsx)(n.li,{children:"PoC/MVP or other relevant prior work or research on the topic"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,i.jsx)(n.p,{children:"Are there any other projects similar to yours? If so, how is your project different?"}),"\n",(0,i.jsxs)(n.p,{children:["There are many existing crypto wallets in the market. They either store the private keys on client devices (phone, hardware wallet) or centralized servers. There are quite a few wallets in Web3 applications. For example: ",(0,i.jsx)(n.a,{href:"https://github.com/tearust/Open-Grants-Program/blob/master/applications/bdwallet.md",children:"bdwallet"}),", or ",(0,i.jsx)(n.a,{href:"https://github.com/tearust/Open-Grants-Program/blob/master/applications/subwallet.md",children:"subwallet"})]}),"\n",(0,i.jsx)(n.p,{children:"Gluon has a very decentralized approach. We do not store the original keys anywhere. Instead, we use the TEA project's decentralized trusted computing infrastructure to scramble, store, and multisign. This approach prevents users from losing or leaking their keys."}),"\n",(0,i.jsx)(n.p,{children:"A few crypto wallets outside of the Polkadot ecosystem are a little bit similar to ours."}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://zengo.com/security/",children:"ZenGo"}),' provides "passwordless" but still require centralized servers to store encrypted secrets. We do everything decentralized.']}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://github.com/paritytech/substrate/tree/master/frame/recovery",children:"Recovery pellets"})," is not a wallet but a Substrate pellet with the social recovery idea. We did not know it until we search for a similar project just now."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://www.ledger.com/",children:"Ledger"})," or ",(0,i.jsx)(n.a,{href:"https://trezor.io/",children:"Trezor"})," are hardware wallets. We do not sell hardware wallet units to end-users. We provide Trust-as-a-Service instead."]}),"\n",(0,i.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,i.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Name of the team leader: Kevin Zhang"}),"\n",(0,i.jsx)(n.li,{children:"Names of team members:"}),"\n"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"William Zhang"}),"\n"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Jacky Li"}),"\n",(0,i.jsx)(n.li,{children:"Raindust Yan"}),"\n",(0,i.jsx)(n.li,{children:"Zehua Jiang"}),"\n",(0,i.jsx)(n.li,{children:"Lex Pablo"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Contact Name:"})," Kevin G. Zhang"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Contact Email:"})," ",(0,i.jsx)(n.a,{href:"mailto:kevin.zhang.canada@gmail.com",children:"kevin.zhang.canada@gmail.com"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Web site:"})," teaproject.org gluonwallet.com"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Registered Address:"})," 4006 Hastings Park Ct, San Jose, CA 95136 U.S.A."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Registered Legal Entity:"})," Elk Insight LLC."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,i.jsx)(n.p,{children:"Please describe the team's relevant experience. If the project involves development work, we'd appreciated if you can single out a few interesting code commits made by team members on their past projects. For research-related grants, references to past publications and projects in a related domain are helpful."}),"\n",(0,i.jsxs)(n.p,{children:["The TEA-Project started in the year 2019. The idea originally came to the team leader, Kevin Zhang, seven years ago when working as the CTO of iHealthLabs. Utilizing patients' health data for scientific research while preventing health data breaches has always been a major problem. He initially tried to solve the dilemma using blockchain but realized that the existing blockchain technologies were far too slow to be practical. He then decided to add the root of trust alongside existing blockchain cryptography + consensus. This is the hardware root of trust. TEA uses existing mature Trusted Computing technologies to provide secure computing services to client blockchains without requiring specialized CPU features such as Phala's (TEE) Intel SGX CPU or Bitcoin's ASIC CPU. Besides the Tensorflow demo app on TEA, making a practical crypto wallet can demonstrate how TEA can do better, so they started the Gluon. The full story of the project can be found here: [Sweeping Monk Medium Blog] (",(0,i.jsx)(n.a,{href:"https://pushbar.medium.com/0-of-n-cover-letter-of-the-trusted-webassembly-runtime-on-ipfs-12a4fd8c4338",children:"https://pushbar.medium.com/0-of-n-cover-letter-of-the-trusted-webassembly-runtime-on-ipfs-12a4fd8c4338"}),")"]}),"\n",(0,i.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/tearust/Gluon_Actor",children:"https://github.com/tearust/Gluon_Actor"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/tearust/Gluon_Pellet",children:"https://github.com/tearust/Gluon_Pellet"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/tearust/gluon-docs",children:"https://github.com/tearust/gluon-docs"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/tearust/tea-docs",children:"https://github.com/tearust/tea-docs"})}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.linkedin.com/in/kevingzhang/",children:"https://www.linkedin.com/in/kevingzhang/"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.linkedin.com/in/zhijun/",children:"https://www.linkedin.com/in/zhijun/"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.linkedin.com/in/jacky-li-4039747b/",children:"https://www.linkedin.com/in/jacky-li-4039747b/"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.linkedin.com/in/mingzhi-yan-7544b9203/",children:"https://www.linkedin.com/in/mingzhi-yan-7544b9203/"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.linkedin.com/in/zehua-jiang-7494a8203/",children:"https://www.linkedin.com/in/zehua-jiang-7494a8203/"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.linkedin.com/in/lex-pablo-a638941ba/",children:"https://www.linkedin.com/in/lex-pablo-a638941ba/"})}),"\n"]}),"\n",(0,i.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"This section should break out the development roadmap into several milestones. Since the milestones will appear in the grant contract, it helps to describe the functionality we should expect, plus how we can check that such functionality exists in the product. Whenever milestones are delivered, we refer to the contract to ensure that everything has been delivered as expected."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Below, we provided an ",(0,i.jsx)(n.strong,{children:"example roadmap"}),". In the descriptions, it should be clear how the project is related to Substrate and/or Polkadot. We recommend to fit the scope of the work within a 3 month period and for teams to structure their roadmap as 1 month = 1 milestone."]}),"\n",(0,i.jsx)(n.p,{children:"For each milestone:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Please be sure to include a specification of your software. Treat it as a contract - the level of detail must be enough to later verify that the software meets the specification.\nTo assist you in defining it, we created a document with examples for some grant categories ",(0,i.jsx)(n.a,{href:"../src/grant_guidelines_per_category.md",children:"here"}),"."]}),"\n",(0,i.jsx)(n.li,{children:"Please include the total amount of funding requested per milestone."}),"\n",(0,i.jsx)(n.li,{children:"Please note that we require documentation (e.g. tutorials, API specifications, architecture details) in each milestone. This ensures that the code can be widely used by the community."}),"\n",(0,i.jsx)(n.li,{children:"Please provide a test suite, comprising unit and integration tests, along with a guide on how to run these."}),"\n",(0,i.jsx)(n.li,{children:"Please commit to providing a dockerfiles for the delivery of your project."}),"\n",(0,i.jsx)(n.li,{children:"Please indicate the milestone duration, as well as a number of Full-Time Employees working on each milestone, and include the number of days along with their cost per day."}),"\n",(0,i.jsxs)(n.li,{children:["Deliverables 0a-0d are mandatory and should not be removed, unless you explicitly specify a reason within the PR's ",(0,i.jsx)(n.code,{children:"Additional Notes"})," section (e.g. Milestone X is research-oriented and as such there is no code to test)"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Total Estimated Duration:"})," 5 months"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Full-time equivalent (FTE):"})," 2.5 FTE"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Total Costs:"})," 28k USD"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"milestone-1-example--web-app-and-mobile-app-pairing",children:"Milestone 1 Example \u2014 Web app and mobile app pairing"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Estimated Duration:"})," 4 Weeks"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"FTE:"})," 2.5 FTE"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Costs:"})," 5.6k USD"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Number"}),(0,i.jsx)(n.th,{children:"Deliverable"}),(0,i.jsx)(n.th,{children:"Specification"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0"}),(0,i.jsx)(n.td,{children:"Gluon Website and Web Portal Framework"}),(0,i.jsx)(n.td,{children:"The gluonwallet.com website; homepage, documents, and web app menu structure"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1"}),(0,i.jsx)(n.td,{children:"Milestone1 feature list and test instruction"}),(0,i.jsx)(n.td,{children:"features: Users can create Gluon accounts and pair the Gluon mobile App with the web portal."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2"}),(0,i.jsx)(n.td,{children:"Test docker-compose"}),(0,i.jsx)(n.td,{children:"Testers can run TEA simulator to run locally to test completed features"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3"}),(0,i.jsx)(n.td,{children:"Source code on GitHub"}),(0,i.jsx)(n.td,{children:"Anyone can download, build, and run local testing environments"})]})]})]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Task ID"}),(0,i.jsx)(n.th,{children:"Module name"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0.1"}),(0,i.jsx)(n.td,{children:"Add faucet page"}),(0,i.jsx)(n.td,{children:"users can add free test tokens to accounts to start testing"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1.1"}),(0,i.jsx)(n.td,{children:"User portal web page"}),(0,i.jsx)(n.td,{children:"Search user public profiles by users' Polkadot address. All information is open public from the blockchain. Users can see pairing mobile app id. This is the feature in milestone 1"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1.2"}),(0,i.jsx)(n.td,{children:"Pairing web UI"}),(0,i.jsx)(n.td,{children:"This is the web UI to start mobile app pairing"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2.0"}),(0,i.jsx)(n.td,{children:"Mobile app framework"}),(0,i.jsx)(n.td,{children:"Gluon mobile app framework. We will add features one by one"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2.1"}),(0,i.jsx)(n.td,{children:"Pairing mobile UI, scan QR code to start"}),(0,i.jsx)(n.td,{children:"After the mobile app is installed, scan web pairing page to start pairing"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2.2"}),(0,i.jsx)(n.td,{children:"Mobile user profile page"}),(0,i.jsx)(n.td,{children:"After pairing, show user profile. This is the same as the WebUI user profile content"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3.0"}),(0,i.jsx)(n.td,{children:"Gluon substrate pellet: Pairing/Unpairing API"}),(0,i.jsx)(n.td,{children:"Add mobile app pub id to existing Gluon account. Pair the mobile to this user"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3.1"}),(0,i.jsx)(n.td,{children:"Gluon substrate pellet: Search API"}),(0,i.jsx)(n.td,{children:"Search user public information"})]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"milestone-2---phone-upgrading-and-social-recovery",children:"Milestone 2 - Phone upgrading and social recovery"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Estimated Duration:"})," 4 Weeks"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"FTE"})," 2.5 FTE"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Cost:"})," 5.6k USD"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Number"}),(0,i.jsx)(n.th,{children:"Deliverable"}),(0,i.jsx)(n.th,{children:"Specification"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0"}),(0,i.jsx)(n.td,{children:"Testable features"}),(0,i.jsx)(n.td,{children:"User upgrade new phone and transfer P1 from old phone to new phone. Use social recovery to keep assets and transfer to a new account in case of lost web and mobile app"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1"}),(0,i.jsx)(n.td,{children:"Update test instruction"}),(0,i.jsx)(n.td,{children:"update with new features"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2"}),(0,i.jsx)(n.td,{children:"Source code"}),(0,i.jsx)(n.td,{})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3"}),(0,i.jsx)(n.td,{children:"Video tutorial"}),(0,i.jsx)(n.td,{children:"Full User's manual"})]})]})]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Task ID"}),(0,i.jsx)(n.th,{children:"Module name"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1.0"}),(0,i.jsx)(n.td,{children:"layer1"}),(0,i.jsx)(n.td,{children:"Add social recovery API"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2.0"}),(0,i.jsx)(n.td,{children:"Web Portal"}),(0,i.jsx)(n.td,{children:"Create social recovery page"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3.0"}),(0,i.jsx)(n.td,{children:"Mobile app"}),(0,i.jsx)(n.td,{children:"Social recovery if initiated from phone"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3.1"}),(0,i.jsx)(n.td,{children:"Mobile app"}),(0,i.jsx)(n.td,{children:"Scan QR code to confirm friends recovery request"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"4.1"}),(0,i.jsx)(n.td,{children:"Layer1"}),(0,i.jsx)(n.td,{children:"Suspend old account activity during the recovering process"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"4.2"}),(0,i.jsx)(n.td,{children:"Gluon TeaLeaf"}),(0,i.jsx)(n.td,{children:"Generate a new account to accept assets"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"5.0"}),(0,i.jsx)(n.td,{children:"Layer1"}),(0,i.jsx)(n.td,{children:"Verify all social recovery confirmation, transfer assets to new account"})]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"milestone-3---generate-dot-asset-on-test-net",children:"Milestone 3 - Generate DOT asset on test net"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Estimated Duration:"})," 4 Weeks"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"FTE:"})," 2.5 FTE"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Costs:"})," 5.6k USD\nPrerequisites:\nThis milestone require Schnorrkel threshold signature issue ",(0,i.jsx)(n.a,{href:"https://github.com/w3f/schnorrkel/issues/11%3E",children:"https://github.com/w3f/schnorrkel/issues/11>"})," completes."]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Number"}),(0,i.jsx)(n.th,{children:"Deliverable"}),(0,i.jsx)(n.th,{children:"Specification"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0"}),(0,i.jsx)(n.td,{children:"Testable features"}),(0,i.jsx)(n.td,{children:"User can generate DOT addresses"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1"}),(0,i.jsx)(n.td,{children:"Update test instruction"}),(0,i.jsx)(n.td,{children:"update with new features"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2"}),(0,i.jsx)(n.td,{children:"Source code"}),(0,i.jsx)(n.td,{})]})]})]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Task ID"}),(0,i.jsx)(n.th,{children:"Module name"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1.0"}),(0,i.jsx)(n.td,{children:'Add a "generate DOT asset" page on web UI'}),(0,i.jsx)(n.td,{children:"user can trigger create new DOT address. Input (k,n) and other parameters"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1.1"}),(0,i.jsx)(n.td,{children:"List user assets on web UI"}),(0,i.jsx)(n.td,{children:"When successfully generated DOT address, it will show on web UI"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2.0"}),(0,i.jsx)(n.td,{children:'Add a "generate DOT asset" page on mobile app'}),(0,i.jsx)(n.td,{children:"users scan the QR code on web UI. Review all tx parameters. Fingerprint unlock to commit tx to layer-1 blockchain"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2.1"}),(0,i.jsx)(n.td,{children:"List user assets on mobile app"}),(0,i.jsx)(n.td,{children:"When successfully generated DOT address, it will show mobile app"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2.2"}),(0,i.jsx)(n.td,{children:"Mobile app"}),(0,i.jsx)(n.td,{children:"Generate P1"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3.0"}),(0,i.jsx)(n.td,{children:'Substrate pellet: Create "generate DOT asset" task'}),(0,i.jsx)(n.td,{children:"Layer 1 verify user auth, create a task in the blockchain so that layer-2 can handle"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"4.0"}),(0,i.jsx)(n.td,{children:"Gluon wasm module (TeaLeaf)"}),(0,i.jsx)(n.td,{children:"Select delegator and executor"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"4.1"}),(0,i.jsx)(n.td,{children:"Gluon TeaLeaf"}),(0,i.jsx)(n.td,{children:"Executor aggregates public key from initial pinners"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"4.2"}),(0,i.jsx)(n.td,{children:"Gluon TeaLeaf"}),(0,i.jsx)(n.td,{children:"Delegator verify and response to Layer 1"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"4.3"}),(0,i.jsx)(n.td,{children:"Gluon TeaLeaf"}),(0,i.jsx)(n.td,{children:"Suspend old P2 P3 when a social recovery task in progress"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"5.0"}),(0,i.jsx)(n.td,{children:"Layer1"}),(0,i.jsx)(n.td,{children:"Create Schnorr multisig test chain"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"5.1"}),(0,i.jsx)(n.td,{children:"Layer1"}),(0,i.jsx)(n.td,{children:"Update user assets"})]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"milestone-4---sign-dot-transaction-on-testnet",children:"Milestone 4 - Sign DOT transaction on testnet"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Estimated Duration:"})," 4 Weeks"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"FTE"})," 2.5 FTE"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Cost:"})," 5.6k USD"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Number"}),(0,i.jsx)(n.th,{children:"Deliverable"}),(0,i.jsx)(n.th,{children:"Specification"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0"}),(0,i.jsx)(n.td,{children:"Testable features"}),(0,i.jsx)(n.td,{children:"User send DOT transfer transaction. Gluon sign the transaction and send it to test chain"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1"}),(0,i.jsx)(n.td,{children:"Update test instruction"}),(0,i.jsx)(n.td,{children:"update with new features"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2"}),(0,i.jsx)(n.td,{children:"Source code"}),(0,i.jsx)(n.td,{})]})]})]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Task ID"}),(0,i.jsx)(n.th,{children:"Module name"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1.0"}),(0,i.jsx)(n.td,{children:"Gluon TeaLeaf"}),(0,i.jsx)(n.td,{children:"DOT SPV light node in layer2 to communicate with DOT chain"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2.0"}),(0,i.jsx)(n.td,{children:"Web Portal"}),(0,i.jsx)(n.td,{children:"Create DOT transaction page"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3.0"}),(0,i.jsx)(n.td,{children:"Mobile app"}),(0,i.jsx)(n.td,{children:"Scan, verify DOT transaction, and send to layer 1"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3.1"}),(0,i.jsx)(n.td,{children:"Mobile app"}),(0,i.jsx)(n.td,{children:"Partial Sign tx using P1. Send the P1 signature to DOT light node"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"4.0"}),(0,i.jsx)(n.td,{children:"Gluon TeaLeaf"}),(0,i.jsx)(n.td,{children:"Executor find pinners and organize them to multisign tx individually"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"4.1"}),(0,i.jsx)(n.td,{children:"Gluon TeaLeaf"}),(0,i.jsx)(n.td,{children:"Executor verify and aggregates signatures. Send the P2 signatures to test net"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"5.0"}),(0,i.jsx)(n.td,{children:"Layer 1"}),(0,i.jsx)(n.td,{children:"Settle payment distribution"})]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"milestone-5---migrate-to-real-hardware-and-test-on-polkadot",children:"Milestone 5 - Migrate to real hardware and test on Polkadot"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Estimated Duration:"})," 4 Weeks"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"FTE"})," 2.5 FTE"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Cost:"})," 5.6k USD"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Number"}),(0,i.jsx)(n.th,{children:"Deliverable"}),(0,i.jsx)(n.th,{children:"Specification"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0"}),(0,i.jsx)(n.td,{children:"Testable features"}),(0,i.jsx)(n.td,{children:"All logic runs on Polkadot mainnet"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1"}),(0,i.jsx)(n.td,{children:"Update test instruction"}),(0,i.jsx)(n.td,{children:"update with new features"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2"}),(0,i.jsx)(n.td,{children:"Source code"}),(0,i.jsx)(n.td,{})]})]})]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Task ID"}),(0,i.jsx)(n.th,{children:"Module name"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1.0"}),(0,i.jsx)(n.td,{children:"All modules"}),(0,i.jsx)(n.td,{children:"Migrate to AWS Nitro enclave and Integration test"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2.0"}),(0,i.jsx)(n.td,{children:"Web Portal"}),(0,i.jsx)(n.td,{children:"User's manual, instruction"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3.0"}),(0,i.jsx)(n.td,{children:"Documents"}),(0,i.jsx)(n.td,{children:"Integration API for 3rd party"})]})]})]}),"\n",(0,i.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,i.jsx)(n.p,{children:"Gluon will be a full-featured demo application for the TEA project once it is ready. So far, there are a few limitations that we are working on."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Integrate with ",(0,i.jsx)(n.a,{href:"https://github.com/parallaxsecond/parsec",children:"Parsec"}),". Parsec can be an abstract layer between TeaRuntime and security-related hardware. It makes TEA agnostic to different hardware platforms. It may increase the adaption of TEA."]}),"\n",(0,i.jsx)(n.li,{children:"Besides DOT, we will all Polkadot ecosystem chains and other Schnorr signature compatible chains."}),"\n",(0,i.jsx)(n.li,{children:"We will retire our facade interface service and use off-chain workers instead."}),"\n",(0,i.jsx)(n.li,{children:"Besides hardware protection and Schnorr Multisig algorithm, we open eyes to SMPC and FHE algorithm such as BLS Signature Scheme."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Most items in this to-do list are part of the TEA Project plan. When TEA is ready, most of the features will be available too."}),"\n",(0,i.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,i.jsx)(n.p,{children:"We started the TEA project in 2019. It has been under the radar until recently when it was released to the public. We believe the TEA project could grow large and become the backend service platform for a new type of dApps. These dApps can go beyond the limit of traditional blockchain technologies. Gluon is just one of the many possible demo apps. Once our honor gets granted, we will start looking for investors and hire a CEO and more developers to join us. We hope to maintain a long term and close relationship with the Polkadot community."})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>a});var s=t(96540);const i={},r=s.createContext(i);function o(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0f219439.133ef49f.js b/assets/js/0f219439.133ef49f.js deleted file mode 100644 index 18014fc7268..00000000000 --- a/assets/js/0f219439.133ef49f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[63169],{5057:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"applications/substrate-parachain-PoS-template","title":"substrate-parachain-PoS-template","description":"- Team Name: Aband-Network","source":"@site/applications/substrate-parachain-PoS-template.md","sourceDirName":"applications","slug":"/applications/substrate-parachain-PoS-template","permalink":"/applications/substrate-parachain-PoS-template","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/substrate-parachain-PoS-template.md","tags":[],"version":"current","frontMatter":{}}');var a=n(74848),r=n(28453);const i={},o="substrate-parachain-PoS-template",l={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Language",id:"language",level:3},{value:"Details",id:"details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 - Based on the nimbus consensus",id:"milestone-1---based-on-the-nimbus-consensus",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Referral Program (optional) \ud83d\udcb0",id:"referral-program-optional-moneybag",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function h(e){const t={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"substrate-parachain-pos-template",children:"substrate-parachain-PoS-template"})}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Team Name:"})," Aband-Network"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Payment Address:"})," 0xD6Cec62CE67E09b240B84A3FB53cC1EbA05795d6 (USDT ERC20)"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsxs)(t.strong,{children:[(0,a.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 1"]}),"\n"]}),"\n",(0,a.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,a.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,a.jsxs)(t.p,{children:["Parachain projects require more teams to use PoS, which helps them achieve a certain degree of decentralization, and the economic model is healthier and more favored by the community.\nOur aband-parachain project uses the ",(0,a.jsx)(t.a,{href:"https://github.com/PureStake/nimbus",children:"PureStake/nimbus"})," as the Pos block consensus.\nIn the business layer, we prefer the staking developed by the Polkadot team and a series of modules related to staking. It took us two days to familiarize ourselves with the codes of these two projects, and then implemented Staking on the third day.\nThis makes us a little frustrated, we are senior developers of substrate, if we are all like this, it will take more time for beginners, even if it is a strong development team,\nYou shouldn't spend too much time on it either. We hope to make a PoS template, so that developers can develop their own PoS projects without taking a minute.\nWe also found that moonbean only implements its own staking, which is obviously not what most developers need. Developers need more substrate-native things.\nThis makes it unnecessary for users to increase learning costs, and these projects with more native modules of substrate can further promote the use of related technologies in the Polkadot ecosystem. so,\nIt is very meaningful to create a PoS parachain template that only has a different block consensus but the other modules are exactly the same."]}),"\n",(0,a.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,a.jsx)(t.h3,{id:"language",children:"Language"}),"\n",(0,a.jsx)(t.p,{children:"rust, and subsrate"}),"\n",(0,a.jsx)(t.h3,{id:"details",children:"Details"}),"\n",(0,a.jsxs)(t.p,{children:["A substrate development template like ",(0,a.jsx)(t.a,{href:"https://github.com/substrate-developer-hub/substrate-parachain-template",children:"substrate-developer-hub/substrate-parachain-template"}),", this template implements PoS.\nIn this project, we don't have any UI to design, which is the advantage of this project. Because except for the block consensus, other modules come from substrate.\nWe don't need to write a lot of extra code, and we don't even have our own modules. Let developers not realize our existence, but we do the repetitive work they have to do.\nThis template comes from our project, we will continue to follow up the latest polkadot version, and there will be more projects to use and maintain together.\nWe just hope that more parachain project parties can use Substrate's native Staking and Staking-related functions at no cost. Make it as generic as the ",(0,a.jsx)(t.a,{href:"https://github.com/substrate-developer-hub/substrate-parachain-template",children:"substrate-developer-hub/substrate-parachain-template"}),".\nWith more developers using this template, it will further help us find problems when upgrading the runtime or client of aband-parachain. Make Aband-Network more secure."]}),"\n",(0,a.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,a.jsx)(t.p,{children:"This project makes up for Polkadot's lack of official PoS parachain templates. At the same time, it also makes up for the shortcomings of moonbean, because their Staking is very different from Substrate's Staking.\nThis is more friendly to both developers and users. It is born for better use of substrate to develop PoS parallel chains."}),"\n",(0,a.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,a.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Octavei"}),"\n",(0,a.jsx)(t.li,{children:"keymi"}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Contact Name:"})," Octavei"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Contact Email:"})," ",(0,a.jsx)(t.a,{href:"mailto:octavei@proton.me",children:"octavei@proton.me"})]}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Registered Address:"})," N/A"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Registered Legal Entity:"})," N/A"]}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Octavei Senior development engineer of Aband-Network, with 4 years experience in substrate development. Familiar with Ethereum and EOS smart contracts. Have done many blockchain projects."}),"\n",(0,a.jsx)(t.li,{children:"keymi Aband-Network's CEO. Worked in Google for 5 years, mainly as a product manager."}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.a,{href:"https://github.com/Aband-Network/substrate-parachain-PoS-template",children:"https://github.com/Aband-Network/substrate-parachain-PoS-template"})}),"\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.a,{href:"https://github.com/Aband-Network/aband-parachain",children:"https://github.com/Aband-Network/aband-parachain"})}),"\n"]}),"\n",(0,a.jsxs)(t.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.a,{href:"https://github.com/Aband-Network/substrate-parachain-PoS-template",children:"https://github.com/Aband-Network/substrate-parachain-PoS-template"})}),"\n"]}),"\n",(0,a.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,a.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Total Estimated Duration:"})," 3 weeks"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Full-Time Equivalent (FTE):"})," 3"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Total Costs:"})," 4,000 USD"]}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"milestone-1---based-on-the-nimbus-consensus",children:"Milestone 1 - Based on the nimbus consensus"}),"\n",(0,a.jsx)(t.p,{children:"Based on the nimbus consensus, make a PoS parachain development template with Polkadot Staking and Staking related modules."}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Estimated duration:"})," 3 weeks"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"FTE:"})," 3"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Costs:"})," 4000 USD"]}),"\n"]}),"\n",(0,a.jsxs)(t.blockquote,{children:["\n",(0,a.jsxs)(t.p,{children:["\u2757"," ",(0,a.jsx)(t.strong,{children:"The default deliverables 0a-0d below are mandatory for all milestones"}),", and deliverable 0e at least for the last one."]}),"\n"]}),"\n",(0,a.jsxs)(t.table,{children:[(0,a.jsx)(t.thead,{children:(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,a.jsx)(t.th,{children:"Deliverable"}),(0,a.jsx)(t.th,{children:"Specification"})]})}),(0,a.jsxs)(t.tbody,{children:[(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{style:{textAlign:"right"},children:(0,a.jsx)(t.strong,{children:"0a."})}),(0,a.jsx)(t.td,{children:"License"}),(0,a.jsx)(t.td,{children:"Apache 2.0 / GPLv3 / MIT / Unlicense"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{style:{textAlign:"right"},children:(0,a.jsx)(t.strong,{children:"0b."})}),(0,a.jsx)(t.td,{children:"Documentation"}),(0,a.jsx)(t.td,{children:"Add documentation explaining how these modules fit together to complete the entire PoS process."})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{style:{textAlign:"right"},children:(0,a.jsx)(t.strong,{children:"0c."})}),(0,a.jsx)(t.td,{children:"Testing and Testing Guide"}),(0,a.jsx)(t.td,{children:"Add manual tests to prove that the entire PoS runs successfully. Provide unit testing and benchmarking for the Collators pallet."})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{style:{textAlign:"right"},children:(0,a.jsx)(t.strong,{children:"0d."})}),(0,a.jsx)(t.td,{children:"Docker"}),(0,a.jsx)(t.td,{children:"Provide Docker to the chain, allowing anyone to quickly run the chain"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{style:{textAlign:"right"},children:"1"}),(0,a.jsx)(t.td,{children:"client code"}),(0,a.jsxs)(t.td,{children:["Provide a client with the same functions as ",(0,a.jsx)(t.a,{href:"https://github.com/substrate-developer-hub/substrate-parachain-template/tree/main/node",children:"https://github.com/substrate-developer-hub/substrate-parachain-template/tree/main/node"}),". Such as having the ",(0,a.jsx)(t.code,{children:"try-runtime"})," command, etc."]})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{style:{textAlign:"right"},children:"2"}),(0,a.jsx)(t.td,{children:"Substrate Modlue: Collators"}),(0,a.jsx)(t.td,{children:"The role of the Collators pallet is to provide a validator set for consensus. The validator can come from the staking module, which can also be set by ensure_root in this module, which means that with this template, you can also use the Staking function in the case of PoA, which is very useful if you just only want to reward collators."})]})]})]}),"\n",(0,a.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"We are very happy to know that Polkadot is officially developing the SASSAFRAS consensus. In the future, we will bring SASSAFRAS to the POS parachain template.\nMake this PoS template have more consensus."}),"\n",(0,a.jsx)(t.li,{children:"Based on the babe consensus, make a PoS parachain development template with Polkadot Staking and Staking related modules."}),"\n"]}),"\n",(0,a.jsxs)(t.h2,{id:"referral-program-optional-moneybag",children:["Referral Program (optional) ","\ud83d\udcb0"]}),"\n",(0,a.jsxs)(t.p,{children:["You can find more information about the program ",(0,a.jsx)(t.a,{href:"../README.md#moneybag-referral-program",children:"here"}),"."]}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Referrer:"})," ",(0,a.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/pull/1050",children:"JimYam"})]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Payment Address:"})," 0x8ab7860cd39f0f2facf61b379e87f3de2e3d4d17 (USDT ERC20)"]}),"\n"]}),"\n",(0,a.jsxs)(t.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,a.jsxs)(t.p,{children:[(0,a.jsx)(t.strong,{children:"How did you hear about the Grants Program?"})," Web3 Foundation Website / Medium / Twitter / Element / Announcement by another team / personal recommendation / etc."]}),"\n",(0,a.jsx)(t.p,{children:"personal recommendation"})]})}function c(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>o});var s=n(96540);const a={},r=s.createContext(a);function i(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0f219439.4fe1fd4e.js b/assets/js/0f219439.4fe1fd4e.js new file mode 100644 index 00000000000..968dc8f7af2 --- /dev/null +++ b/assets/js/0f219439.4fe1fd4e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[63169],{90928:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"applications/substrate-parachain-PoS-template","title":"substrate-parachain-PoS-template","description":"- Team Name: Aband-Network","source":"@site/applications/substrate-parachain-PoS-template.md","sourceDirName":"applications","slug":"/applications/substrate-parachain-PoS-template","permalink":"/applications/substrate-parachain-PoS-template","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/substrate-parachain-PoS-template.md","tags":[],"version":"current","frontMatter":{}}');var a=n(74848),r=n(28453);const i={},o="substrate-parachain-PoS-template",l={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Language",id:"language",level:3},{value:"Details",id:"details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 - Based on the nimbus consensus",id:"milestone-1---based-on-the-nimbus-consensus",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Referral Program (optional) \ud83d\udcb0",id:"referral-program-optional-moneybag",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function h(e){const t={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"substrate-parachain-pos-template",children:"substrate-parachain-PoS-template"})}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Team Name:"})," Aband-Network"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Payment Address:"})," 0xD6Cec62CE67E09b240B84A3FB53cC1EbA05795d6 (USDT ERC20)"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsxs)(t.strong,{children:[(0,a.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 1"]}),"\n"]}),"\n",(0,a.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,a.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,a.jsxs)(t.p,{children:["Parachain projects require more teams to use PoS, which helps them achieve a certain degree of decentralization, and the economic model is healthier and more favored by the community.\nOur aband-parachain project uses the ",(0,a.jsx)(t.a,{href:"https://github.com/PureStake/nimbus",children:"PureStake/nimbus"})," as the Pos block consensus.\nIn the business layer, we prefer the staking developed by the Polkadot team and a series of modules related to staking. It took us two days to familiarize ourselves with the codes of these two projects, and then implemented Staking on the third day.\nThis makes us a little frustrated, we are senior developers of substrate, if we are all like this, it will take more time for beginners, even if it is a strong development team,\nYou shouldn't spend too much time on it either. We hope to make a PoS template, so that developers can develop their own PoS projects without taking a minute.\nWe also found that moonbean only implements its own staking, which is obviously not what most developers need. Developers need more substrate-native things.\nThis makes it unnecessary for users to increase learning costs, and these projects with more native modules of substrate can further promote the use of related technologies in the Polkadot ecosystem. so,\nIt is very meaningful to create a PoS parachain template that only has a different block consensus but the other modules are exactly the same."]}),"\n",(0,a.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,a.jsx)(t.h3,{id:"language",children:"Language"}),"\n",(0,a.jsx)(t.p,{children:"rust, and subsrate"}),"\n",(0,a.jsx)(t.h3,{id:"details",children:"Details"}),"\n",(0,a.jsxs)(t.p,{children:["A substrate development template like ",(0,a.jsx)(t.a,{href:"https://github.com/substrate-developer-hub/substrate-parachain-template",children:"substrate-developer-hub/substrate-parachain-template"}),", this template implements PoS.\nIn this project, we don't have any UI to design, which is the advantage of this project. Because except for the block consensus, other modules come from substrate.\nWe don't need to write a lot of extra code, and we don't even have our own modules. Let developers not realize our existence, but we do the repetitive work they have to do.\nThis template comes from our project, we will continue to follow up the latest polkadot version, and there will be more projects to use and maintain together.\nWe just hope that more parachain project parties can use Substrate's native Staking and Staking-related functions at no cost. Make it as generic as the ",(0,a.jsx)(t.a,{href:"https://github.com/substrate-developer-hub/substrate-parachain-template",children:"substrate-developer-hub/substrate-parachain-template"}),".\nWith more developers using this template, it will further help us find problems when upgrading the runtime or client of aband-parachain. Make Aband-Network more secure."]}),"\n",(0,a.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,a.jsx)(t.p,{children:"This project makes up for Polkadot's lack of official PoS parachain templates. At the same time, it also makes up for the shortcomings of moonbean, because their Staking is very different from Substrate's Staking.\nThis is more friendly to both developers and users. It is born for better use of substrate to develop PoS parallel chains."}),"\n",(0,a.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,a.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Octavei"}),"\n",(0,a.jsx)(t.li,{children:"keymi"}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Contact Name:"})," Octavei"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Contact Email:"})," ",(0,a.jsx)(t.a,{href:"mailto:octavei@proton.me",children:"octavei@proton.me"})]}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Registered Address:"})," N/A"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Registered Legal Entity:"})," N/A"]}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Octavei Senior development engineer of Aband-Network, with 4 years experience in substrate development. Familiar with Ethereum and EOS smart contracts. Have done many blockchain projects."}),"\n",(0,a.jsx)(t.li,{children:"keymi Aband-Network's CEO. Worked in Google for 5 years, mainly as a product manager."}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.a,{href:"https://github.com/Aband-Network/substrate-parachain-PoS-template",children:"https://github.com/Aband-Network/substrate-parachain-PoS-template"})}),"\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.a,{href:"https://github.com/Aband-Network/aband-parachain",children:"https://github.com/Aband-Network/aband-parachain"})}),"\n"]}),"\n",(0,a.jsxs)(t.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.a,{href:"https://github.com/Aband-Network/substrate-parachain-PoS-template",children:"https://github.com/Aband-Network/substrate-parachain-PoS-template"})}),"\n"]}),"\n",(0,a.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,a.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Total Estimated Duration:"})," 3 weeks"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Full-Time Equivalent (FTE):"})," 3"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Total Costs:"})," 4,000 USD"]}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"milestone-1---based-on-the-nimbus-consensus",children:"Milestone 1 - Based on the nimbus consensus"}),"\n",(0,a.jsx)(t.p,{children:"Based on the nimbus consensus, make a PoS parachain development template with Polkadot Staking and Staking related modules."}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Estimated duration:"})," 3 weeks"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"FTE:"})," 3"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Costs:"})," 4000 USD"]}),"\n"]}),"\n",(0,a.jsxs)(t.blockquote,{children:["\n",(0,a.jsxs)(t.p,{children:["\u2757"," ",(0,a.jsx)(t.strong,{children:"The default deliverables 0a-0d below are mandatory for all milestones"}),", and deliverable 0e at least for the last one."]}),"\n"]}),"\n",(0,a.jsxs)(t.table,{children:[(0,a.jsx)(t.thead,{children:(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,a.jsx)(t.th,{children:"Deliverable"}),(0,a.jsx)(t.th,{children:"Specification"})]})}),(0,a.jsxs)(t.tbody,{children:[(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{style:{textAlign:"right"},children:(0,a.jsx)(t.strong,{children:"0a."})}),(0,a.jsx)(t.td,{children:"License"}),(0,a.jsx)(t.td,{children:"Apache 2.0 / GPLv3 / MIT / Unlicense"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{style:{textAlign:"right"},children:(0,a.jsx)(t.strong,{children:"0b."})}),(0,a.jsx)(t.td,{children:"Documentation"}),(0,a.jsx)(t.td,{children:"Add documentation explaining how these modules fit together to complete the entire PoS process."})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{style:{textAlign:"right"},children:(0,a.jsx)(t.strong,{children:"0c."})}),(0,a.jsx)(t.td,{children:"Testing and Testing Guide"}),(0,a.jsx)(t.td,{children:"Add manual tests to prove that the entire PoS runs successfully. Provide unit testing and benchmarking for the Collators pallet."})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{style:{textAlign:"right"},children:(0,a.jsx)(t.strong,{children:"0d."})}),(0,a.jsx)(t.td,{children:"Docker"}),(0,a.jsx)(t.td,{children:"Provide Docker to the chain, allowing anyone to quickly run the chain"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{style:{textAlign:"right"},children:"1"}),(0,a.jsx)(t.td,{children:"client code"}),(0,a.jsxs)(t.td,{children:["Provide a client with the same functions as ",(0,a.jsx)(t.a,{href:"https://github.com/substrate-developer-hub/substrate-parachain-template/tree/main/node",children:"https://github.com/substrate-developer-hub/substrate-parachain-template/tree/main/node"}),". Such as having the ",(0,a.jsx)(t.code,{children:"try-runtime"})," command, etc."]})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{style:{textAlign:"right"},children:"2"}),(0,a.jsx)(t.td,{children:"Substrate Modlue: Collators"}),(0,a.jsx)(t.td,{children:"The role of the Collators pallet is to provide a validator set for consensus. The validator can come from the staking module, which can also be set by ensure_root in this module, which means that with this template, you can also use the Staking function in the case of PoA, which is very useful if you just only want to reward collators."})]})]})]}),"\n",(0,a.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"We are very happy to know that Polkadot is officially developing the SASSAFRAS consensus. In the future, we will bring SASSAFRAS to the POS parachain template.\nMake this PoS template have more consensus."}),"\n",(0,a.jsx)(t.li,{children:"Based on the babe consensus, make a PoS parachain development template with Polkadot Staking and Staking related modules."}),"\n"]}),"\n",(0,a.jsxs)(t.h2,{id:"referral-program-optional-moneybag",children:["Referral Program (optional) ","\ud83d\udcb0"]}),"\n",(0,a.jsxs)(t.p,{children:["You can find more information about the program ",(0,a.jsx)(t.a,{href:"../README.md#moneybag-referral-program",children:"here"}),"."]}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Referrer:"})," ",(0,a.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/pull/1050",children:"JimYam"})]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Payment Address:"})," 0x8ab7860cd39f0f2facf61b379e87f3de2e3d4d17 (USDT ERC20)"]}),"\n"]}),"\n",(0,a.jsxs)(t.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,a.jsxs)(t.p,{children:[(0,a.jsx)(t.strong,{children:"How did you hear about the Grants Program?"})," Web3 Foundation Website / Medium / Twitter / Element / Announcement by another team / personal recommendation / etc."]}),"\n",(0,a.jsx)(t.p,{children:"personal recommendation"})]})}function c(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>o});var s=n(96540);const a={},r=s.createContext(a);function i(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0f268954.ce6ede3c.js b/assets/js/0f268954.ce6ede3c.js deleted file mode 100644 index 9d8c4bad5b1..00000000000 --- a/assets/js/0f268954.ce6ede3c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[70359],{8538:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>d,metadata:()=>n,toc:()=>o});const n=JSON.parse('{"id":"applications/hs-web3","title":"Haskell Web3 library","description":"This document is referenced in the terms and conditions and therefore needs to contain all the required information. Don\'t remove any of the mandatory parts presented in bold letters or as headlines! See the Open Grants Program Process on how to submit a proposal.","source":"@site/applications/hs-web3.md","sourceDirName":"applications","slug":"/applications/hs-web3","permalink":"/applications/hs-web3","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/hs-web3.md","tags":[],"version":"current","frontMatter":{}}');var i=t(74848),r=t(28453);const d={},l="Haskell Web3 library",c={},o=[{value:"Project Description \ud83d\udcc4",id:"project-description-page_facing_up",level:2},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Milestone 1",id:"milestone-1",level:3},{value:"Milestone 2",id:"milestone-2",level:3},{value:"Milestone 3",id:"milestone-3",level:3},{value:"Milestone 4",id:"milestone-4",level:3}];function a(e){const s={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.header,{children:(0,i.jsx)(s.h1,{id:"haskell-web3-library",children:"Haskell Web3 library"})}),"\n",(0,i.jsxs)(s.blockquote,{children:["\n",(0,i.jsxs)(s.p,{children:["This document is referenced in the terms and conditions and therefore needs to contain all the required information. Don't remove any of the mandatory parts presented in bold letters or as headlines! See the ",(0,i.jsx)(s.a,{href:"https://github.com/w3f/Open-Grants-Program/blob/master/README_2.md",children:"Open Grants Program Process"})," on how to submit a proposal."]}),"\n"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Proposer:"})," akru"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Payment Address:"})," 18QrEJq9f1EL4f3DVsbxYnkJXgbhSF9XJ4"]}),"\n"]}),"\n",(0,i.jsxs)(s.h2,{id:"project-description-page_facing_up",children:["Project Description ","\ud83d\udcc4"]}),"\n",(0,i.jsx)(s.p,{children:"It's my personal project. It was started as Ethereum client library but recently I guess it could evolve into multi-platform client library including Polkadot / Substrate chains. Haskell is a powerful hight order functional programming language that provide industrial grade code safety because of very strict control of function side effects. For Polkadot ecosystem Haskell developers is couple of high skilled professionals that could make effective services and applications. This project reduce entry threshold and could be a good quick start for haskellers."}),"\n",(0,i.jsxs)(s.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Members:"})," Aleksandr Krupenkin"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"LinkedIn Profiles:"})," ",(0,i.jsx)(s.a,{href:"https://www.linkedin.com/in/krupenkin",children:"https://www.linkedin.com/in/krupenkin"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Code Repos:"})," ",(0,i.jsx)(s.a,{href:"https://github.com/airalab/hs-web3",children:"https://github.com/airalab/hs-web3"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Website:"})," ",(0,i.jsx)(s.a,{href:"https://hs-web3.readthedocs.io",children:"https://hs-web3.readthedocs.io"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Legal Structure:"})," individual"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Team's Experience:"})," Haskell Web3 library created on 2016. During development was fully implemented account abstractions, Solidity ABI codecs, JSON-RPC API and ECDSA cryptography."]}),"\n"]}),"\n",(0,i.jsxs)(s.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Total Estimated Duration:"})," 16 weeks"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Full-time equivalent (FTE):"})," 0.4"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Total Costs:"})," 2 BTC"]}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"milestone-1",children:"Milestone 1"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Estimated Duration:"})," 3 weeks"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"FTE:"})," 0.4"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Costs:"})," 0.4 BTC"]}),"\n"]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Number"}),(0,i.jsx)(s.th,{children:"Deliverable"}),(0,i.jsx)(s.th,{children:"Specification"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"1."}),(0,i.jsx)(s.td,{children:"Substrate WebSocket RPC"}),(0,i.jsxs)(s.td,{children:["Implement Substrate JSON-RPC methods described ",(0,i.jsx)(s.a,{href:"https://github.com/paritytech/substrate/tree/master/client/rpc-api/src",children:"here"}),": ",(0,i.jsx)(s.code,{children:"author"}),", ",(0,i.jsx)(s.code,{children:"chain"}),", ",(0,i.jsx)(s.code,{children:"state"}),", ",(0,i.jsx)(s.code,{children:"system"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"2."}),(0,i.jsx)(s.td,{children:"Substrate RPC documentations"}),(0,i.jsxs)(s.td,{children:["Extend ",(0,i.jsx)(s.a,{href:"https://hs-web3.readthedocs.io/",children:"Haskell Web3 documentation"})," by implemented functions adding ",(0,i.jsx)(s.code,{children:"Substrate RPC"})," section."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"3."}),(0,i.jsx)(s.td,{children:"Substrate RPC examples"}),(0,i.jsxs)(s.td,{children:["Write simple examples into ",(0,i.jsx)(s.a,{href:"https://github.com/airalab/hs-web3",children:"repository"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"4."}),(0,i.jsx)(s.td,{children:"Docker image"}),(0,i.jsx)(s.td,{children:"Pack milestone results into docker image to make it's evaluation easy."})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"milestone-2",children:"Milestone 2"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Estimated Duration:"})," 6 weeks"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"FTE:"})," 0.4"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Costs:"})," 0.8 BTC"]}),"\n"]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Number"}),(0,i.jsx)(s.th,{children:"Deliverable"}),(0,i.jsx)(s.th,{children:"Specification"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"1."}),(0,i.jsx)(s.td,{children:"Haskell SCALE codec"}),(0,i.jsxs)(s.td,{children:["Implement SCALE codecs for Haskell that required for correct Polkadot / Substrate client implementation. Codec should reference to ",(0,i.jsx)(s.a,{href:"https://substrate.dev/docs/en/conceptual/core/codec",children:"official documentation"})," and ",(0,i.jsx)(s.a,{href:"https://github.com/paritytech/parity-scale-codec",children:"Rust implementation"}),". Codec should pass Rust test cases."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"2."}),(0,i.jsx)(s.td,{children:"SCALE codec documentation"}),(0,i.jsxs)(s.td,{children:["Document implemented functionality and extend ",(0,i.jsx)(s.code,{children:"hs-web3"})," documentation by adding ",(0,i.jsx)(s.code,{children:"SCALE"})," codec section."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"3."}),(0,i.jsx)(s.td,{children:"Codec examples"}),(0,i.jsxs)(s.td,{children:["Add examples of using codec into ",(0,i.jsx)(s.code,{children:"hs-web3"})," repository."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"4."}),(0,i.jsx)(s.td,{children:"Docker image"}),(0,i.jsx)(s.td,{children:"Pack milestone results (unit tests) into docker image to make it's evaluation easy."})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"milestone-3",children:"Milestone 3"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Estimated Duration:"})," 3 weeks"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"FTE:"})," 0.4"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Costs:"})," 0.4 BTC"]}),"\n"]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Number"}),(0,i.jsx)(s.th,{children:"Deliverable"}),(0,i.jsx)(s.th,{children:"Specification"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"1."}),(0,i.jsx)(s.td,{children:"Runtime Metadata parsers"}),(0,i.jsx)(s.td,{children:"Implement structures and abstractions that helps to parse runtime metadata and make API decoration easy."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"2."}),(0,i.jsxs)(s.td,{children:["Runtime ",(0,i.jsx)(s.code,{children:"query"})," requests"]}),(0,i.jsxs)(s.td,{children:["Implement ",(0,i.jsx)(s.code,{children:"read"})," type requests for the runtime. This methods should help developer to read data from Substrate-based blockchains."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"3."}),(0,i.jsxs)(s.td,{children:["Runtime ",(0,i.jsx)(s.code,{children:"query"})," documentation"]}),(0,i.jsxs)(s.td,{children:["Document implemented functionality and extend ",(0,i.jsx)(s.code,{children:"hs-web3"})," documentation by adding ",(0,i.jsx)(s.code,{children:"Substrate query"})," section."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"4."}),(0,i.jsx)(s.td,{children:"Runtime interaction examples"}),(0,i.jsxs)(s.td,{children:["Add examples of using API queries into ",(0,i.jsx)(s.code,{children:"hs-web3"})," repository."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"5."}),(0,i.jsx)(s.td,{children:"Docker image"}),(0,i.jsx)(s.td,{children:"Pack milestone results (unit tests) into docker image to make it's evaluation easy."})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"milestone-4",children:"Milestone 4"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Estimated Duration:"})," 3 weeks"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"FTE:"})," 0.4"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Costs:"})," 0.4 BTC"]}),"\n"]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Number"}),(0,i.jsx)(s.th,{children:"Deliverable"}),(0,i.jsx)(s.th,{children:"Specification"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"1."}),(0,i.jsx)(s.td,{children:"Extrinsic abstractions"}),(0,i.jsx)(s.td,{children:"Implement structures and abstractions that makes extrinsics operations (serialize/deserialize, sign, send)."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"2."}),(0,i.jsx)(s.td,{children:"Extrinsic signers"}),(0,i.jsx)(s.td,{children:"Use ECDSA and Ed25519 cryptography libraries for signing extrinsics. (Unfortunately Sr25519 unavaliable for Haskell, it could be an idea for another grant.)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"3."}),(0,i.jsx)(s.td,{children:"Transactions"}),(0,i.jsx)(s.td,{children:"Using Metadata and Extrinsics to make transactions into Substrate-based blockchains."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"4."}),(0,i.jsxs)(s.td,{children:["API ",(0,i.jsx)(s.code,{children:"tx"})," documentation"]}),(0,i.jsxs)(s.td,{children:["Document implemented functionality and extend ",(0,i.jsx)(s.code,{children:"hs-web3"})," documentation by adding ",(0,i.jsx)(s.code,{children:"Transactions"})," section."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"5."}),(0,i.jsx)(s.td,{children:"Runtime transaction examples"}),(0,i.jsxs)(s.td,{children:["Add examples of using ",(0,i.jsx)(s.code,{children:"tx"})," module into ",(0,i.jsx)(s.code,{children:"hs-web3"})," repository."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"6."}),(0,i.jsx)(s.td,{children:"Docker image"}),(0,i.jsx)(s.td,{children:"Pack milestone results (unit tests) into docker image to make it's evaluation easy."})]})]})]})]})}function h(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},28453:(e,s,t)=>{t.d(s,{R:()=>d,x:()=>l});var n=t(96540);const i={},r=n.createContext(i);function d(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0f268954.d96bae39.js b/assets/js/0f268954.d96bae39.js new file mode 100644 index 00000000000..c3253ecfe84 --- /dev/null +++ b/assets/js/0f268954.d96bae39.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[70359],{98097:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>d,metadata:()=>n,toc:()=>o});const n=JSON.parse('{"id":"applications/hs-web3","title":"Haskell Web3 library","description":"This document is referenced in the terms and conditions and therefore needs to contain all the required information. Don\'t remove any of the mandatory parts presented in bold letters or as headlines! See the Open Grants Program Process on how to submit a proposal.","source":"@site/applications/hs-web3.md","sourceDirName":"applications","slug":"/applications/hs-web3","permalink":"/applications/hs-web3","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/hs-web3.md","tags":[],"version":"current","frontMatter":{}}');var i=t(74848),r=t(28453);const d={},l="Haskell Web3 library",c={},o=[{value:"Project Description \ud83d\udcc4",id:"project-description-page_facing_up",level:2},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Milestone 1",id:"milestone-1",level:3},{value:"Milestone 2",id:"milestone-2",level:3},{value:"Milestone 3",id:"milestone-3",level:3},{value:"Milestone 4",id:"milestone-4",level:3}];function a(e){const s={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.header,{children:(0,i.jsx)(s.h1,{id:"haskell-web3-library",children:"Haskell Web3 library"})}),"\n",(0,i.jsxs)(s.blockquote,{children:["\n",(0,i.jsxs)(s.p,{children:["This document is referenced in the terms and conditions and therefore needs to contain all the required information. Don't remove any of the mandatory parts presented in bold letters or as headlines! See the ",(0,i.jsx)(s.a,{href:"https://github.com/w3f/Open-Grants-Program/blob/master/README_2.md",children:"Open Grants Program Process"})," on how to submit a proposal."]}),"\n"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Proposer:"})," akru"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Payment Address:"})," 18QrEJq9f1EL4f3DVsbxYnkJXgbhSF9XJ4"]}),"\n"]}),"\n",(0,i.jsxs)(s.h2,{id:"project-description-page_facing_up",children:["Project Description ","\ud83d\udcc4"]}),"\n",(0,i.jsx)(s.p,{children:"It's my personal project. It was started as Ethereum client library but recently I guess it could evolve into multi-platform client library including Polkadot / Substrate chains. Haskell is a powerful hight order functional programming language that provide industrial grade code safety because of very strict control of function side effects. For Polkadot ecosystem Haskell developers is couple of high skilled professionals that could make effective services and applications. This project reduce entry threshold and could be a good quick start for haskellers."}),"\n",(0,i.jsxs)(s.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Members:"})," Aleksandr Krupenkin"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"LinkedIn Profiles:"})," ",(0,i.jsx)(s.a,{href:"https://www.linkedin.com/in/krupenkin",children:"https://www.linkedin.com/in/krupenkin"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Code Repos:"})," ",(0,i.jsx)(s.a,{href:"https://github.com/airalab/hs-web3",children:"https://github.com/airalab/hs-web3"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Website:"})," ",(0,i.jsx)(s.a,{href:"https://hs-web3.readthedocs.io",children:"https://hs-web3.readthedocs.io"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Legal Structure:"})," individual"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Team's Experience:"})," Haskell Web3 library created on 2016. During development was fully implemented account abstractions, Solidity ABI codecs, JSON-RPC API and ECDSA cryptography."]}),"\n"]}),"\n",(0,i.jsxs)(s.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Total Estimated Duration:"})," 16 weeks"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Full-time equivalent (FTE):"})," 0.4"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Total Costs:"})," 2 BTC"]}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"milestone-1",children:"Milestone 1"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Estimated Duration:"})," 3 weeks"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"FTE:"})," 0.4"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Costs:"})," 0.4 BTC"]}),"\n"]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Number"}),(0,i.jsx)(s.th,{children:"Deliverable"}),(0,i.jsx)(s.th,{children:"Specification"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"1."}),(0,i.jsx)(s.td,{children:"Substrate WebSocket RPC"}),(0,i.jsxs)(s.td,{children:["Implement Substrate JSON-RPC methods described ",(0,i.jsx)(s.a,{href:"https://github.com/paritytech/substrate/tree/master/client/rpc-api/src",children:"here"}),": ",(0,i.jsx)(s.code,{children:"author"}),", ",(0,i.jsx)(s.code,{children:"chain"}),", ",(0,i.jsx)(s.code,{children:"state"}),", ",(0,i.jsx)(s.code,{children:"system"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"2."}),(0,i.jsx)(s.td,{children:"Substrate RPC documentations"}),(0,i.jsxs)(s.td,{children:["Extend ",(0,i.jsx)(s.a,{href:"https://hs-web3.readthedocs.io/",children:"Haskell Web3 documentation"})," by implemented functions adding ",(0,i.jsx)(s.code,{children:"Substrate RPC"})," section."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"3."}),(0,i.jsx)(s.td,{children:"Substrate RPC examples"}),(0,i.jsxs)(s.td,{children:["Write simple examples into ",(0,i.jsx)(s.a,{href:"https://github.com/airalab/hs-web3",children:"repository"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"4."}),(0,i.jsx)(s.td,{children:"Docker image"}),(0,i.jsx)(s.td,{children:"Pack milestone results into docker image to make it's evaluation easy."})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"milestone-2",children:"Milestone 2"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Estimated Duration:"})," 6 weeks"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"FTE:"})," 0.4"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Costs:"})," 0.8 BTC"]}),"\n"]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Number"}),(0,i.jsx)(s.th,{children:"Deliverable"}),(0,i.jsx)(s.th,{children:"Specification"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"1."}),(0,i.jsx)(s.td,{children:"Haskell SCALE codec"}),(0,i.jsxs)(s.td,{children:["Implement SCALE codecs for Haskell that required for correct Polkadot / Substrate client implementation. Codec should reference to ",(0,i.jsx)(s.a,{href:"https://substrate.dev/docs/en/conceptual/core/codec",children:"official documentation"})," and ",(0,i.jsx)(s.a,{href:"https://github.com/paritytech/parity-scale-codec",children:"Rust implementation"}),". Codec should pass Rust test cases."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"2."}),(0,i.jsx)(s.td,{children:"SCALE codec documentation"}),(0,i.jsxs)(s.td,{children:["Document implemented functionality and extend ",(0,i.jsx)(s.code,{children:"hs-web3"})," documentation by adding ",(0,i.jsx)(s.code,{children:"SCALE"})," codec section."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"3."}),(0,i.jsx)(s.td,{children:"Codec examples"}),(0,i.jsxs)(s.td,{children:["Add examples of using codec into ",(0,i.jsx)(s.code,{children:"hs-web3"})," repository."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"4."}),(0,i.jsx)(s.td,{children:"Docker image"}),(0,i.jsx)(s.td,{children:"Pack milestone results (unit tests) into docker image to make it's evaluation easy."})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"milestone-3",children:"Milestone 3"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Estimated Duration:"})," 3 weeks"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"FTE:"})," 0.4"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Costs:"})," 0.4 BTC"]}),"\n"]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Number"}),(0,i.jsx)(s.th,{children:"Deliverable"}),(0,i.jsx)(s.th,{children:"Specification"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"1."}),(0,i.jsx)(s.td,{children:"Runtime Metadata parsers"}),(0,i.jsx)(s.td,{children:"Implement structures and abstractions that helps to parse runtime metadata and make API decoration easy."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"2."}),(0,i.jsxs)(s.td,{children:["Runtime ",(0,i.jsx)(s.code,{children:"query"})," requests"]}),(0,i.jsxs)(s.td,{children:["Implement ",(0,i.jsx)(s.code,{children:"read"})," type requests for the runtime. This methods should help developer to read data from Substrate-based blockchains."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"3."}),(0,i.jsxs)(s.td,{children:["Runtime ",(0,i.jsx)(s.code,{children:"query"})," documentation"]}),(0,i.jsxs)(s.td,{children:["Document implemented functionality and extend ",(0,i.jsx)(s.code,{children:"hs-web3"})," documentation by adding ",(0,i.jsx)(s.code,{children:"Substrate query"})," section."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"4."}),(0,i.jsx)(s.td,{children:"Runtime interaction examples"}),(0,i.jsxs)(s.td,{children:["Add examples of using API queries into ",(0,i.jsx)(s.code,{children:"hs-web3"})," repository."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"5."}),(0,i.jsx)(s.td,{children:"Docker image"}),(0,i.jsx)(s.td,{children:"Pack milestone results (unit tests) into docker image to make it's evaluation easy."})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"milestone-4",children:"Milestone 4"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Estimated Duration:"})," 3 weeks"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"FTE:"})," 0.4"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Costs:"})," 0.4 BTC"]}),"\n"]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Number"}),(0,i.jsx)(s.th,{children:"Deliverable"}),(0,i.jsx)(s.th,{children:"Specification"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"1."}),(0,i.jsx)(s.td,{children:"Extrinsic abstractions"}),(0,i.jsx)(s.td,{children:"Implement structures and abstractions that makes extrinsics operations (serialize/deserialize, sign, send)."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"2."}),(0,i.jsx)(s.td,{children:"Extrinsic signers"}),(0,i.jsx)(s.td,{children:"Use ECDSA and Ed25519 cryptography libraries for signing extrinsics. (Unfortunately Sr25519 unavaliable for Haskell, it could be an idea for another grant.)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"3."}),(0,i.jsx)(s.td,{children:"Transactions"}),(0,i.jsx)(s.td,{children:"Using Metadata and Extrinsics to make transactions into Substrate-based blockchains."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"4."}),(0,i.jsxs)(s.td,{children:["API ",(0,i.jsx)(s.code,{children:"tx"})," documentation"]}),(0,i.jsxs)(s.td,{children:["Document implemented functionality and extend ",(0,i.jsx)(s.code,{children:"hs-web3"})," documentation by adding ",(0,i.jsx)(s.code,{children:"Transactions"})," section."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"5."}),(0,i.jsx)(s.td,{children:"Runtime transaction examples"}),(0,i.jsxs)(s.td,{children:["Add examples of using ",(0,i.jsx)(s.code,{children:"tx"})," module into ",(0,i.jsx)(s.code,{children:"hs-web3"})," repository."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"6."}),(0,i.jsx)(s.td,{children:"Docker image"}),(0,i.jsx)(s.td,{children:"Pack milestone results (unit tests) into docker image to make it's evaluation easy."})]})]})]})]})}function h(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},28453:(e,s,t)=>{t.d(s,{R:()=>d,x:()=>l});var n=t(96540);const i={},r=n.createContext(i);function d(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0f3d9ed8.2f0f5885.js b/assets/js/0f3d9ed8.2f0f5885.js deleted file mode 100644 index cbad42c84ba..00000000000 --- a/assets/js/0f3d9ed8.2f0f5885.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[98654],{32870:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>d});const i=JSON.parse('{"id":"applications/mobile_dapp_connection","title":"Polkadot/Substrate dApps/Wallet Connection using Tesseract","description":"Project Description","source":"@site/applications/mobile_dapp_connection.md","sourceDirName":"applications","slug":"/applications/mobile_dapp_connection","permalink":"/applications/mobile_dapp_connection","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/mobile_dapp_connection.md","tags":[],"version":"current","frontMatter":{}}');var n=s(74848),r=s(28453);const a={},o="Polkadot/Substrate dApps/Wallet Connection using Tesseract",l={},d=[{value:"Project Description",id:"project-description",level:2},{value:"Why Tesseract is good for the ecosystem",id:"why-tesseract-is-good-for-the-ecosystem",level:3},{value:"How Tesseract integrates into Substrate/Polkadot",id:"how-tesseract-integrates-into-substratepolkadot",level:3},{value:"How is Tesseract different?",id:"how-is-tesseract-different",level:3},{value:"How is Tesseract different on mobile?",id:"how-is-tesseract-different-on-mobile",level:4},{value:"How is Tesseract different beyond mobile?",id:"how-is-tesseract-different-beyond-mobile",level:4},{value:"Why our Team is interested",id:"why-our-team-is-interested",level:3},{value:"Team members",id:"team-members",level:2},{value:"Team Website",id:"team-website",level:2},{value:"Team's experience",id:"teams-experience",level:2},{value:"Team Code Repos",id:"team-code-repos",level:2},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:2},{value:"Tesseract Overview",id:"tesseract-overview",level:2},{value:"Tesseract Architecture",id:"tesseract-architecture",level:3},{value:"Layered structure",id:"layered-structure",level:4},{value:"Application Layer",id:"application-layer",level:5},{value:"Tesseract application-layer protocol",id:"tesseract-application-layer-protocol",level:6},{value:"Polkadot application-layer protocol",id:"polkadot-application-layer-protocol",level:6},{value:"Presentation Layer",id:"presentation-layer",level:5},{value:"Transport Layer",id:"transport-layer",level:5},{value:"Tesseract Implementation",id:"tesseract-implementation",level:3},{value:"Development Roadmap",id:"development-roadmap",level:2},{value:"Milestone 1: Cross-platform Tesseract Core in Rust",id:"milestone-1-cross-platform-tesseract-core-in-rust",level:3},{value:"Milestone 2: Platforms and Polkadot/Substrate Support",id:"milestone-2-platforms-and-polkadotsubstrate-support",level:3},{value:"Milestone 3: Demo applications",id:"milestone-3-demo-applications",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Conclusion",id:"conclusion",level:2},{value:"Some links for reference:",id:"some-links-for-reference",level:2}];function c(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"polkadotsubstrate-dappswallet-connection-using-tesseract",children:"Polkadot/Substrate dApps/Wallet Connection using Tesseract"})}),"\n",(0,n.jsx)(t.h2,{id:"project-description",children:"Project Description"}),"\n",(0,n.jsxs)(t.p,{children:["The goal of this proposal is to ",(0,n.jsx)(t.strong,{children:"enhance the usability and security of Polkadot/Substrate native mobile applications"})," (the ones in AppStore and Play Market). By enabling the apps to connect to the wallets when a signature for a transaction is needed, we propose to get rid of a cumbersome and potentially insecure private key handling burden."]}),"\n",(0,n.jsx)(t.p,{children:"To achieve this goal, we propose to implement Tesseract (dApps/wallets connection) protocol for Polkadot/Substrate."}),"\n",(0,n.jsx)(t.h3,{id:"why-tesseract-is-good-for-the-ecosystem",children:"Why Tesseract is good for the ecosystem"}),"\n",(0,n.jsx)(t.p,{children:"iOS and Android are (arguably) the most popular app platforms today. With smooth experience and high security provided by Tesseract\u2019s capability to eliminate private key handling, the dApps could more easily match the expectations of an application from AppStore or PlayMarket, thus leading to lesser friction in dApps adoption."}),"\n",(0,n.jsx)(t.h3,{id:"how-tesseract-integrates-into-substratepolkadot",children:"How Tesseract integrates into Substrate/Polkadot"}),"\n",(0,n.jsx)(t.p,{children:"Once implemented, any Polkadot/Substrate native mobile dApp developer will be able to add Tesseract support with just several lines of code."}),"\n",(0,n.jsx)(t.p,{children:"As an example, this is how our integration currently works in Swift for the Ethereum network:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-swift",children:'import Tesseract\n\n// Check that we have a wallet installed. You should handle this situation in your app.\nguard Tesseract.Ethereum.isKeychainInstalled else {\n fatalError("Wallet is not installed!")\n}\n\n// Our HTTP RPC URL. Can be Infura\nlet rpcUrl = "https://mainnet.infura.io/v3/{API-KEY}"\n\n// Creating Web3 instance. Try to reuse the existing instance of Web3 in your app.\nlet web3 = Tesseract.Ethereum.Web3(rpcUrl: rpcUrl)\n'})}),"\n",(0,n.jsxs)(t.p,{children:["For more information, please check: ",(0,n.jsx)(t.a,{href:"https://github.com/tesseract-one/Tesseract.swift",children:"https://github.com/tesseract-one/Tesseract.swift"})]}),"\n",(0,n.jsxs)(t.p,{children:["Our current implementation of the reference wallet for iOS, supporting Ethereum can be found here: ",(0,n.jsx)(t.a,{href:"https://apps.apple.com/us/app/tesseract-wallet/id1459505103",children:"https://apps.apple.com/us/app/tesseract-wallet/id1459505103"}),". We plan to approach Tesseract supporting Polkadot wallet with a consequent separate proposal. It\u2019s either going to be a reference wallet implementation or integration with some existing Polkadot wallets."]}),"\n",(0,n.jsx)(t.h3,{id:"how-is-tesseract-different",children:"How is Tesseract different?"}),"\n",(0,n.jsx)(t.p,{children:"Since the deliverables of this proposal are mobile-specific, but Tesseract is so much more than just a solution for mobile dApps and we\u2019d like to share this aspect as well. We've split this section into two parts: the first answering the question specifically about mobile and the second covering a more general comparison of Tesseract's approach."}),"\n",(0,n.jsx)(t.h4,{id:"how-is-tesseract-different-on-mobile",children:"How is Tesseract different on mobile?"}),"\n",(0,n.jsx)(t.p,{children:"The short answer to this question is that Tesseract can provide a potentially more familiar mobile UX due to deeper integration with the underlying OS, by utilizing OS native IPC (Inter-Process Communication) protocol."}),"\n",(0,n.jsx)(t.p,{children:"To demonstrate the advantages of our approach, let\u2019s first briefly cover the other options available:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Key inside the dApp"})," - not really an external signature provider, as the app manages the private key inside. Worth mentioning, as quite a number of native mobile dApps use this approach. The user just has to copy the private key into the dApp. Simplest, but raises security concerns and the usability is questionable."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Centralized proxies"})," - centralized custodial wallet solution for decentralized applications. Example: Fortmatic"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"URLs (aka deep-linking)"})," - allows jumping between applications on smartphones using special URLs. This way a dApp can switch to the wallet by forming a request in a URL form and receive a response from the wallet switching back the same way. This approach works to a limited extent, suffering from routing problems (especially on iOS) and can\u2019t support multiple wallets without a 3rd party router (or a maintained list of supported wallets matched to their unique URLs). On iOS, if more than one application can open a URL, the app is chosen randomly which rises a security concern. From the UX standpoint, it looks like the apps are switching back and forth. Deep-linking is sometimes used together with relays (see below)."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Centralized signing relays"})," - allows a mobile wallet to sign transactions using centralized servers as connection relays. Usually works together with a deep-linking handshake, inheriting its issues and behavior (iOS routing issues, app switching UX). Also, such a solution can\u2019t be considered optimal, due to the fact that two apps running on the same device have to communicate through a server somewhere on the internet. Examples: WalletConnect, WalletLink"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Decentralized signing relays"})," - this approach works similarly to Centralized signing relays, except that p2p mesh is used instead of a centralized relay server. Examples: Beacon"]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["In contrast, Tesseract\u2019s transport on smartphones is based on another technology, deeply integrated into the underlying OS - inter-process communication (IPC). This way we have managed to achieve a convenient UX. The behavior is centered around modal screens, which are quite widely used in various applications (please, check our demo: ",(0,n.jsx)(t.a,{href:"https://drive.google.com/file/d/17YMdJS9CH6SXqP-YPUMKbm0BWdAE2Rx3/view",children:"https://drive.google.com/file/d/17YMdJS9CH6SXqP-YPUMKbm0BWdAE2Rx3/view"}),"). There is no central authority and the data goes through the shortest route - communication is done point to point between two processes running on the same device. It works equally well on both iOS and Android without any dApp/Wallet routing issues (the user can pick the wallet to use for a signature). As for security - after extensive testing, we have not found any ways to hijack a transaction so far."]}),"\n",(0,n.jsx)(t.p,{children:"The table below summarises our comparison considerations, demonstrating why we have decided to utilize the IPC protocol instead of something else:"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Transport\\Criteria"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Universal (iOS and Android)"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Secure"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Convenient (from a usability standpoint)"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Decentralized"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Optimal (shortest data path)"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Key inside the dApp"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u274c because of giving away the private key to a 3rd party dApp"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u274c the user has to copy/paste private keys"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Centralized proxies"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u26a0\ufe0f controversial, due to the inherent custodial mechanism"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u274c custodial wallet"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u274c data has to go through the internet to facilitate a local transfer"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"URLs"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u26a0\ufe0f has routing issues on iOS. Can be solved either by maintaining compatible wallets list (in code? On a server?) or through a 3rd routing application"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u26a0\ufe0f Due to random selection of the app matching the URL on iOS has a potential spoofing vulnerability"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705 explicit app switching behavior"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Centralized signing relays"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u26a0\ufe0f inherits deep-linking issues as it\u2019s used for handshake"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u26a0\ufe0f inherits deep-linking issues as it\u2019s used for handshake"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705 same as deep-linking (if the deep linking handshake is used) or manual (if not)"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u274c uses central servers as relays"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u274c data has to go through the internet to facilitate a local transfer"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Decentralized signing relays"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u26a0\ufe0f inherits deep-linking issues as it\u2019s used for handshake"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u26a0\ufe0f inherits deep-linking issues as it\u2019s used for handshake"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705 same as deep-linking (if the deep linking handshake is used) or manual (if not)"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u274c data has to go through the internet to facilitate a local transfer"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"IPC (Tesseract)"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705 modal screens, OS integrated wallet selection"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"})]})]})]}),"\n",(0,n.jsx)(t.h4,{id:"how-is-tesseract-different-beyond-mobile",children:"How is Tesseract different beyond mobile?"}),"\n",(0,n.jsx)(t.p,{children:"Tesseract protocol was designed adaptable to existing and new potential use cases through flexibility provided by multi-transport (IPC, socket, QR-code, etc.) architecture, in contrast to its single-transport protocol counterparts. While some transport protocols can shine in one scenario, a totally different approach may be needed for another. There are a number of known (and probably quite some yet-to-be-discovered) use cases of how dApps and wallets may need to interact. Some common examples are:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"A dApp and a wallet run on the same smartphone"}),"\n",(0,n.jsx)(t.li,{children:"A dApp and a wallet run on the same desktop"}),"\n",(0,n.jsx)(t.li,{children:"A dApp runs on the desktop and a wallet runs on a smartphone"}),"\n",(0,n.jsx)(t.li,{children:"etc."}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Here is a short table, that summarises the comparison of some common transport protocols versus the use cases. While there are way more use cases than the table covers, the ones included are sufficient to showcase that neither transport is capable of covering all the use cases by itself. Also, here we show only transports that are not compromising decentralization."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"dApp"}),(0,n.jsx)(t.th,{children:"Mobile"}),(0,n.jsx)(t.th,{children:"Desktop"}),(0,n.jsx)(t.th,{children:"Desktop"}),(0,n.jsx)(t.th,{children:"Mobile"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Wallet"}),(0,n.jsx)(t.td,{children:"Mobile"}),(0,n.jsx)(t.td,{children:"Mobile"}),(0,n.jsx)(t.td,{children:"Desktop"}),(0,n.jsx)(t.td,{children:"Desktop"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Description"}),(0,n.jsx)(t.td,{children:"A very common scenario, when both the dApp and the Wallet run on the same smartphone."}),(0,n.jsx)(t.td,{children:"Another common scenario, when a dApp runs on a desktop computer and the wallet is on the smartphone."}),(0,n.jsx)(t.td,{children:"A scenario when a user needs to run a dApp and the wallet on the same desktop computer."}),(0,n.jsx)(t.td,{children:"This case covers a dApp running on the phone and the wallet on a desktop."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"IPC"}),(0,n.jsx)(t.td,{children:"\u2705 Direct dApp/Wallet interaction. Native platform\u2019s look and feel."}),(0,n.jsx)(t.td,{children:"\u274c By definition works only on the same device."}),(0,n.jsx)(t.td,{children:"\u2705 Direct dApp/Wallet interaction."}),(0,n.jsx)(t.td,{children:"\u274c By definition works only on the same device."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Deep-link"}),(0,n.jsx)(t.td,{children:"\u26a0\ufe0f Direct dApp/Wallet interaction. Apps switching behavior. Has routing issues on iOS."}),(0,n.jsx)(t.td,{children:"\u274c By definition works only on the same device."}),(0,n.jsx)(t.td,{children:"\u26a0\ufe0f Can work to an extent how well the OS supports deep linking."}),(0,n.jsx)(t.td,{children:"\u274c By definition works only on the same device."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Network (direct socket connection)"}),(0,n.jsx)(t.td,{children:"\u274c Potentially can work on Android, especially with a deep-linking handshake. Problematic on iOS: background sockets are against Apple guidelines."}),(0,n.jsx)(t.td,{children:"\u2705 Works best when both devices are on the same WiFi. Needs a QR-code or NFC handshake."}),(0,n.jsx)(t.td,{children:"\u2705 Works well as the desktops don\u2019t set any limitations on sockets in the background. To avoid routing problems can be used together with a separate handshake (i.e. deep-linking)."}),(0,n.jsx)(t.td,{children:"\u2705 Works best when both devices are on the same WiFi. Needs a QR-code or NFC handshake."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Network (p2p)"}),(0,n.jsx)(t.td,{children:"\u26a0\ufe0f Can work, though requires an internet connection for communication that is actually between apps on the same device, which is not ideal. Requires a deep-linking handshake."}),(0,n.jsx)(t.td,{children:"\u2705 Works best for situations when devices are not in close proximity and don\u2019t share the same WiFi. Needs a QR-code or NFC handshake."}),(0,n.jsx)(t.td,{children:"\u26a0\ufe0f Can work, though requires an internet connection for local communication, which is not ideal."}),(0,n.jsx)(t.td,{children:"\u2705 Works best for situations when devices are not in close proximity and don\u2019t share the same WiFi. Needs a QR-code or NFC handshake."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"QR-code"}),(0,n.jsx)(t.td,{children:"\u26a0\ufe0f Can potentially be made to work, though would require image copy-pasting, which is not an ideal UX."}),(0,n.jsx)(t.td,{children:"\u2705 Best use - a handshake mechanism for another transport. Even though technically it can work by itself if both devices have cameras, it\u2019s not an ideal UX."}),(0,n.jsx)(t.td,{children:"\u26a0\ufe0f Can potentially be made to work, though would require image copy-pasting, which is not an ideal UX."}),(0,n.jsx)(t.td,{children:"\u26a0\ufe0f While it technically can work, might provide an awkward experience to the user turning screens of large devices into the cameras of each other."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Bluetooth/NFC"}),(0,n.jsx)(t.td,{children:"\u274c By definition works only with separate physical devices."}),(0,n.jsx)(t.td,{children:"\u2705 Works best for devices in close proximity, especially if a shared WiFi is not an option."}),(0,n.jsx)(t.td,{children:"\u274c By definition works only with separate physical devices."}),(0,n.jsx)(t.td,{children:"\u2705 Works best for devices in close proximity, especially if a shared WiFi is not an option."})]})]})]}),"\n",(0,n.jsx)(t.p,{children:"Since none of the transport protocols are universal enough to be an optimal choice for every use case, we\u2019ve designed Tesseract to be non-constrained by this factor. Instead, Tesseract can use any implemented transport protocol, based on the scenario and/or the user\u2019s choice, due to its layered architecture. The following diagram demonstrates a simplified architecture of the Tesseract protocol:"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:"https://drive.google.com/uc?id=1Fmad82-5ZRYi-bhD12RMhfYotrWwPrVF",alt:"Architecture of Tesseract"})}),"\n",(0,n.jsx)(t.p,{children:"This way, Tesseract can potentially handle any known or future use case to the extent the most matching transport can, which is not an available option for the single-transport bound solutions."}),"\n",(0,n.jsx)(t.h3,{id:"why-our-team-is-interested",children:"Why our Team is interested"}),"\n",(0,n.jsxs)(t.p,{children:["As we indicated in our first proposal, which was awarded and currently coming to the end (",(0,n.jsx)(t.a,{href:"https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/swift_api.md",children:"Swift API"}),"), that our long term goal was to bring Tesseract support to the Polkadot community."]}),"\n",(0,n.jsx)(t.p,{children:"The Swift API library from our first proposal was an essential step for us, as Swift is the programming language of iOS and we need this to implement Tesseract support for Polkadot/Substrate on iOS. Since we are finishing with the first grant application, we have prepared the current proposal to continue the integration process of Tesseract into Polkadot/Substrate ecosystem."}),"\n",(0,n.jsx)(t.h2,{id:"team-members",children:"Team members"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Daniel Leping, @dileping on GitHub, CEO"}),"\n",(0,n.jsx)(t.li,{children:"Yehor Popovych, @ypopovych on GitHub, CTO"}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"team-website",children:"Team Website"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://tesseract.one",children:"https://tesseract.one"})}),"\n",(0,n.jsx)(t.h2,{id:"teams-experience",children:"Team's experience"}),"\n",(0,n.jsxs)(t.p,{children:["Our team has been building blockchain applications since 2017 and has worked together on ",(0,n.jsx)(t.a,{href:"https://tesseract.one/",children:"Tesseract"})," since 2018. The company got funded by ",(0,n.jsx)(t.a,{href:"https://sosv.com/",children:"SOSV"})," and ",(0,n.jsx)(t.a,{href:"https://emurgo.io/",children:"Emurgo"})," in 2019 and took training in the ",(0,n.jsx)(t.a,{href:"https://dlab.vc/",children:"dlab acceleration program"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["This is our second grant application for Polkadot. Previously, we were awarded to build ",(0,n.jsx)(t.a,{href:"https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/swift_api.md",children:"Polkadot/Substrate Swift SDK"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["Prior to blockchain technology, we had a wealth of experience in Swift, building applications, and middleware. The most noticeable projects are ",(0,n.jsx)(t.a,{href:"https://github.com/crossroadlabs/Express",children:"Swift Express"}),", ",(0,n.jsx)(t.a,{href:"https://github.com/reactive-swift",children:"Reactive Swift"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"The team has a 10-year history of working together, delivering various solutions of high complexity, including the mentioned above Swift Express and Reactive Swift, Cross++ ( cross-platform framework in C++ that allowed to keep the app logic shared while providing the capability to use native UIs) and tens of the web, mobile, and server applications for customers from around the world including the US, EU, Israel, Australia, etc."}),"\n",(0,n.jsx)(t.h2,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/tesseract-one",children:"https://github.com/tesseract-one"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/crossroadlabs/Express",children:"https://github.com/crossroadlabs/Express"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/reactive-swift",children:"https://github.com/reactive-swift"})}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://www.linkedin.com/in/danielleping/",children:"https://www.linkedin.com/in/danielleping/"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://www.linkedin.com/in/yehor-popovych/",children:"https://www.linkedin.com/in/yehor-popovych/"})}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"tesseract-overview",children:"Tesseract Overview"}),"\n",(0,n.jsx)(t.p,{children:"The main goal of the Tesseract protocol is to enable dApp developers to provide a smooth and easy-to-understand user experience without compromising privacy and decentralization. Being a protocol that allows dApps to run without having access to the user's private key, Tesseract facilitates communication with the Wallets to request transaction and data signatures, thus providing a possibility to get rid of private key handling and having a look and feel of a \u201cnormal\u201d application."}),"\n",(0,n.jsxs)(t.p,{children:["Before digging into the technical details, we want to share the \u201cfeel\u201d of how the Tesseract-based dApps work: ",(0,n.jsx)(t.a,{href:"https://drive.google.com/file/d/17YMdJS9CH6SXqP-YPUMKbm0BWdAE2Rx3/view",children:"https://drive.google.com/file/d/17YMdJS9CH6SXqP-YPUMKbm0BWdAE2Rx3/view"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"Such a user experience is achieved by having a seamless connection between the dApp and the wallet via Tesseract protocol."}),"\n",(0,n.jsx)(t.p,{children:"Even though mobile is the first focus, Tesseract is not limited to being the mobile-only solution. It can maintain the connection between dApps and wallets working in various environments: smartphone, desktop, or even crossing the border of a single device (i.e. a dApp runs on the computer and the wallet is on the smartphone). This is achieved by having a layered architecture, that depending on the current environment, allows using a suitable transport protocol."}),"\n",(0,n.jsx)(t.p,{children:"Tesseract protocol does not require a server to keep the keys. All the requests are done directly to the wallet application through IPC (if the device is the same) or other p2p communication protocol (if cross-device)."}),"\n",(0,n.jsx)(t.h3,{id:"tesseract-architecture",children:"Tesseract Architecture"}),"\n",(0,n.jsx)(t.p,{children:"Tesseract protocol is designed from the perspective of flexibility to make it adaptable for various scenarios. To achieve this goal, Tesseract uses a layered structure in its core and messages, that are enveloped according to the protocol layer."}),"\n",(0,n.jsx)(t.p,{children:"The layers-based implementation is largely inspired by the OSI model (the model of network protocols)."}),"\n",(0,n.jsx)(t.h4,{id:"layered-structure",children:"Layered structure"}),"\n",(0,n.jsx)(t.p,{children:"As mentioned above, Tesseract has a layered structure. The basic three layers are:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Application Layer"})," - responsible for communication via specific protocol (i.e. Polkadot): transaction signing request, messages signing, public key requests - all here."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Presentation Layer"})," - provides enveloping of application-specific data into transportable packages. Defines text/binary packet structures transferrable via any underlying transport."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Transport Layer"})," - implementation of various transport types. IPC, p2p NFC, URLs, QR-codes, Bluetooth, etc."]}),"\n"]}),"\n",(0,n.jsx)(t.h5,{id:"application-layer",children:"Application Layer"}),"\n",(0,n.jsx)(t.p,{children:"The application layer can be anything, depending on the specific network plus Tesseract\u2019s application-layer protocol for controlling connection establishment, checking the presence of other application-layer protocols, etc."}),"\n",(0,n.jsx)(t.h6,{id:"tesseract-application-layer-protocol",children:"Tesseract application-layer protocol"}),"\n",(0,n.jsx)(t.p,{children:"Tesseracts\u2019 application layer API is responsible for the following:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Checking the presence of specific application-level protocol extensions"}),"\n",(0,n.jsx)(t.li,{children:"Event subscription"}),"\n",(0,n.jsx)(t.li,{children:"Inter-device connection initialization"}),"\n"]}),"\n",(0,n.jsx)(t.h6,{id:"polkadot-application-layer-protocol",children:"Polkadot application-layer protocol"}),"\n",(0,n.jsx)(t.p,{children:"This is the part where Polkadot gets integrated:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Signing data"}),"\n",(0,n.jsx)(t.li,{children:"Signing transactions"}),"\n",(0,n.jsx)(t.li,{children:"Public key querying"}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"From the perspective of the dApp developer - nothing changes. The developer still uses the same familiar Polkadot APIs. The only difference is that when Tesseract is integrated as a signature provider, the transactions are rerouted to an external wallet for signing, and then sent back to the dApp."}),"\n",(0,n.jsx)(t.h5,{id:"presentation-layer",children:"Presentation Layer"}),"\n",(0,n.jsx)(t.p,{children:"The presentation layer defines how the data is enveloped to be properly delivered to the destination. The current implementation uses JSON text messages (the easiest to debug and has great support in various platforms). Binary is a future consideration."}),"\n",(0,n.jsx)(t.h5,{id:"transport-layer",children:"Transport Layer"}),"\n",(0,n.jsx)(t.p,{children:"This layer is what makes Tesseract so flexible and allows it to work in various environments. It determines how exactly the dApp\u2019s requests packets are transferred to the wallets and how the wallets reply. By having multiple options of the transports, the dApps can communicate to the wallets located anywhere: on the same device or not. Communication between devices can be pretty much anything that can transfer data (TCP/IP, Bluetooth, NFC, etc.). For the current proposal though, we want to limit the number of transport layers implementations to the following:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"iOS IPC"}),"\n",(0,n.jsx)(t.li,{children:"Android IPC"}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"By implementing the above transfer protocols, we already allow developers to create native mobile dApps that don\u2019t have to carry a private key. While more protocols bring more value, this way we can release the first version sooner and go to market sooner with a concrete value proposition."}),"\n",(0,n.jsx)(t.p,{children:"In the future, we plan to implement protocols that allow inter-device communication. Possible options for the near future include:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"QR codes/(NFC) - mainly for a persistent connection initialization, especially in trustless environments"}),"\n",(0,n.jsx)(t.li,{children:"WebRTC - potentially the best option for browsers"}),"\n",(0,n.jsx)(t.li,{children:"TCP/IP - easier to implement for desktop apps then WebRTC"}),"\n",(0,n.jsx)(t.li,{children:"Bluetooth - browsers/between devices"}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"tesseract-implementation",children:"Tesseract Implementation"}),"\n",(0,n.jsx)(t.p,{children:"The implementation of Tesseract, pretty much like any other protocol, is a set of libraries that allow applications to communicate through it. In the case of Tesseract, there are two sets of libraries: one for the dApps (allows querying the wallets) and one for the Wallet (allows replying to the signing requests)."}),"\n",(0,n.jsxs)(t.p,{children:["Currently, Tesseract has a partial implementation in Swift and works on iOS: ",(0,n.jsx)(t.a,{href:"https://github.com/tesseract-one/Tesseract.swift",children:"https://github.com/tesseract-one/Tesseract.swift"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"For the sake of having a single cross-platform implementation (fewer bugs, single codebase), we propose to implement it in Rust and add language-specific wrappers in the future (i.e. Swift, Java, ReactNative, etc.)."}),"\n",(0,n.jsxs)(t.p,{children:["For the details on the proposed implementation, please refer to the ",(0,n.jsx)(t.em,{children:"Development Roadmap"})," section."]}),"\n",(0,n.jsx)(t.h2,{id:"development-roadmap",children:"Development Roadmap"}),"\n",(0,n.jsx)(t.h3,{id:"milestone-1-cross-platform-tesseract-core-in-rust",children:"Milestone 1: Cross-platform Tesseract Core in Rust"}),"\n",(0,n.jsx)(t.p,{children:"Duration: 8 weeks"}),"\n",(0,n.jsx)(t.p,{children:"This is the very foundation of the Tesseract protocol."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Number"}),(0,n.jsx)(t.th,{children:"Deliverable"}),(0,n.jsx)(t.th,{children:"Specification"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0a."}),(0,n.jsx)(t.td,{children:"License"}),(0,n.jsx)(t.td,{children:"Apache 2.0"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0b."}),(0,n.jsx)(t.td,{children:"Documentation"}),(0,n.jsxs)(t.td,{children:["Documentation for Tesseract Core:",(0,n.jsx)("br",{}),"1) overview with usage examples",(0,n.jsx)("br",{}),"2) messages and envelopes structures",(0,n.jsx)("br",{}),"3) APIs for application and transport level with examples"]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0c."}),(0,n.jsx)(t.td,{children:"Testing Guide"}),(0,n.jsx)(t.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0d."}),(0,n.jsx)(t.td,{children:"Docker"}),(0,n.jsx)(t.td,{children:"Due to the client-side nature of the deliverable, there is no need for a docker image."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0e."}),(0,n.jsx)(t.td,{children:"Article"}),(0,n.jsx)(t.td,{children:"We will publish an article that explains the value Tesseract brings to the dApp developers and how Tesseract Core serves as a foundation for all future work."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"1."}),(0,n.jsx)(t.td,{children:"Architecture"}),(0,n.jsx)(t.td,{children:"Repository with overall code structure. Serves as a framework for all the further development. Defines the layered structure and contains all the code that makes the layers (details below) to work together"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"2."}),(0,n.jsx)(t.td,{children:"Application-level framework"}),(0,n.jsx)(t.td,{children:"Defines how application level calls are formed as data structures and passed down to the next layer"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"3."}),(0,n.jsx)(t.td,{children:"Messages and envelopes"}),(0,n.jsx)(t.td,{children:"Implements serialization and envelopes for the app level structures + parsing and identification on the other side"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"4."}),(0,n.jsx)(t.td,{children:"Transport-level framework"}),(0,n.jsx)(t.td,{children:"Transport level abstractions, interfaces, data flow + transport initialization and selection logic"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"5."}),(0,n.jsx)(t.td,{children:"Transport-layer development APIs"}),(0,n.jsx)(t.td,{children:"APIs for transport protocol (IPC, socket, etc.) development. Will have two transport types: persistent, single-shot"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"6."}),(0,n.jsx)(t.td,{children:"Application-layer development APIs"}),(0,n.jsx)(t.td,{children:"APIs for application level stuff development (i.e. Tesseract handshaking and transport selection, Polkadot APIs)"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"milestone-2-platforms-and-polkadotsubstrate-support",children:"Milestone 2: Platforms and Polkadot/Substrate Support"}),"\n",(0,n.jsx)(t.p,{children:"Duration: 6 weeks"}),"\n",(0,n.jsx)(t.p,{children:"This milestone is based on the foundation built in Milestone 1 and focuses on platform-specific transport extensions (iOS, Android) and Substrate integration."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Number"}),(0,n.jsx)(t.th,{children:"Deliverable"}),(0,n.jsx)(t.th,{children:"Specification"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0a."}),(0,n.jsx)(t.td,{children:"License"}),(0,n.jsx)(t.td,{children:"Apache 2.0"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0b."}),(0,n.jsx)(t.td,{children:"Documentation"}),(0,n.jsxs)(t.td,{children:["We will provide:",(0,n.jsx)("br",{}),"1) README-type documentation for substrate-specific application-level APIs with examples",(0,n.jsx)("br",{}),"2) Rust API docs for substrate-specific application-level APIs",(0,n.jsx)("br",{}),"3) instructions on how to build and run the test apps for both iOS and Android"]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0c."}),(0,n.jsx)(t.td,{children:"Testing Guide"}),(0,n.jsx)(t.td,{children:"Substrate application layer will be fully covered by unit tests for both dApp and Wallet sides with a mock transport. For the IPC transport, we will provide test apps for both iOS and Android."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0d."}),(0,n.jsx)(t.td,{children:"Docker"}),(0,n.jsx)(t.td,{children:"Due to the client-side nature of the deliverable, there is no need for a docker image."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0e."}),(0,n.jsx)(t.td,{children:"Article"}),(0,n.jsx)(t.td,{children:"We will publish an article that describes how to start using Tesseract in Substrate applications. It's a continuation of the article from Milestone 1 and will tease part3, promising more examples and details."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"1."}),(0,n.jsx)(t.td,{children:"iOS IPC transport protocol implementation"}),(0,n.jsx)(t.td,{children:"Implementation of IPC transport for iOS. Code is tested with small test app on an iOS device."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"2."}),(0,n.jsx)(t.td,{children:"Android IPC transport protocol implementation"}),(0,n.jsx)(t.td,{children:"Implementation of IPC transport for Android. Code is tested with small test app on an Android device."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"3."}),(0,n.jsx)(t.td,{children:"Substrate protocol specification"}),(0,n.jsx)(t.td,{children:"Markdown-based documentation that provides details of workflows and messages required for proper substrate-based calls handling and transaction signing. This is separate from the main documentation and is a detailed description of the protocol to be implemented in the following step."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"4."}),(0,n.jsx)(t.td,{children:"Substrate protocol implementation"}),(0,n.jsxs)(t.td,{children:["1) implementation of Substrate application layer",(0,n.jsx)("br",{}),"2) substrate-specific application-level APIs"]})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"milestone-3-demo-applications",children:"Milestone 3: Demo applications"}),"\n",(0,n.jsx)(t.p,{children:"Duration: 6 weeks"}),"\n",(0,n.jsx)(t.p,{children:"To demonstrate the capabilities of Tesseract, we would like to provide easy-to-understand examples. These examples should be fully working (even though very basic and not intended for production use) and capable to showcase the capabilities to an unfamiliar audience."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Number"}),(0,n.jsx)(t.th,{children:"Deliverable"}),(0,n.jsx)(t.th,{children:"Specification"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0a."}),(0,n.jsx)(t.td,{children:"License"}),(0,n.jsx)(t.td,{children:"Apache 2.0"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0b."}),(0,n.jsx)(t.td,{children:"Documentation"}),(0,n.jsxs)(t.td,{children:["We will provide:",(0,n.jsx)("br",{}),"1) README-type documentation describing the key aspects of how the test applications work ",(0,n.jsx)("br",{}),"2) instructions on how to build and run the test apps for both iOS and Android"]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0c."}),(0,n.jsx)(t.td,{children:"Testing Guide"}),(0,n.jsx)(t.td,{children:"We will provide a guide how to build and run the apps."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0d."}),(0,n.jsx)(t.td,{children:"Docker"}),(0,n.jsx)(t.td,{children:"Due to the client-side nature of the deliverable, there is no need for a docker image."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0e."}),(0,n.jsx)(t.td,{children:"Article"}),(0,n.jsx)(t.td,{children:"We will publish an article (part3) that covers more details about the integration of Tesseract into Substrate dApps and wallets. The article will also cover some of our plans, specifically - java and swift libraries integration."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"1."}),(0,n.jsx)(t.td,{children:"Android Demo Wallet"}),(0,n.jsx)(t.td,{children:"Android Wallet test application with logic implemented in Rust, which demonstrates how a wallet can sign substrate transactions using the Rust APIs."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"2."}),(0,n.jsx)(t.td,{children:"Android Demo dApp"}),(0,n.jsx)(t.td,{children:"Android test dApp with logic implemented in Rust, that demonstrates transaction creation and signing through Tesseract via test wallet. The transaction is submitted to test-net after being signed."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"3."}),(0,n.jsx)(t.td,{children:"iOS Demo Wallet"}),(0,n.jsx)(t.td,{children:"iOS Wallet test application with logic implemented in Rust, which demonstrates how a wallet can sign substrate transactions using the Rust APIs."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"4."}),(0,n.jsx)(t.td,{children:"iOS Demo dApp"}),(0,n.jsx)(t.td,{children:"iOS test dApp with logic implemented in Rust, that demonstrates transaction creation and signing through Tesseract via test wallet. The transaction is submitted to test-net after being signed."})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,n.jsx)(t.p,{children:"The long-term vision for Tesseract is to be a safe, secure, and user-friendly way for any application to access a user\u2019s wallet and private keys, on as many blockchains as possible."}),"\n",(0,n.jsx)(t.p,{children:"At the moment, though, we want to bring the details about the next short-term steps, that we believe are essential for the project to start bringing traction."}),"\n",(0,n.jsx)(t.p,{children:"The next immediate step is making the use of Tesseract protocol easy for the Polkadot developers, which requires integration with the ecosystem. Specifically integration with:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Swift SDK (our library from the previous proposal: ",(0,n.jsx)(t.a,{href:"https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/swift_api.md",children:"https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/swift_api.md"}),"): ",(0,n.jsx)(t.a,{href:"https://github.com/tesseract-one/Substrate.swift",children:"https://github.com/tesseract-one/Substrate.swift"})]}),"\n",(0,n.jsxs)(t.li,{children:["Java SDK (we\u2019ve found two options so far):","\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/polkadot-java/api",children:"https://github.com/polkadot-java/api"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/emeraldpay/polkaj",children:"https://github.com/emeraldpay/polkaj"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"This will enable Mobile developers to start using Tesseract without any additional tools switching. Just adding a couple of lines of code for initialization."}),"\n",(0,n.jsx)(t.p,{children:"Simultaneously, we are going to deal with the wallet side by either providing a reference wallet implementation or by integrating with the existing Polkadot wallets (TBD)."}),"\n",(0,n.jsx)(t.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,n.jsx)(t.p,{children:"The quest for a better dApp signature provider is not new and there are quite some approaches. All the solutions have their pros and cons, but none are universal, secure, and decentralized at the same time."}),"\n",(0,n.jsxs)(t.p,{children:["Tesseract was designed with the idea that it\u2019s not enough to solve one of the problems or to provide a limited number of use cases. ",(0,n.jsx)(t.strong,{children:"We believe that to break the dApps adoption barrier, there must be a solution that is universal, secure, usable, and decentralized at the same time."})]}),"\n",(0,n.jsx)(t.h2,{id:"some-links-for-reference",children:"Some links for reference:"}),"\n",(0,n.jsxs)(t.p,{children:["Tesseract\u2019s Github: ",(0,n.jsx)(t.a,{href:"https://github.com/tesseract-one/",children:"https://github.com/tesseract-one/"})]}),"\n",(0,n.jsxs)(t.p,{children:["Tesseract\u2019s implementation in Swift: ",(0,n.jsx)(t.a,{href:"https://github.com/tesseract-one/Tesseract.swift",children:"https://github.com/tesseract-one/Tesseract.swift"})]}),"\n",(0,n.jsxs)(t.p,{children:["Tesseract\u2019s reference wallet: ",(0,n.jsx)(t.a,{href:"https://apps.apple.com/us/app/tesseract-wallet/id1459505103",children:"https://apps.apple.com/us/app/tesseract-wallet/id1459505103"})]}),"\n",(0,n.jsxs)(t.p,{children:["Demo video: ",(0,n.jsx)(t.a,{href:"https://drive.google.com/file/d/17YMdJS9CH6SXqP-YPUMKbm0BWdAE2Rx3/view",children:"https://drive.google.com/file/d/17YMdJS9CH6SXqP-YPUMKbm0BWdAE2Rx3/view"})]}),"\n",(0,n.jsxs)(t.p,{children:["Our previous proposal (Substrate/Polkadot Swift API): ",(0,n.jsx)(t.a,{href:"https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/swift_api.md",children:"https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/swift_api.md"})]}),"\n",(0,n.jsxs)(t.p,{children:["Our previous proposal codebase: ",(0,n.jsx)(t.a,{href:"https://github.com/tesseract-one/Substrate.swift",children:"https://github.com/tesseract-one/Substrate.swift"})]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>a,x:()=>o});var i=s(96540);const n={},r=i.createContext(n);function a(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0f3d9ed8.fe176226.js b/assets/js/0f3d9ed8.fe176226.js new file mode 100644 index 00000000000..a927fd80045 --- /dev/null +++ b/assets/js/0f3d9ed8.fe176226.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[98654],{65890:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>d});const i=JSON.parse('{"id":"applications/mobile_dapp_connection","title":"Polkadot/Substrate dApps/Wallet Connection using Tesseract","description":"Project Description","source":"@site/applications/mobile_dapp_connection.md","sourceDirName":"applications","slug":"/applications/mobile_dapp_connection","permalink":"/applications/mobile_dapp_connection","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/mobile_dapp_connection.md","tags":[],"version":"current","frontMatter":{}}');var n=s(74848),r=s(28453);const a={},o="Polkadot/Substrate dApps/Wallet Connection using Tesseract",l={},d=[{value:"Project Description",id:"project-description",level:2},{value:"Why Tesseract is good for the ecosystem",id:"why-tesseract-is-good-for-the-ecosystem",level:3},{value:"How Tesseract integrates into Substrate/Polkadot",id:"how-tesseract-integrates-into-substratepolkadot",level:3},{value:"How is Tesseract different?",id:"how-is-tesseract-different",level:3},{value:"How is Tesseract different on mobile?",id:"how-is-tesseract-different-on-mobile",level:4},{value:"How is Tesseract different beyond mobile?",id:"how-is-tesseract-different-beyond-mobile",level:4},{value:"Why our Team is interested",id:"why-our-team-is-interested",level:3},{value:"Team members",id:"team-members",level:2},{value:"Team Website",id:"team-website",level:2},{value:"Team's experience",id:"teams-experience",level:2},{value:"Team Code Repos",id:"team-code-repos",level:2},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:2},{value:"Tesseract Overview",id:"tesseract-overview",level:2},{value:"Tesseract Architecture",id:"tesseract-architecture",level:3},{value:"Layered structure",id:"layered-structure",level:4},{value:"Application Layer",id:"application-layer",level:5},{value:"Tesseract application-layer protocol",id:"tesseract-application-layer-protocol",level:6},{value:"Polkadot application-layer protocol",id:"polkadot-application-layer-protocol",level:6},{value:"Presentation Layer",id:"presentation-layer",level:5},{value:"Transport Layer",id:"transport-layer",level:5},{value:"Tesseract Implementation",id:"tesseract-implementation",level:3},{value:"Development Roadmap",id:"development-roadmap",level:2},{value:"Milestone 1: Cross-platform Tesseract Core in Rust",id:"milestone-1-cross-platform-tesseract-core-in-rust",level:3},{value:"Milestone 2: Platforms and Polkadot/Substrate Support",id:"milestone-2-platforms-and-polkadotsubstrate-support",level:3},{value:"Milestone 3: Demo applications",id:"milestone-3-demo-applications",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Conclusion",id:"conclusion",level:2},{value:"Some links for reference:",id:"some-links-for-reference",level:2}];function c(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"polkadotsubstrate-dappswallet-connection-using-tesseract",children:"Polkadot/Substrate dApps/Wallet Connection using Tesseract"})}),"\n",(0,n.jsx)(t.h2,{id:"project-description",children:"Project Description"}),"\n",(0,n.jsxs)(t.p,{children:["The goal of this proposal is to ",(0,n.jsx)(t.strong,{children:"enhance the usability and security of Polkadot/Substrate native mobile applications"})," (the ones in AppStore and Play Market). By enabling the apps to connect to the wallets when a signature for a transaction is needed, we propose to get rid of a cumbersome and potentially insecure private key handling burden."]}),"\n",(0,n.jsx)(t.p,{children:"To achieve this goal, we propose to implement Tesseract (dApps/wallets connection) protocol for Polkadot/Substrate."}),"\n",(0,n.jsx)(t.h3,{id:"why-tesseract-is-good-for-the-ecosystem",children:"Why Tesseract is good for the ecosystem"}),"\n",(0,n.jsx)(t.p,{children:"iOS and Android are (arguably) the most popular app platforms today. With smooth experience and high security provided by Tesseract\u2019s capability to eliminate private key handling, the dApps could more easily match the expectations of an application from AppStore or PlayMarket, thus leading to lesser friction in dApps adoption."}),"\n",(0,n.jsx)(t.h3,{id:"how-tesseract-integrates-into-substratepolkadot",children:"How Tesseract integrates into Substrate/Polkadot"}),"\n",(0,n.jsx)(t.p,{children:"Once implemented, any Polkadot/Substrate native mobile dApp developer will be able to add Tesseract support with just several lines of code."}),"\n",(0,n.jsx)(t.p,{children:"As an example, this is how our integration currently works in Swift for the Ethereum network:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-swift",children:'import Tesseract\n\n// Check that we have a wallet installed. You should handle this situation in your app.\nguard Tesseract.Ethereum.isKeychainInstalled else {\n fatalError("Wallet is not installed!")\n}\n\n// Our HTTP RPC URL. Can be Infura\nlet rpcUrl = "https://mainnet.infura.io/v3/{API-KEY}"\n\n// Creating Web3 instance. Try to reuse the existing instance of Web3 in your app.\nlet web3 = Tesseract.Ethereum.Web3(rpcUrl: rpcUrl)\n'})}),"\n",(0,n.jsxs)(t.p,{children:["For more information, please check: ",(0,n.jsx)(t.a,{href:"https://github.com/tesseract-one/Tesseract.swift",children:"https://github.com/tesseract-one/Tesseract.swift"})]}),"\n",(0,n.jsxs)(t.p,{children:["Our current implementation of the reference wallet for iOS, supporting Ethereum can be found here: ",(0,n.jsx)(t.a,{href:"https://apps.apple.com/us/app/tesseract-wallet/id1459505103",children:"https://apps.apple.com/us/app/tesseract-wallet/id1459505103"}),". We plan to approach Tesseract supporting Polkadot wallet with a consequent separate proposal. It\u2019s either going to be a reference wallet implementation or integration with some existing Polkadot wallets."]}),"\n",(0,n.jsx)(t.h3,{id:"how-is-tesseract-different",children:"How is Tesseract different?"}),"\n",(0,n.jsx)(t.p,{children:"Since the deliverables of this proposal are mobile-specific, but Tesseract is so much more than just a solution for mobile dApps and we\u2019d like to share this aspect as well. We've split this section into two parts: the first answering the question specifically about mobile and the second covering a more general comparison of Tesseract's approach."}),"\n",(0,n.jsx)(t.h4,{id:"how-is-tesseract-different-on-mobile",children:"How is Tesseract different on mobile?"}),"\n",(0,n.jsx)(t.p,{children:"The short answer to this question is that Tesseract can provide a potentially more familiar mobile UX due to deeper integration with the underlying OS, by utilizing OS native IPC (Inter-Process Communication) protocol."}),"\n",(0,n.jsx)(t.p,{children:"To demonstrate the advantages of our approach, let\u2019s first briefly cover the other options available:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Key inside the dApp"})," - not really an external signature provider, as the app manages the private key inside. Worth mentioning, as quite a number of native mobile dApps use this approach. The user just has to copy the private key into the dApp. Simplest, but raises security concerns and the usability is questionable."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Centralized proxies"})," - centralized custodial wallet solution for decentralized applications. Example: Fortmatic"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"URLs (aka deep-linking)"})," - allows jumping between applications on smartphones using special URLs. This way a dApp can switch to the wallet by forming a request in a URL form and receive a response from the wallet switching back the same way. This approach works to a limited extent, suffering from routing problems (especially on iOS) and can\u2019t support multiple wallets without a 3rd party router (or a maintained list of supported wallets matched to their unique URLs). On iOS, if more than one application can open a URL, the app is chosen randomly which rises a security concern. From the UX standpoint, it looks like the apps are switching back and forth. Deep-linking is sometimes used together with relays (see below)."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Centralized signing relays"})," - allows a mobile wallet to sign transactions using centralized servers as connection relays. Usually works together with a deep-linking handshake, inheriting its issues and behavior (iOS routing issues, app switching UX). Also, such a solution can\u2019t be considered optimal, due to the fact that two apps running on the same device have to communicate through a server somewhere on the internet. Examples: WalletConnect, WalletLink"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Decentralized signing relays"})," - this approach works similarly to Centralized signing relays, except that p2p mesh is used instead of a centralized relay server. Examples: Beacon"]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["In contrast, Tesseract\u2019s transport on smartphones is based on another technology, deeply integrated into the underlying OS - inter-process communication (IPC). This way we have managed to achieve a convenient UX. The behavior is centered around modal screens, which are quite widely used in various applications (please, check our demo: ",(0,n.jsx)(t.a,{href:"https://drive.google.com/file/d/17YMdJS9CH6SXqP-YPUMKbm0BWdAE2Rx3/view",children:"https://drive.google.com/file/d/17YMdJS9CH6SXqP-YPUMKbm0BWdAE2Rx3/view"}),"). There is no central authority and the data goes through the shortest route - communication is done point to point between two processes running on the same device. It works equally well on both iOS and Android without any dApp/Wallet routing issues (the user can pick the wallet to use for a signature). As for security - after extensive testing, we have not found any ways to hijack a transaction so far."]}),"\n",(0,n.jsx)(t.p,{children:"The table below summarises our comparison considerations, demonstrating why we have decided to utilize the IPC protocol instead of something else:"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Transport\\Criteria"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Universal (iOS and Android)"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Secure"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Convenient (from a usability standpoint)"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Decentralized"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Optimal (shortest data path)"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Key inside the dApp"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u274c because of giving away the private key to a 3rd party dApp"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u274c the user has to copy/paste private keys"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Centralized proxies"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u26a0\ufe0f controversial, due to the inherent custodial mechanism"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u274c custodial wallet"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u274c data has to go through the internet to facilitate a local transfer"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"URLs"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u26a0\ufe0f has routing issues on iOS. Can be solved either by maintaining compatible wallets list (in code? On a server?) or through a 3rd routing application"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u26a0\ufe0f Due to random selection of the app matching the URL on iOS has a potential spoofing vulnerability"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705 explicit app switching behavior"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Centralized signing relays"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u26a0\ufe0f inherits deep-linking issues as it\u2019s used for handshake"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u26a0\ufe0f inherits deep-linking issues as it\u2019s used for handshake"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705 same as deep-linking (if the deep linking handshake is used) or manual (if not)"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u274c uses central servers as relays"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u274c data has to go through the internet to facilitate a local transfer"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Decentralized signing relays"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u26a0\ufe0f inherits deep-linking issues as it\u2019s used for handshake"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u26a0\ufe0f inherits deep-linking issues as it\u2019s used for handshake"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705 same as deep-linking (if the deep linking handshake is used) or manual (if not)"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u274c data has to go through the internet to facilitate a local transfer"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"IPC (Tesseract)"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705 modal screens, OS integrated wallet selection"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\u2705"})]})]})]}),"\n",(0,n.jsx)(t.h4,{id:"how-is-tesseract-different-beyond-mobile",children:"How is Tesseract different beyond mobile?"}),"\n",(0,n.jsx)(t.p,{children:"Tesseract protocol was designed adaptable to existing and new potential use cases through flexibility provided by multi-transport (IPC, socket, QR-code, etc.) architecture, in contrast to its single-transport protocol counterparts. While some transport protocols can shine in one scenario, a totally different approach may be needed for another. There are a number of known (and probably quite some yet-to-be-discovered) use cases of how dApps and wallets may need to interact. Some common examples are:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"A dApp and a wallet run on the same smartphone"}),"\n",(0,n.jsx)(t.li,{children:"A dApp and a wallet run on the same desktop"}),"\n",(0,n.jsx)(t.li,{children:"A dApp runs on the desktop and a wallet runs on a smartphone"}),"\n",(0,n.jsx)(t.li,{children:"etc."}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Here is a short table, that summarises the comparison of some common transport protocols versus the use cases. While there are way more use cases than the table covers, the ones included are sufficient to showcase that neither transport is capable of covering all the use cases by itself. Also, here we show only transports that are not compromising decentralization."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"dApp"}),(0,n.jsx)(t.th,{children:"Mobile"}),(0,n.jsx)(t.th,{children:"Desktop"}),(0,n.jsx)(t.th,{children:"Desktop"}),(0,n.jsx)(t.th,{children:"Mobile"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Wallet"}),(0,n.jsx)(t.td,{children:"Mobile"}),(0,n.jsx)(t.td,{children:"Mobile"}),(0,n.jsx)(t.td,{children:"Desktop"}),(0,n.jsx)(t.td,{children:"Desktop"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Description"}),(0,n.jsx)(t.td,{children:"A very common scenario, when both the dApp and the Wallet run on the same smartphone."}),(0,n.jsx)(t.td,{children:"Another common scenario, when a dApp runs on a desktop computer and the wallet is on the smartphone."}),(0,n.jsx)(t.td,{children:"A scenario when a user needs to run a dApp and the wallet on the same desktop computer."}),(0,n.jsx)(t.td,{children:"This case covers a dApp running on the phone and the wallet on a desktop."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"IPC"}),(0,n.jsx)(t.td,{children:"\u2705 Direct dApp/Wallet interaction. Native platform\u2019s look and feel."}),(0,n.jsx)(t.td,{children:"\u274c By definition works only on the same device."}),(0,n.jsx)(t.td,{children:"\u2705 Direct dApp/Wallet interaction."}),(0,n.jsx)(t.td,{children:"\u274c By definition works only on the same device."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Deep-link"}),(0,n.jsx)(t.td,{children:"\u26a0\ufe0f Direct dApp/Wallet interaction. Apps switching behavior. Has routing issues on iOS."}),(0,n.jsx)(t.td,{children:"\u274c By definition works only on the same device."}),(0,n.jsx)(t.td,{children:"\u26a0\ufe0f Can work to an extent how well the OS supports deep linking."}),(0,n.jsx)(t.td,{children:"\u274c By definition works only on the same device."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Network (direct socket connection)"}),(0,n.jsx)(t.td,{children:"\u274c Potentially can work on Android, especially with a deep-linking handshake. Problematic on iOS: background sockets are against Apple guidelines."}),(0,n.jsx)(t.td,{children:"\u2705 Works best when both devices are on the same WiFi. Needs a QR-code or NFC handshake."}),(0,n.jsx)(t.td,{children:"\u2705 Works well as the desktops don\u2019t set any limitations on sockets in the background. To avoid routing problems can be used together with a separate handshake (i.e. deep-linking)."}),(0,n.jsx)(t.td,{children:"\u2705 Works best when both devices are on the same WiFi. Needs a QR-code or NFC handshake."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Network (p2p)"}),(0,n.jsx)(t.td,{children:"\u26a0\ufe0f Can work, though requires an internet connection for communication that is actually between apps on the same device, which is not ideal. Requires a deep-linking handshake."}),(0,n.jsx)(t.td,{children:"\u2705 Works best for situations when devices are not in close proximity and don\u2019t share the same WiFi. Needs a QR-code or NFC handshake."}),(0,n.jsx)(t.td,{children:"\u26a0\ufe0f Can work, though requires an internet connection for local communication, which is not ideal."}),(0,n.jsx)(t.td,{children:"\u2705 Works best for situations when devices are not in close proximity and don\u2019t share the same WiFi. Needs a QR-code or NFC handshake."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"QR-code"}),(0,n.jsx)(t.td,{children:"\u26a0\ufe0f Can potentially be made to work, though would require image copy-pasting, which is not an ideal UX."}),(0,n.jsx)(t.td,{children:"\u2705 Best use - a handshake mechanism for another transport. Even though technically it can work by itself if both devices have cameras, it\u2019s not an ideal UX."}),(0,n.jsx)(t.td,{children:"\u26a0\ufe0f Can potentially be made to work, though would require image copy-pasting, which is not an ideal UX."}),(0,n.jsx)(t.td,{children:"\u26a0\ufe0f While it technically can work, might provide an awkward experience to the user turning screens of large devices into the cameras of each other."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Bluetooth/NFC"}),(0,n.jsx)(t.td,{children:"\u274c By definition works only with separate physical devices."}),(0,n.jsx)(t.td,{children:"\u2705 Works best for devices in close proximity, especially if a shared WiFi is not an option."}),(0,n.jsx)(t.td,{children:"\u274c By definition works only with separate physical devices."}),(0,n.jsx)(t.td,{children:"\u2705 Works best for devices in close proximity, especially if a shared WiFi is not an option."})]})]})]}),"\n",(0,n.jsx)(t.p,{children:"Since none of the transport protocols are universal enough to be an optimal choice for every use case, we\u2019ve designed Tesseract to be non-constrained by this factor. Instead, Tesseract can use any implemented transport protocol, based on the scenario and/or the user\u2019s choice, due to its layered architecture. The following diagram demonstrates a simplified architecture of the Tesseract protocol:"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:"https://drive.google.com/uc?id=1Fmad82-5ZRYi-bhD12RMhfYotrWwPrVF",alt:"Architecture of Tesseract"})}),"\n",(0,n.jsx)(t.p,{children:"This way, Tesseract can potentially handle any known or future use case to the extent the most matching transport can, which is not an available option for the single-transport bound solutions."}),"\n",(0,n.jsx)(t.h3,{id:"why-our-team-is-interested",children:"Why our Team is interested"}),"\n",(0,n.jsxs)(t.p,{children:["As we indicated in our first proposal, which was awarded and currently coming to the end (",(0,n.jsx)(t.a,{href:"https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/swift_api.md",children:"Swift API"}),"), that our long term goal was to bring Tesseract support to the Polkadot community."]}),"\n",(0,n.jsx)(t.p,{children:"The Swift API library from our first proposal was an essential step for us, as Swift is the programming language of iOS and we need this to implement Tesseract support for Polkadot/Substrate on iOS. Since we are finishing with the first grant application, we have prepared the current proposal to continue the integration process of Tesseract into Polkadot/Substrate ecosystem."}),"\n",(0,n.jsx)(t.h2,{id:"team-members",children:"Team members"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Daniel Leping, @dileping on GitHub, CEO"}),"\n",(0,n.jsx)(t.li,{children:"Yehor Popovych, @ypopovych on GitHub, CTO"}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"team-website",children:"Team Website"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://tesseract.one",children:"https://tesseract.one"})}),"\n",(0,n.jsx)(t.h2,{id:"teams-experience",children:"Team's experience"}),"\n",(0,n.jsxs)(t.p,{children:["Our team has been building blockchain applications since 2017 and has worked together on ",(0,n.jsx)(t.a,{href:"https://tesseract.one/",children:"Tesseract"})," since 2018. The company got funded by ",(0,n.jsx)(t.a,{href:"https://sosv.com/",children:"SOSV"})," and ",(0,n.jsx)(t.a,{href:"https://emurgo.io/",children:"Emurgo"})," in 2019 and took training in the ",(0,n.jsx)(t.a,{href:"https://dlab.vc/",children:"dlab acceleration program"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["This is our second grant application for Polkadot. Previously, we were awarded to build ",(0,n.jsx)(t.a,{href:"https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/swift_api.md",children:"Polkadot/Substrate Swift SDK"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["Prior to blockchain technology, we had a wealth of experience in Swift, building applications, and middleware. The most noticeable projects are ",(0,n.jsx)(t.a,{href:"https://github.com/crossroadlabs/Express",children:"Swift Express"}),", ",(0,n.jsx)(t.a,{href:"https://github.com/reactive-swift",children:"Reactive Swift"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"The team has a 10-year history of working together, delivering various solutions of high complexity, including the mentioned above Swift Express and Reactive Swift, Cross++ ( cross-platform framework in C++ that allowed to keep the app logic shared while providing the capability to use native UIs) and tens of the web, mobile, and server applications for customers from around the world including the US, EU, Israel, Australia, etc."}),"\n",(0,n.jsx)(t.h2,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/tesseract-one",children:"https://github.com/tesseract-one"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/crossroadlabs/Express",children:"https://github.com/crossroadlabs/Express"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/reactive-swift",children:"https://github.com/reactive-swift"})}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://www.linkedin.com/in/danielleping/",children:"https://www.linkedin.com/in/danielleping/"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://www.linkedin.com/in/yehor-popovych/",children:"https://www.linkedin.com/in/yehor-popovych/"})}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"tesseract-overview",children:"Tesseract Overview"}),"\n",(0,n.jsx)(t.p,{children:"The main goal of the Tesseract protocol is to enable dApp developers to provide a smooth and easy-to-understand user experience without compromising privacy and decentralization. Being a protocol that allows dApps to run without having access to the user's private key, Tesseract facilitates communication with the Wallets to request transaction and data signatures, thus providing a possibility to get rid of private key handling and having a look and feel of a \u201cnormal\u201d application."}),"\n",(0,n.jsxs)(t.p,{children:["Before digging into the technical details, we want to share the \u201cfeel\u201d of how the Tesseract-based dApps work: ",(0,n.jsx)(t.a,{href:"https://drive.google.com/file/d/17YMdJS9CH6SXqP-YPUMKbm0BWdAE2Rx3/view",children:"https://drive.google.com/file/d/17YMdJS9CH6SXqP-YPUMKbm0BWdAE2Rx3/view"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"Such a user experience is achieved by having a seamless connection between the dApp and the wallet via Tesseract protocol."}),"\n",(0,n.jsx)(t.p,{children:"Even though mobile is the first focus, Tesseract is not limited to being the mobile-only solution. It can maintain the connection between dApps and wallets working in various environments: smartphone, desktop, or even crossing the border of a single device (i.e. a dApp runs on the computer and the wallet is on the smartphone). This is achieved by having a layered architecture, that depending on the current environment, allows using a suitable transport protocol."}),"\n",(0,n.jsx)(t.p,{children:"Tesseract protocol does not require a server to keep the keys. All the requests are done directly to the wallet application through IPC (if the device is the same) or other p2p communication protocol (if cross-device)."}),"\n",(0,n.jsx)(t.h3,{id:"tesseract-architecture",children:"Tesseract Architecture"}),"\n",(0,n.jsx)(t.p,{children:"Tesseract protocol is designed from the perspective of flexibility to make it adaptable for various scenarios. To achieve this goal, Tesseract uses a layered structure in its core and messages, that are enveloped according to the protocol layer."}),"\n",(0,n.jsx)(t.p,{children:"The layers-based implementation is largely inspired by the OSI model (the model of network protocols)."}),"\n",(0,n.jsx)(t.h4,{id:"layered-structure",children:"Layered structure"}),"\n",(0,n.jsx)(t.p,{children:"As mentioned above, Tesseract has a layered structure. The basic three layers are:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Application Layer"})," - responsible for communication via specific protocol (i.e. Polkadot): transaction signing request, messages signing, public key requests - all here."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Presentation Layer"})," - provides enveloping of application-specific data into transportable packages. Defines text/binary packet structures transferrable via any underlying transport."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Transport Layer"})," - implementation of various transport types. IPC, p2p NFC, URLs, QR-codes, Bluetooth, etc."]}),"\n"]}),"\n",(0,n.jsx)(t.h5,{id:"application-layer",children:"Application Layer"}),"\n",(0,n.jsx)(t.p,{children:"The application layer can be anything, depending on the specific network plus Tesseract\u2019s application-layer protocol for controlling connection establishment, checking the presence of other application-layer protocols, etc."}),"\n",(0,n.jsx)(t.h6,{id:"tesseract-application-layer-protocol",children:"Tesseract application-layer protocol"}),"\n",(0,n.jsx)(t.p,{children:"Tesseracts\u2019 application layer API is responsible for the following:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Checking the presence of specific application-level protocol extensions"}),"\n",(0,n.jsx)(t.li,{children:"Event subscription"}),"\n",(0,n.jsx)(t.li,{children:"Inter-device connection initialization"}),"\n"]}),"\n",(0,n.jsx)(t.h6,{id:"polkadot-application-layer-protocol",children:"Polkadot application-layer protocol"}),"\n",(0,n.jsx)(t.p,{children:"This is the part where Polkadot gets integrated:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Signing data"}),"\n",(0,n.jsx)(t.li,{children:"Signing transactions"}),"\n",(0,n.jsx)(t.li,{children:"Public key querying"}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"From the perspective of the dApp developer - nothing changes. The developer still uses the same familiar Polkadot APIs. The only difference is that when Tesseract is integrated as a signature provider, the transactions are rerouted to an external wallet for signing, and then sent back to the dApp."}),"\n",(0,n.jsx)(t.h5,{id:"presentation-layer",children:"Presentation Layer"}),"\n",(0,n.jsx)(t.p,{children:"The presentation layer defines how the data is enveloped to be properly delivered to the destination. The current implementation uses JSON text messages (the easiest to debug and has great support in various platforms). Binary is a future consideration."}),"\n",(0,n.jsx)(t.h5,{id:"transport-layer",children:"Transport Layer"}),"\n",(0,n.jsx)(t.p,{children:"This layer is what makes Tesseract so flexible and allows it to work in various environments. It determines how exactly the dApp\u2019s requests packets are transferred to the wallets and how the wallets reply. By having multiple options of the transports, the dApps can communicate to the wallets located anywhere: on the same device or not. Communication between devices can be pretty much anything that can transfer data (TCP/IP, Bluetooth, NFC, etc.). For the current proposal though, we want to limit the number of transport layers implementations to the following:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"iOS IPC"}),"\n",(0,n.jsx)(t.li,{children:"Android IPC"}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"By implementing the above transfer protocols, we already allow developers to create native mobile dApps that don\u2019t have to carry a private key. While more protocols bring more value, this way we can release the first version sooner and go to market sooner with a concrete value proposition."}),"\n",(0,n.jsx)(t.p,{children:"In the future, we plan to implement protocols that allow inter-device communication. Possible options for the near future include:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"QR codes/(NFC) - mainly for a persistent connection initialization, especially in trustless environments"}),"\n",(0,n.jsx)(t.li,{children:"WebRTC - potentially the best option for browsers"}),"\n",(0,n.jsx)(t.li,{children:"TCP/IP - easier to implement for desktop apps then WebRTC"}),"\n",(0,n.jsx)(t.li,{children:"Bluetooth - browsers/between devices"}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"tesseract-implementation",children:"Tesseract Implementation"}),"\n",(0,n.jsx)(t.p,{children:"The implementation of Tesseract, pretty much like any other protocol, is a set of libraries that allow applications to communicate through it. In the case of Tesseract, there are two sets of libraries: one for the dApps (allows querying the wallets) and one for the Wallet (allows replying to the signing requests)."}),"\n",(0,n.jsxs)(t.p,{children:["Currently, Tesseract has a partial implementation in Swift and works on iOS: ",(0,n.jsx)(t.a,{href:"https://github.com/tesseract-one/Tesseract.swift",children:"https://github.com/tesseract-one/Tesseract.swift"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"For the sake of having a single cross-platform implementation (fewer bugs, single codebase), we propose to implement it in Rust and add language-specific wrappers in the future (i.e. Swift, Java, ReactNative, etc.)."}),"\n",(0,n.jsxs)(t.p,{children:["For the details on the proposed implementation, please refer to the ",(0,n.jsx)(t.em,{children:"Development Roadmap"})," section."]}),"\n",(0,n.jsx)(t.h2,{id:"development-roadmap",children:"Development Roadmap"}),"\n",(0,n.jsx)(t.h3,{id:"milestone-1-cross-platform-tesseract-core-in-rust",children:"Milestone 1: Cross-platform Tesseract Core in Rust"}),"\n",(0,n.jsx)(t.p,{children:"Duration: 8 weeks"}),"\n",(0,n.jsx)(t.p,{children:"This is the very foundation of the Tesseract protocol."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Number"}),(0,n.jsx)(t.th,{children:"Deliverable"}),(0,n.jsx)(t.th,{children:"Specification"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0a."}),(0,n.jsx)(t.td,{children:"License"}),(0,n.jsx)(t.td,{children:"Apache 2.0"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0b."}),(0,n.jsx)(t.td,{children:"Documentation"}),(0,n.jsxs)(t.td,{children:["Documentation for Tesseract Core:",(0,n.jsx)("br",{}),"1) overview with usage examples",(0,n.jsx)("br",{}),"2) messages and envelopes structures",(0,n.jsx)("br",{}),"3) APIs for application and transport level with examples"]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0c."}),(0,n.jsx)(t.td,{children:"Testing Guide"}),(0,n.jsx)(t.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0d."}),(0,n.jsx)(t.td,{children:"Docker"}),(0,n.jsx)(t.td,{children:"Due to the client-side nature of the deliverable, there is no need for a docker image."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0e."}),(0,n.jsx)(t.td,{children:"Article"}),(0,n.jsx)(t.td,{children:"We will publish an article that explains the value Tesseract brings to the dApp developers and how Tesseract Core serves as a foundation for all future work."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"1."}),(0,n.jsx)(t.td,{children:"Architecture"}),(0,n.jsx)(t.td,{children:"Repository with overall code structure. Serves as a framework for all the further development. Defines the layered structure and contains all the code that makes the layers (details below) to work together"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"2."}),(0,n.jsx)(t.td,{children:"Application-level framework"}),(0,n.jsx)(t.td,{children:"Defines how application level calls are formed as data structures and passed down to the next layer"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"3."}),(0,n.jsx)(t.td,{children:"Messages and envelopes"}),(0,n.jsx)(t.td,{children:"Implements serialization and envelopes for the app level structures + parsing and identification on the other side"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"4."}),(0,n.jsx)(t.td,{children:"Transport-level framework"}),(0,n.jsx)(t.td,{children:"Transport level abstractions, interfaces, data flow + transport initialization and selection logic"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"5."}),(0,n.jsx)(t.td,{children:"Transport-layer development APIs"}),(0,n.jsx)(t.td,{children:"APIs for transport protocol (IPC, socket, etc.) development. Will have two transport types: persistent, single-shot"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"6."}),(0,n.jsx)(t.td,{children:"Application-layer development APIs"}),(0,n.jsx)(t.td,{children:"APIs for application level stuff development (i.e. Tesseract handshaking and transport selection, Polkadot APIs)"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"milestone-2-platforms-and-polkadotsubstrate-support",children:"Milestone 2: Platforms and Polkadot/Substrate Support"}),"\n",(0,n.jsx)(t.p,{children:"Duration: 6 weeks"}),"\n",(0,n.jsx)(t.p,{children:"This milestone is based on the foundation built in Milestone 1 and focuses on platform-specific transport extensions (iOS, Android) and Substrate integration."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Number"}),(0,n.jsx)(t.th,{children:"Deliverable"}),(0,n.jsx)(t.th,{children:"Specification"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0a."}),(0,n.jsx)(t.td,{children:"License"}),(0,n.jsx)(t.td,{children:"Apache 2.0"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0b."}),(0,n.jsx)(t.td,{children:"Documentation"}),(0,n.jsxs)(t.td,{children:["We will provide:",(0,n.jsx)("br",{}),"1) README-type documentation for substrate-specific application-level APIs with examples",(0,n.jsx)("br",{}),"2) Rust API docs for substrate-specific application-level APIs",(0,n.jsx)("br",{}),"3) instructions on how to build and run the test apps for both iOS and Android"]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0c."}),(0,n.jsx)(t.td,{children:"Testing Guide"}),(0,n.jsx)(t.td,{children:"Substrate application layer will be fully covered by unit tests for both dApp and Wallet sides with a mock transport. For the IPC transport, we will provide test apps for both iOS and Android."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0d."}),(0,n.jsx)(t.td,{children:"Docker"}),(0,n.jsx)(t.td,{children:"Due to the client-side nature of the deliverable, there is no need for a docker image."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0e."}),(0,n.jsx)(t.td,{children:"Article"}),(0,n.jsx)(t.td,{children:"We will publish an article that describes how to start using Tesseract in Substrate applications. It's a continuation of the article from Milestone 1 and will tease part3, promising more examples and details."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"1."}),(0,n.jsx)(t.td,{children:"iOS IPC transport protocol implementation"}),(0,n.jsx)(t.td,{children:"Implementation of IPC transport for iOS. Code is tested with small test app on an iOS device."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"2."}),(0,n.jsx)(t.td,{children:"Android IPC transport protocol implementation"}),(0,n.jsx)(t.td,{children:"Implementation of IPC transport for Android. Code is tested with small test app on an Android device."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"3."}),(0,n.jsx)(t.td,{children:"Substrate protocol specification"}),(0,n.jsx)(t.td,{children:"Markdown-based documentation that provides details of workflows and messages required for proper substrate-based calls handling and transaction signing. This is separate from the main documentation and is a detailed description of the protocol to be implemented in the following step."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"4."}),(0,n.jsx)(t.td,{children:"Substrate protocol implementation"}),(0,n.jsxs)(t.td,{children:["1) implementation of Substrate application layer",(0,n.jsx)("br",{}),"2) substrate-specific application-level APIs"]})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"milestone-3-demo-applications",children:"Milestone 3: Demo applications"}),"\n",(0,n.jsx)(t.p,{children:"Duration: 6 weeks"}),"\n",(0,n.jsx)(t.p,{children:"To demonstrate the capabilities of Tesseract, we would like to provide easy-to-understand examples. These examples should be fully working (even though very basic and not intended for production use) and capable to showcase the capabilities to an unfamiliar audience."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Number"}),(0,n.jsx)(t.th,{children:"Deliverable"}),(0,n.jsx)(t.th,{children:"Specification"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0a."}),(0,n.jsx)(t.td,{children:"License"}),(0,n.jsx)(t.td,{children:"Apache 2.0"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0b."}),(0,n.jsx)(t.td,{children:"Documentation"}),(0,n.jsxs)(t.td,{children:["We will provide:",(0,n.jsx)("br",{}),"1) README-type documentation describing the key aspects of how the test applications work ",(0,n.jsx)("br",{}),"2) instructions on how to build and run the test apps for both iOS and Android"]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0c."}),(0,n.jsx)(t.td,{children:"Testing Guide"}),(0,n.jsx)(t.td,{children:"We will provide a guide how to build and run the apps."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0d."}),(0,n.jsx)(t.td,{children:"Docker"}),(0,n.jsx)(t.td,{children:"Due to the client-side nature of the deliverable, there is no need for a docker image."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"0e."}),(0,n.jsx)(t.td,{children:"Article"}),(0,n.jsx)(t.td,{children:"We will publish an article (part3) that covers more details about the integration of Tesseract into Substrate dApps and wallets. The article will also cover some of our plans, specifically - java and swift libraries integration."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"1."}),(0,n.jsx)(t.td,{children:"Android Demo Wallet"}),(0,n.jsx)(t.td,{children:"Android Wallet test application with logic implemented in Rust, which demonstrates how a wallet can sign substrate transactions using the Rust APIs."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"2."}),(0,n.jsx)(t.td,{children:"Android Demo dApp"}),(0,n.jsx)(t.td,{children:"Android test dApp with logic implemented in Rust, that demonstrates transaction creation and signing through Tesseract via test wallet. The transaction is submitted to test-net after being signed."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"3."}),(0,n.jsx)(t.td,{children:"iOS Demo Wallet"}),(0,n.jsx)(t.td,{children:"iOS Wallet test application with logic implemented in Rust, which demonstrates how a wallet can sign substrate transactions using the Rust APIs."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"4."}),(0,n.jsx)(t.td,{children:"iOS Demo dApp"}),(0,n.jsx)(t.td,{children:"iOS test dApp with logic implemented in Rust, that demonstrates transaction creation and signing through Tesseract via test wallet. The transaction is submitted to test-net after being signed."})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,n.jsx)(t.p,{children:"The long-term vision for Tesseract is to be a safe, secure, and user-friendly way for any application to access a user\u2019s wallet and private keys, on as many blockchains as possible."}),"\n",(0,n.jsx)(t.p,{children:"At the moment, though, we want to bring the details about the next short-term steps, that we believe are essential for the project to start bringing traction."}),"\n",(0,n.jsx)(t.p,{children:"The next immediate step is making the use of Tesseract protocol easy for the Polkadot developers, which requires integration with the ecosystem. Specifically integration with:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Swift SDK (our library from the previous proposal: ",(0,n.jsx)(t.a,{href:"https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/swift_api.md",children:"https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/swift_api.md"}),"): ",(0,n.jsx)(t.a,{href:"https://github.com/tesseract-one/Substrate.swift",children:"https://github.com/tesseract-one/Substrate.swift"})]}),"\n",(0,n.jsxs)(t.li,{children:["Java SDK (we\u2019ve found two options so far):","\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/polkadot-java/api",children:"https://github.com/polkadot-java/api"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/emeraldpay/polkaj",children:"https://github.com/emeraldpay/polkaj"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"This will enable Mobile developers to start using Tesseract without any additional tools switching. Just adding a couple of lines of code for initialization."}),"\n",(0,n.jsx)(t.p,{children:"Simultaneously, we are going to deal with the wallet side by either providing a reference wallet implementation or by integrating with the existing Polkadot wallets (TBD)."}),"\n",(0,n.jsx)(t.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,n.jsx)(t.p,{children:"The quest for a better dApp signature provider is not new and there are quite some approaches. All the solutions have their pros and cons, but none are universal, secure, and decentralized at the same time."}),"\n",(0,n.jsxs)(t.p,{children:["Tesseract was designed with the idea that it\u2019s not enough to solve one of the problems or to provide a limited number of use cases. ",(0,n.jsx)(t.strong,{children:"We believe that to break the dApps adoption barrier, there must be a solution that is universal, secure, usable, and decentralized at the same time."})]}),"\n",(0,n.jsx)(t.h2,{id:"some-links-for-reference",children:"Some links for reference:"}),"\n",(0,n.jsxs)(t.p,{children:["Tesseract\u2019s Github: ",(0,n.jsx)(t.a,{href:"https://github.com/tesseract-one/",children:"https://github.com/tesseract-one/"})]}),"\n",(0,n.jsxs)(t.p,{children:["Tesseract\u2019s implementation in Swift: ",(0,n.jsx)(t.a,{href:"https://github.com/tesseract-one/Tesseract.swift",children:"https://github.com/tesseract-one/Tesseract.swift"})]}),"\n",(0,n.jsxs)(t.p,{children:["Tesseract\u2019s reference wallet: ",(0,n.jsx)(t.a,{href:"https://apps.apple.com/us/app/tesseract-wallet/id1459505103",children:"https://apps.apple.com/us/app/tesseract-wallet/id1459505103"})]}),"\n",(0,n.jsxs)(t.p,{children:["Demo video: ",(0,n.jsx)(t.a,{href:"https://drive.google.com/file/d/17YMdJS9CH6SXqP-YPUMKbm0BWdAE2Rx3/view",children:"https://drive.google.com/file/d/17YMdJS9CH6SXqP-YPUMKbm0BWdAE2Rx3/view"})]}),"\n",(0,n.jsxs)(t.p,{children:["Our previous proposal (Substrate/Polkadot Swift API): ",(0,n.jsx)(t.a,{href:"https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/swift_api.md",children:"https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/swift_api.md"})]}),"\n",(0,n.jsxs)(t.p,{children:["Our previous proposal codebase: ",(0,n.jsx)(t.a,{href:"https://github.com/tesseract-one/Substrate.swift",children:"https://github.com/tesseract-one/Substrate.swift"})]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>a,x:()=>o});var i=s(96540);const n={},r=i.createContext(n);function a(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0fa8dfff.0122648e.js b/assets/js/0fa8dfff.0122648e.js deleted file mode 100644 index 4ef4b6cd5fb..00000000000 --- a/assets/js/0fa8dfff.0122648e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[6728],{48333:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"docs/RFPs/parachain_validation_conformance_testing","title":"Parachain Validation Conformance Testing","description":"This Request for Proposals is closed, meaning we are not looking for any more proposals on this topic at the moment.","source":"@site/docs/RFPs/parachain_validation_conformance_testing.md","sourceDirName":"docs/RFPs","slug":"/docs/RFPs/parachain_validation_conformance_testing","permalink":"/docs/RFPs/parachain_validation_conformance_testing","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/docs/RFPs/parachain_validation_conformance_testing.md","tags":[],"version":"current","frontMatter":{},"sidebar":"docs","previous":{"title":"On-chain Quadratic Funding","permalink":"/docs/RFPs/on-chain-quadratic-funding"},"next":{"title":"PHP Substrate API","permalink":"/docs/RFPs/php-api"}}');var s=t(74848),o=t(28453);const a={},r="Parachain Validation Conformance Testing",c={},l=[{value:"Project Description \ud83d\udcc4",id:"project-description-page_facing_up",level:2},{value:"Deliverables \ud83d\udd29",id:"deliverables-nut_and_bolt",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"parachain-validation-conformance-testing",children:"Parachain Validation Conformance Testing"})}),"\n",(0,s.jsx)(n.admonition,{type:"danger",children:(0,s.jsxs)(n.p,{children:["This Request for Proposals is ",(0,s.jsx)(n.em,{children:"closed"}),", meaning we are not looking for any more proposals on this topic at the moment."]})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Status:"})," Closed"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Proposer:"})," ",(0,s.jsx)(n.a,{href:"https://github.com/bkchr",children:"bkchr"})]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"project-description-page_facing_up",children:["Project Description ","\ud83d\udcc4"]}),"\n",(0,s.jsxs)(n.p,{children:["Each Polkadot host implementation that wants to take part in consensus needs to implement the Parachains protocol. Part of the Parachains protocol is the execution of the Parachain Validation Function (",(0,s.jsx)(n.code,{children:"PVF"}),"). The ",(0,s.jsx)(n.code,{children:"PVF"})," is a wasm blob that is required to provide the ",(0,s.jsx)(n.code,{children:"validate_block"})," function that takes a fixed set of arguments (part is the proof of validity from a collator), validates the proof of validity and returns (on success) some information back to the Polkadot host implementation. The ",(0,s.jsx)(n.code,{children:"PVF"})," is a black box for the Polkadot node and it can only use the ",(0,s.jsx)(n.code,{children:"validate_block"})," to make use of it. The execution of these ",(0,s.jsx)(n.code,{children:"PVF"}),"s is required to stay in certain limits to reach consensus across different node implementations, node versions, different hardware configuration and OS configurations. Some of these limits are:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"A deterministic maximum stack depth. All node implementations should support the same stack depth."}),"\n",(0,s.jsxs)(n.li,{children:["A deterministic maximum memory. All node implementations should support the same maximum memory usage per ",(0,s.jsx)(n.code,{children:"PVF"})," execution."]}),"\n",(0,s.jsxs)(n.li,{children:["A deterministic maximum execution time. All node implementations should execute a given ",(0,s.jsx)(n.code,{children:"PVF"})," in the same maximum time frame."]}),"\n",(0,s.jsxs)(n.li,{children:["A deterministic compilation/preparation of the ",(0,s.jsx)(n.code,{children:"PVF"}),". All node implementations should compile/prepare a given ",(0,s.jsx)(n.code,{children:"PVF"})," in the same maximum time frame and maximum memory budget."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"There are probably a lot of other limits as well. To ensure that all node implementations/versions are staying in these limits it is required to have conformance tests. These should include basic execution of valid wasm files over to complex wasm files that ensure that the compilation/preparation stays in the given limits and/or helps to define these limits properly across different implementations."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Useful resources:"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://paritytech.github.io/polkadot/book/index.html",children:"The Polkadot Parachain Host Implementers' Guide"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/paritytech/polkadot/issues/3211",children:"Pre-checking for PVF Compilation time"})}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"deliverables-nut_and_bolt",children:["Deliverables ","\ud83d\udd29"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Basic conformance tests that are running valid wasm files"}),"\n",(0,s.jsx)(n.li,{children:"Conformance tests that are resulting in running over the limits."}),"\n",(0,s.jsx)(n.li,{children:"Fuzzing across different implementations ensuring that all are coming to the same result"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"This is more some never ending task trying to find issues in different implementations, getting them fixed and searching for new vulnerabilities. In the end these tests should ensure that updating wasm engines, introducing new node implementations\netc can be done in a sane way without hoping for the best."})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>r});var i=t(96540);const s={},o=i.createContext(s);function a(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0fa8dfff.d2711154.js b/assets/js/0fa8dfff.d2711154.js new file mode 100644 index 00000000000..f8d10690164 --- /dev/null +++ b/assets/js/0fa8dfff.d2711154.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[6728],{22817:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"docs/RFPs/parachain_validation_conformance_testing","title":"Parachain Validation Conformance Testing","description":"This Request for Proposals is closed, meaning we are not looking for any more proposals on this topic at the moment.","source":"@site/docs/RFPs/parachain_validation_conformance_testing.md","sourceDirName":"docs/RFPs","slug":"/docs/RFPs/parachain_validation_conformance_testing","permalink":"/docs/RFPs/parachain_validation_conformance_testing","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/docs/RFPs/parachain_validation_conformance_testing.md","tags":[],"version":"current","frontMatter":{},"sidebar":"docs","previous":{"title":"On-chain Quadratic Funding","permalink":"/docs/RFPs/on-chain-quadratic-funding"},"next":{"title":"PHP Substrate API","permalink":"/docs/RFPs/php-api"}}');var s=t(74848),o=t(28453);const a={},r="Parachain Validation Conformance Testing",c={},l=[{value:"Project Description \ud83d\udcc4",id:"project-description-page_facing_up",level:2},{value:"Deliverables \ud83d\udd29",id:"deliverables-nut_and_bolt",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"parachain-validation-conformance-testing",children:"Parachain Validation Conformance Testing"})}),"\n",(0,s.jsx)(n.admonition,{type:"danger",children:(0,s.jsxs)(n.p,{children:["This Request for Proposals is ",(0,s.jsx)(n.em,{children:"closed"}),", meaning we are not looking for any more proposals on this topic at the moment."]})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Status:"})," Closed"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Proposer:"})," ",(0,s.jsx)(n.a,{href:"https://github.com/bkchr",children:"bkchr"})]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"project-description-page_facing_up",children:["Project Description ","\ud83d\udcc4"]}),"\n",(0,s.jsxs)(n.p,{children:["Each Polkadot host implementation that wants to take part in consensus needs to implement the Parachains protocol. Part of the Parachains protocol is the execution of the Parachain Validation Function (",(0,s.jsx)(n.code,{children:"PVF"}),"). The ",(0,s.jsx)(n.code,{children:"PVF"})," is a wasm blob that is required to provide the ",(0,s.jsx)(n.code,{children:"validate_block"})," function that takes a fixed set of arguments (part is the proof of validity from a collator), validates the proof of validity and returns (on success) some information back to the Polkadot host implementation. The ",(0,s.jsx)(n.code,{children:"PVF"})," is a black box for the Polkadot node and it can only use the ",(0,s.jsx)(n.code,{children:"validate_block"})," to make use of it. The execution of these ",(0,s.jsx)(n.code,{children:"PVF"}),"s is required to stay in certain limits to reach consensus across different node implementations, node versions, different hardware configuration and OS configurations. Some of these limits are:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"A deterministic maximum stack depth. All node implementations should support the same stack depth."}),"\n",(0,s.jsxs)(n.li,{children:["A deterministic maximum memory. All node implementations should support the same maximum memory usage per ",(0,s.jsx)(n.code,{children:"PVF"})," execution."]}),"\n",(0,s.jsxs)(n.li,{children:["A deterministic maximum execution time. All node implementations should execute a given ",(0,s.jsx)(n.code,{children:"PVF"})," in the same maximum time frame."]}),"\n",(0,s.jsxs)(n.li,{children:["A deterministic compilation/preparation of the ",(0,s.jsx)(n.code,{children:"PVF"}),". All node implementations should compile/prepare a given ",(0,s.jsx)(n.code,{children:"PVF"})," in the same maximum time frame and maximum memory budget."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"There are probably a lot of other limits as well. To ensure that all node implementations/versions are staying in these limits it is required to have conformance tests. These should include basic execution of valid wasm files over to complex wasm files that ensure that the compilation/preparation stays in the given limits and/or helps to define these limits properly across different implementations."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Useful resources:"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://paritytech.github.io/polkadot/book/index.html",children:"The Polkadot Parachain Host Implementers' Guide"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/paritytech/polkadot/issues/3211",children:"Pre-checking for PVF Compilation time"})}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"deliverables-nut_and_bolt",children:["Deliverables ","\ud83d\udd29"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Basic conformance tests that are running valid wasm files"}),"\n",(0,s.jsx)(n.li,{children:"Conformance tests that are resulting in running over the limits."}),"\n",(0,s.jsx)(n.li,{children:"Fuzzing across different implementations ensuring that all are coming to the same result"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"This is more some never ending task trying to find issues in different implementations, getting them fixed and searching for new vulnerabilities. In the end these tests should ensure that updating wasm engines, introducing new node implementations\netc can be done in a sane way without hoping for the best."})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>r});var i=t(96540);const s={},o=i.createContext(s);function a(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1261ed3e.2e9706ea.js b/assets/js/1261ed3e.2e9706ea.js new file mode 100644 index 00000000000..fdaa8ba8315 --- /dev/null +++ b/assets/js/1261ed3e.2e9706ea.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[66002],{91617:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>h,contentTitle:()=>a,default:()=>c,frontMatter:()=>o,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"applications/eightfish","title":"EightFish","description":"This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don\'t remove any of the mandatory parts presented in bold letters or as headlines (except for the title)! Lines starting with a > (such as this one) should be removed. Please use markdown instead of HTML (e.g. ` instead of `).","source":"@site/applications/eightfish.md","sourceDirName":"applications","slug":"/applications/eightfish","permalink":"/applications/eightfish","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/eightfish.md","tags":[],"version":"current","frontMatter":{}}');var s=n(74848),r=n(28453);const o={},a="EightFish",h={},l=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"The Basis of Theory",id:"the-basis-of-theory",level:4},{value:"The Approaches",id:"the-approaches",level:4},{value:"The Architecture",id:"the-architecture",level:4},{value:"The Tech Stack",id:"the-tech-stack",level:4},{value:"The SDK Interface Sample",id:"the-sdk-interface-sample",level:4},{value:"The Outstanding Features of the Application Developed by EightFish",id:"the-outstanding-features-of-the-application-developed-by-eightfish",level:4},{value:"Data Availability",id:"data-availability",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 Accomplishing All Basic Components of EightFish",id:"milestone-1--accomplishing-all-basic-components-of-eightfish",level:3},{value:"Milestone 2 \u2014 Integration",id:"milestone-2--integration",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function d(e){const t={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"eightfish",children:"EightFish"})}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsxs)(t.p,{children:["This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don't remove any of the mandatory parts presented in bold letters or as headlines (except for the title)! Lines starting with a ",(0,s.jsx)(t.code,{children:">"})," (such as this one) should be removed. Please use markdown instead of HTML (e.g. ",(0,s.jsx)(t.code,{children:"![](image.png)"})," instead of ",(0,s.jsx)(t.code,{children:""}),")."]}),"\n",(0,s.jsxs)(t.p,{children:["See the ",(0,s.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/#pencil-process",children:"Grants Program Process"})," on how to submit a proposal."]}),"\n"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Team Name:"})," EightFish"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Payment Address:"})," 0xdF75b4D1EBF1682eD59a256E50800DFD9047C5Eb (Ethereum ERC20 USDC)"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsxs)(t.strong,{children:[(0,s.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 2"]}),"\n"]}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsxs)(t.p,{children:["\u2757"," ",(0,s.jsx)(t.em,{children:"The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe."})]}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://github.com/miketang84/eightfish_assets/blob/master/eightfish_logo_light_small.png?raw=true",alt:""})}),"\n",(0,s.jsx)(t.p,{children:"EightFish is an OpenWeb/Web3 application development framework."}),"\n",(0,s.jsx)(t.p,{children:"EightFish is based on Substrate, and consists of some other components. A typical EightFish container node looks like the following:"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://github.com/miketang84/eightfish_assets/blob/master/eightfish_node.png?raw=true",alt:""})}),"\n",(0,s.jsx)(t.p,{children:"We think for Web3 application, the substrate framework itself is merely enough, people need do more work, especially the off chain part work, to accomplish the Web3 backend development. EightFish introduces a new programming model for Web3 application development - based on Substrate - that writing Web3 backend is just like writing a Web server backend by doing CRUD."}),"\n",(0,s.jsx)(t.p,{children:"The aims of EightFish are to make the Web3 development easier, import more traditional internet developers into the Web3/Substrate/Rust communities, and bring the Web3 applications into people's daily life."}),"\n",(0,s.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(t.h4,{id:"the-basis-of-theory",children:"The Basis of Theory"}),"\n",(0,s.jsxs)(t.p,{children:["There is an article: ",(0,s.jsx)(t.a,{href:"https://medium.com/@daogangtang/the-road-to-open-web-b684879a5571",children:"The Road to Open Web"})," talking about why currently Web3 failed in the field of internet application and why we need a new direction: open data and open web, to extend the Web3 application to the traditional internet users."]}),"\n",(0,s.jsx)(t.p,{children:"And EightFish is an engineering implementation for this new direction."}),"\n",(0,s.jsx)(t.h4,{id:"the-approaches",children:"The Approaches"}),"\n",(0,s.jsx)(t.p,{children:"On designing this architecture, we have two major rules:"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"The division of business and assets"}),"\n",(0,s.jsx)(t.li,{children:"Put major computing and storage into off chain"}),"\n"]}),"\n",(0,s.jsx)(t.h4,{id:"the-architecture",children:"The Architecture"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://github.com/miketang84/eightfish_assets/blob/master/eightfish_node.png?raw=true",alt:"node"})}),"\n",(0,s.jsx)(t.p,{children:"Let's look into the components in the above figure:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"On-chain, blockchain node"}),"\n",(0,s.jsx)(t.li,{children:"Off-chain Wasm Worker"}),"\n",(0,s.jsx)(t.li,{children:"Traditional SQL database"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"The blockchain node is in charge of synchronization, data table indexing, and code upgrade. The Off-chain wasm worker is in charge of biz logic computing, db operation and so on. The SQL database is in charge of data storing and query."}),"\n",(0,s.jsx)(t.p,{children:"The overview diagram for the whole network is as follow:"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://raw.githubusercontent.com/miketang84/eightfish_assets/master/network_overview.webp",alt:"network_overview"})}),"\n",(0,s.jsx)(t.p,{children:"As we can see, only the blockchain node of a eightfish node participates in the network communications."}),"\n",(0,s.jsx)(t.p,{children:"In this architecture, we define the mapping relationship between the on-chain storage and the SQL database tables. Please look at the following diagram:"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://raw.githubusercontent.com/miketang84/eightfish_assets/master/inspiration.webp",alt:"inspiration"})}),"\n",(0,s.jsx)(t.p,{children:"We ensure that the items in the on-chain storage \u2014 the id-hash pairs \u2014 are always the same as the items in each row of the SQL db table. By this way, we create a mapping between the on-chain storage items and the SQL db table. Once we get agreements on the on-chain id-hash pairs, we get agreements on the table data of the SQL database by rows too. And its granularity is on the row level, not on the whole table level or db level. This brings grand flexibility for programming and framework design."}),"\n",(0,s.jsx)(t.p,{children:"The writing process is as follow:"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://raw.githubusercontent.com/miketang84/eightfish_assets/master/writing_process.webp",alt:"write_process"})}),"\n",(0,s.jsx)(t.p,{children:"The main flow without errors handling of the above diagram is as following:"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"User makes http request to the off-chain wasm worker"}),"\n",(0,s.jsx)(t.li,{children:"After some basic checks, the wasm worker forwards the user request to the blockchain node (runtime)"}),"\n",(0,s.jsx)(t.li,{children:"The blockchain node adds this request to the block, and emits an event out. The wasm worker listens to the blockchain node, gets the event emitted from the blockchain node, and implements the real business logics in this worker"}),"\n",(0,s.jsx)(t.li,{children:"After processing the event, including calculating out the hash of the object going to write to the database, the wasm worker sends the update SQL command with data to the SQL database, and waits for the result returned from the database"}),"\n",(0,s.jsx)(t.li,{children:"If writing command executed well, send another RPC request with the object id-hash pair value calculated in step 4 to the blockchain node, and store it to the on-chain storage"}),"\n",(0,s.jsx)(t.li,{children:"If all steps go well, return ok 200 to the user\u2019s browser; if has error, return other status codes"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"The query process is as follow:"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://raw.githubusercontent.com/miketang84/eightfish_assets/master/query_process.webp",alt:"query_process"})}),"\n",(0,s.jsx)(t.p,{children:"The main flow without errors handling of the above diagram is as following:"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"User makes http query request to the off-chain wasm worker"}),"\n",(0,s.jsx)(t.li,{children:"After some basic checks, the wasm worker make SQL query from the SQL database"}),"\n",(0,s.jsx)(t.li,{children:"Database outputs the query result rows to off-chain wasm worker, and the wasm worker process the data, select out the hash and id columns from rows, make a id-hash pair list"}),"\n",(0,s.jsx)(t.li,{children:"Send this id-hash pair list to blockchain node to check whether are they right on equalities in the corresponding map structure in the on-chain storage"}),"\n",(0,s.jsx)(t.li,{children:"If all list items are checked and is right, the blockchain node returns true to the off-chain wasm worker"}),"\n",(0,s.jsx)(t.li,{children:"Once get the true result from the blockchain node\u2019s checks, the off-chain wasm worker returns the data manipulated to conform the format of API view to the user/browser"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"The code upgrading process is as follow:"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://raw.githubusercontent.com/miketang84/eightfish_assets/master/code_upgrade.webp",alt:"code_upgrade"})}),"\n",(0,s.jsx)(t.p,{children:"The main flow without errors handling of the above diagram is as following:"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Use a supervisor privilege (Or a DAO governance) to update the new wasm bytecode to the blockchain node on-chain storage"}),"\n",(0,s.jsx)(t.li,{children:"Trigger the off-chain wasm worker to send the request to grab the new version of the wasm code from the on-chain storage, by interval timer or http request directive"}),"\n",(0,s.jsx)(t.li,{children:"Download the new version of the wasm code to wasm worker, and reboot itself on the fly"}),"\n",(0,s.jsx)(t.li,{children:"Now the code running is the latest version"}),"\n"]}),"\n",(0,s.jsx)(t.h4,{id:"the-tech-stack",children:"The Tech Stack"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Substrate"}),"\n",(0,s.jsx)(t.li,{children:"Subxt"}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/fermyon/spin",children:"Spin (fermyon/spin)"})}),"\n",(0,s.jsx)(t.li,{children:"Wasmtime"}),"\n",(0,s.jsx)(t.li,{children:"Webassembly"}),"\n",(0,s.jsx)(t.li,{children:"Redis"}),"\n",(0,s.jsx)(t.li,{children:"Postgresql"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"Substrate, one of the core components, as the fundamentals and mechanism for synchronization of the data table indexing, consensus and code upgrading."}),"\n",(0,s.jsx)(t.h4,{id:"the-sdk-interface-sample",children:"The SDK Interface Sample"}),"\n",(0,s.jsx)(t.p,{children:"We design the developer SDK interface as a MVC web framework alike:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{children:'pub fn article_create(req: &mut Request) -> EightFishResult {\n // biz stuff\n}\n\nfn router(&self, router: &mut EightFishRouter) -> EightFishResult<()> {\n router.get("/article/:id", Self::article_path_page);\n router.post("/s/article/create", Self::article_create);\n Ok(())\n}\n'})}),"\n",(0,s.jsx)(t.h4,{id:"the-outstanding-features-of-the-application-developed-by-eightfish",children:"The Outstanding Features of the Application Developed by EightFish"}),"\n",(0,s.jsx)(t.p,{children:"We can summarize the outstanding features of the application developed by EightFish:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Use blockchain as the mechanism for synchronization of the data table indexing,\nconsensus and code upgrade"}),"\n",(0,s.jsx)(t.li,{children:"Pursuing for the high performance tps, lower to 2~4 nodes, to run a blockchain\napplication, to get the highest performance"}),"\n",(0,s.jsx)(t.li,{children:"Put major computing off-chain"}),"\n",(0,s.jsx)(t.li,{children:"Easy and quick query and indexing"}),"\n",(0,s.jsx)(t.li,{children:"No assets on it, but credits (asset is transferable, credit is non-transferable)"}),"\n",(0,s.jsx)(t.li,{children:"No need for collateral"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"By this way, this solution can be adopted and deployed by EVERY person/organization, and doesn't rely on any public service, we call it self-sovereign like what Web1.0 provides (http protocol, nginx servers, etc)."}),"\n",(0,s.jsx)(t.p,{children:"There is no need to force users to use a web browser wallet plugin to kick off the beginning of the application.\nNo new concepts need to be mastered, so it's relatively easy to import the internet users into the open web application."}),"\n",(0,s.jsx)(t.p,{children:"EightFish is a programming framework whose SDK interface is as simple as a traditional MVC web development framework. A good profit we can get is that this solution keeps programming models as the same as Web2.0 (MVC, CRUD, RESTFUL, GRAPHQL), and easily imports traditional web programmers into Open Web."}),"\n",(0,s.jsx)(t.p,{children:"This solution leverages all existing outstanding achievements in the database and distributed computing/storage industry from the internet time begins. We can build our next generation of applications based on these shoulders of giants."}),"\n",(0,s.jsx)(t.h4,{id:"data-availability",children:"Data Availability"}),"\n",(0,s.jsx)(t.p,{children:"Since the application powered by EightFish has a blockchain network underlying, so the availability problem is the same as a general blockchain."}),"\n",(0,s.jsx)(t.p,{children:"First of all, all raw request data from user would be recored in the blocks, one by one. For a newly node joined, it could restore the latest global status of the Substrate on-chain node and the SQL db by rows. If there are too many blocks need to sync, another scheme is to get a snapshot from a trustful node, and catch up the latest blocks from that snapshot point."}),"\n",(0,s.jsx)(t.p,{children:"The second, we recommend that store the structured data (model object) into SQL database, and put other data (e.g. blob, picture, file) into a decentralized storage network, like IPFS. User upload the blob to IPFS, get the CID, insert it into the content of the structured data, and upload the structured data to the EightFish powered application to store the content into the SQL database, the id-hash pair index into the Substrate on-chain storage."}),"\n",(0,s.jsx)(t.p,{children:"This data separation model seems like the model a Web2 application uses. Model data is stored in the database, and pictures are stored in a public image bed service, the url of the picture will be inserted into the content of the model object. But here, it is for Web3."}),"\n",(0,s.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsx)(t.p,{children:"EightFish itself is a development framework, its users are developers."}),"\n",(0,s.jsx)(t.p,{children:"The experience of Web2 MVC framework alike will help import amounts of Web2 developers into Web3 and Substrate dev communities, meanwhile help Web3 developers implement their applications for broader internet users easily and quickly. Indirectly, we hope to attract more end users into Web3, by providing better UX and performance, which rely on the underlying framework. Thus we believe in the more adoption of EightFish, the more adoption of Substrate."}),"\n",(0,s.jsx)(t.p,{children:"Right now we don't find similar projects on this direction in the Substrate / Polkadot / Kusama ecosystem, and even in other ecosystems. Because most of other ecosystems are in fact ecosystems of smart contract public blockchains, the projects among them are unlikely going to adopt the appchain approach that Polkadot uses."}),"\n",(0,s.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Daogang Tang (Mike Tang)"}),"\n",(0,s.jsx)(t.li,{children:"Keqin Tao (Hacken)"}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Contact Name:"})," Daogang Tang"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Contact Email:"})," ",(0,s.jsx)(t.a,{href:"mailto:daogangtang@gmail.com",children:"daogangtang@gmail.com"})]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Website:"})," N/A"]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Registered Address:"})," N/A"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Registered Legal Entity:"})," N/A"]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsx)(t.p,{children:"Daogang Tang (Mike Tang), a Rust enthusiast in China, the co-founder of Rust Chinese Community (RustCC), the advocator of the Substrate framework in China, has more than 15-years experiences on coding and architecture. He is also the ex-cofounder of Octopus Network, in charge of developer community building. He has done many research on Substrate and Web3, and published some articles on public media. He has been striving to promote the mass adoption of Rust, Substrate and Web3."}),"\n",(0,s.jsx)(t.p,{children:"Keqin Tao (Hacken), a Rust language lover, active in Rust Chinese Community. He is a certified AWS solution architect. He endeavours to introduce Rust into the projects of his company. He has much experience on Rust and Substrate developing."}),"\n",(0,s.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/miketang84/eightfish",children:"https://github.com/miketang84/eightfish"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/miketang84/openforum-subnode",children:"https://github.com/miketang84/openforum-subnode"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/miketang84/openforum-subxtproxy",children:"https://github.com/miketang84/openforum-subxtproxy"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/miketang84/openforum",children:"https://github.com/miketang84/openforum"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/miketang84/openforum-upgrade",children:"https://github.com/miketang84/openforum-upgrade"})}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine."}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/miketang84",children:"https://github.com/miketang84"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/taokeqin",children:"https://github.com/taokeqin"})}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,s.jsxs)(t.p,{children:["In Dec, 2022, Daogang Tang published his research on the theory of Open Web, a subset of Web3, the link is ",(0,s.jsx)(t.a,{href:"https://medium.com/@daogangtang/the-road-to-open-web-b684879a5571",children:"The Road to Open Web"}),". This work has been lasting for about 2 years."]}),"\n",(0,s.jsx)(t.p,{children:"And roughly from the June, 2022, Daogang Tang started to construct the EightFish framework, the framework to implement the theory of Open Web. Till now the five core components have been developed, and need another estimated one or two months to make them work together. So it is the right time to apply for the grant of W3f, and introduce the work we did to the whole substrate community."}),"\n",(0,s.jsxs)(t.p,{children:["A full version deck of EightFish can be found here: ",(0,s.jsx)(t.a,{href:"https://docs.google.com/presentation/d/1fcg1UFuCElRW8YLTtlh151X9wc0zxmIBLq0o6YOrYis/edit?usp=sharing",children:"EightFish Deck"})]}),"\n",(0,s.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Total Estimated Duration:"})," 2 months"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Full-Time Equivalent (FTE):"})," 2 FTEs"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Total Costs:"})," 15,000 USD"]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"milestone-1--accomplishing-all-basic-components-of-eightfish",children:"Milestone 1 \u2014 Accomplishing All Basic Components of EightFish"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Estimated duration:"})," 5 weeks"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"FTE:"})," 2"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Costs:"})," 10,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(t.th,{children:"Deliverable"}),(0,s.jsx)(t.th,{children:"Specification"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:(0,s.jsx)(t.strong,{children:"0a."})}),(0,s.jsx)(t.td,{children:"License"}),(0,s.jsx)(t.td,{children:"GPLv3"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:(0,s.jsx)(t.strong,{children:"0b."})}),(0,s.jsx)(t.td,{children:"Documentation"}),(0,s.jsxs)(t.td,{children:["We will provide both ",(0,s.jsx)(t.strong,{children:"inline documentation"})," of the code and a basic ",(0,s.jsx)(t.strong,{children:"tutorial"})," that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:(0,s.jsx)(t.strong,{children:"0c."})}),(0,s.jsx)(t.td,{children:"Testing and Testing Guide"}),(0,s.jsx)(t.td,{children:"Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:(0,s.jsx)(t.strong,{children:"0d."})}),(0,s.jsx)(t.td,{children:"Docker"}),(0,s.jsx)(t.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0e."}),(0,s.jsx)(t.td,{children:"Article"}),(0,s.jsxs)(t.td,{children:["We will publish an ",(0,s.jsx)(t.strong,{children:"article"}),"/workshop that explains [...] (what was done/achieved as part of the grant)."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(t.td,{children:"Substrate module: eightfish"}),(0,s.jsxs)(t.td,{children:["We will create a Substrate module that will:",(0,s.jsx)("br",{})," 1. record the coming requests; ",(0,s.jsx)("br",{}),"2. record the coming model indexes; ",(0,s.jsx)("br",{}),"3. update the on-chain wasm code for the off-chain worker"]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(t.td,{children:"Subxt proxy"}),(0,s.jsx)(t.td,{children:"Use subxt to build a client proxy for the Substrate node and the spin worker node"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,s.jsx)(t.td,{children:"Off-chain wasm worker"}),(0,s.jsx)(t.td,{children:"We use spin as the wasm engine and to execute the code retrieved from the Substrate on-chain storage, interact with redis and postgresql"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"4."}),(0,s.jsx)(t.td,{children:"Upgrade utilities"}),(0,s.jsxs)(t.td,{children:["Some tools or scripts to help on code upgrade: ",(0,s.jsx)("br",{})," 1. the tool for uploading new wasm file to the substrate node; ",(0,s.jsx)("br",{})," 2. the timer daemon for checking the new version of on-chain wasm code by interval; ",(0,s.jsx)("br",{})," 3. a monitor for wasm worker that while new version of wasm code loaded, reboot the wasm worker to execute new wasm code"]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"5."}),(0,s.jsx)(t.td,{children:"A set of rust derive procedural macro"}),(0,s.jsx)(t.td,{children:"Help write SQL literals and the type convertions between Rust types and SQL results easierly"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"6."}),(0,s.jsx)(t.td,{children:"Framework SDK interface"}),(0,s.jsxs)(t.td,{children:["1. A router in the wasm worker to help write dispatching code; ",(0,s.jsx)("br",{})," 2. the handler definition; ",(0,s.jsx)("br",{})," 3. middlewares; ",(0,s.jsx)("br",{})," 4. a mechanism of shared varialbes;"]})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"milestone-2--integration",children:"Milestone 2 \u2014 Integration"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Estimated Duration:"})," 3 weeks"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"FTE:"})," 2"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Costs:"})," 5,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(t.th,{children:"Deliverable"}),(0,s.jsx)(t.th,{children:"Specification"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:(0,s.jsx)(t.strong,{children:"0a."})}),(0,s.jsx)(t.td,{children:"License"}),(0,s.jsx)(t.td,{children:"GPLv3"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:(0,s.jsx)(t.strong,{children:"0b."})}),(0,s.jsx)(t.td,{children:"Documentation"}),(0,s.jsxs)(t.td,{children:["We will provide both ",(0,s.jsx)(t.strong,{children:"inline documentation"})," of the code and a basic ",(0,s.jsx)(t.strong,{children:"tutorial"})," that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:(0,s.jsx)(t.strong,{children:"0c."})}),(0,s.jsx)(t.td,{children:"Testing and Testing Guide"}),(0,s.jsx)(t.td,{children:"Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:(0,s.jsx)(t.strong,{children:"0d."})}),(0,s.jsx)(t.td,{children:"Docker"}),(0,s.jsx)(t.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0e."}),(0,s.jsx)(t.td,{children:"Article"}),(0,s.jsxs)(t.td,{children:["We will publish an ",(0,s.jsx)(t.strong,{children:"article"}),"/workshop that explains [...] (what was done/achieved as part of the grant)."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(t.td,{children:"Writing process"}),(0,s.jsx)(t.td,{children:"Integrate all components built in milestone 1 and do testings on writing process"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(t.td,{children:"Query process"}),(0,s.jsx)(t.td,{children:"Integrate all components built in milestone 1 and do testings on query process"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,s.jsx)(t.td,{children:"Code upgrading process"}),(0,s.jsx)(t.td,{children:"Integrate all components built in milestone 1 and do testings on code upgrading process"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"4."}),(0,s.jsx)(t.td,{children:"A simple demo"}),(0,s.jsx)(t.td,{children:"Prepare a demo for all processes with a simple web page UI, user can click on the web page to experience the capabilities of EightFish"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"5."}),(0,s.jsx)(t.td,{children:"A 4 nodes network"}),(0,s.jsx)(t.td,{children:"Build a 4 nodes network to test and run smoothly"})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsx)(t.p,{children:"There are several points need to be optimized, including the performance of the finalization of the model index on-chain data submitted from the off-chain wasm worker, maybe we will dive into the Substrate transaction pool to do some work. So the perfection of EightFish is the next stop."}),"\n",(0,s.jsxs)(t.p,{children:["And on the user level, next step we will port the ",(0,s.jsx)(t.a,{href:"https://rustcc.cn",children:"RustCC forum"})," onto EightFish, compile it into wasm code, and run it on the EightFish/Substrate network, that would be a 4 nodes network. And then we will use EightFish to build its own official website."]}),"\n",(0,s.jsx)(t.p,{children:"We will spend about 12 months to verify the performance and UE of this forum, find defects of it, and improve the underlying EightFish framework."}),"\n",(0,s.jsx)(t.p,{children:"Meanwhile, we will start to promote the adoption of EightFish in our dev community, encourage them to test the EightFish framework, use it to develop some applications."}),"\n",(0,s.jsx)(t.p,{children:"After enough verifications, we will promote EightFish to all developers around the world."}),"\n",(0,s.jsxs)(t.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"How did you hear about the Grants Program?"})," Web3 Foundation Website"]}),"\n",(0,s.jsxs)(t.p,{children:["Daogang Tang developed a Rust MVC web framework ",(0,s.jsx)(t.a,{href:"https://github.com/miketang84/sapper",children:"sapper"})," years ago, and the ",(0,s.jsx)(t.a,{href:"https://rustcc.cn",children:"RustCC forum"})," is running on it, so he will design the EightFish SDK interface by refering this work."]})]})}function c(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>a});var i=n(96540);const s={},r=i.createContext(s);function o(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1261ed3e.b8d366bf.js b/assets/js/1261ed3e.b8d366bf.js deleted file mode 100644 index e96fdc4d4a5..00000000000 --- a/assets/js/1261ed3e.b8d366bf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[66002],{39981:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>h,contentTitle:()=>a,default:()=>c,frontMatter:()=>o,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"applications/eightfish","title":"EightFish","description":"This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don\'t remove any of the mandatory parts presented in bold letters or as headlines (except for the title)! Lines starting with a > (such as this one) should be removed. Please use markdown instead of HTML (e.g. ` instead of `).","source":"@site/applications/eightfish.md","sourceDirName":"applications","slug":"/applications/eightfish","permalink":"/applications/eightfish","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/eightfish.md","tags":[],"version":"current","frontMatter":{}}');var s=n(74848),r=n(28453);const o={},a="EightFish",h={},l=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"The Basis of Theory",id:"the-basis-of-theory",level:4},{value:"The Approaches",id:"the-approaches",level:4},{value:"The Architecture",id:"the-architecture",level:4},{value:"The Tech Stack",id:"the-tech-stack",level:4},{value:"The SDK Interface Sample",id:"the-sdk-interface-sample",level:4},{value:"The Outstanding Features of the Application Developed by EightFish",id:"the-outstanding-features-of-the-application-developed-by-eightfish",level:4},{value:"Data Availability",id:"data-availability",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 Accomplishing All Basic Components of EightFish",id:"milestone-1--accomplishing-all-basic-components-of-eightfish",level:3},{value:"Milestone 2 \u2014 Integration",id:"milestone-2--integration",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function d(e){const t={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"eightfish",children:"EightFish"})}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsxs)(t.p,{children:["This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don't remove any of the mandatory parts presented in bold letters or as headlines (except for the title)! Lines starting with a ",(0,s.jsx)(t.code,{children:">"})," (such as this one) should be removed. Please use markdown instead of HTML (e.g. ",(0,s.jsx)(t.code,{children:"![](image.png)"})," instead of ",(0,s.jsx)(t.code,{children:""}),")."]}),"\n",(0,s.jsxs)(t.p,{children:["See the ",(0,s.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/#pencil-process",children:"Grants Program Process"})," on how to submit a proposal."]}),"\n"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Team Name:"})," EightFish"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Payment Address:"})," 0xdF75b4D1EBF1682eD59a256E50800DFD9047C5Eb (Ethereum ERC20 USDC)"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsxs)(t.strong,{children:[(0,s.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 2"]}),"\n"]}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsxs)(t.p,{children:["\u2757"," ",(0,s.jsx)(t.em,{children:"The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe."})]}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://github.com/miketang84/eightfish_assets/blob/master/eightfish_logo_light_small.png?raw=true",alt:""})}),"\n",(0,s.jsx)(t.p,{children:"EightFish is an OpenWeb/Web3 application development framework."}),"\n",(0,s.jsx)(t.p,{children:"EightFish is based on Substrate, and consists of some other components. A typical EightFish container node looks like the following:"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://github.com/miketang84/eightfish_assets/blob/master/eightfish_node.png?raw=true",alt:""})}),"\n",(0,s.jsx)(t.p,{children:"We think for Web3 application, the substrate framework itself is merely enough, people need do more work, especially the off chain part work, to accomplish the Web3 backend development. EightFish introduces a new programming model for Web3 application development - based on Substrate - that writing Web3 backend is just like writing a Web server backend by doing CRUD."}),"\n",(0,s.jsx)(t.p,{children:"The aims of EightFish are to make the Web3 development easier, import more traditional internet developers into the Web3/Substrate/Rust communities, and bring the Web3 applications into people's daily life."}),"\n",(0,s.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(t.h4,{id:"the-basis-of-theory",children:"The Basis of Theory"}),"\n",(0,s.jsxs)(t.p,{children:["There is an article: ",(0,s.jsx)(t.a,{href:"https://medium.com/@daogangtang/the-road-to-open-web-b684879a5571",children:"The Road to Open Web"})," talking about why currently Web3 failed in the field of internet application and why we need a new direction: open data and open web, to extend the Web3 application to the traditional internet users."]}),"\n",(0,s.jsx)(t.p,{children:"And EightFish is an engineering implementation for this new direction."}),"\n",(0,s.jsx)(t.h4,{id:"the-approaches",children:"The Approaches"}),"\n",(0,s.jsx)(t.p,{children:"On designing this architecture, we have two major rules:"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"The division of business and assets"}),"\n",(0,s.jsx)(t.li,{children:"Put major computing and storage into off chain"}),"\n"]}),"\n",(0,s.jsx)(t.h4,{id:"the-architecture",children:"The Architecture"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://github.com/miketang84/eightfish_assets/blob/master/eightfish_node.png?raw=true",alt:"node"})}),"\n",(0,s.jsx)(t.p,{children:"Let's look into the components in the above figure:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"On-chain, blockchain node"}),"\n",(0,s.jsx)(t.li,{children:"Off-chain Wasm Worker"}),"\n",(0,s.jsx)(t.li,{children:"Traditional SQL database"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"The blockchain node is in charge of synchronization, data table indexing, and code upgrade. The Off-chain wasm worker is in charge of biz logic computing, db operation and so on. The SQL database is in charge of data storing and query."}),"\n",(0,s.jsx)(t.p,{children:"The overview diagram for the whole network is as follow:"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://raw.githubusercontent.com/miketang84/eightfish_assets/master/network_overview.webp",alt:"network_overview"})}),"\n",(0,s.jsx)(t.p,{children:"As we can see, only the blockchain node of a eightfish node participates in the network communications."}),"\n",(0,s.jsx)(t.p,{children:"In this architecture, we define the mapping relationship between the on-chain storage and the SQL database tables. Please look at the following diagram:"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://raw.githubusercontent.com/miketang84/eightfish_assets/master/inspiration.webp",alt:"inspiration"})}),"\n",(0,s.jsx)(t.p,{children:"We ensure that the items in the on-chain storage \u2014 the id-hash pairs \u2014 are always the same as the items in each row of the SQL db table. By this way, we create a mapping between the on-chain storage items and the SQL db table. Once we get agreements on the on-chain id-hash pairs, we get agreements on the table data of the SQL database by rows too. And its granularity is on the row level, not on the whole table level or db level. This brings grand flexibility for programming and framework design."}),"\n",(0,s.jsx)(t.p,{children:"The writing process is as follow:"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://raw.githubusercontent.com/miketang84/eightfish_assets/master/writing_process.webp",alt:"write_process"})}),"\n",(0,s.jsx)(t.p,{children:"The main flow without errors handling of the above diagram is as following:"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"User makes http request to the off-chain wasm worker"}),"\n",(0,s.jsx)(t.li,{children:"After some basic checks, the wasm worker forwards the user request to the blockchain node (runtime)"}),"\n",(0,s.jsx)(t.li,{children:"The blockchain node adds this request to the block, and emits an event out. The wasm worker listens to the blockchain node, gets the event emitted from the blockchain node, and implements the real business logics in this worker"}),"\n",(0,s.jsx)(t.li,{children:"After processing the event, including calculating out the hash of the object going to write to the database, the wasm worker sends the update SQL command with data to the SQL database, and waits for the result returned from the database"}),"\n",(0,s.jsx)(t.li,{children:"If writing command executed well, send another RPC request with the object id-hash pair value calculated in step 4 to the blockchain node, and store it to the on-chain storage"}),"\n",(0,s.jsx)(t.li,{children:"If all steps go well, return ok 200 to the user\u2019s browser; if has error, return other status codes"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"The query process is as follow:"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://raw.githubusercontent.com/miketang84/eightfish_assets/master/query_process.webp",alt:"query_process"})}),"\n",(0,s.jsx)(t.p,{children:"The main flow without errors handling of the above diagram is as following:"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"User makes http query request to the off-chain wasm worker"}),"\n",(0,s.jsx)(t.li,{children:"After some basic checks, the wasm worker make SQL query from the SQL database"}),"\n",(0,s.jsx)(t.li,{children:"Database outputs the query result rows to off-chain wasm worker, and the wasm worker process the data, select out the hash and id columns from rows, make a id-hash pair list"}),"\n",(0,s.jsx)(t.li,{children:"Send this id-hash pair list to blockchain node to check whether are they right on equalities in the corresponding map structure in the on-chain storage"}),"\n",(0,s.jsx)(t.li,{children:"If all list items are checked and is right, the blockchain node returns true to the off-chain wasm worker"}),"\n",(0,s.jsx)(t.li,{children:"Once get the true result from the blockchain node\u2019s checks, the off-chain wasm worker returns the data manipulated to conform the format of API view to the user/browser"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"The code upgrading process is as follow:"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://raw.githubusercontent.com/miketang84/eightfish_assets/master/code_upgrade.webp",alt:"code_upgrade"})}),"\n",(0,s.jsx)(t.p,{children:"The main flow without errors handling of the above diagram is as following:"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Use a supervisor privilege (Or a DAO governance) to update the new wasm bytecode to the blockchain node on-chain storage"}),"\n",(0,s.jsx)(t.li,{children:"Trigger the off-chain wasm worker to send the request to grab the new version of the wasm code from the on-chain storage, by interval timer or http request directive"}),"\n",(0,s.jsx)(t.li,{children:"Download the new version of the wasm code to wasm worker, and reboot itself on the fly"}),"\n",(0,s.jsx)(t.li,{children:"Now the code running is the latest version"}),"\n"]}),"\n",(0,s.jsx)(t.h4,{id:"the-tech-stack",children:"The Tech Stack"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Substrate"}),"\n",(0,s.jsx)(t.li,{children:"Subxt"}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/fermyon/spin",children:"Spin (fermyon/spin)"})}),"\n",(0,s.jsx)(t.li,{children:"Wasmtime"}),"\n",(0,s.jsx)(t.li,{children:"Webassembly"}),"\n",(0,s.jsx)(t.li,{children:"Redis"}),"\n",(0,s.jsx)(t.li,{children:"Postgresql"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"Substrate, one of the core components, as the fundamentals and mechanism for synchronization of the data table indexing, consensus and code upgrading."}),"\n",(0,s.jsx)(t.h4,{id:"the-sdk-interface-sample",children:"The SDK Interface Sample"}),"\n",(0,s.jsx)(t.p,{children:"We design the developer SDK interface as a MVC web framework alike:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{children:'pub fn article_create(req: &mut Request) -> EightFishResult {\n // biz stuff\n}\n\nfn router(&self, router: &mut EightFishRouter) -> EightFishResult<()> {\n router.get("/article/:id", Self::article_path_page);\n router.post("/s/article/create", Self::article_create);\n Ok(())\n}\n'})}),"\n",(0,s.jsx)(t.h4,{id:"the-outstanding-features-of-the-application-developed-by-eightfish",children:"The Outstanding Features of the Application Developed by EightFish"}),"\n",(0,s.jsx)(t.p,{children:"We can summarize the outstanding features of the application developed by EightFish:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Use blockchain as the mechanism for synchronization of the data table indexing,\nconsensus and code upgrade"}),"\n",(0,s.jsx)(t.li,{children:"Pursuing for the high performance tps, lower to 2~4 nodes, to run a blockchain\napplication, to get the highest performance"}),"\n",(0,s.jsx)(t.li,{children:"Put major computing off-chain"}),"\n",(0,s.jsx)(t.li,{children:"Easy and quick query and indexing"}),"\n",(0,s.jsx)(t.li,{children:"No assets on it, but credits (asset is transferable, credit is non-transferable)"}),"\n",(0,s.jsx)(t.li,{children:"No need for collateral"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"By this way, this solution can be adopted and deployed by EVERY person/organization, and doesn't rely on any public service, we call it self-sovereign like what Web1.0 provides (http protocol, nginx servers, etc)."}),"\n",(0,s.jsx)(t.p,{children:"There is no need to force users to use a web browser wallet plugin to kick off the beginning of the application.\nNo new concepts need to be mastered, so it's relatively easy to import the internet users into the open web application."}),"\n",(0,s.jsx)(t.p,{children:"EightFish is a programming framework whose SDK interface is as simple as a traditional MVC web development framework. A good profit we can get is that this solution keeps programming models as the same as Web2.0 (MVC, CRUD, RESTFUL, GRAPHQL), and easily imports traditional web programmers into Open Web."}),"\n",(0,s.jsx)(t.p,{children:"This solution leverages all existing outstanding achievements in the database and distributed computing/storage industry from the internet time begins. We can build our next generation of applications based on these shoulders of giants."}),"\n",(0,s.jsx)(t.h4,{id:"data-availability",children:"Data Availability"}),"\n",(0,s.jsx)(t.p,{children:"Since the application powered by EightFish has a blockchain network underlying, so the availability problem is the same as a general blockchain."}),"\n",(0,s.jsx)(t.p,{children:"First of all, all raw request data from user would be recored in the blocks, one by one. For a newly node joined, it could restore the latest global status of the Substrate on-chain node and the SQL db by rows. If there are too many blocks need to sync, another scheme is to get a snapshot from a trustful node, and catch up the latest blocks from that snapshot point."}),"\n",(0,s.jsx)(t.p,{children:"The second, we recommend that store the structured data (model object) into SQL database, and put other data (e.g. blob, picture, file) into a decentralized storage network, like IPFS. User upload the blob to IPFS, get the CID, insert it into the content of the structured data, and upload the structured data to the EightFish powered application to store the content into the SQL database, the id-hash pair index into the Substrate on-chain storage."}),"\n",(0,s.jsx)(t.p,{children:"This data separation model seems like the model a Web2 application uses. Model data is stored in the database, and pictures are stored in a public image bed service, the url of the picture will be inserted into the content of the model object. But here, it is for Web3."}),"\n",(0,s.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsx)(t.p,{children:"EightFish itself is a development framework, its users are developers."}),"\n",(0,s.jsx)(t.p,{children:"The experience of Web2 MVC framework alike will help import amounts of Web2 developers into Web3 and Substrate dev communities, meanwhile help Web3 developers implement their applications for broader internet users easily and quickly. Indirectly, we hope to attract more end users into Web3, by providing better UX and performance, which rely on the underlying framework. Thus we believe in the more adoption of EightFish, the more adoption of Substrate."}),"\n",(0,s.jsx)(t.p,{children:"Right now we don't find similar projects on this direction in the Substrate / Polkadot / Kusama ecosystem, and even in other ecosystems. Because most of other ecosystems are in fact ecosystems of smart contract public blockchains, the projects among them are unlikely going to adopt the appchain approach that Polkadot uses."}),"\n",(0,s.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Daogang Tang (Mike Tang)"}),"\n",(0,s.jsx)(t.li,{children:"Keqin Tao (Hacken)"}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Contact Name:"})," Daogang Tang"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Contact Email:"})," ",(0,s.jsx)(t.a,{href:"mailto:daogangtang@gmail.com",children:"daogangtang@gmail.com"})]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Website:"})," N/A"]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Registered Address:"})," N/A"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Registered Legal Entity:"})," N/A"]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsx)(t.p,{children:"Daogang Tang (Mike Tang), a Rust enthusiast in China, the co-founder of Rust Chinese Community (RustCC), the advocator of the Substrate framework in China, has more than 15-years experiences on coding and architecture. He is also the ex-cofounder of Octopus Network, in charge of developer community building. He has done many research on Substrate and Web3, and published some articles on public media. He has been striving to promote the mass adoption of Rust, Substrate and Web3."}),"\n",(0,s.jsx)(t.p,{children:"Keqin Tao (Hacken), a Rust language lover, active in Rust Chinese Community. He is a certified AWS solution architect. He endeavours to introduce Rust into the projects of his company. He has much experience on Rust and Substrate developing."}),"\n",(0,s.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/miketang84/eightfish",children:"https://github.com/miketang84/eightfish"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/miketang84/openforum-subnode",children:"https://github.com/miketang84/openforum-subnode"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/miketang84/openforum-subxtproxy",children:"https://github.com/miketang84/openforum-subxtproxy"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/miketang84/openforum",children:"https://github.com/miketang84/openforum"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/miketang84/openforum-upgrade",children:"https://github.com/miketang84/openforum-upgrade"})}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine."}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/miketang84",children:"https://github.com/miketang84"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/taokeqin",children:"https://github.com/taokeqin"})}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,s.jsxs)(t.p,{children:["In Dec, 2022, Daogang Tang published his research on the theory of Open Web, a subset of Web3, the link is ",(0,s.jsx)(t.a,{href:"https://medium.com/@daogangtang/the-road-to-open-web-b684879a5571",children:"The Road to Open Web"}),". This work has been lasting for about 2 years."]}),"\n",(0,s.jsx)(t.p,{children:"And roughly from the June, 2022, Daogang Tang started to construct the EightFish framework, the framework to implement the theory of Open Web. Till now the five core components have been developed, and need another estimated one or two months to make them work together. So it is the right time to apply for the grant of W3f, and introduce the work we did to the whole substrate community."}),"\n",(0,s.jsxs)(t.p,{children:["A full version deck of EightFish can be found here: ",(0,s.jsx)(t.a,{href:"https://docs.google.com/presentation/d/1fcg1UFuCElRW8YLTtlh151X9wc0zxmIBLq0o6YOrYis/edit?usp=sharing",children:"EightFish Deck"})]}),"\n",(0,s.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Total Estimated Duration:"})," 2 months"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Full-Time Equivalent (FTE):"})," 2 FTEs"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Total Costs:"})," 15,000 USD"]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"milestone-1--accomplishing-all-basic-components-of-eightfish",children:"Milestone 1 \u2014 Accomplishing All Basic Components of EightFish"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Estimated duration:"})," 5 weeks"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"FTE:"})," 2"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Costs:"})," 10,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(t.th,{children:"Deliverable"}),(0,s.jsx)(t.th,{children:"Specification"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:(0,s.jsx)(t.strong,{children:"0a."})}),(0,s.jsx)(t.td,{children:"License"}),(0,s.jsx)(t.td,{children:"GPLv3"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:(0,s.jsx)(t.strong,{children:"0b."})}),(0,s.jsx)(t.td,{children:"Documentation"}),(0,s.jsxs)(t.td,{children:["We will provide both ",(0,s.jsx)(t.strong,{children:"inline documentation"})," of the code and a basic ",(0,s.jsx)(t.strong,{children:"tutorial"})," that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:(0,s.jsx)(t.strong,{children:"0c."})}),(0,s.jsx)(t.td,{children:"Testing and Testing Guide"}),(0,s.jsx)(t.td,{children:"Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:(0,s.jsx)(t.strong,{children:"0d."})}),(0,s.jsx)(t.td,{children:"Docker"}),(0,s.jsx)(t.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0e."}),(0,s.jsx)(t.td,{children:"Article"}),(0,s.jsxs)(t.td,{children:["We will publish an ",(0,s.jsx)(t.strong,{children:"article"}),"/workshop that explains [...] (what was done/achieved as part of the grant)."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(t.td,{children:"Substrate module: eightfish"}),(0,s.jsxs)(t.td,{children:["We will create a Substrate module that will:",(0,s.jsx)("br",{})," 1. record the coming requests; ",(0,s.jsx)("br",{}),"2. record the coming model indexes; ",(0,s.jsx)("br",{}),"3. update the on-chain wasm code for the off-chain worker"]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(t.td,{children:"Subxt proxy"}),(0,s.jsx)(t.td,{children:"Use subxt to build a client proxy for the Substrate node and the spin worker node"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,s.jsx)(t.td,{children:"Off-chain wasm worker"}),(0,s.jsx)(t.td,{children:"We use spin as the wasm engine and to execute the code retrieved from the Substrate on-chain storage, interact with redis and postgresql"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"4."}),(0,s.jsx)(t.td,{children:"Upgrade utilities"}),(0,s.jsxs)(t.td,{children:["Some tools or scripts to help on code upgrade: ",(0,s.jsx)("br",{})," 1. the tool for uploading new wasm file to the substrate node; ",(0,s.jsx)("br",{})," 2. the timer daemon for checking the new version of on-chain wasm code by interval; ",(0,s.jsx)("br",{})," 3. a monitor for wasm worker that while new version of wasm code loaded, reboot the wasm worker to execute new wasm code"]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"5."}),(0,s.jsx)(t.td,{children:"A set of rust derive procedural macro"}),(0,s.jsx)(t.td,{children:"Help write SQL literals and the type convertions between Rust types and SQL results easierly"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"6."}),(0,s.jsx)(t.td,{children:"Framework SDK interface"}),(0,s.jsxs)(t.td,{children:["1. A router in the wasm worker to help write dispatching code; ",(0,s.jsx)("br",{})," 2. the handler definition; ",(0,s.jsx)("br",{})," 3. middlewares; ",(0,s.jsx)("br",{})," 4. a mechanism of shared varialbes;"]})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"milestone-2--integration",children:"Milestone 2 \u2014 Integration"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Estimated Duration:"})," 3 weeks"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"FTE:"})," 2"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Costs:"})," 5,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(t.th,{children:"Deliverable"}),(0,s.jsx)(t.th,{children:"Specification"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:(0,s.jsx)(t.strong,{children:"0a."})}),(0,s.jsx)(t.td,{children:"License"}),(0,s.jsx)(t.td,{children:"GPLv3"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:(0,s.jsx)(t.strong,{children:"0b."})}),(0,s.jsx)(t.td,{children:"Documentation"}),(0,s.jsxs)(t.td,{children:["We will provide both ",(0,s.jsx)(t.strong,{children:"inline documentation"})," of the code and a basic ",(0,s.jsx)(t.strong,{children:"tutorial"})," that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:(0,s.jsx)(t.strong,{children:"0c."})}),(0,s.jsx)(t.td,{children:"Testing and Testing Guide"}),(0,s.jsx)(t.td,{children:"Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:(0,s.jsx)(t.strong,{children:"0d."})}),(0,s.jsx)(t.td,{children:"Docker"}),(0,s.jsx)(t.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0e."}),(0,s.jsx)(t.td,{children:"Article"}),(0,s.jsxs)(t.td,{children:["We will publish an ",(0,s.jsx)(t.strong,{children:"article"}),"/workshop that explains [...] (what was done/achieved as part of the grant)."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(t.td,{children:"Writing process"}),(0,s.jsx)(t.td,{children:"Integrate all components built in milestone 1 and do testings on writing process"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(t.td,{children:"Query process"}),(0,s.jsx)(t.td,{children:"Integrate all components built in milestone 1 and do testings on query process"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,s.jsx)(t.td,{children:"Code upgrading process"}),(0,s.jsx)(t.td,{children:"Integrate all components built in milestone 1 and do testings on code upgrading process"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"4."}),(0,s.jsx)(t.td,{children:"A simple demo"}),(0,s.jsx)(t.td,{children:"Prepare a demo for all processes with a simple web page UI, user can click on the web page to experience the capabilities of EightFish"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"5."}),(0,s.jsx)(t.td,{children:"A 4 nodes network"}),(0,s.jsx)(t.td,{children:"Build a 4 nodes network to test and run smoothly"})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsx)(t.p,{children:"There are several points need to be optimized, including the performance of the finalization of the model index on-chain data submitted from the off-chain wasm worker, maybe we will dive into the Substrate transaction pool to do some work. So the perfection of EightFish is the next stop."}),"\n",(0,s.jsxs)(t.p,{children:["And on the user level, next step we will port the ",(0,s.jsx)(t.a,{href:"https://rustcc.cn",children:"RustCC forum"})," onto EightFish, compile it into wasm code, and run it on the EightFish/Substrate network, that would be a 4 nodes network. And then we will use EightFish to build its own official website."]}),"\n",(0,s.jsx)(t.p,{children:"We will spend about 12 months to verify the performance and UE of this forum, find defects of it, and improve the underlying EightFish framework."}),"\n",(0,s.jsx)(t.p,{children:"Meanwhile, we will start to promote the adoption of EightFish in our dev community, encourage them to test the EightFish framework, use it to develop some applications."}),"\n",(0,s.jsx)(t.p,{children:"After enough verifications, we will promote EightFish to all developers around the world."}),"\n",(0,s.jsxs)(t.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"How did you hear about the Grants Program?"})," Web3 Foundation Website"]}),"\n",(0,s.jsxs)(t.p,{children:["Daogang Tang developed a Rust MVC web framework ",(0,s.jsx)(t.a,{href:"https://github.com/miketang84/sapper",children:"sapper"})," years ago, and the ",(0,s.jsx)(t.a,{href:"https://rustcc.cn",children:"RustCC forum"})," is running on it, so he will design the EightFish SDK interface by refering this work."]})]})}function c(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>a});var i=n(96540);const s={},r=i.createContext(s);function o(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/12e2b9b2.112acb0d.js b/assets/js/12e2b9b2.112acb0d.js deleted file mode 100644 index 00c2789e47f..00000000000 --- a/assets/js/12e2b9b2.112acb0d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[39992],{69520:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>d});const i=JSON.parse('{"id":"applications/uplink","title":"UpLink","description":"Team Name:* HypeLabs Inc.","source":"@site/applications/uplink.md","sourceDirName":"applications","slug":"/applications/uplink","permalink":"/applications/uplink","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/uplink.md","tags":[],"version":"current","frontMatter":{}}');var s=t(74848),r=t(28453);const o={},a="UpLink",l={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Communication Protocol",id:"communication-protocol",level:4},{value:"Bluetooth Low Energy Drivers",id:"bluetooth-low-energy-drivers",level:4},{value:"Android App",id:"android-app",level:4},{value:"Relay Server",id:"relay-server",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 BLE Drivers",id:"milestone-1--ble-drivers",level:3},{value:"Milestone 2 \u2014 Communication Protocol",id:"milestone-2--communication-protocol",level:3},{value:"Milestone 3 \u2014 Relay Server",id:"milestone-3--relay-server",level:3},{value:"Milestone 4 \u2014 Android App",id:"milestone-4--android-app",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const n={a:"a",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"uplink",children:"UpLink"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Team Name:"})," HypeLabs Inc."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Payment Address:"})," 3Fwmy2QHw1Xp7S956PMG9NKq1yngzRqGqf (BTC)"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Status:"})," ",(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/pull/424#issuecomment-1006435267",children:"Terminated"})]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(n.p,{children:"UpLink is a project that proposes a decentralized and infrastructure-free approach to peer-to-peer connectivity. The system establishes local mesh networks between devices, enabling them to connect directly, cooperate, and relay content on behalf of each other. By cooperating, the devices spend resources, such as bandwidth, memory, and computational power. The consumption of the device\u2019s surplus resources, however, creates an incentive for users to not cooperate, effectively hampering the network and reducing its reliability. UpLink introduces UpLink tokens (ULX), built on Substrate, which are used to reward users for the resources that are consumed by the network. This means that people can sell their internet to others and can use their devices as relay nodes, earning tokens in return."}),"\n",(0,s.jsx)(n.p,{children:"This proposal focuses on one of the key components of that system: the creation of a binary peer-to-peer communication protocol that mimics Substrate\u2019s API, enabling apps to communicate with Substrate without direct access to the Internet, through a proxy. This is illustrated in Figure 1, below. A given Requester is not connected to the Internet, and rather relies on a Proxy to access the ledger. The Proxy cooperates by relaying the requests and the responses, mediating the conversation between the two. The Relay Server handles the necessary cryptographic processes to decode and interpret the contents of the request, before relaying them to the Substrate Network."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.img,{src:"https://user-images.githubusercontent.com/8101643/119384058-09d8aa80-bcbc-11eb-8934-7d4404a5d55c.png",alt:""}),"\nFigure 1. Illustration of a Proxy device cooperating with a given Requester for the purposes of communicating with the Substrate Network."]}),"\n",(0,s.jsx)(n.p,{children:"It\u2019s notable that this constitutes a relaxation of the UpLink project in many ways. In its entirety, the UpLink project proposes an incentive-based multi-hop mesh network system built on Substrate, enabling devices to communicate peer-to-peer and be rewarded for their cooperation. This project, however, proposes the much simpler non-rewarded proxy alternative, which enables disconnected devices to process transactions on a Substrate network. Furthermore, it will work as a fundamental basis for the UpLink project, enabling the team to build upon this system towards its more complex counterpart. The following key differences can be highlighted:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"The network can relay content only up to one hop, meaning that there\u2019s no actual implementation of a mesh network;"}),"\n",(0,s.jsx)(n.li,{children:"It uses only Bluetooth Low Energy, instead of other connectivity technologies commonly available on the devices;"}),"\n",(0,s.jsx)(n.li,{children:"There\u2019s no incentivization model in place, meaning that the Proxy will not be rewarded for its cooperation;"}),"\n",(0,s.jsx)(n.li,{children:"The Relay Server is separate from Substrate. In the final version of this project the UpLink App and Substrate Network can communicate directly, end-to-end, by integrating the necessary decoding logic directly into Substrate;"}),"\n",(0,s.jsx)(n.li,{children:"The Requester is only capable of consuming a selected subset of Substrate\u2019s functions, namely querying account balance and processing transactions."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Note: HypeLabs previously submitted an aborted proposal ",(0,s.jsx)(n.a,{href:"https://github.com/w3f/Open-Grants-Program/pull/412",children:"here"}),". This new proposal is a considerable revision of that one. No information therein is relevant for the purposes of this submission."]}),"\n",(0,s.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(n.p,{children:"HypeLabs proposes a solution in which two Android devices connect locally over Bluetooth Low Energy in order to enable one of them to communicate with the UpLink network. The network is built on Substrate. The devices can act either as Requesters or Proxies; the former issues requests to the Substrate network, and the latter relays those requests and mediates the conversation. The setup is thus composed of the following elements:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"An Android app that is capable of assuming two roles:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"A Requester is the device that is not connected to the Internet and has intentions of making API requests to the Substrate Network;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"A Proxy is a second device that is connected to the Internet, and connects with the Requester in order to share connectivity;"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"The Relay Server is a network endpoint responsible for interpreting and propagating requests made to the Substrate network;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"The Substrate Network is a Substrate deployment composed of an unspecified number of nodes."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"The connection between the Requester and the Proxy is maintained automatically, without the need for any form of user intervention. This connection is secured, in the sense that the Proxy is not capable of eavesdropping, interference, or any other types of security hazards. This is true because the communication link between the Requester and the Backend is fully encrypted, meaning that the Proxy is not capable of tampering with the information."}),"\n",(0,s.jsx)(n.h4,{id:"communication-protocol",children:"Communication Protocol"}),"\n",(0,s.jsx)(n.p,{children:"The Requester and the Relay Server communicate over a custom protocol that is mediated by the Proxy. The protocol will closely resemble Substrate\u2019s API one-to-one, meaning that it consists of a port of Substrate\u2019s API to a binary network protocol that can be used in a peer-to-peer communication paradigm. This will enable devices to communicate directly with each other in a similar way that they communicate with Substrate, enabling all sorts of integrations to happen."}),"\n",(0,s.jsx)(n.p,{children:"This protocol is to be designed and implemented within the context of this grant, and thus constitutes a deliverable. It is known, however, that the protocol uses a binary format for the sake of saving network bandwidth, especially when communicating over Bluetooth Low Energy, whose packet sizes are considerably small. It will also be implemented in Java, for the sake of reusability between the Android app and the Relay Server, given that the protocol must be implemented in both. For that reason, this deliverable will be in the form of a library, and can be added as a dependency to any Java project."}),"\n",(0,s.jsx)(n.p,{children:"The protocol implements three functions, namely (1) querying a user\u2019s balance on the Substrate network, (2) requesting the processment of a transaction between two users, and (3) the handshake for the two devices during the discovery stage. These functions are encoded differently in the protocol, meaning that each is represented through a different type of packet. With that in mind, it\u2019s notable that each packet will include the specifications for the necessary arguments to execute the function, and thus to properly represent the Requester\u2019s intent. The protocol will also include one additional packet for return value, which will indicate whether the function request executed successfully."}),"\n",(0,s.jsx)(n.h4,{id:"bluetooth-low-energy-drivers",children:"Bluetooth Low Energy Drivers"}),"\n",(0,s.jsx)(n.p,{children:"The solution uses Bluetooth Low Energy (BLE) in order to enable devices to communicate directly with each other. This includes managing the connectivity stack, such as device discovery (with automatic pairing) and buffered communications. The architecture for this is illustrated in Figure 2."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.img,{src:"https://user-images.githubusercontent.com/8101643/119358753-d8061a80-bca0-11eb-9671-e90688d9f91c.png",alt:""}),"\nFigure 2. Architecture for the connectivity stack implemented for the Android app. The controller is shown on the left, while the model is shown on the right."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"A Driver aggregates an Advertiser and Brower, enabling consumers to managed both in a simple way;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"The Advertiser is responsible for publishing the BLE Service on the network and actively advertising the device for it to be found by others;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"The Browser scans the network for other devices matching the BLE service specification;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"The Adapter State Listener is a part of the controller\u2019s lifecycle management, in the sense that it detects when the Bluetooth adapter is turned on and off, and makes the controller respond accordingly;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"The Device Bridge keeps track of found devices, and keeps a registry between Provider\u2019s and Android's own native object representation. This bridge is used to lookup devices and respond to events;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"The BLE Service is a model specification for the Bluetooth Low Energy service, in the sense that it specifies what the service looks like and how it behaves;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"A Provider is an abstract representation of a device on the network;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"A Connector manages the connections between two devices, and is capable of both initiating and terminating a connection;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"A Channel is an abstract representation of the communication link, and is capable of both input and output;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"An Input Stream reads buffered input from the Bluetooth Low Energy adapter;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"An Output Stream writes buffered output to the Bluetooth Low Energy adapter."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"This implementation consists of a Bluetooth Low Energy connectivity layer that manages the connectivity stack and all buffered I/O using native Android BLE frameworks. HypeLabs already maintains a production-grade implementation of such drivers, although those are deeply coupled with the Hype SDK, the company\u2019s main product. For that reason, these drivers must be ported and isolated before being made available as a library dependency for other apps."}),"\n",(0,s.jsx)(n.p,{children:"One important aspect of this setup is the fact that, after connecting, the devices perform a handshake. This handshake constitutes a negotiation process between the two devices, with the intent of exchanging meta configurations and status information. The information includes whether the devices are connected to the Internet, for the purposes of role selection, and it\u2019s performed every time that this status changes. This handshake is performed in accordance with the Communication Protocol."}),"\n",(0,s.jsx)(n.h4,{id:"android-app",children:"Android App"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.img,{src:"https://user-images.githubusercontent.com/8101643/119384023-004f4280-bcbc-11eb-95ae-64f2ed0abcb8.png",alt:""}),"\nFigure 3. Mockup for the Android app. The screen on the left enables users to see their balance and to request transactions, while the screen on the right provides verified confirmation of a transaction request."]}),"\n",(0,s.jsx)(n.p,{children:"The Android app enables users to manually request the implemented network functions. This app is simple in nature, since it is not the purpose of the project, but rather serves the purpose of testing and showcasing the network\u2019s functions. Rather, other apps may implement the same functionality, simply by adding the implemented logic as a dependency, one that will be provided to the public in open source form and as a library dependency."}),"\n",(0,s.jsx)(n.p,{children:"The app is written in Java and built with Gradle, as is common for Android."}),"\n",(0,s.jsx)(n.h4,{id:"relay-server",children:"Relay Server"}),"\n",(0,s.jsx)(n.p,{children:"The Relay Server receives, decodes, and interprets requests from any Requester. This process of decoding and interpreting requests can be understood as the server\u2019s Business Logic, according to the illustration in Figure 4. For example, the Relay Server must decide what Substrate API endpoints to call and in what order. As a result of that process, the server redirects the requests to the Substrate Network, and mediates the communications with the Requester. All cryptographic challenges are forwarded between the two as well, meaning that the Relay Server is not capable of faking transactions, although it does have visibility over the operations that occur."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.img,{src:"https://user-images.githubusercontent.com/8101643/119384655-f2e68800-bcbc-11eb-899b-04e447623dc3.png",alt:""}),"\nFigure 4. Architecture for the Relay Server, illustrating how a transaction request is relayed to the Substrate Network. Proxy devices query the Relay Server's API, which interprets the requests and propagates to the Substrate Network."]}),"\n",(0,s.jsx)(n.p,{children:"The Relay Server is to be implemented as an AWS Lambda function that can be called publicly. Given that this server also integrates the Communication Protocol, it will be implemented in Java. It is also composed of a full fledged CI/CD pipeline, implying that updates to the deployment are easy to process. Given its implementation in Lambda, this server will be horizontally scalable, and capable of processing many millions of transactions per second."}),"\n",(0,s.jsx)(n.p,{children:"In future reviews, this logic should be optionally integrated directly into Substrate, with the intent of having Substrate and off-the-grid devices communicate end-to-end, without the need for mediators. However, due to the complexity of that endeavour, the Relay Server will replace that setup for an initial version."}),"\n",(0,s.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"UpLink's mission is to ensure smartphone users can purchase Internet access from other users. No payment systems, blockchain applications, or blockchain transactions can work without being connected to the Internet;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"UpLink will allow dapps to process transactions by renting an Internet connection. In addition, other Substrate projects can use UpLink to expand their services to regions where the Internet is unreliable or expensive;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"UpLink can help bank the unbanked by providing connectivity solutions to other De-Fi projects, ensuring the reliability of their products when they deploy in regions with low coverage."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"UpLink is targeted at the following audiences:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Dapps and wallet apps;"}),"\n",(0,s.jsx)(n.li,{children:"De-Fi projects;"}),"\n",(0,s.jsx)(n.li,{children:"App developers."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Other similar projects can be identified, namely:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://www.helium.com/",children:"https://www.helium.com/"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://gotenna.com/",children:"https://gotenna.com/"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://nodle.io/",children:"https://nodle.io/"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"UpLink can be distinguished from those projects because:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"UpLink can run on smartphones and IoT devices. The technology utilizes any radio protocol readily available on the devices to form a local network. There is no need for any additional infrastructure hardware to maintain the network or extend internet access to offline devices. Thus making the technology radio protocol and hardware agnostic;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"UpLink is interoperable, and any type of device running on different operating systems can connect autonomously to form local mesh networks, including Android, iOS, and various LoRa gateways. Operating System interoperability reduces the degree of fragmentation in the network and creates a unified network. As a result, anyone can access the Internet in the UpLink network;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"All local network level connections, encryption, and protocol management, internet sharing features are autonomous, which do not require any user intervention\u2014making it easier to use and adopt the technology."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Carlos Lei Santos, CEO"}),"\n",(0,s.jsx)(n.li,{children:"Andr\xe9 Francisco, CTO"}),"\n",(0,s.jsx)(n.li,{children:"Damaris Valero, Global Business Development"}),"\n",(0,s.jsx)(n.li,{children:"Aldrin D'Souza, Product Manager"}),"\n",(0,s.jsx)(n.li,{children:"Karolina Stawinska, Head of Partnerships"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Name:"})," Carlos Lei Santos"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Email:"})," ",(0,s.jsx)(n.a,{href:"mailto:cl@hypelabs.io",children:"cl@hypelabs.io"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Website:"})," ",(0,s.jsx)(n.a,{href:"https://hypelabs.io",children:"https://hypelabs.io"})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Registered Address:"})," 3524 Silveside Road Suite 35B Wilmington, Delaware 19810-4929"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Registered Legal Entity:"})," HypeLabs Inc."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Carlos Santos, HypeLabs CEO: Carlos is a developer, entrepreneur and technology enthusiast by heart. He studied Computer Science at Faculty of Sciences of University of Porto (FCUP) between 2011 and 2014. Before joining HypeLabs, he had 7 years of experience working as an IT manager providing assistance and working for companies such as IBM, BPI Bank, Banco Espirito Santo, Santander, CTT, Zon Telecommunications and Glintt. Nowadays, he is fully dedicated to his work as CEO, focused on management, networking, funding and working among the team improving the product, website and the brand."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Andr\xe9 Francisco, HypeLabs CTO: Since college, Andr\xe9 dedicated himself to tech-related startups with great commitment. His alma mater is the University of Porto, where he studied Computer Science. He was the founder and first president of NuCC (Nucleus for Computer Science, an association for CS enthusiasts) for the University of Porto. Talks and workshops he gave include topics such as memory management, AI, general programming concepts and best practices, design patterns, and others. In the early days he participated in several programming contests with good results, including national finals. Andr\xe9 was also team manager and lead organizer for the VideoJogos 2011 conference, in Porto. Formerly, he was a senior developer and researcher with nearly 20 years of experience in a wide variety of programming languages, platforms, and fields of study, including networking, AI, ML, natural and computer language processing, 3D graphics, web and app full stack development, and more. There, he was a researcher for CRACS, INESCTEC, PIC (Porto Interactive Center) under the LIFEisGAME and VERE projects, Yappy, and IJUP. He was also lead developer and maintainer of the OpenJelly project, dedicated to 3D graphics rendering, animations, and collision detection."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Damaris Valero, Global Business Development: Damaris is a former entrepreneur with over 20 years of experience in business development. She founded a 15 year old independent production company headquartered in Miami and with offices abroad. Her fields of interest and expertise are business development and marketing strategy, with an emphasis on building and expanding companies globally. She is the author of the book \u201cBranded Entertainment: Dealmaking Strategies & Techniques for Industry Professionals\u201d. As a blockchain enthusiast and collaborator, she\u2019s avid for the success of this fast growing global technology. Damaris is a builder of strategic partnerships with global and local partners, from government to telcos and companies that are looking to make a positive impact on connecting the world. Damaris is a content creator, director, writer and producer. She\u2019s a creative leader on commissioned productions and development deals for new content ideas in multiple markets worldwide (Latin America and Europe)."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Aldrin D\u2019Souza, Product Manager: Aldrin is passionate about building impactful businesses for the Next Billion User markets. He has a background in Telecommunications Engineering. Based in Canada, his expertise in understanding the potential of mesh networks and its product-market fit started as a former product manager and business analyst at RightMesh, where he conducted a successful ICO. Through his market research, he has implemented unique business models that harness the opportunities native to mesh networking."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Karolina Stawinska, Head of Partnerships: Karolina has eight years of HR experience sourcing innovative startups and recruiting high performance leadership teams in 52 countries. Across her career, she worked with various multinationals, the European Parliament, United Nations agencies, international NGOs and leading accelerator programs including Founders Factory, China Start and the Kairos K50. Among her HR experiences she was responsible for recruiting and supporting a community of over 1,200 successful millennial entrepreneurs at the Kairos Society. Karolina enjoys bringing multiple stakeholders together at hackathons, co-creating solutions that have the potential to push the world forward. She has organised and judged various startup competitions. Karolina is a self-starter with a passion for people and discovering young talent. She possesses strong interpersonal, teamwork and cross-cultural communication skills through direct sales and leadership positions."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Carlos Santos (",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/carlosleisantos/",children:"https://www.linkedin.com/in/carlosleisantos/"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Andr\xe9 Francisco (",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/andr%C3%A9-francisco-6662b696/",children:"https://www.linkedin.com/in/andr%C3%A9-francisco-6662b696/"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Damaris Valero (",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/damaris-valero-23711619/",children:"https://www.linkedin.com/in/damaris-valero-23711619/"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Aldrin D'souza (",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/aldrin-dsouza/",children:"https://www.linkedin.com/in/aldrin-dsouza/"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{style:{textAlign:"center"},children:"Module"}),(0,s.jsx)(n.th,{style:{textAlign:"center"},children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"BLE Drivers"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Port needed"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Communication Protocol"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Design and implementation needed"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Relay Server"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Implementation needed"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Android App"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Templates exist"})]})]})]}),"\n",(0,s.jsxs)(n.p,{children:["Some of the templates for the Android App can be found on HypeLabs' ",(0,s.jsx)(n.a,{href:"https://github.com/Hype-Labs",children:"GitHub page"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"The Communication Protocol is not yet designed, since one of the key requirements of it is that it matches closely with the Substrate API. This is an exercise that will be performed given the grant, creating as output the design and implementation for a peer-to-peer protocol that relates one-to-one with the Substrate API. For this initial implementation, only a subset of Substrate\u2019s functions should be implemented, however."}),"\n",(0,s.jsx)(n.p,{children:"The Bluetooth Low Energy (BLE) Drivers already exist and are used by HypeLabs extensively in production environments. These drivers are a component of the Hype SDK (HypeLabs\u2019 main product) and need to be ported as an isolated binary dependency, since the Hype SDK will not be used for this project."}),"\n",(0,s.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{style:{textAlign:"center"},children:"Deliverable"}),(0,s.jsx)(n.th,{style:{textAlign:"center"},children:"Description"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"BLE Drivers"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"An implementation of a peer-to-peer communication framework using Bluetooth Low Energy."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Communication Protocol"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"A binary peer-to-peer network protocol that mimics Substrate\u2019s API and I/O arguments."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Relay Server"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"A server that mediates communications between the app and the Substrate network."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Android App"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"An Android app that implements the described functionality."})]})]})]}),"\n",(0,s.jsx)(n.p,{children:"Once the grant is obtained, the deliverables are to be met at the following times:"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{style:{textAlign:"center"},children:"Week"}),(0,s.jsx)(n.th,{style:{textAlign:"center"},children:"Deliverables"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"1st"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"None"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"2nd"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"BLE Drivers (Implementation)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"3rd"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"None"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"4th"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Communication Protocol (Architecture and Design), Android App (BLE Binaries)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"5th"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"None"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"6th"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Relay Server (Functions)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"7th"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"None"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"8th"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Android App (Binary)"})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsx)(n.p,{children:"This submission proposes the implementation of a binary peer-to-peer communication protocol that mimics Substrate\u2019s API. This enables devices to communicate with Substrate even without Internet access, by relying on proxies."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Estimated Duration:"})," 1,984 Person Hours"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Full-Time Equivalent (FTE):"})," 4"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Costs:"})," $20,202 USD"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-1--ble-drivers",children:"Milestone 1 \u2014 BLE Drivers"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated Duration:"})," 148 Person Hours, 2 weeks"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," $1,508 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"MIT"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"The code will be documented inline with a format that enables for quick docs generation, such as Doxygen. The project also includes a README file with general guidelines, onboarding information, and licensing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0c."}),(0,s.jsx)(n.td,{children:"Testing Guide"}),(0,s.jsx)(n.td,{children:"The project will have a minimum test coverage of 50%. The testing process should be described in the README file."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0d."}),(0,s.jsx)(n.td,{children:"Article/Tutorial"}),(0,s.jsx)(n.td,{children:"The onboarding processes will be described in the README file."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(n.td,{children:"Implementation"}),(0,s.jsx)(n.td,{children:"This deliverable consists of existing Android BLE drivers that will be ported to an isolated library dependency. The delivery will be in both source and binary form, and distributed on GitHub and HypeLabs\u2019 website."})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-2--communication-protocol",children:"Milestone 2 \u2014 Communication Protocol"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated Duration:"})," 962 Person Hours, 2 months"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 2"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," $9,799 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"MIT"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"The code will be documented inline with a format that enables for quick docs generation, such as Doxygen. The project also includes a README file with general guidelines, onboarding information, and licensing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0c."}),(0,s.jsx)(n.td,{children:"Testing Guide"}),(0,s.jsx)(n.td,{children:"The project will have a minimum test coverage of 50%. The testing process should be described in the README file."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0d."}),(0,s.jsx)(n.td,{children:"Article/Tutorial"}),(0,s.jsx)(n.td,{children:"The onboarding processes will be described in the README file."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(n.td,{children:"Architecture and Design"}),(0,s.jsx)(n.td,{children:"The protocol will be designed before being implemented, implying the design of binary packet formats, a security evaluation, and performance profiling. This delivery will be in the form of a document, including the design, the security assessment results, and the profiling results."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(n.td,{children:"Implementation"}),(0,s.jsx)(n.td,{children:"The implementation will be open source and available as a binary library dependency. The source code will be available on GitHub, and the distribution will be made available on HypeLabs\u2019 website."})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-3--relay-server",children:"Milestone 3 \u2014 Relay Server"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated Duration:"})," 659 Person Hours, 1.5 Months"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 2"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," $6,709 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"MIT"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"The code will be documented inline with a format that enables for quick docs generation, such as Doxygen. The project also includes a README file with general guidelines, onboarding information, and licensing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0c."}),(0,s.jsx)(n.td,{children:"Testing Guide"}),(0,s.jsx)(n.td,{children:"The project will have a minimum test coverage of 50%. The testing process should be described in the README file."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0d."}),(0,s.jsx)(n.td,{children:"Article/Tutorial"}),(0,s.jsx)(n.td,{children:"The onboarding processes will be described in the README file."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(n.td,{children:"Functions"}),(0,s.jsx)(n.td,{children:"The implementation will consist of a series of AWS Lambda functions that constitute the integration API. What functions those are will depend on the design of the Communication Protocol, since there\u2019s a direct correlation between the API and the protocol. The functions will be available in source code form, on GitHub."})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-4--android-app",children:"Milestone 4 \u2014 Android App"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated Duration:"})," 215 Person Hours, 1 Month"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," $2,186 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"MIT"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"The code will be documented inline with a format that enables for quick docs generation, such as Doxygen. The project also includes a README file with general guidelines, onboarding information, and licensing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0c."}),(0,s.jsx)(n.td,{children:"Testing Guide"}),(0,s.jsx)(n.td,{children:"The project will have a minimum test coverage of 50%. The testing process should be described in the README file."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0d."}),(0,s.jsx)(n.td,{children:"Article/Tutorial"}),(0,s.jsx)(n.td,{children:"The app includes an onboarding tutorial available to users, which is shown automatically on the first run."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(n.td,{children:"BLE Binary"}),(0,s.jsx)(n.td,{children:"The first delivery for the app will be a binary with the BLE Drivers integrated, but without any form of relay. This will work for testing one-on-one connectivity using BLE, as well as initial UI and UX testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(n.td,{children:"Binary"}),(0,s.jsx)(n.td,{children:"The app will be available in binary form in the Android Play Store, available to everyone in the public. It can also be built from the public repository, since the app can be used as a template for other developers that wish to integrate the technology."})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Full integration of the Hype SDK, with n-hop mesh networking capabilities;"}),"\n",(0,s.jsx)(n.li,{children:"Support for other types of devices, such as iOS and IoT;"}),"\n",(0,s.jsx)(n.li,{children:"Support for other types of transport channels such as LoRa;"}),"\n",(0,s.jsx)(n.li,{children:"Integration with different (configurable) authentication systems;"}),"\n",(0,s.jsx)(n.li,{children:"Implementation of analytics and monitoring tools;"}),"\n",(0,s.jsx)(n.li,{children:"Introduce wallet management module in the HypeSDK;"}),"\n",(0,s.jsx)(n.li,{children:"Implement Private and Public network configuration setting for Dapp developers;"}),"\n",(0,s.jsx)(n.li,{children:"Research and design Proof of Relay incentivization mechanism to incentivize relayers;"}),"\n",(0,s.jsx)(n.li,{children:"Implement BME model, where Data Users would burn their tokens to access underlying services;"}),"\n",(0,s.jsx)(n.li,{children:"Elimination of the Relay Server middleman and full integration into Substrate;"}),"\n",(0,s.jsx)(n.li,{children:"Build and promote Early Adopter Programs for Dapp developers;"}),"\n",(0,s.jsx)(n.li,{children:"Launch and promote Testnet competition to test token economics;"}),"\n",(0,s.jsx)(n.li,{children:"Partnership with OEMs and app partners."}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"How did you hear about the Grants Program?"})," Web3 Foundation Website and personal recommendation."]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>a});var i=t(96540);const s={},r=i.createContext(s);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/12e2b9b2.5dd3c56a.js b/assets/js/12e2b9b2.5dd3c56a.js new file mode 100644 index 00000000000..9ce3b2ec0fe --- /dev/null +++ b/assets/js/12e2b9b2.5dd3c56a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[39992],{60335:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>d});const i=JSON.parse('{"id":"applications/uplink","title":"UpLink","description":"Team Name:* HypeLabs Inc.","source":"@site/applications/uplink.md","sourceDirName":"applications","slug":"/applications/uplink","permalink":"/applications/uplink","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/uplink.md","tags":[],"version":"current","frontMatter":{}}');var s=t(74848),r=t(28453);const o={},a="UpLink",l={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Communication Protocol",id:"communication-protocol",level:4},{value:"Bluetooth Low Energy Drivers",id:"bluetooth-low-energy-drivers",level:4},{value:"Android App",id:"android-app",level:4},{value:"Relay Server",id:"relay-server",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 BLE Drivers",id:"milestone-1--ble-drivers",level:3},{value:"Milestone 2 \u2014 Communication Protocol",id:"milestone-2--communication-protocol",level:3},{value:"Milestone 3 \u2014 Relay Server",id:"milestone-3--relay-server",level:3},{value:"Milestone 4 \u2014 Android App",id:"milestone-4--android-app",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const n={a:"a",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"uplink",children:"UpLink"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Team Name:"})," HypeLabs Inc."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Payment Address:"})," 3Fwmy2QHw1Xp7S956PMG9NKq1yngzRqGqf (BTC)"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Status:"})," ",(0,s.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/pull/424#issuecomment-1006435267",children:"Terminated"})]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(n.p,{children:"UpLink is a project that proposes a decentralized and infrastructure-free approach to peer-to-peer connectivity. The system establishes local mesh networks between devices, enabling them to connect directly, cooperate, and relay content on behalf of each other. By cooperating, the devices spend resources, such as bandwidth, memory, and computational power. The consumption of the device\u2019s surplus resources, however, creates an incentive for users to not cooperate, effectively hampering the network and reducing its reliability. UpLink introduces UpLink tokens (ULX), built on Substrate, which are used to reward users for the resources that are consumed by the network. This means that people can sell their internet to others and can use their devices as relay nodes, earning tokens in return."}),"\n",(0,s.jsx)(n.p,{children:"This proposal focuses on one of the key components of that system: the creation of a binary peer-to-peer communication protocol that mimics Substrate\u2019s API, enabling apps to communicate with Substrate without direct access to the Internet, through a proxy. This is illustrated in Figure 1, below. A given Requester is not connected to the Internet, and rather relies on a Proxy to access the ledger. The Proxy cooperates by relaying the requests and the responses, mediating the conversation between the two. The Relay Server handles the necessary cryptographic processes to decode and interpret the contents of the request, before relaying them to the Substrate Network."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.img,{src:"https://user-images.githubusercontent.com/8101643/119384058-09d8aa80-bcbc-11eb-8934-7d4404a5d55c.png",alt:""}),"\nFigure 1. Illustration of a Proxy device cooperating with a given Requester for the purposes of communicating with the Substrate Network."]}),"\n",(0,s.jsx)(n.p,{children:"It\u2019s notable that this constitutes a relaxation of the UpLink project in many ways. In its entirety, the UpLink project proposes an incentive-based multi-hop mesh network system built on Substrate, enabling devices to communicate peer-to-peer and be rewarded for their cooperation. This project, however, proposes the much simpler non-rewarded proxy alternative, which enables disconnected devices to process transactions on a Substrate network. Furthermore, it will work as a fundamental basis for the UpLink project, enabling the team to build upon this system towards its more complex counterpart. The following key differences can be highlighted:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"The network can relay content only up to one hop, meaning that there\u2019s no actual implementation of a mesh network;"}),"\n",(0,s.jsx)(n.li,{children:"It uses only Bluetooth Low Energy, instead of other connectivity technologies commonly available on the devices;"}),"\n",(0,s.jsx)(n.li,{children:"There\u2019s no incentivization model in place, meaning that the Proxy will not be rewarded for its cooperation;"}),"\n",(0,s.jsx)(n.li,{children:"The Relay Server is separate from Substrate. In the final version of this project the UpLink App and Substrate Network can communicate directly, end-to-end, by integrating the necessary decoding logic directly into Substrate;"}),"\n",(0,s.jsx)(n.li,{children:"The Requester is only capable of consuming a selected subset of Substrate\u2019s functions, namely querying account balance and processing transactions."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Note: HypeLabs previously submitted an aborted proposal ",(0,s.jsx)(n.a,{href:"https://github.com/w3f/Open-Grants-Program/pull/412",children:"here"}),". This new proposal is a considerable revision of that one. No information therein is relevant for the purposes of this submission."]}),"\n",(0,s.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(n.p,{children:"HypeLabs proposes a solution in which two Android devices connect locally over Bluetooth Low Energy in order to enable one of them to communicate with the UpLink network. The network is built on Substrate. The devices can act either as Requesters or Proxies; the former issues requests to the Substrate network, and the latter relays those requests and mediates the conversation. The setup is thus composed of the following elements:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"An Android app that is capable of assuming two roles:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"A Requester is the device that is not connected to the Internet and has intentions of making API requests to the Substrate Network;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"A Proxy is a second device that is connected to the Internet, and connects with the Requester in order to share connectivity;"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"The Relay Server is a network endpoint responsible for interpreting and propagating requests made to the Substrate network;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"The Substrate Network is a Substrate deployment composed of an unspecified number of nodes."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"The connection between the Requester and the Proxy is maintained automatically, without the need for any form of user intervention. This connection is secured, in the sense that the Proxy is not capable of eavesdropping, interference, or any other types of security hazards. This is true because the communication link between the Requester and the Backend is fully encrypted, meaning that the Proxy is not capable of tampering with the information."}),"\n",(0,s.jsx)(n.h4,{id:"communication-protocol",children:"Communication Protocol"}),"\n",(0,s.jsx)(n.p,{children:"The Requester and the Relay Server communicate over a custom protocol that is mediated by the Proxy. The protocol will closely resemble Substrate\u2019s API one-to-one, meaning that it consists of a port of Substrate\u2019s API to a binary network protocol that can be used in a peer-to-peer communication paradigm. This will enable devices to communicate directly with each other in a similar way that they communicate with Substrate, enabling all sorts of integrations to happen."}),"\n",(0,s.jsx)(n.p,{children:"This protocol is to be designed and implemented within the context of this grant, and thus constitutes a deliverable. It is known, however, that the protocol uses a binary format for the sake of saving network bandwidth, especially when communicating over Bluetooth Low Energy, whose packet sizes are considerably small. It will also be implemented in Java, for the sake of reusability between the Android app and the Relay Server, given that the protocol must be implemented in both. For that reason, this deliverable will be in the form of a library, and can be added as a dependency to any Java project."}),"\n",(0,s.jsx)(n.p,{children:"The protocol implements three functions, namely (1) querying a user\u2019s balance on the Substrate network, (2) requesting the processment of a transaction between two users, and (3) the handshake for the two devices during the discovery stage. These functions are encoded differently in the protocol, meaning that each is represented through a different type of packet. With that in mind, it\u2019s notable that each packet will include the specifications for the necessary arguments to execute the function, and thus to properly represent the Requester\u2019s intent. The protocol will also include one additional packet for return value, which will indicate whether the function request executed successfully."}),"\n",(0,s.jsx)(n.h4,{id:"bluetooth-low-energy-drivers",children:"Bluetooth Low Energy Drivers"}),"\n",(0,s.jsx)(n.p,{children:"The solution uses Bluetooth Low Energy (BLE) in order to enable devices to communicate directly with each other. This includes managing the connectivity stack, such as device discovery (with automatic pairing) and buffered communications. The architecture for this is illustrated in Figure 2."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.img,{src:"https://user-images.githubusercontent.com/8101643/119358753-d8061a80-bca0-11eb-9671-e90688d9f91c.png",alt:""}),"\nFigure 2. Architecture for the connectivity stack implemented for the Android app. The controller is shown on the left, while the model is shown on the right."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"A Driver aggregates an Advertiser and Brower, enabling consumers to managed both in a simple way;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"The Advertiser is responsible for publishing the BLE Service on the network and actively advertising the device for it to be found by others;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"The Browser scans the network for other devices matching the BLE service specification;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"The Adapter State Listener is a part of the controller\u2019s lifecycle management, in the sense that it detects when the Bluetooth adapter is turned on and off, and makes the controller respond accordingly;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"The Device Bridge keeps track of found devices, and keeps a registry between Provider\u2019s and Android's own native object representation. This bridge is used to lookup devices and respond to events;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"The BLE Service is a model specification for the Bluetooth Low Energy service, in the sense that it specifies what the service looks like and how it behaves;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"A Provider is an abstract representation of a device on the network;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"A Connector manages the connections between two devices, and is capable of both initiating and terminating a connection;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"A Channel is an abstract representation of the communication link, and is capable of both input and output;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"An Input Stream reads buffered input from the Bluetooth Low Energy adapter;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"An Output Stream writes buffered output to the Bluetooth Low Energy adapter."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"This implementation consists of a Bluetooth Low Energy connectivity layer that manages the connectivity stack and all buffered I/O using native Android BLE frameworks. HypeLabs already maintains a production-grade implementation of such drivers, although those are deeply coupled with the Hype SDK, the company\u2019s main product. For that reason, these drivers must be ported and isolated before being made available as a library dependency for other apps."}),"\n",(0,s.jsx)(n.p,{children:"One important aspect of this setup is the fact that, after connecting, the devices perform a handshake. This handshake constitutes a negotiation process between the two devices, with the intent of exchanging meta configurations and status information. The information includes whether the devices are connected to the Internet, for the purposes of role selection, and it\u2019s performed every time that this status changes. This handshake is performed in accordance with the Communication Protocol."}),"\n",(0,s.jsx)(n.h4,{id:"android-app",children:"Android App"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.img,{src:"https://user-images.githubusercontent.com/8101643/119384023-004f4280-bcbc-11eb-95ae-64f2ed0abcb8.png",alt:""}),"\nFigure 3. Mockup for the Android app. The screen on the left enables users to see their balance and to request transactions, while the screen on the right provides verified confirmation of a transaction request."]}),"\n",(0,s.jsx)(n.p,{children:"The Android app enables users to manually request the implemented network functions. This app is simple in nature, since it is not the purpose of the project, but rather serves the purpose of testing and showcasing the network\u2019s functions. Rather, other apps may implement the same functionality, simply by adding the implemented logic as a dependency, one that will be provided to the public in open source form and as a library dependency."}),"\n",(0,s.jsx)(n.p,{children:"The app is written in Java and built with Gradle, as is common for Android."}),"\n",(0,s.jsx)(n.h4,{id:"relay-server",children:"Relay Server"}),"\n",(0,s.jsx)(n.p,{children:"The Relay Server receives, decodes, and interprets requests from any Requester. This process of decoding and interpreting requests can be understood as the server\u2019s Business Logic, according to the illustration in Figure 4. For example, the Relay Server must decide what Substrate API endpoints to call and in what order. As a result of that process, the server redirects the requests to the Substrate Network, and mediates the communications with the Requester. All cryptographic challenges are forwarded between the two as well, meaning that the Relay Server is not capable of faking transactions, although it does have visibility over the operations that occur."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.img,{src:"https://user-images.githubusercontent.com/8101643/119384655-f2e68800-bcbc-11eb-899b-04e447623dc3.png",alt:""}),"\nFigure 4. Architecture for the Relay Server, illustrating how a transaction request is relayed to the Substrate Network. Proxy devices query the Relay Server's API, which interprets the requests and propagates to the Substrate Network."]}),"\n",(0,s.jsx)(n.p,{children:"The Relay Server is to be implemented as an AWS Lambda function that can be called publicly. Given that this server also integrates the Communication Protocol, it will be implemented in Java. It is also composed of a full fledged CI/CD pipeline, implying that updates to the deployment are easy to process. Given its implementation in Lambda, this server will be horizontally scalable, and capable of processing many millions of transactions per second."}),"\n",(0,s.jsx)(n.p,{children:"In future reviews, this logic should be optionally integrated directly into Substrate, with the intent of having Substrate and off-the-grid devices communicate end-to-end, without the need for mediators. However, due to the complexity of that endeavour, the Relay Server will replace that setup for an initial version."}),"\n",(0,s.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"UpLink's mission is to ensure smartphone users can purchase Internet access from other users. No payment systems, blockchain applications, or blockchain transactions can work without being connected to the Internet;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"UpLink will allow dapps to process transactions by renting an Internet connection. In addition, other Substrate projects can use UpLink to expand their services to regions where the Internet is unreliable or expensive;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"UpLink can help bank the unbanked by providing connectivity solutions to other De-Fi projects, ensuring the reliability of their products when they deploy in regions with low coverage."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"UpLink is targeted at the following audiences:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Dapps and wallet apps;"}),"\n",(0,s.jsx)(n.li,{children:"De-Fi projects;"}),"\n",(0,s.jsx)(n.li,{children:"App developers."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Other similar projects can be identified, namely:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://www.helium.com/",children:"https://www.helium.com/"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://gotenna.com/",children:"https://gotenna.com/"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://nodle.io/",children:"https://nodle.io/"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"UpLink can be distinguished from those projects because:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"UpLink can run on smartphones and IoT devices. The technology utilizes any radio protocol readily available on the devices to form a local network. There is no need for any additional infrastructure hardware to maintain the network or extend internet access to offline devices. Thus making the technology radio protocol and hardware agnostic;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"UpLink is interoperable, and any type of device running on different operating systems can connect autonomously to form local mesh networks, including Android, iOS, and various LoRa gateways. Operating System interoperability reduces the degree of fragmentation in the network and creates a unified network. As a result, anyone can access the Internet in the UpLink network;"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"All local network level connections, encryption, and protocol management, internet sharing features are autonomous, which do not require any user intervention\u2014making it easier to use and adopt the technology."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Carlos Lei Santos, CEO"}),"\n",(0,s.jsx)(n.li,{children:"Andr\xe9 Francisco, CTO"}),"\n",(0,s.jsx)(n.li,{children:"Damaris Valero, Global Business Development"}),"\n",(0,s.jsx)(n.li,{children:"Aldrin D'Souza, Product Manager"}),"\n",(0,s.jsx)(n.li,{children:"Karolina Stawinska, Head of Partnerships"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Name:"})," Carlos Lei Santos"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Contact Email:"})," ",(0,s.jsx)(n.a,{href:"mailto:cl@hypelabs.io",children:"cl@hypelabs.io"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Website:"})," ",(0,s.jsx)(n.a,{href:"https://hypelabs.io",children:"https://hypelabs.io"})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Registered Address:"})," 3524 Silveside Road Suite 35B Wilmington, Delaware 19810-4929"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Registered Legal Entity:"})," HypeLabs Inc."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Carlos Santos, HypeLabs CEO: Carlos is a developer, entrepreneur and technology enthusiast by heart. He studied Computer Science at Faculty of Sciences of University of Porto (FCUP) between 2011 and 2014. Before joining HypeLabs, he had 7 years of experience working as an IT manager providing assistance and working for companies such as IBM, BPI Bank, Banco Espirito Santo, Santander, CTT, Zon Telecommunications and Glintt. Nowadays, he is fully dedicated to his work as CEO, focused on management, networking, funding and working among the team improving the product, website and the brand."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Andr\xe9 Francisco, HypeLabs CTO: Since college, Andr\xe9 dedicated himself to tech-related startups with great commitment. His alma mater is the University of Porto, where he studied Computer Science. He was the founder and first president of NuCC (Nucleus for Computer Science, an association for CS enthusiasts) for the University of Porto. Talks and workshops he gave include topics such as memory management, AI, general programming concepts and best practices, design patterns, and others. In the early days he participated in several programming contests with good results, including national finals. Andr\xe9 was also team manager and lead organizer for the VideoJogos 2011 conference, in Porto. Formerly, he was a senior developer and researcher with nearly 20 years of experience in a wide variety of programming languages, platforms, and fields of study, including networking, AI, ML, natural and computer language processing, 3D graphics, web and app full stack development, and more. There, he was a researcher for CRACS, INESCTEC, PIC (Porto Interactive Center) under the LIFEisGAME and VERE projects, Yappy, and IJUP. He was also lead developer and maintainer of the OpenJelly project, dedicated to 3D graphics rendering, animations, and collision detection."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Damaris Valero, Global Business Development: Damaris is a former entrepreneur with over 20 years of experience in business development. She founded a 15 year old independent production company headquartered in Miami and with offices abroad. Her fields of interest and expertise are business development and marketing strategy, with an emphasis on building and expanding companies globally. She is the author of the book \u201cBranded Entertainment: Dealmaking Strategies & Techniques for Industry Professionals\u201d. As a blockchain enthusiast and collaborator, she\u2019s avid for the success of this fast growing global technology. Damaris is a builder of strategic partnerships with global and local partners, from government to telcos and companies that are looking to make a positive impact on connecting the world. Damaris is a content creator, director, writer and producer. She\u2019s a creative leader on commissioned productions and development deals for new content ideas in multiple markets worldwide (Latin America and Europe)."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Aldrin D\u2019Souza, Product Manager: Aldrin is passionate about building impactful businesses for the Next Billion User markets. He has a background in Telecommunications Engineering. Based in Canada, his expertise in understanding the potential of mesh networks and its product-market fit started as a former product manager and business analyst at RightMesh, where he conducted a successful ICO. Through his market research, he has implemented unique business models that harness the opportunities native to mesh networking."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Karolina Stawinska, Head of Partnerships: Karolina has eight years of HR experience sourcing innovative startups and recruiting high performance leadership teams in 52 countries. Across her career, she worked with various multinationals, the European Parliament, United Nations agencies, international NGOs and leading accelerator programs including Founders Factory, China Start and the Kairos K50. Among her HR experiences she was responsible for recruiting and supporting a community of over 1,200 successful millennial entrepreneurs at the Kairos Society. Karolina enjoys bringing multiple stakeholders together at hackathons, co-creating solutions that have the potential to push the world forward. She has organised and judged various startup competitions. Karolina is a self-starter with a passion for people and discovering young talent. She possesses strong interpersonal, teamwork and cross-cultural communication skills through direct sales and leadership positions."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Carlos Santos (",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/carlosleisantos/",children:"https://www.linkedin.com/in/carlosleisantos/"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Andr\xe9 Francisco (",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/andr%C3%A9-francisco-6662b696/",children:"https://www.linkedin.com/in/andr%C3%A9-francisco-6662b696/"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Damaris Valero (",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/damaris-valero-23711619/",children:"https://www.linkedin.com/in/damaris-valero-23711619/"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Aldrin D'souza (",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/aldrin-dsouza/",children:"https://www.linkedin.com/in/aldrin-dsouza/"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{style:{textAlign:"center"},children:"Module"}),(0,s.jsx)(n.th,{style:{textAlign:"center"},children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"BLE Drivers"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Port needed"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Communication Protocol"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Design and implementation needed"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Relay Server"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Implementation needed"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Android App"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Templates exist"})]})]})]}),"\n",(0,s.jsxs)(n.p,{children:["Some of the templates for the Android App can be found on HypeLabs' ",(0,s.jsx)(n.a,{href:"https://github.com/Hype-Labs",children:"GitHub page"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"The Communication Protocol is not yet designed, since one of the key requirements of it is that it matches closely with the Substrate API. This is an exercise that will be performed given the grant, creating as output the design and implementation for a peer-to-peer protocol that relates one-to-one with the Substrate API. For this initial implementation, only a subset of Substrate\u2019s functions should be implemented, however."}),"\n",(0,s.jsx)(n.p,{children:"The Bluetooth Low Energy (BLE) Drivers already exist and are used by HypeLabs extensively in production environments. These drivers are a component of the Hype SDK (HypeLabs\u2019 main product) and need to be ported as an isolated binary dependency, since the Hype SDK will not be used for this project."}),"\n",(0,s.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{style:{textAlign:"center"},children:"Deliverable"}),(0,s.jsx)(n.th,{style:{textAlign:"center"},children:"Description"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"BLE Drivers"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"An implementation of a peer-to-peer communication framework using Bluetooth Low Energy."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Communication Protocol"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"A binary peer-to-peer network protocol that mimics Substrate\u2019s API and I/O arguments."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Relay Server"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"A server that mediates communications between the app and the Substrate network."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Android App"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"An Android app that implements the described functionality."})]})]})]}),"\n",(0,s.jsx)(n.p,{children:"Once the grant is obtained, the deliverables are to be met at the following times:"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{style:{textAlign:"center"},children:"Week"}),(0,s.jsx)(n.th,{style:{textAlign:"center"},children:"Deliverables"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"1st"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"None"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"2nd"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"BLE Drivers (Implementation)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"3rd"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"None"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"4th"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Communication Protocol (Architecture and Design), Android App (BLE Binaries)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"5th"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"None"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"6th"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Relay Server (Functions)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"7th"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"None"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"8th"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"Android App (Binary)"})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsx)(n.p,{children:"This submission proposes the implementation of a binary peer-to-peer communication protocol that mimics Substrate\u2019s API. This enables devices to communicate with Substrate even without Internet access, by relying on proxies."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Estimated Duration:"})," 1,984 Person Hours"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Full-Time Equivalent (FTE):"})," 4"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Total Costs:"})," $20,202 USD"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-1--ble-drivers",children:"Milestone 1 \u2014 BLE Drivers"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated Duration:"})," 148 Person Hours, 2 weeks"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," $1,508 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"MIT"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"The code will be documented inline with a format that enables for quick docs generation, such as Doxygen. The project also includes a README file with general guidelines, onboarding information, and licensing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0c."}),(0,s.jsx)(n.td,{children:"Testing Guide"}),(0,s.jsx)(n.td,{children:"The project will have a minimum test coverage of 50%. The testing process should be described in the README file."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0d."}),(0,s.jsx)(n.td,{children:"Article/Tutorial"}),(0,s.jsx)(n.td,{children:"The onboarding processes will be described in the README file."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(n.td,{children:"Implementation"}),(0,s.jsx)(n.td,{children:"This deliverable consists of existing Android BLE drivers that will be ported to an isolated library dependency. The delivery will be in both source and binary form, and distributed on GitHub and HypeLabs\u2019 website."})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-2--communication-protocol",children:"Milestone 2 \u2014 Communication Protocol"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated Duration:"})," 962 Person Hours, 2 months"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 2"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," $9,799 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"MIT"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"The code will be documented inline with a format that enables for quick docs generation, such as Doxygen. The project also includes a README file with general guidelines, onboarding information, and licensing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0c."}),(0,s.jsx)(n.td,{children:"Testing Guide"}),(0,s.jsx)(n.td,{children:"The project will have a minimum test coverage of 50%. The testing process should be described in the README file."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0d."}),(0,s.jsx)(n.td,{children:"Article/Tutorial"}),(0,s.jsx)(n.td,{children:"The onboarding processes will be described in the README file."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(n.td,{children:"Architecture and Design"}),(0,s.jsx)(n.td,{children:"The protocol will be designed before being implemented, implying the design of binary packet formats, a security evaluation, and performance profiling. This delivery will be in the form of a document, including the design, the security assessment results, and the profiling results."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(n.td,{children:"Implementation"}),(0,s.jsx)(n.td,{children:"The implementation will be open source and available as a binary library dependency. The source code will be available on GitHub, and the distribution will be made available on HypeLabs\u2019 website."})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-3--relay-server",children:"Milestone 3 \u2014 Relay Server"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated Duration:"})," 659 Person Hours, 1.5 Months"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 2"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," $6,709 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"MIT"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"The code will be documented inline with a format that enables for quick docs generation, such as Doxygen. The project also includes a README file with general guidelines, onboarding information, and licensing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0c."}),(0,s.jsx)(n.td,{children:"Testing Guide"}),(0,s.jsx)(n.td,{children:"The project will have a minimum test coverage of 50%. The testing process should be described in the README file."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0d."}),(0,s.jsx)(n.td,{children:"Article/Tutorial"}),(0,s.jsx)(n.td,{children:"The onboarding processes will be described in the README file."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(n.td,{children:"Functions"}),(0,s.jsx)(n.td,{children:"The implementation will consist of a series of AWS Lambda functions that constitute the integration API. What functions those are will depend on the design of the Communication Protocol, since there\u2019s a direct correlation between the API and the protocol. The functions will be available in source code form, on GitHub."})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"milestone-4--android-app",children:"Milestone 4 \u2014 Android App"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Estimated Duration:"})," 215 Person Hours, 1 Month"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"FTE:"})," 1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Costs:"})," $2,186 USD"]}),"\n"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Specification"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0a."}),(0,s.jsx)(n.td,{children:"License"}),(0,s.jsx)(n.td,{children:"MIT"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0b."}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"The code will be documented inline with a format that enables for quick docs generation, such as Doxygen. The project also includes a README file with general guidelines, onboarding information, and licensing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0c."}),(0,s.jsx)(n.td,{children:"Testing Guide"}),(0,s.jsx)(n.td,{children:"The project will have a minimum test coverage of 50%. The testing process should be described in the README file."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"0d."}),(0,s.jsx)(n.td,{children:"Article/Tutorial"}),(0,s.jsx)(n.td,{children:"The app includes an onboarding tutorial available to users, which is shown automatically on the first run."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"1."}),(0,s.jsx)(n.td,{children:"BLE Binary"}),(0,s.jsx)(n.td,{children:"The first delivery for the app will be a binary with the BLE Drivers integrated, but without any form of relay. This will work for testing one-on-one connectivity using BLE, as well as initial UI and UX testing."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"right"},children:"2."}),(0,s.jsx)(n.td,{children:"Binary"}),(0,s.jsx)(n.td,{children:"The app will be available in binary form in the Android Play Store, available to everyone in the public. It can also be built from the public repository, since the app can be used as a template for other developers that wish to integrate the technology."})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Full integration of the Hype SDK, with n-hop mesh networking capabilities;"}),"\n",(0,s.jsx)(n.li,{children:"Support for other types of devices, such as iOS and IoT;"}),"\n",(0,s.jsx)(n.li,{children:"Support for other types of transport channels such as LoRa;"}),"\n",(0,s.jsx)(n.li,{children:"Integration with different (configurable) authentication systems;"}),"\n",(0,s.jsx)(n.li,{children:"Implementation of analytics and monitoring tools;"}),"\n",(0,s.jsx)(n.li,{children:"Introduce wallet management module in the HypeSDK;"}),"\n",(0,s.jsx)(n.li,{children:"Implement Private and Public network configuration setting for Dapp developers;"}),"\n",(0,s.jsx)(n.li,{children:"Research and design Proof of Relay incentivization mechanism to incentivize relayers;"}),"\n",(0,s.jsx)(n.li,{children:"Implement BME model, where Data Users would burn their tokens to access underlying services;"}),"\n",(0,s.jsx)(n.li,{children:"Elimination of the Relay Server middleman and full integration into Substrate;"}),"\n",(0,s.jsx)(n.li,{children:"Build and promote Early Adopter Programs for Dapp developers;"}),"\n",(0,s.jsx)(n.li,{children:"Launch and promote Testnet competition to test token economics;"}),"\n",(0,s.jsx)(n.li,{children:"Partnership with OEMs and app partners."}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"How did you hear about the Grants Program?"})," Web3 Foundation Website and personal recommendation."]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>a});var i=t(96540);const s={},r=i.createContext(s);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/133717db.56e73e18.js b/assets/js/133717db.56e73e18.js new file mode 100644 index 00000000000..3ef37dc33f1 --- /dev/null +++ b/assets/js/133717db.56e73e18.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[28699],{15560:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"applications/verida_network","title":"Verida","description":"- Team Name: Verida PTE LTD","source":"@site/applications/verida_network.md","sourceDirName":"applications","slug":"/applications/verida_network","permalink":"/applications/verida_network","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/verida_network.md","tags":[],"version":"current","frontMatter":{}}');var s=i(74848),l=i(28453);const a={},r="Verida",o={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Developers",id:"developers",level:4},{value:"End users",id:"end-users",level:4},{value:"Increase the use cases and industries accessible by Polkadot applications",id:"increase-the-use-cases-and-industries-accessible-by-polkadot-applications",level:4},{value:"Project Details",id:"project-details",level:3},{value:"Verida Vault",id:"verida-vault",level:4},{value:"PolkadotJs + Verida SDK integration",id:"polkadotjs--verida-sdk-integration",level:4},{value:"Personal Data, Credentials & Messaging",id:"personal-data-credentials--messaging",level:4},{value:"Multiple Parachains",id:"multiple-parachains",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles (if available)",id:"team-linkedin-profiles-if-available",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Verida Self-Funded Contribution",id:"verida-self-funded-contribution",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 - Single Sign-On for Apps in Polkadot Ecosystem",id:"milestone-1---single-sign-on-for-apps-in-polkadot-ecosystem",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Off-chain Data Bridge",id:"off-chain-data-bridge",level:3},{value:"Expanding the Data Ecosystem",id:"expanding-the-data-ecosystem",level:3},{value:"Supporting additional Polkadot Parachains",id:"supporting-additional-polkadot-parachains",level:3},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,l.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"verida",children:"Verida"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Team Name:"})," Verida PTE LTD"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Payment Address:"})," 0x1596525C44f68b45CDd53db49b03A390e2687331 (USDC)"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Level:"})," 2"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Status:"})," ",(0,s.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/pull/887#issuecomment-1719349723",children:"Terminated"})]}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(t.p,{children:"Verida will bring single-sign on, decentralized identities, messaging and private data storage to the Polkadot ecosystem."}),"\n",(0,s.jsx)(t.p,{children:"This is Verida\u2019s first proposal to the W3F Grants program."}),"\n",(0,s.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(t.p,{children:"The Polkadot ecosystem enables a variety of application specific blockchains to provide decentralized computation capabilities. While this is enormously beneficial for building the next generation of Web3 applications, there are additional technical capabilities required to build applications capable of replacing existing Web2 incumbents."}),"\n",(0,s.jsx)(t.p,{children:"The Verida network provides this missing Web3 infrastructure for developers and end users."}),"\n",(0,s.jsx)(t.p,{children:"Please refer to the Development Status section for links to developer documentation, demos, interactive tutorials and reference implementations which showcase the technology and core components."}),"\n",(0,s.jsx)(t.h4,{id:"developers",children:"Developers"}),"\n",(0,s.jsx)(t.p,{children:"Here is an overview of the additional decentralized capabilities that will be enabled for application developers in the Polkadot ecosystem."}),"\n",(0,s.jsx)("img",{width:"495",alt:"image",src:"https://user-images.githubusercontent.com/92969583/160052399-1de25ad1-9ffe-4a4b-88d7-7c9723d731a7.png"}),"\n",(0,s.jsx)(t.p,{children:"Verida provides a developer SDK to access the Verida decentralized personal data network. The Typescript SDK works across web, server and mobile platforms. Learn more via the Verida Developers Portal."}),"\n",(0,s.jsx)(t.p,{children:"The SDK enables developers to easily access:"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Identities - Decentralized identities on the Verida network that enable service discovery, messaging, encryption and signature schemes"}),"\n",(0,s.jsx)(t.li,{children:"Authentication - Decentralized QR code based single sign-on for any application"}),"\n",(0,s.jsx)(t.li,{children:"Messaging - Decentralized peer to peer messaging protocol for requesting transactions, sharing private data and much more"}),"\n",(0,s.jsx)(t.li,{children:"Private storage - Decentralized personal data storage for sensitive information for end users"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"This project will provide a turnkey SDK for developers to use the Verida SDKs and the PolkadotJS SDK to build powerful, feature rich applications on Polkadot."}),"\n",(0,s.jsx)(t.h4,{id:"end-users",children:"End users"}),"\n",(0,s.jsx)(t.p,{children:"Verida provides a mobile wallet application (Verida Vault) that combines a traditional crypto wallet with the additional decentralized capabilities of the Verida network (identity, single sign-on, messaging, private data etc.)."}),"\n",(0,s.jsx)(t.p,{children:"This provides an entry point for end users to easily access these new technologies with Polkadot applications in a simple, easy to use way."}),"\n",(0,s.jsx)(t.p,{children:"Example Single Sign-On requests:"}),"\n",(0,s.jsx)("img",{width:"580",alt:"image",src:"https://user-images.githubusercontent.com/92969583/160052493-41df2558-eb5f-4dcc-bfb5-869784807c68.png"}),"\n",(0,s.jsx)(t.p,{children:"Example crypto wallet screens for Polkadot projects:"}),"\n",(0,s.jsx)("img",{width:"566",alt:"image",src:"https://user-images.githubusercontent.com/92969583/160052512-9ed92a8c-1626-45a1-857d-7c638ca753ba.png"}),"\n",(0,s.jsx)(t.p,{children:"This project will initially add support for the DOT token in the Verida Vault, with other application specific chains and tokens to be supported as the project progresses."}),"\n",(0,s.jsx)(t.h4,{id:"increase-the-use-cases-and-industries-accessible-by-polkadot-applications",children:"Increase the use cases and industries accessible by Polkadot applications"}),"\n",(0,s.jsx)(t.p,{children:"Connecting Verida\u2019s decentralized Web3 infrastructure with Polkadot\u2019s application specific chains will unlock a range of new use cases that aren\u2019t possible with blockchain technology alone."}),"\n",(0,s.jsx)(t.p,{children:"One important use case is KYC credentials. The Verida network allows a user to complete a KYC process with third party credential issuers, store that credential securely and then present to decentralized applications where required."}),"\n",(0,s.jsx)(t.p,{children:"These credentials can be used to enable DeFi applications on Polkadot to meet new regulatory requirements requiring all users to pass KYC and AML checks."}),"\n",(0,s.jsx)(t.p,{children:"The credentials can also be used to provide a unique identifier of an individual across multiple chains and multiple addresses. This unlocks the ability to airdrop tokens to an individual person rather than an individual address, that can be exploited. It also allows free / low transaction fees to be allocated to individual users."}),"\n",(0,s.jsxs)(t.p,{children:["Visit the ",(0,s.jsx)(t.a,{href:"https://www.verida.io/solutions",children:"solutions page on the Verida website"})," for a more detailed breakdown of use cases and new industries that will be unlocked for the Polkadot ecosystem."]}),"\n",(0,s.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(t.p,{children:"This project will connect the Verida decentralized infrastructure to any application in the Polkadot ecosystem. This will enhance existing applications while opening up many new use cases and industries to build Web3 applications on Polkadot."}),"\n",(0,s.jsx)(t.p,{children:"There are several key pieces of development work to support this integration across the Verida Vault and Verida developer SDKs."}),"\n",(0,s.jsx)(t.h4,{id:"verida-vault",children:"Verida Vault"}),"\n",(0,s.jsx)(t.p,{children:"The Verida Vault will be updated to natively support the Polkadot relay chain and DOT token. This will make it easy for end users to access both Polkadot and Verida network capabilities from one application."}),"\n",(0,s.jsx)(t.p,{children:"As part of this integration, and as a valuable early use case, this project will enable any network user or application to easily request DOT from another user on the network via the Verida messaging service."}),"\n",(0,s.jsx)(t.h4,{id:"polkadotjs--verida-sdk-integration",children:"PolkadotJs + Verida SDK integration"}),"\n",(0,s.jsx)(t.p,{children:"The PolkadotJs SDK will be integrated with the Verida SDK to provide a powerful suite of tools for application developers to access a full range of Web3 capabilities."}),"\n",(0,s.jsx)(t.p,{children:"This will enable Polkadot developers to leverage Verida decentralized identities, single sign-on, personal off-chain encrypted databases and messaging alongside the capabilities of their own application specific chains."}),"\n",(0,s.jsx)(t.p,{children:"More specifically, this integration will allow an end user to sign into a Polkadot application using the Verida Single Sign-On feature. Once signed in, the user will have unlocked Verida\u2019s network features (identity, private storage, messaging etc), while also unlocking the ability for the application to request a user to sign transactions for a specific parachain. This will provide a powerful set of technical capabilities via a very simple QR code sign in process."}),"\n",(0,s.jsx)(t.p,{children:"Initially the ability to sign transactions will be enabled via the Verida messaging service. WalletConnect 2.0 is currently adding support for non-EVM chains such as Polkadot. Once WalletConnect 2.0 is adopted, an option will be available for developers to auto-enable a WalletConnect 2.0 connection as part of the sign in process."}),"\n",(0,s.jsx)(t.h4,{id:"personal-data-credentials--messaging",children:"Personal Data, Credentials & Messaging"}),"\n",(0,s.jsx)(t.p,{children:"Once complete, the PolkdotJs and Verida SDK integration will enable Polkadot applications to request verifiable credentials from end users (e.g. KYC), store encrypted personal data on behalf of users and send them message notifications (e.g. margin call on a DEX)."}),"\n",(0,s.jsx)(t.p,{children:"Documentation, tutorials and other educational materials will be developed specifically for Polkadot developers looking to integrate these capabilities into their applications."}),"\n",(0,s.jsx)(t.h4,{id:"multiple-parachains",children:"Multiple Parachains"}),"\n",(0,s.jsx)(t.p,{children:"The Polkadot ecosystem consists of many parachains. While this offers great flexibility, it also introduces challenges to easily add support for those parachains in different wallet applications."}),"\n",(0,s.jsx)(t.p,{children:"Leveraging the Verida network messaging service, a new type of message (\u201cAdd Polkadot Parachain\u201d) will be created. This will allow any Polkadot application to send a secure message to a user on the Verida network inviting them to add their parachain into the wallet."}),"\n",(0,s.jsx)(t.p,{children:"A user-friendly interface will be presented to the user, the request will be signed to prevent phishing attacks and the message will include all the essential system information (i.e. endpoint(s)) to interact with that parachain."}),"\n",(0,s.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsx)(t.p,{children:"Numerous wallets are available in the Polkadot ecosystem which provide self-custody for end users to manage their cryptocurrency transactions, but none exist to facilitate interactions with personal data, identities and messaging."}),"\n",(0,s.jsx)(t.p,{children:"Verida provides a mobile application called the Verida Vault which acts as both a \u2018Data Wallet\u2019 and a \u2018Crypto Wallet\u2019 with private key management and a user-friendly interface for interacting with the Verida network and supported blockchains. Using the Vault, users can browse their decrypted data and consensually share their data with other applications via their decentralized identity. This unlocks many exciting new use cases for decentralized applications."}),"\n",(0,s.jsx)(t.p,{children:"There is a lack of single sign-on infrastructure within the Polkadot ecosystem. Verida provides missing pieces of infrastructure for developers to build in Web3 including single sign-on, portable decentralized identities and credentials for Polkadot applications. Verida will enable data interoperability across parachains in the Polkadot ecosystem for private data sharing, single-sign on and identity management."}),"\n",(0,s.jsx)(t.p,{children:"Traditional Web3 software applications regularly message users (via email or mobile push notifications) to provide an enhanced user experience and to retain users. This is a critically missing piece of infrastructure in the evolving Web3 architecture. The Verida network provides this messaging infrastructure and is multi-chain, making it ideally suited to provide a backbone of messaging across the whole ecosystem of Polkadot applications. Examples include; margin call warnings from DEX\u2019s, notification and reminders about DAO votes, in-game messages and much more."}),"\n",(0,s.jsx)(t.p,{children:"Integrating Polkadot and the DOT token into Verida Vault will allow users to connect their Polkadot address to Verida\u2019s decentralized identity framework for enhanced user identity profiles. It will allow developers in the Verida ecosystem to choose Polkadot and its parachains as their choice of blockchain for building and deploying their Web3 applications."}),"\n",(0,s.jsxs)(t.p,{children:["There is a growing need for regulatory compliant decentralized applications from initiatives such as the ",(0,s.jsx)(t.a,{href:"https://www.fatf-gafi.org/",children:"Financial Action Task Force"})," (FATF). Integrating with the Verida network opens up future possibilities for a standard, re-usable KYC credential to operate across the whole Polkadot ecosystem that is both FATF compliant and meets the industry expectations around privacy and security. Verida is actively working with compliance experts and industry leaders to bring these solutions to the network."]}),"\n",(0,s.jsx)(t.p,{children:"The Polkadot ecosystem is a collection of interoperable blockchains. The Verida network is designed to be multi-chain, which is well suited to Polkadot\u2019s multi-chain architecture. This ensures a framework is in place to easily add support for new parachains and provides a user experience natively designed for multiple chains."}),"\n",(0,s.jsx)(t.p,{children:"Once complete, this integration opens up the possibilities for future capabilities on the Verida network to be brought to the Polkadot ecosystem. These include bridging off-chain data to on-chain smart contracts, a trust framework and data marketplaces."}),"\n",(0,s.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Chris Were (CEO, Co-founder, Solution Architect)"}),"\n",(0,s.jsx)(t.li,{children:"Nick Lothian (Head of Product)"}),"\n",(0,s.jsx)(t.li,{children:"Yolanda Sam (Grant / Delivery Manager)"}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Contact Name:"})," Yolanda Sam / Chris Were"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Contact Email:"})," ",(0,s.jsx)(t.a,{href:"mailto:hello@verida.io",children:"hello@verida.io"})]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Website:"})," ",(0,s.jsx)(t.a,{href:"https://www.verida.io/",children:"https://www.verida.io/"})]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Registered Address:"})," 160 Robinson Road, 14-04 Singapore Business Federation Centre, SGP 068914"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Registered Legal Entity:"})," Verida PTE LTD"]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Chris Were"})," (CEO and co-founder, ",(0,s.jsx)(t.a,{href:"https://github.com/tahpot",children:"@tahpot"}),")\nChris is an Australian based technology entrepreneur who has spent more than 20 years devoted to developing innovative software solutions. He\u2019s led the development of Verida, a decentralized, self-sovereign data network. Chris previously co-founded Community Data Solutions, providing secure CRM solutions for not-for-profit organizations and government, growing the company to 150 enterprise customers across Australia."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Nick Lothian"})," (Head of Product, ",(0,s.jsx)(t.a,{href:"https://github.com/nick-verida",children:"@nick-verida"}),")\nNick is an experienced software professional with over 20 years of experience in a wide variety of roles. Prior to joining Verida he started and successfully exited an Artificial Intelligence company. He has significant experience in standards (eg W3C ActivityStream, JSR168) and open source (Apache Foundation)."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Verida Engineering Team"}),"\nThe Verida engineering team consists of 6+ software engineers with expertise in Web3 development, Solidity smart contracts, Mobile Development and DevOps."]}),"\n",(0,s.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(t.p,{children:["A collection of Verida repos can be found here ",(0,s.jsx)(t.a,{href:"https://github.com/verida",children:"https://github.com/verida"})]}),"\n",(0,s.jsx)(t.p,{children:"Repos relevant to this grant proposal include:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/verida/verida-js",children:"https://github.com/verida/verida-js"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/verida/storage-node",children:"https://github.com/verida/storage-node"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/verida/vault-auth-server",children:"https://github.com/verida/vault-auth-server"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/verida/wallet-utils",children:"https://github.com/verida/wallet-utils"})}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"team-linkedin-profiles-if-available",children:"Team LinkedIn Profiles (if available)"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://www.linkedin.com/company/verida-technology",children:"https://www.linkedin.com/company/verida-technology"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://www.linkedin.com/in/nicklothian/",children:"https://www.linkedin.com/in/nicklothian/"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://www.linkedin.com/in/chriswere/",children:"https://www.linkedin.com/in/chriswere/"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://www.linkedin.com/in/yolandasam/",children:"https://www.linkedin.com/in/yolandasam/"})}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,s.jsx)(t.p,{children:"We have made significant progress on the Verida roadmap, including releasing the Whitepaper, Alpha protocol, reference implementations, demos and developer documentation."}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Verida Whitepaper: ",(0,s.jsx)(t.a,{href:"https://www.verida.io/whitepaper",children:"https://www.verida.io/whitepaper"})]}),"\n",(0,s.jsxs)(t.li,{children:["Developer Documentation ",(0,s.jsx)(t.a,{href:"https://developers.verida.io/",children:"https://developers.verida.io/"})]}),"\n",(0,s.jsxs)(t.li,{children:["Interactive Tutorials: ",(0,s.jsx)(t.a,{href:"https://developers.verida.io/docs/tutorial/introduction",children:"https://developers.verida.io/docs/tutorial/introduction"})]}),"\n",(0,s.jsxs)(t.li,{children:["Demos: ",(0,s.jsx)(t.a,{href:"https://developers.verida.io/docs/demos",children:"https://developers.verida.io/docs/demos"})]}),"\n",(0,s.jsxs)(t.li,{children:["Summary on Alpha protocol release: ",(0,s.jsx)(t.a,{href:"https://news.verida.io/alpha-protocol-release-start-building-privacy-preserving-web3-dapps-with-verida-e5cedfc15878",children:"https://news.verida.io/alpha-protocol-release-start-building-privacy-preserving-web3-dapps-with-verida-e5cedfc15878"})]}),"\n",(0,s.jsx)(t.li,{children:"Reference Implementations"}),"\n",(0,s.jsxs)(t.li,{children:["Vault Showcase: ",(0,s.jsx)(t.a,{href:"https://github.com/verida/vault-showcase",children:"https://github.com/verida/vault-showcase"})]}),"\n",(0,s.jsxs)(t.li,{children:["Account Explorer: ",(0,s.jsx)(t.a,{href:"https://github.com/verida/account-explorer",children:"https://github.com/verida/account-explorer"})]}),"\n",(0,s.jsxs)(t.li,{children:["Markdown Editor: ",(0,s.jsx)(t.a,{href:"https://github.com/verida/markdown-notes-demo",children:"https://github.com/verida/markdown-notes-demo"})]}),"\n",(0,s.jsxs)(t.li,{children:["Credentials Management Platform: ",(0,s.jsx)(t.a,{href:"https://github.com/verida/Credentials-Management-Platform",children:"https://github.com/verida/Credentials-Management-Platform"})]}),"\n",(0,s.jsxs)(t.li,{children:["Getting Started with Verida Vault: ",(0,s.jsx)(t.a,{href:"https://docsend.com/view/nft2dbdpquf8z7bh",children:"https://docsend.com/view/nft2dbdpquf8z7bh"})]}),"\n",(0,s.jsxs)(t.li,{children:["Web3 Builders Deck: ",(0,s.jsx)(t.a,{href:"https://docsend.com/view/n29fx369jiq62ayu",children:"https://docsend.com/view/n29fx369jiq62ayu"})]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"The focus of this grant proposal is to build and enhance existing capabilities and make them developer-ready for builders in the Polkadot ecosystem."}),"\n",(0,s.jsx)(t.h3,{id:"verida-self-funded-contribution",children:"Verida Self-Funded Contribution"}),"\n",(0,s.jsx)(t.p,{children:"As part of this proposal, Verida will self-fund the software development to provide DOT support in the Verida Vault, and support for requesting a DOT payment via Verida decentralized messaging. This work will provide the necessary foundation to enable self-sovereign identity claims, verifiable credentials, encrypted personal data storage, single sign-on, and more for Polkadot as outlined in future milestones.\nVerida Self-Funded Contribution"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Number"}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Deliverable"}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Specification"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"DOT support in Verida Vault"}),(0,s.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1a."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Sign transactions"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Add PolkadotJS support into the Verida Vault to support signing transactions"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1b."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Submit transactions"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Add PolkadotJs support into the Verida Vault blockchain API to submit transactions on chain"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1c."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Transaction history"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support fetching and building up transaction history information for Polkadot addresses"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1d."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"On-chain events"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support listening to on-chain events relating to new transactions for Polkadot addresses"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1e."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Transaction fee"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support for fetching and displaying transaction fee information"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1f."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"DOT token support"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Add support for the DOT token on the Polkadot parachain"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1g."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"DOT token price"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support fetching price information for the DOT token"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1h."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"CAIP compatibility for Polkadot"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support CAIP compatible token specifications for Polkadot"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1i."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Unit tests"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Develop unit tests for all new capabilities"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support requesting a DOT payment via Verida message"}),(0,s.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2a."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Payment Request schema"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Define a new inbox message schema for \u201cPayment Request\u201d message types that includes the recipient address and a description of the request purpose"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2b."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Payment Request screens"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Design new Verida Vault screens for handling \u201cPayment Request\u201d inbox messages"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2c."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Facilitating DOT payment"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Implement an inbox handler that facilitates making a payment in DOT tokens to the requested address"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2d."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Edge case handling"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Handle edge cases such as insufficient DOT tokens"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2e."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Purchase DOT"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Redirect the user to purchase more DOT tokens if required"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2f."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Unit tests"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Develop unit tests for the inbox handler"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2g."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Documentation"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Document how Polkadot developers can initiate a Payment Request"})]})]})]}),"\n",(0,s.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Total Estimated Duration:"})," 2 months"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Full-Time Equivalent (FTE):"})," 1.7 FTE"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Total Costs:"})," 50,000 USD"]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"See below for a summary of the software licencing for deliverables on the roadmap."}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Name"}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Description"}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Licence"}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"GitHub Link"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"verida-js"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"The core Verida protocol library"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"ISC (MIT equivalent)"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/verida/verida-js",children:"https://github.com/verida/verida-js"})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Verida Account Explorer"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"A web front end showing details of each DID"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"ISC (MIT equivalent)"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/verida/account-explorer/",children:"https://github.com/verida/account-explorer/"})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Wallet-Utils"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Integration library between the Verida Vault and blockchains"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"ISC (MIT equivalent)"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/verida/wallet-utils",children:"https://github.com/verida/wallet-utils"})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Auth Server"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Decentralized server that faciliates single sign-on connections"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"ISC (MIT equivalent)"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/verida/vault-auth-server",children:"https://github.com/verida/vault-auth-server"})})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"milestone-1---single-sign-on-for-apps-in-polkadot-ecosystem",children:"Milestone 1 - Single Sign-On for Apps in Polkadot Ecosystem"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Estimated Duration:"})," 2 months [Expected delivery June 2023]"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"FTE:"})," 1.7 FTE"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Costs:"})," 50,000 USD"]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"We are seeking a level 2 grant for the following deliverables:"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Single Sign-On (SSO) for DOT applications"}),"\n",(0,s.jsx)(t.li,{children:"Implement generic transaction support for Polkadot"}),"\n",(0,s.jsx)(t.li,{children:"Support requesting a Verifiable Credential from a Polkadot dApp"}),"\n",(0,s.jsx)(t.li,{children:"Support storing encrypted personal data within a Polkadot dApp"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"Single sign-on will provide users with a seamless experience for signing in across Polkadot dApps. Powered by Verida\u2019s decentralized identity framework, these capabilities will allow users to maintain self-sovereign identity, without sacrificing on the user experience."}),"\n",(0,s.jsx)(t.p,{children:"We will provide the capabilities for developers to request verifiable credentials and build Polkadot dApps with encrypted data storage for private and sensitive data. This enables Polkadot developers to build user-oriented, privacy-preserving, feature rich dApps across industrial verticals including DeFi and metaverse."}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Number"}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Deliverable"}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Specification"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0a."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"License"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"ISC (MIT equivalent)"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0b."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Documentation"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"We will provide both inline documentation of the code and update the necessary tutorials that explain how a user can use the application."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0c."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Testing"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Core functions will be covered by unit tests as far as reasonably applicable to ensure functionality and robustness. In the documentation, we will describe how to run these tests."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0d."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Docker"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"N/A - We are not providing any infrastructure. All functionality can be tested via unit tests in the repo's."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0e."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Article"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"We will publish an article that explains what was done as part of the grant."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Single Sign-On (SSO) for DOT applications"}),(0,s.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1a."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Establish SSO request"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support establishing a SSO request for a Polkadot dApp"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1b."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Link Polkadot to Verida DID"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support linking a Polkadot account to a Verida DID account to unlock messaging and payment use cases"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1c."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Show available Polkadot addresses"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support specifying a list of available Polkadot addresses for the user to select from"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1d."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Specify Polkadot address"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support a user specifying their Polkadot address during user sign"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1e."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Documentation"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Document how Polkadot developers can establish a SSO request for a Polkadot dApp"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Implement generic transaction support for Polkadot"}),(0,s.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2a."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support transaction signing"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support an application requesting a transaction to be signed by the end user"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2b."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support transaction submission"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support an application requesting a transaction to be signed and submitted by the end user"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2c."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support signing any message"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support an application requesting a message to be signed by the end user"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2d."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Unit tests"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Develop unit tests for the integration"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2d."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Documentation"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Document how Polkadot developers can initiate a WalletConnect connection during user sign in"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"3."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support requesting a Verifiable Credential from a Polkadot dApp"}),(0,s.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"3a."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Documentation"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Document how a Polkadot dApp can make a Verifiable Credential request once connected"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"4."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support storing encrypted personal data within a Polkadot dApp"}),(0,s.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"4a."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Documentation"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Document how a Polkadot dApp can create, update, view, query and delete encrypted private data for a user of their application"})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsx)(t.p,{children:"We will produce articles, tutorials and other content to promote the work completed in this grant proposal through our community channels."}),"\n",(0,s.jsx)(t.h3,{id:"off-chain-data-bridge",children:"Off-chain Data Bridge"}),"\n",(0,s.jsx)(t.p,{children:"Following the completion of this grant proposal, future capabilities on the Verida roadmap which could bring value to the Polkadot ecosystem include bridging off-chain personal data to on-chain decentralized applications."}),"\n",(0,s.jsx)(t.p,{children:"The Verida network stores personal data for end users. Every piece of data is signed by the originator of the data. For a patient record, a hospital visit may be signed by the doctor. For an insurance policy claim, a police incident may be signed by a police officer."}),"\n",(0,s.jsx)(t.p,{children:"Verida has developed a way to securely use this off-chain signed data as an input to smart contracts in a gas efficient manner. This capability unlocks a huge range of new use cases for smart contracts that can be leveraged by Polkadot applications."}),"\n",(0,s.jsx)(t.h3,{id:"expanding-the-data-ecosystem",children:"Expanding the Data Ecosystem"}),"\n",(0,s.jsx)(t.p,{children:"We are also developing an API Connector framework, trust framework and data schemas to enhance trust and enable growth in the Verida network. Once the Polkadot integration is complete, these capabilities can be unlocked for the broader Polkadot ecosystem."}),"\n",(0,s.jsx)(t.h3,{id:"supporting-additional-polkadot-parachains",children:"Supporting additional Polkadot Parachains"}),"\n",(0,s.jsx)(t.p,{children:"Building on the foundational work completed as part of this grant proposal, Verida will be able to build support for additional parachains in the Verida Vault based on Chain Agnostic Improvement Proposal (CAIP) standards. Further examples and tutorials will be developed to support and enable developers."}),"\n",(0,s.jsxs)(t.p,{children:["More details on our future plans can be found in the ",(0,s.jsx)(t.a,{href:"https://www.verida.io/whitepaper",children:"Verida Whitepaper"}),"."]}),"\n",(0,s.jsxs)(t.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"How did you hear about the Grants Program?"})}),"\n",(0,s.jsx)(t.p,{children:"Verida has had numerous conversations with Rohan Joseph and Surag Sheth from Parity Labs about Verida support for the Polkadot ecosystem."}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"Work already completed"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Verida\u2019s Alpha Protocol Release was made available in November 2021"}),"\n",(0,s.jsx)(t.li,{children:"The Verida Whitepaper was released in February 2022"}),"\n",(0,s.jsx)(t.li,{children:"Developer Documentation, including demos and interactive tutorials, continues to be updated to support developers building on Verida"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"Previous grants"})}),"\n",(0,s.jsx)(t.p,{children:"We have previously been successful in receiving grants from Open Web Collective and NEAR."})]})}function h(e={}){const{wrapper:t}={...(0,l.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},28453:(e,t,i)=>{i.d(t,{R:()=>a,x:()=>r});var n=i(96540);const s={},l=n.createContext(s);function a(e){const t=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),n.createElement(l.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/133717db.89cf03e6.js b/assets/js/133717db.89cf03e6.js deleted file mode 100644 index 32bef7ade9a..00000000000 --- a/assets/js/133717db.89cf03e6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[28699],{481:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"applications/verida_network","title":"Verida","description":"- Team Name: Verida PTE LTD","source":"@site/applications/verida_network.md","sourceDirName":"applications","slug":"/applications/verida_network","permalink":"/applications/verida_network","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/verida_network.md","tags":[],"version":"current","frontMatter":{}}');var s=i(74848),l=i(28453);const a={},r="Verida",o={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Developers",id:"developers",level:4},{value:"End users",id:"end-users",level:4},{value:"Increase the use cases and industries accessible by Polkadot applications",id:"increase-the-use-cases-and-industries-accessible-by-polkadot-applications",level:4},{value:"Project Details",id:"project-details",level:3},{value:"Verida Vault",id:"verida-vault",level:4},{value:"PolkadotJs + Verida SDK integration",id:"polkadotjs--verida-sdk-integration",level:4},{value:"Personal Data, Credentials & Messaging",id:"personal-data-credentials--messaging",level:4},{value:"Multiple Parachains",id:"multiple-parachains",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles (if available)",id:"team-linkedin-profiles-if-available",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Verida Self-Funded Contribution",id:"verida-self-funded-contribution",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 - Single Sign-On for Apps in Polkadot Ecosystem",id:"milestone-1---single-sign-on-for-apps-in-polkadot-ecosystem",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Off-chain Data Bridge",id:"off-chain-data-bridge",level:3},{value:"Expanding the Data Ecosystem",id:"expanding-the-data-ecosystem",level:3},{value:"Supporting additional Polkadot Parachains",id:"supporting-additional-polkadot-parachains",level:3},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,l.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"verida",children:"Verida"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Team Name:"})," Verida PTE LTD"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Payment Address:"})," 0x1596525C44f68b45CDd53db49b03A390e2687331 (USDC)"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Level:"})," 2"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Status:"})," ",(0,s.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/pull/887#issuecomment-1719349723",children:"Terminated"})]}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,s.jsx)(t.p,{children:"Verida will bring single-sign on, decentralized identities, messaging and private data storage to the Polkadot ecosystem."}),"\n",(0,s.jsx)(t.p,{children:"This is Verida\u2019s first proposal to the W3F Grants program."}),"\n",(0,s.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(t.p,{children:"The Polkadot ecosystem enables a variety of application specific blockchains to provide decentralized computation capabilities. While this is enormously beneficial for building the next generation of Web3 applications, there are additional technical capabilities required to build applications capable of replacing existing Web2 incumbents."}),"\n",(0,s.jsx)(t.p,{children:"The Verida network provides this missing Web3 infrastructure for developers and end users."}),"\n",(0,s.jsx)(t.p,{children:"Please refer to the Development Status section for links to developer documentation, demos, interactive tutorials and reference implementations which showcase the technology and core components."}),"\n",(0,s.jsx)(t.h4,{id:"developers",children:"Developers"}),"\n",(0,s.jsx)(t.p,{children:"Here is an overview of the additional decentralized capabilities that will be enabled for application developers in the Polkadot ecosystem."}),"\n",(0,s.jsx)("img",{width:"495",alt:"image",src:"https://user-images.githubusercontent.com/92969583/160052399-1de25ad1-9ffe-4a4b-88d7-7c9723d731a7.png"}),"\n",(0,s.jsx)(t.p,{children:"Verida provides a developer SDK to access the Verida decentralized personal data network. The Typescript SDK works across web, server and mobile platforms. Learn more via the Verida Developers Portal."}),"\n",(0,s.jsx)(t.p,{children:"The SDK enables developers to easily access:"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Identities - Decentralized identities on the Verida network that enable service discovery, messaging, encryption and signature schemes"}),"\n",(0,s.jsx)(t.li,{children:"Authentication - Decentralized QR code based single sign-on for any application"}),"\n",(0,s.jsx)(t.li,{children:"Messaging - Decentralized peer to peer messaging protocol for requesting transactions, sharing private data and much more"}),"\n",(0,s.jsx)(t.li,{children:"Private storage - Decentralized personal data storage for sensitive information for end users"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"This project will provide a turnkey SDK for developers to use the Verida SDKs and the PolkadotJS SDK to build powerful, feature rich applications on Polkadot."}),"\n",(0,s.jsx)(t.h4,{id:"end-users",children:"End users"}),"\n",(0,s.jsx)(t.p,{children:"Verida provides a mobile wallet application (Verida Vault) that combines a traditional crypto wallet with the additional decentralized capabilities of the Verida network (identity, single sign-on, messaging, private data etc.)."}),"\n",(0,s.jsx)(t.p,{children:"This provides an entry point for end users to easily access these new technologies with Polkadot applications in a simple, easy to use way."}),"\n",(0,s.jsx)(t.p,{children:"Example Single Sign-On requests:"}),"\n",(0,s.jsx)("img",{width:"580",alt:"image",src:"https://user-images.githubusercontent.com/92969583/160052493-41df2558-eb5f-4dcc-bfb5-869784807c68.png"}),"\n",(0,s.jsx)(t.p,{children:"Example crypto wallet screens for Polkadot projects:"}),"\n",(0,s.jsx)("img",{width:"566",alt:"image",src:"https://user-images.githubusercontent.com/92969583/160052512-9ed92a8c-1626-45a1-857d-7c638ca753ba.png"}),"\n",(0,s.jsx)(t.p,{children:"This project will initially add support for the DOT token in the Verida Vault, with other application specific chains and tokens to be supported as the project progresses."}),"\n",(0,s.jsx)(t.h4,{id:"increase-the-use-cases-and-industries-accessible-by-polkadot-applications",children:"Increase the use cases and industries accessible by Polkadot applications"}),"\n",(0,s.jsx)(t.p,{children:"Connecting Verida\u2019s decentralized Web3 infrastructure with Polkadot\u2019s application specific chains will unlock a range of new use cases that aren\u2019t possible with blockchain technology alone."}),"\n",(0,s.jsx)(t.p,{children:"One important use case is KYC credentials. The Verida network allows a user to complete a KYC process with third party credential issuers, store that credential securely and then present to decentralized applications where required."}),"\n",(0,s.jsx)(t.p,{children:"These credentials can be used to enable DeFi applications on Polkadot to meet new regulatory requirements requiring all users to pass KYC and AML checks."}),"\n",(0,s.jsx)(t.p,{children:"The credentials can also be used to provide a unique identifier of an individual across multiple chains and multiple addresses. This unlocks the ability to airdrop tokens to an individual person rather than an individual address, that can be exploited. It also allows free / low transaction fees to be allocated to individual users."}),"\n",(0,s.jsxs)(t.p,{children:["Visit the ",(0,s.jsx)(t.a,{href:"https://www.verida.io/solutions",children:"solutions page on the Verida website"})," for a more detailed breakdown of use cases and new industries that will be unlocked for the Polkadot ecosystem."]}),"\n",(0,s.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(t.p,{children:"This project will connect the Verida decentralized infrastructure to any application in the Polkadot ecosystem. This will enhance existing applications while opening up many new use cases and industries to build Web3 applications on Polkadot."}),"\n",(0,s.jsx)(t.p,{children:"There are several key pieces of development work to support this integration across the Verida Vault and Verida developer SDKs."}),"\n",(0,s.jsx)(t.h4,{id:"verida-vault",children:"Verida Vault"}),"\n",(0,s.jsx)(t.p,{children:"The Verida Vault will be updated to natively support the Polkadot relay chain and DOT token. This will make it easy for end users to access both Polkadot and Verida network capabilities from one application."}),"\n",(0,s.jsx)(t.p,{children:"As part of this integration, and as a valuable early use case, this project will enable any network user or application to easily request DOT from another user on the network via the Verida messaging service."}),"\n",(0,s.jsx)(t.h4,{id:"polkadotjs--verida-sdk-integration",children:"PolkadotJs + Verida SDK integration"}),"\n",(0,s.jsx)(t.p,{children:"The PolkadotJs SDK will be integrated with the Verida SDK to provide a powerful suite of tools for application developers to access a full range of Web3 capabilities."}),"\n",(0,s.jsx)(t.p,{children:"This will enable Polkadot developers to leverage Verida decentralized identities, single sign-on, personal off-chain encrypted databases and messaging alongside the capabilities of their own application specific chains."}),"\n",(0,s.jsx)(t.p,{children:"More specifically, this integration will allow an end user to sign into a Polkadot application using the Verida Single Sign-On feature. Once signed in, the user will have unlocked Verida\u2019s network features (identity, private storage, messaging etc), while also unlocking the ability for the application to request a user to sign transactions for a specific parachain. This will provide a powerful set of technical capabilities via a very simple QR code sign in process."}),"\n",(0,s.jsx)(t.p,{children:"Initially the ability to sign transactions will be enabled via the Verida messaging service. WalletConnect 2.0 is currently adding support for non-EVM chains such as Polkadot. Once WalletConnect 2.0 is adopted, an option will be available for developers to auto-enable a WalletConnect 2.0 connection as part of the sign in process."}),"\n",(0,s.jsx)(t.h4,{id:"personal-data-credentials--messaging",children:"Personal Data, Credentials & Messaging"}),"\n",(0,s.jsx)(t.p,{children:"Once complete, the PolkdotJs and Verida SDK integration will enable Polkadot applications to request verifiable credentials from end users (e.g. KYC), store encrypted personal data on behalf of users and send them message notifications (e.g. margin call on a DEX)."}),"\n",(0,s.jsx)(t.p,{children:"Documentation, tutorials and other educational materials will be developed specifically for Polkadot developers looking to integrate these capabilities into their applications."}),"\n",(0,s.jsx)(t.h4,{id:"multiple-parachains",children:"Multiple Parachains"}),"\n",(0,s.jsx)(t.p,{children:"The Polkadot ecosystem consists of many parachains. While this offers great flexibility, it also introduces challenges to easily add support for those parachains in different wallet applications."}),"\n",(0,s.jsx)(t.p,{children:"Leveraging the Verida network messaging service, a new type of message (\u201cAdd Polkadot Parachain\u201d) will be created. This will allow any Polkadot application to send a secure message to a user on the Verida network inviting them to add their parachain into the wallet."}),"\n",(0,s.jsx)(t.p,{children:"A user-friendly interface will be presented to the user, the request will be signed to prevent phishing attacks and the message will include all the essential system information (i.e. endpoint(s)) to interact with that parachain."}),"\n",(0,s.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsx)(t.p,{children:"Numerous wallets are available in the Polkadot ecosystem which provide self-custody for end users to manage their cryptocurrency transactions, but none exist to facilitate interactions with personal data, identities and messaging."}),"\n",(0,s.jsx)(t.p,{children:"Verida provides a mobile application called the Verida Vault which acts as both a \u2018Data Wallet\u2019 and a \u2018Crypto Wallet\u2019 with private key management and a user-friendly interface for interacting with the Verida network and supported blockchains. Using the Vault, users can browse their decrypted data and consensually share their data with other applications via their decentralized identity. This unlocks many exciting new use cases for decentralized applications."}),"\n",(0,s.jsx)(t.p,{children:"There is a lack of single sign-on infrastructure within the Polkadot ecosystem. Verida provides missing pieces of infrastructure for developers to build in Web3 including single sign-on, portable decentralized identities and credentials for Polkadot applications. Verida will enable data interoperability across parachains in the Polkadot ecosystem for private data sharing, single-sign on and identity management."}),"\n",(0,s.jsx)(t.p,{children:"Traditional Web3 software applications regularly message users (via email or mobile push notifications) to provide an enhanced user experience and to retain users. This is a critically missing piece of infrastructure in the evolving Web3 architecture. The Verida network provides this messaging infrastructure and is multi-chain, making it ideally suited to provide a backbone of messaging across the whole ecosystem of Polkadot applications. Examples include; margin call warnings from DEX\u2019s, notification and reminders about DAO votes, in-game messages and much more."}),"\n",(0,s.jsx)(t.p,{children:"Integrating Polkadot and the DOT token into Verida Vault will allow users to connect their Polkadot address to Verida\u2019s decentralized identity framework for enhanced user identity profiles. It will allow developers in the Verida ecosystem to choose Polkadot and its parachains as their choice of blockchain for building and deploying their Web3 applications."}),"\n",(0,s.jsxs)(t.p,{children:["There is a growing need for regulatory compliant decentralized applications from initiatives such as the ",(0,s.jsx)(t.a,{href:"https://www.fatf-gafi.org/",children:"Financial Action Task Force"})," (FATF). Integrating with the Verida network opens up future possibilities for a standard, re-usable KYC credential to operate across the whole Polkadot ecosystem that is both FATF compliant and meets the industry expectations around privacy and security. Verida is actively working with compliance experts and industry leaders to bring these solutions to the network."]}),"\n",(0,s.jsx)(t.p,{children:"The Polkadot ecosystem is a collection of interoperable blockchains. The Verida network is designed to be multi-chain, which is well suited to Polkadot\u2019s multi-chain architecture. This ensures a framework is in place to easily add support for new parachains and provides a user experience natively designed for multiple chains."}),"\n",(0,s.jsx)(t.p,{children:"Once complete, this integration opens up the possibilities for future capabilities on the Verida network to be brought to the Polkadot ecosystem. These include bridging off-chain data to on-chain smart contracts, a trust framework and data marketplaces."}),"\n",(0,s.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,s.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Chris Were (CEO, Co-founder, Solution Architect)"}),"\n",(0,s.jsx)(t.li,{children:"Nick Lothian (Head of Product)"}),"\n",(0,s.jsx)(t.li,{children:"Yolanda Sam (Grant / Delivery Manager)"}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Contact Name:"})," Yolanda Sam / Chris Were"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Contact Email:"})," ",(0,s.jsx)(t.a,{href:"mailto:hello@verida.io",children:"hello@verida.io"})]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Website:"})," ",(0,s.jsx)(t.a,{href:"https://www.verida.io/",children:"https://www.verida.io/"})]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Registered Address:"})," 160 Robinson Road, 14-04 Singapore Business Federation Centre, SGP 068914"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Registered Legal Entity:"})," Verida PTE LTD"]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Chris Were"})," (CEO and co-founder, ",(0,s.jsx)(t.a,{href:"https://github.com/tahpot",children:"@tahpot"}),")\nChris is an Australian based technology entrepreneur who has spent more than 20 years devoted to developing innovative software solutions. He\u2019s led the development of Verida, a decentralized, self-sovereign data network. Chris previously co-founded Community Data Solutions, providing secure CRM solutions for not-for-profit organizations and government, growing the company to 150 enterprise customers across Australia."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Nick Lothian"})," (Head of Product, ",(0,s.jsx)(t.a,{href:"https://github.com/nick-verida",children:"@nick-verida"}),")\nNick is an experienced software professional with over 20 years of experience in a wide variety of roles. Prior to joining Verida he started and successfully exited an Artificial Intelligence company. He has significant experience in standards (eg W3C ActivityStream, JSR168) and open source (Apache Foundation)."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Verida Engineering Team"}),"\nThe Verida engineering team consists of 6+ software engineers with expertise in Web3 development, Solidity smart contracts, Mobile Development and DevOps."]}),"\n",(0,s.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(t.p,{children:["A collection of Verida repos can be found here ",(0,s.jsx)(t.a,{href:"https://github.com/verida",children:"https://github.com/verida"})]}),"\n",(0,s.jsx)(t.p,{children:"Repos relevant to this grant proposal include:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/verida/verida-js",children:"https://github.com/verida/verida-js"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/verida/storage-node",children:"https://github.com/verida/storage-node"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/verida/vault-auth-server",children:"https://github.com/verida/vault-auth-server"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/verida/wallet-utils",children:"https://github.com/verida/wallet-utils"})}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"team-linkedin-profiles-if-available",children:"Team LinkedIn Profiles (if available)"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://www.linkedin.com/company/verida-technology",children:"https://www.linkedin.com/company/verida-technology"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://www.linkedin.com/in/nicklothian/",children:"https://www.linkedin.com/in/nicklothian/"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://www.linkedin.com/in/chriswere/",children:"https://www.linkedin.com/in/chriswere/"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://www.linkedin.com/in/yolandasam/",children:"https://www.linkedin.com/in/yolandasam/"})}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,s.jsx)(t.p,{children:"We have made significant progress on the Verida roadmap, including releasing the Whitepaper, Alpha protocol, reference implementations, demos and developer documentation."}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Verida Whitepaper: ",(0,s.jsx)(t.a,{href:"https://www.verida.io/whitepaper",children:"https://www.verida.io/whitepaper"})]}),"\n",(0,s.jsxs)(t.li,{children:["Developer Documentation ",(0,s.jsx)(t.a,{href:"https://developers.verida.io/",children:"https://developers.verida.io/"})]}),"\n",(0,s.jsxs)(t.li,{children:["Interactive Tutorials: ",(0,s.jsx)(t.a,{href:"https://developers.verida.io/docs/tutorial/introduction",children:"https://developers.verida.io/docs/tutorial/introduction"})]}),"\n",(0,s.jsxs)(t.li,{children:["Demos: ",(0,s.jsx)(t.a,{href:"https://developers.verida.io/docs/demos",children:"https://developers.verida.io/docs/demos"})]}),"\n",(0,s.jsxs)(t.li,{children:["Summary on Alpha protocol release: ",(0,s.jsx)(t.a,{href:"https://news.verida.io/alpha-protocol-release-start-building-privacy-preserving-web3-dapps-with-verida-e5cedfc15878",children:"https://news.verida.io/alpha-protocol-release-start-building-privacy-preserving-web3-dapps-with-verida-e5cedfc15878"})]}),"\n",(0,s.jsx)(t.li,{children:"Reference Implementations"}),"\n",(0,s.jsxs)(t.li,{children:["Vault Showcase: ",(0,s.jsx)(t.a,{href:"https://github.com/verida/vault-showcase",children:"https://github.com/verida/vault-showcase"})]}),"\n",(0,s.jsxs)(t.li,{children:["Account Explorer: ",(0,s.jsx)(t.a,{href:"https://github.com/verida/account-explorer",children:"https://github.com/verida/account-explorer"})]}),"\n",(0,s.jsxs)(t.li,{children:["Markdown Editor: ",(0,s.jsx)(t.a,{href:"https://github.com/verida/markdown-notes-demo",children:"https://github.com/verida/markdown-notes-demo"})]}),"\n",(0,s.jsxs)(t.li,{children:["Credentials Management Platform: ",(0,s.jsx)(t.a,{href:"https://github.com/verida/Credentials-Management-Platform",children:"https://github.com/verida/Credentials-Management-Platform"})]}),"\n",(0,s.jsxs)(t.li,{children:["Getting Started with Verida Vault: ",(0,s.jsx)(t.a,{href:"https://docsend.com/view/nft2dbdpquf8z7bh",children:"https://docsend.com/view/nft2dbdpquf8z7bh"})]}),"\n",(0,s.jsxs)(t.li,{children:["Web3 Builders Deck: ",(0,s.jsx)(t.a,{href:"https://docsend.com/view/n29fx369jiq62ayu",children:"https://docsend.com/view/n29fx369jiq62ayu"})]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"The focus of this grant proposal is to build and enhance existing capabilities and make them developer-ready for builders in the Polkadot ecosystem."}),"\n",(0,s.jsx)(t.h3,{id:"verida-self-funded-contribution",children:"Verida Self-Funded Contribution"}),"\n",(0,s.jsx)(t.p,{children:"As part of this proposal, Verida will self-fund the software development to provide DOT support in the Verida Vault, and support for requesting a DOT payment via Verida decentralized messaging. This work will provide the necessary foundation to enable self-sovereign identity claims, verifiable credentials, encrypted personal data storage, single sign-on, and more for Polkadot as outlined in future milestones.\nVerida Self-Funded Contribution"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Number"}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Deliverable"}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Specification"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"DOT support in Verida Vault"}),(0,s.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1a."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Sign transactions"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Add PolkadotJS support into the Verida Vault to support signing transactions"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1b."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Submit transactions"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Add PolkadotJs support into the Verida Vault blockchain API to submit transactions on chain"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1c."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Transaction history"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support fetching and building up transaction history information for Polkadot addresses"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1d."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"On-chain events"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support listening to on-chain events relating to new transactions for Polkadot addresses"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1e."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Transaction fee"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support for fetching and displaying transaction fee information"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1f."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"DOT token support"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Add support for the DOT token on the Polkadot parachain"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1g."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"DOT token price"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support fetching price information for the DOT token"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1h."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"CAIP compatibility for Polkadot"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support CAIP compatible token specifications for Polkadot"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1i."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Unit tests"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Develop unit tests for all new capabilities"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support requesting a DOT payment via Verida message"}),(0,s.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2a."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Payment Request schema"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Define a new inbox message schema for \u201cPayment Request\u201d message types that includes the recipient address and a description of the request purpose"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2b."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Payment Request screens"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Design new Verida Vault screens for handling \u201cPayment Request\u201d inbox messages"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2c."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Facilitating DOT payment"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Implement an inbox handler that facilitates making a payment in DOT tokens to the requested address"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2d."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Edge case handling"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Handle edge cases such as insufficient DOT tokens"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2e."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Purchase DOT"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Redirect the user to purchase more DOT tokens if required"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2f."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Unit tests"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Develop unit tests for the inbox handler"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2g."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Documentation"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Document how Polkadot developers can initiate a Payment Request"})]})]})]}),"\n",(0,s.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Total Estimated Duration:"})," 2 months"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Full-Time Equivalent (FTE):"})," 1.7 FTE"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Total Costs:"})," 50,000 USD"]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"See below for a summary of the software licencing for deliverables on the roadmap."}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Name"}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Description"}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Licence"}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"GitHub Link"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"verida-js"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"The core Verida protocol library"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"ISC (MIT equivalent)"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/verida/verida-js",children:"https://github.com/verida/verida-js"})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Verida Account Explorer"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"A web front end showing details of each DID"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"ISC (MIT equivalent)"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/verida/account-explorer/",children:"https://github.com/verida/account-explorer/"})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Wallet-Utils"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Integration library between the Verida Vault and blockchains"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"ISC (MIT equivalent)"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/verida/wallet-utils",children:"https://github.com/verida/wallet-utils"})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Auth Server"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Decentralized server that faciliates single sign-on connections"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"ISC (MIT equivalent)"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/verida/vault-auth-server",children:"https://github.com/verida/vault-auth-server"})})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"milestone-1---single-sign-on-for-apps-in-polkadot-ecosystem",children:"Milestone 1 - Single Sign-On for Apps in Polkadot Ecosystem"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Estimated Duration:"})," 2 months [Expected delivery June 2023]"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"FTE:"})," 1.7 FTE"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Costs:"})," 50,000 USD"]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"We are seeking a level 2 grant for the following deliverables:"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Single Sign-On (SSO) for DOT applications"}),"\n",(0,s.jsx)(t.li,{children:"Implement generic transaction support for Polkadot"}),"\n",(0,s.jsx)(t.li,{children:"Support requesting a Verifiable Credential from a Polkadot dApp"}),"\n",(0,s.jsx)(t.li,{children:"Support storing encrypted personal data within a Polkadot dApp"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"Single sign-on will provide users with a seamless experience for signing in across Polkadot dApps. Powered by Verida\u2019s decentralized identity framework, these capabilities will allow users to maintain self-sovereign identity, without sacrificing on the user experience."}),"\n",(0,s.jsx)(t.p,{children:"We will provide the capabilities for developers to request verifiable credentials and build Polkadot dApps with encrypted data storage for private and sensitive data. This enables Polkadot developers to build user-oriented, privacy-preserving, feature rich dApps across industrial verticals including DeFi and metaverse."}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Number"}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Deliverable"}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Specification"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0a."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"License"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"ISC (MIT equivalent)"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0b."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Documentation"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"We will provide both inline documentation of the code and update the necessary tutorials that explain how a user can use the application."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0c."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Testing"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Core functions will be covered by unit tests as far as reasonably applicable to ensure functionality and robustness. In the documentation, we will describe how to run these tests."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0d."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Docker"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"N/A - We are not providing any infrastructure. All functionality can be tested via unit tests in the repo's."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0e."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Article"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"We will publish an article that explains what was done as part of the grant."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Single Sign-On (SSO) for DOT applications"}),(0,s.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1a."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Establish SSO request"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support establishing a SSO request for a Polkadot dApp"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1b."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Link Polkadot to Verida DID"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support linking a Polkadot account to a Verida DID account to unlock messaging and payment use cases"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1c."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Show available Polkadot addresses"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support specifying a list of available Polkadot addresses for the user to select from"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1d."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Specify Polkadot address"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support a user specifying their Polkadot address during user sign"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"1e."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Documentation"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Document how Polkadot developers can establish a SSO request for a Polkadot dApp"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Implement generic transaction support for Polkadot"}),(0,s.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2a."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support transaction signing"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support an application requesting a transaction to be signed by the end user"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2b."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support transaction submission"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support an application requesting a transaction to be signed and submitted by the end user"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2c."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support signing any message"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support an application requesting a message to be signed by the end user"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2d."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Unit tests"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Develop unit tests for the integration"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2d."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Documentation"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Document how Polkadot developers can initiate a WalletConnect connection during user sign in"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"3."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support requesting a Verifiable Credential from a Polkadot dApp"}),(0,s.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"3a."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Documentation"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Document how a Polkadot dApp can make a Verifiable Credential request once connected"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"4."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Support storing encrypted personal data within a Polkadot dApp"}),(0,s.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"4a."}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Documentation"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Document how a Polkadot dApp can create, update, view, query and delete encrypted private data for a user of their application"})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,s.jsx)(t.p,{children:"We will produce articles, tutorials and other content to promote the work completed in this grant proposal through our community channels."}),"\n",(0,s.jsx)(t.h3,{id:"off-chain-data-bridge",children:"Off-chain Data Bridge"}),"\n",(0,s.jsx)(t.p,{children:"Following the completion of this grant proposal, future capabilities on the Verida roadmap which could bring value to the Polkadot ecosystem include bridging off-chain personal data to on-chain decentralized applications."}),"\n",(0,s.jsx)(t.p,{children:"The Verida network stores personal data for end users. Every piece of data is signed by the originator of the data. For a patient record, a hospital visit may be signed by the doctor. For an insurance policy claim, a police incident may be signed by a police officer."}),"\n",(0,s.jsx)(t.p,{children:"Verida has developed a way to securely use this off-chain signed data as an input to smart contracts in a gas efficient manner. This capability unlocks a huge range of new use cases for smart contracts that can be leveraged by Polkadot applications."}),"\n",(0,s.jsx)(t.h3,{id:"expanding-the-data-ecosystem",children:"Expanding the Data Ecosystem"}),"\n",(0,s.jsx)(t.p,{children:"We are also developing an API Connector framework, trust framework and data schemas to enhance trust and enable growth in the Verida network. Once the Polkadot integration is complete, these capabilities can be unlocked for the broader Polkadot ecosystem."}),"\n",(0,s.jsx)(t.h3,{id:"supporting-additional-polkadot-parachains",children:"Supporting additional Polkadot Parachains"}),"\n",(0,s.jsx)(t.p,{children:"Building on the foundational work completed as part of this grant proposal, Verida will be able to build support for additional parachains in the Verida Vault based on Chain Agnostic Improvement Proposal (CAIP) standards. Further examples and tutorials will be developed to support and enable developers."}),"\n",(0,s.jsxs)(t.p,{children:["More details on our future plans can be found in the ",(0,s.jsx)(t.a,{href:"https://www.verida.io/whitepaper",children:"Verida Whitepaper"}),"."]}),"\n",(0,s.jsxs)(t.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"How did you hear about the Grants Program?"})}),"\n",(0,s.jsx)(t.p,{children:"Verida has had numerous conversations with Rohan Joseph and Surag Sheth from Parity Labs about Verida support for the Polkadot ecosystem."}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"Work already completed"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Verida\u2019s Alpha Protocol Release was made available in November 2021"}),"\n",(0,s.jsx)(t.li,{children:"The Verida Whitepaper was released in February 2022"}),"\n",(0,s.jsx)(t.li,{children:"Developer Documentation, including demos and interactive tutorials, continues to be updated to support developers building on Verida"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"Previous grants"})}),"\n",(0,s.jsx)(t.p,{children:"We have previously been successful in receiving grants from Open Web Collective and NEAR."})]})}function h(e={}){const{wrapper:t}={...(0,l.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},28453:(e,t,i)=>{i.d(t,{R:()=>a,x:()=>r});var n=i(96540);const s={},l=n.createContext(s);function a(e){const t=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),n.createElement(l.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/13684d46.1d0849ed.js b/assets/js/13684d46.1d0849ed.js deleted file mode 100644 index 791f71c25a5..00000000000 --- a/assets/js/13684d46.1d0849ed.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[49507],{99814:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>d});const i=JSON.parse('{"id":"applications/Profond","title":"[Profond.ai](http://Profond.ai) - No Code Builder for artists and developers to build, validate, and scale their dApp.","description":"- Team Name: Profond AI, Corp.","source":"@site/applications/Profond.md","sourceDirName":"applications","slug":"/applications/Profond","permalink":"/applications/Profond","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/Profond.md","tags":[],"version":"current","frontMatter":{}}');var r=t(74848),s=t(28453);const a={},l="Profond.ai - No Code Builder for artists and developers to build, validate, and scale their dApp.",o={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles (if available)",id:"team-linkedin-profiles-if-available",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 No code smart contract builder",id:"milestone-1--no-code-smart-contract-builder",level:3},{value:"Milestone 2 Example \u2014 Analytics and API",id:"milestone-2-example--analytics-and-api",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const n={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsxs)(n.h1,{id:"profondai---no-code-builder-for-artists-and-developers-to-build-validate-and-scale-their-dapp",children:[(0,r.jsx)(n.a,{href:"http://Profond.ai",children:"Profond.ai"})," - No Code Builder for artists and developers to build, validate, and scale their dApp."]})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Team Name:"})," Profond AI, Corp."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Payment Address:"})," 0x92710b669eA59b348cfbe6dcA8682DAabfB5f06A (USDC)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsxs)(n.strong,{children:[(0,r.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 1"]}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,r.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"http://profond.ai/",children:"Profond.ai"})," is web3 tools to help developers and creators to build, validate, and scale their dApps. We provide smart contract builder (NFT and token), analytic, and indexer."]}),"\n",(0,r.jsx)(n.p,{children:"We\u2019re focusing on emerging chain and we aim to onboard millions of developers by making it easier onboarding for users to create smart contracts."}),"\n",(0,r.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,r.jsxs)(n.p,{children:["We\u2019re inspired by ",(0,r.jsx)(n.a,{href:"http://Pagoda.co",children:"Pagoda.co"}),", no code builders in the Near Ecosystem. It provides:"]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"No Code Builder: Create smart contracts for Token and NFT"}),"\n",(0,r.jsx)(n.li,{children:"Indexer (coming soon): To help successful projects and enterprises scale their dApp."}),"\n",(0,r.jsx)(n.li,{children:"Analytics (coming soon): Data analytics for smart contracts, covering volume, users, transactions, and gas fees."}),"\n",(0,r.jsx)(n.li,{children:"API Analytics (coming soon): To get data from analytics."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Currently, we\u2019re building MVP for users to create NFT and Token. Analytics, API and Indexer is still under development."}),"\n",(0,r.jsxs)(n.p,{children:["We\u2019re planning to add more parachains from Polkadot and Kusama to our platform. Here\u2019s our current MVP: ",(0,r.jsx)(n.a,{href:"http://console.profond.ai/",children:"http://console.profond.ai/"})]}),"\n",(0,r.jsx)("img",{width:"1728",alt:"Create NFT Collection",src:"https://user-images.githubusercontent.com/81077632/232679169-a0c4e372-10d0-4dae-8cd0-ad134c69f89d.png"}),"\n",(0,r.jsx)("img",{width:"1727",alt:"NFT Tools",src:"https://user-images.githubusercontent.com/81077632/232679206-2d43c455-5a3b-4742-b371-7ac949c3b2cf.png"}),"\n",(0,r.jsx)(n.p,{children:"NFT Tools, currently require users to manually upload the collection via NFT-Up, we\u2019re working to make it drag&drop"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.img,{src:"https://user-images.githubusercontent.com/81077632/232679334-a4c46b51-14e5-4be9-8c56-99a4c32152b2.png",alt:"Untitled (2)"}),"\nToken/Coin tools. We\u2019re looking at the example when we creating 1 million XOIN token (see \u201cCoin Minting\u201d section)"]}),"\n",(0,r.jsx)("img",{width:"1529",alt:"Analytics",src:"https://user-images.githubusercontent.com/81077632/233577845-2255131f-b7d8-4137-85f6-56998987d694.png"}),"\n",(0,r.jsx)(n.p,{children:"Example of smart contract analytic. In this image, we\u2019re doing analytic on marketplace.paras.near."}),"\n",(0,r.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,r.jsx)(n.p,{children:"We aim to launch on Polkadot and Kusama, here\u2019s what problem we\u2019re trying to solve:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"For creators, creating a smart contract for their NFTs and tokens is hard. Especially in relatively new WASM smart contracts like ink! ."}),"\n",(0,r.jsx)(n.li,{children:"For UI developers, blockchain development is too complex. Furthermore, each chain has its own complexity."}),"\n",(0,r.jsx)(n.li,{children:"Limited tooling for Polkadot and Kusama ecosystem."}),"\n",(0,r.jsx)(n.li,{children:"For emerging chain, we help them create smart contract templates."}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,r.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"CEO & Founder: Adhiguna Mahendra"}),"\n",(0,r.jsx)(n.li,{children:"Product Lead & Founder: Ekki Rinaldi (Ekki)"}),"\n",(0,r.jsx)(n.li,{children:"Full-stack Developer & Founder: Rizky Irfianto (Irfi)"}),"\n",(0,r.jsx)(n.li,{children:"Database Engineer & Founder: Bagas Prakasa"}),"\n",(0,r.jsx)(n.li,{children:"Full-stack Developer: Ade Yusup"}),"\n",(0,r.jsx)(n.li,{children:"Smart Contract Engineer: Amajid Sinar (Jedi)"}),"\n",(0,r.jsx)(n.li,{children:"Business Development: Vincent Salaka"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Contact Name:"})," Ekki"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Contact Email:"})," ",(0,r.jsx)(n.a,{href:"mailto:ekki@profond.ai",children:"ekki@profond.ai"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Website:"})," ",(0,r.jsx)(n.a,{href:"https://profond.ai",children:"https://profond.ai"})]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Registered Address:"})," 2810 North Church Street, Wilmington, Delaware 19802"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Registered Legal Entity:"})," Profond AI, Corp."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,r.jsx)(n.p,{children:"Our founders we\u2019re building the biggest NFT marketplace in the Near ecosystem (Paras NFT Marketplace) and recently integrated with Astar Network. As builder and part of NFT community, we understand what builders need (especially FE engineer) and for artist who want to launch their on NFT. Our team led by tech veteran who had experience working in Silicon Valley, Adhiguna Mahendra, with 20+ years of experience."}),"\n",(0,r.jsxs)(n.p,{children:["We helped grow the NEAR NFT ecosystem by contributing to NFT with open-source projects such as NFT smart contract standard, marketplace smart contract, vesting smart contract, and so on as you can see on the project\u2019s repo: ",(0,r.jsx)(n.a,{href:"https://github.com/parasHQ/",children:"https://github.com/parasHQ/"})]}),"\n",(0,r.jsx)(n.p,{children:"Here\u2019s our recent works:"}),"\n",(0,r.jsxs)(n.p,{children:["Paras Launchpad: ",(0,r.jsx)(n.a,{href:"https://launchpad.paras.id/",children:"https://launchpad.paras.id/"})," - NFT Launchpad in Astar using ink!"]}),"\n",(0,r.jsxs)(n.p,{children:["Arkana Raffler: ",(0,r.jsx)(n.a,{href:"https://arkana.gg/",children:"https://arkana.gg/"})]}),"\n",(0,r.jsxs)(n.p,{children:["Pipapo Ticketing System: ",(0,r.jsx)(n.a,{href:"https://pipapo.io/",children:"https://pipapo.io/"})]}),"\n",(0,r.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/emarai",children:"https://github.com/emarai"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/orgs/profondHQ/people/ekkirinaldi",children:"https://github.com/ekkirinaldi"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/bagasprakasa",children:"https://github.com/bagasprakasa"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/internnos",children:"https://github.com/internnos"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/adeyusupp",children:"https://github.com/adeyusupp"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"team-linkedin-profiles-if-available",children:"Team LinkedIn Profiles (if available)"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://www.linkedin.com/in/adhigunamahendra/",children:"https://www.linkedin.com/in/adhigunamahendra/"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://www.linkedin.com/in/bagasprakasa/",children:"https://www.linkedin.com/in/bagasprakasa/"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://www.linkedin.com/in/irfianto/",children:"https://www.linkedin.com/in/irfianto/"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://www.linkedin.com/in/amajidsinar/",children:"https://www.linkedin.com/in/amajidsinar/"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://www.linkedin.com/in/ekkirinaldi/",children:"https://www.linkedin.com/in/ekkirinaldi/"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://www.linkedin.com/in/vincentsalaka/",children:"https://www.linkedin.com/in/vincentsalaka/"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://www.linkedin.com/in/adeyusupp/",children:"https://www.linkedin.com/in/adeyusupp/"})}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,r.jsxs)(n.p,{children:["PoC \u2192 Here\u2019s our current MVP ",(0,r.jsx)(n.a,{href:"http://console.profond.ai/",children:"http://console.profond.ai/"})]}),"\n",(0,r.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,r.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Total Estimated Duration:"})," Duration of the whole project (e.g. 2 months)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Full-Time Equivalent (FTE):"})," 2 FTE"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Total Costs:"})," $10.000"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"milestone-1--no-code-smart-contract-builder",children:"Milestone 1 \u2014 No code smart contract builder"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Estimated duration:"})," 1 month"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"FTE:"})," 2"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Costs:"})," 4,000 USD"]}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Number"}),(0,r.jsx)(n.th,{children:"Deliverable"}),(0,r.jsx)(n.th,{children:"Specification"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0a."}),(0,r.jsx)(n.td,{children:"License"}),(0,r.jsx)(n.td,{children:"MIT"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0b."}),(0,r.jsx)(n.td,{children:"Documentation"}),(0,r.jsx)(n.td,{children:"We will provide documentation page on how to create NFT (PSP34) and FT (PSP22) smart contract with our interface. API documentation for project settings will also be provided."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0c."}),(0,r.jsx)(n.td,{children:"Testing and Testing Guide"}),(0,r.jsx)(n.td,{children:"All functions will be covered with full integration test, testing guide will also be provided."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0d."}),(0,r.jsx)(n.td,{children:"Article"}),(0,r.jsx)(n.td,{children:"We will publish an\xa0article that explains the no code builder"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"1."}),(0,r.jsx)(n.td,{children:"No Code NFT Creation (ink!)"}),(0,r.jsx)(n.td,{children:"Allows users to create NFT collection smart contract (PSP34) using ink! in one of WASM supported Parachains. User will be able to login with Polkadot Wallet (SubWallet, polkadot.js, Talisman) and then deploy smart contract with provided code hash. The code hash will be uploaded using selected templates from OpenBrush PSP34 Smart contract. We are abstracting the technical details from users, users just need to upload NFT images, set metadata, and pay gas fee to deploy the smart contract. We will be using useInkathon for wallet and transaction, Next.Js for frontend framework, and OpenBrush for smart contract templates."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"2."}),(0,r.jsx)(n.td,{children:"No Code Fungible Token Creation (ink!)"}),(0,r.jsx)(n.td,{children:"Allows users to create NFT collection smart contract (PSP34) using ink! in one of WASM supported Parachains. User will be able to login with Polkadot Wallet (SubWallet, polkadot.js, Talisman) and then deploy smart contract with provided code hash. The code hash will be uploaded using selected templates from OpenBrush PSP22 Smart contract. We are abstracting the technical details from users, users just need to set metadata and pay gas fee to deploy the smart contract. We will be using useInkathon for wallet and transaction, Next.Js for frontend framework, and OpenBrush for smart contract templates."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"3."}),(0,r.jsx)(n.td,{children:"Project Management Module"}),(0,r.jsx)(n.td,{children:"Allows users to create more than one projects. We are using NestJS for backend framework."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"4."}),(0,r.jsx)(n.td,{children:"Multichain Integration"}),(0,r.jsx)(n.td,{children:"Allows users to choose between Polkadot Parachains and Kusama"})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"milestone-2-example--analytics-and-api",children:"Milestone 2 Example \u2014 Analytics and API"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Estimated Duration:"})," 1 month"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"FTE:"})," 2"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Costs:"})," 6,000 USD"]}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Number"}),(0,r.jsx)(n.th,{children:"Deliverable"}),(0,r.jsx)(n.th,{children:"Specification"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0a."}),(0,r.jsx)(n.td,{children:"License"}),(0,r.jsx)(n.td,{children:"MIT"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0b."}),(0,r.jsx)(n.td,{children:"Documentation"}),(0,r.jsx)(n.td,{children:"We will provide documentation page on how to create basic NFT collection (PSP34) using our no-code builder and creating a fungible token (PSP22)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0c."}),(0,r.jsx)(n.td,{children:"Testing and Testing Guide"}),(0,r.jsx)(n.td,{children:"All functions will be covered with full integration test, testing guide will also be provided."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0d."}),(0,r.jsx)(n.td,{children:"Article"}),(0,r.jsx)(n.td,{children:"We will publish an\xa0article that explains the analytics and API usage"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"1."}),(0,r.jsx)(n.td,{children:"Analytic Functionality"}),(0,r.jsx)(n.td,{children:"Add on-chain analytic for the smart contract."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"2."}),(0,r.jsx)(n.td,{children:"REST API Service"}),(0,r.jsx)(n.td,{children:"API for users to get the data analytic."})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,r.jsx)(n.p,{children:"Experimenting in business model. We have two kind of ideation we want to validate:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Indexer service, providing RPC for dApp to cut their operational costs"}),"\n",(0,r.jsx)(n.li,{children:"Royalties enforcement for each NFT created."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"On top of that, we aim to onboard more emerging chains and big chains like Solana and Ethereum."}),"\n",(0,r.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"How did you hear about the Grants Program?"})," Web3 Foundation Website"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>l});var i=t(96540);const r={},s=i.createContext(r);function a(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/13684d46.ad96f8d5.js b/assets/js/13684d46.ad96f8d5.js new file mode 100644 index 00000000000..437074a8f87 --- /dev/null +++ b/assets/js/13684d46.ad96f8d5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[49507],{28617:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>d});const i=JSON.parse('{"id":"applications/Profond","title":"[Profond.ai](http://Profond.ai) - No Code Builder for artists and developers to build, validate, and scale their dApp.","description":"- Team Name: Profond AI, Corp.","source":"@site/applications/Profond.md","sourceDirName":"applications","slug":"/applications/Profond","permalink":"/applications/Profond","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/Profond.md","tags":[],"version":"current","frontMatter":{}}');var r=t(74848),s=t(28453);const a={},l="Profond.ai - No Code Builder for artists and developers to build, validate, and scale their dApp.",o={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles (if available)",id:"team-linkedin-profiles-if-available",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 No code smart contract builder",id:"milestone-1--no-code-smart-contract-builder",level:3},{value:"Milestone 2 Example \u2014 Analytics and API",id:"milestone-2-example--analytics-and-api",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const n={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsxs)(n.h1,{id:"profondai---no-code-builder-for-artists-and-developers-to-build-validate-and-scale-their-dapp",children:[(0,r.jsx)(n.a,{href:"http://Profond.ai",children:"Profond.ai"})," - No Code Builder for artists and developers to build, validate, and scale their dApp."]})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Team Name:"})," Profond AI, Corp."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Payment Address:"})," 0x92710b669eA59b348cfbe6dcA8682DAabfB5f06A (USDC)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsxs)(n.strong,{children:[(0,r.jsx)(n.a,{href:"https://github.com/w3f/Grants-Program/tree/master#level_slider-levels",children:"Level"}),":"]})," 1"]}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,r.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"http://profond.ai/",children:"Profond.ai"})," is web3 tools to help developers and creators to build, validate, and scale their dApps. We provide smart contract builder (NFT and token), analytic, and indexer."]}),"\n",(0,r.jsx)(n.p,{children:"We\u2019re focusing on emerging chain and we aim to onboard millions of developers by making it easier onboarding for users to create smart contracts."}),"\n",(0,r.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,r.jsxs)(n.p,{children:["We\u2019re inspired by ",(0,r.jsx)(n.a,{href:"http://Pagoda.co",children:"Pagoda.co"}),", no code builders in the Near Ecosystem. It provides:"]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"No Code Builder: Create smart contracts for Token and NFT"}),"\n",(0,r.jsx)(n.li,{children:"Indexer (coming soon): To help successful projects and enterprises scale their dApp."}),"\n",(0,r.jsx)(n.li,{children:"Analytics (coming soon): Data analytics for smart contracts, covering volume, users, transactions, and gas fees."}),"\n",(0,r.jsx)(n.li,{children:"API Analytics (coming soon): To get data from analytics."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Currently, we\u2019re building MVP for users to create NFT and Token. Analytics, API and Indexer is still under development."}),"\n",(0,r.jsxs)(n.p,{children:["We\u2019re planning to add more parachains from Polkadot and Kusama to our platform. Here\u2019s our current MVP: ",(0,r.jsx)(n.a,{href:"http://console.profond.ai/",children:"http://console.profond.ai/"})]}),"\n",(0,r.jsx)("img",{width:"1728",alt:"Create NFT Collection",src:"https://user-images.githubusercontent.com/81077632/232679169-a0c4e372-10d0-4dae-8cd0-ad134c69f89d.png"}),"\n",(0,r.jsx)("img",{width:"1727",alt:"NFT Tools",src:"https://user-images.githubusercontent.com/81077632/232679206-2d43c455-5a3b-4742-b371-7ac949c3b2cf.png"}),"\n",(0,r.jsx)(n.p,{children:"NFT Tools, currently require users to manually upload the collection via NFT-Up, we\u2019re working to make it drag&drop"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.img,{src:"https://user-images.githubusercontent.com/81077632/232679334-a4c46b51-14e5-4be9-8c56-99a4c32152b2.png",alt:"Untitled (2)"}),"\nToken/Coin tools. We\u2019re looking at the example when we creating 1 million XOIN token (see \u201cCoin Minting\u201d section)"]}),"\n",(0,r.jsx)("img",{width:"1529",alt:"Analytics",src:"https://user-images.githubusercontent.com/81077632/233577845-2255131f-b7d8-4137-85f6-56998987d694.png"}),"\n",(0,r.jsx)(n.p,{children:"Example of smart contract analytic. In this image, we\u2019re doing analytic on marketplace.paras.near."}),"\n",(0,r.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,r.jsx)(n.p,{children:"We aim to launch on Polkadot and Kusama, here\u2019s what problem we\u2019re trying to solve:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"For creators, creating a smart contract for their NFTs and tokens is hard. Especially in relatively new WASM smart contracts like ink! ."}),"\n",(0,r.jsx)(n.li,{children:"For UI developers, blockchain development is too complex. Furthermore, each chain has its own complexity."}),"\n",(0,r.jsx)(n.li,{children:"Limited tooling for Polkadot and Kusama ecosystem."}),"\n",(0,r.jsx)(n.li,{children:"For emerging chain, we help them create smart contract templates."}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,r.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"CEO & Founder: Adhiguna Mahendra"}),"\n",(0,r.jsx)(n.li,{children:"Product Lead & Founder: Ekki Rinaldi (Ekki)"}),"\n",(0,r.jsx)(n.li,{children:"Full-stack Developer & Founder: Rizky Irfianto (Irfi)"}),"\n",(0,r.jsx)(n.li,{children:"Database Engineer & Founder: Bagas Prakasa"}),"\n",(0,r.jsx)(n.li,{children:"Full-stack Developer: Ade Yusup"}),"\n",(0,r.jsx)(n.li,{children:"Smart Contract Engineer: Amajid Sinar (Jedi)"}),"\n",(0,r.jsx)(n.li,{children:"Business Development: Vincent Salaka"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Contact Name:"})," Ekki"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Contact Email:"})," ",(0,r.jsx)(n.a,{href:"mailto:ekki@profond.ai",children:"ekki@profond.ai"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Website:"})," ",(0,r.jsx)(n.a,{href:"https://profond.ai",children:"https://profond.ai"})]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Registered Address:"})," 2810 North Church Street, Wilmington, Delaware 19802"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Registered Legal Entity:"})," Profond AI, Corp."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,r.jsx)(n.p,{children:"Our founders we\u2019re building the biggest NFT marketplace in the Near ecosystem (Paras NFT Marketplace) and recently integrated with Astar Network. As builder and part of NFT community, we understand what builders need (especially FE engineer) and for artist who want to launch their on NFT. Our team led by tech veteran who had experience working in Silicon Valley, Adhiguna Mahendra, with 20+ years of experience."}),"\n",(0,r.jsxs)(n.p,{children:["We helped grow the NEAR NFT ecosystem by contributing to NFT with open-source projects such as NFT smart contract standard, marketplace smart contract, vesting smart contract, and so on as you can see on the project\u2019s repo: ",(0,r.jsx)(n.a,{href:"https://github.com/parasHQ/",children:"https://github.com/parasHQ/"})]}),"\n",(0,r.jsx)(n.p,{children:"Here\u2019s our recent works:"}),"\n",(0,r.jsxs)(n.p,{children:["Paras Launchpad: ",(0,r.jsx)(n.a,{href:"https://launchpad.paras.id/",children:"https://launchpad.paras.id/"})," - NFT Launchpad in Astar using ink!"]}),"\n",(0,r.jsxs)(n.p,{children:["Arkana Raffler: ",(0,r.jsx)(n.a,{href:"https://arkana.gg/",children:"https://arkana.gg/"})]}),"\n",(0,r.jsxs)(n.p,{children:["Pipapo Ticketing System: ",(0,r.jsx)(n.a,{href:"https://pipapo.io/",children:"https://pipapo.io/"})]}),"\n",(0,r.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/emarai",children:"https://github.com/emarai"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/orgs/profondHQ/people/ekkirinaldi",children:"https://github.com/ekkirinaldi"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/bagasprakasa",children:"https://github.com/bagasprakasa"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/internnos",children:"https://github.com/internnos"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/adeyusupp",children:"https://github.com/adeyusupp"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"team-linkedin-profiles-if-available",children:"Team LinkedIn Profiles (if available)"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://www.linkedin.com/in/adhigunamahendra/",children:"https://www.linkedin.com/in/adhigunamahendra/"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://www.linkedin.com/in/bagasprakasa/",children:"https://www.linkedin.com/in/bagasprakasa/"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://www.linkedin.com/in/irfianto/",children:"https://www.linkedin.com/in/irfianto/"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://www.linkedin.com/in/amajidsinar/",children:"https://www.linkedin.com/in/amajidsinar/"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://www.linkedin.com/in/ekkirinaldi/",children:"https://www.linkedin.com/in/ekkirinaldi/"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://www.linkedin.com/in/vincentsalaka/",children:"https://www.linkedin.com/in/vincentsalaka/"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://www.linkedin.com/in/adeyusupp/",children:"https://www.linkedin.com/in/adeyusupp/"})}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,r.jsxs)(n.p,{children:["PoC \u2192 Here\u2019s our current MVP ",(0,r.jsx)(n.a,{href:"http://console.profond.ai/",children:"http://console.profond.ai/"})]}),"\n",(0,r.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,r.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Total Estimated Duration:"})," Duration of the whole project (e.g. 2 months)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Full-Time Equivalent (FTE):"})," 2 FTE"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Total Costs:"})," $10.000"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"milestone-1--no-code-smart-contract-builder",children:"Milestone 1 \u2014 No code smart contract builder"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Estimated duration:"})," 1 month"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"FTE:"})," 2"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Costs:"})," 4,000 USD"]}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Number"}),(0,r.jsx)(n.th,{children:"Deliverable"}),(0,r.jsx)(n.th,{children:"Specification"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0a."}),(0,r.jsx)(n.td,{children:"License"}),(0,r.jsx)(n.td,{children:"MIT"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0b."}),(0,r.jsx)(n.td,{children:"Documentation"}),(0,r.jsx)(n.td,{children:"We will provide documentation page on how to create NFT (PSP34) and FT (PSP22) smart contract with our interface. API documentation for project settings will also be provided."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0c."}),(0,r.jsx)(n.td,{children:"Testing and Testing Guide"}),(0,r.jsx)(n.td,{children:"All functions will be covered with full integration test, testing guide will also be provided."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0d."}),(0,r.jsx)(n.td,{children:"Article"}),(0,r.jsx)(n.td,{children:"We will publish an\xa0article that explains the no code builder"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"1."}),(0,r.jsx)(n.td,{children:"No Code NFT Creation (ink!)"}),(0,r.jsx)(n.td,{children:"Allows users to create NFT collection smart contract (PSP34) using ink! in one of WASM supported Parachains. User will be able to login with Polkadot Wallet (SubWallet, polkadot.js, Talisman) and then deploy smart contract with provided code hash. The code hash will be uploaded using selected templates from OpenBrush PSP34 Smart contract. We are abstracting the technical details from users, users just need to upload NFT images, set metadata, and pay gas fee to deploy the smart contract. We will be using useInkathon for wallet and transaction, Next.Js for frontend framework, and OpenBrush for smart contract templates."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"2."}),(0,r.jsx)(n.td,{children:"No Code Fungible Token Creation (ink!)"}),(0,r.jsx)(n.td,{children:"Allows users to create NFT collection smart contract (PSP34) using ink! in one of WASM supported Parachains. User will be able to login with Polkadot Wallet (SubWallet, polkadot.js, Talisman) and then deploy smart contract with provided code hash. The code hash will be uploaded using selected templates from OpenBrush PSP22 Smart contract. We are abstracting the technical details from users, users just need to set metadata and pay gas fee to deploy the smart contract. We will be using useInkathon for wallet and transaction, Next.Js for frontend framework, and OpenBrush for smart contract templates."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"3."}),(0,r.jsx)(n.td,{children:"Project Management Module"}),(0,r.jsx)(n.td,{children:"Allows users to create more than one projects. We are using NestJS for backend framework."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"4."}),(0,r.jsx)(n.td,{children:"Multichain Integration"}),(0,r.jsx)(n.td,{children:"Allows users to choose between Polkadot Parachains and Kusama"})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"milestone-2-example--analytics-and-api",children:"Milestone 2 Example \u2014 Analytics and API"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Estimated Duration:"})," 1 month"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"FTE:"})," 2"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Costs:"})," 6,000 USD"]}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Number"}),(0,r.jsx)(n.th,{children:"Deliverable"}),(0,r.jsx)(n.th,{children:"Specification"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0a."}),(0,r.jsx)(n.td,{children:"License"}),(0,r.jsx)(n.td,{children:"MIT"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0b."}),(0,r.jsx)(n.td,{children:"Documentation"}),(0,r.jsx)(n.td,{children:"We will provide documentation page on how to create basic NFT collection (PSP34) using our no-code builder and creating a fungible token (PSP22)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0c."}),(0,r.jsx)(n.td,{children:"Testing and Testing Guide"}),(0,r.jsx)(n.td,{children:"All functions will be covered with full integration test, testing guide will also be provided."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"0d."}),(0,r.jsx)(n.td,{children:"Article"}),(0,r.jsx)(n.td,{children:"We will publish an\xa0article that explains the analytics and API usage"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"1."}),(0,r.jsx)(n.td,{children:"Analytic Functionality"}),(0,r.jsx)(n.td,{children:"Add on-chain analytic for the smart contract."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"2."}),(0,r.jsx)(n.td,{children:"REST API Service"}),(0,r.jsx)(n.td,{children:"API for users to get the data analytic."})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,r.jsx)(n.p,{children:"Experimenting in business model. We have two kind of ideation we want to validate:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Indexer service, providing RPC for dApp to cut their operational costs"}),"\n",(0,r.jsx)(n.li,{children:"Royalties enforcement for each NFT created."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"On top of that, we aim to onboard more emerging chains and big chains like Solana and Ethereum."}),"\n",(0,r.jsxs)(n.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"How did you hear about the Grants Program?"})," Web3 Foundation Website"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>l});var i=t(96540);const r={},s=i.createContext(r);function a(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/13912f36.2894839c.js b/assets/js/13912f36.2894839c.js deleted file mode 100644 index e63a991594d..00000000000 --- a/assets/js/13912f36.2894839c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[47998],{49754:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"applications/maintenance/Zondax-Support","title":"Zondax Support & Maintenance","description":"Team Name:* Zondax","source":"@site/applications/maintenance/Zondax-Support.md","sourceDirName":"applications/maintenance","slug":"/applications/maintenance/Zondax-Support","permalink":"/applications/maintenance/Zondax-Support","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/maintenance/Zondax-Support.md","tags":[],"version":"current","frontMatter":{}}');var i=n(74848),r=n(28453);const a={},o="Zondax Support & Maintenance",d={},l=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Contact",id:"contact",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Introduction",id:"introduction",level:3},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 Support",id:"milestone-1--support",level:3},{value:"Milestone 2 \u2014 Support",id:"milestone-2--support",level:3}];function c(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"zondax-support--maintenance",children:"Zondax Support & Maintenance"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Team Name:"})," Zondax"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Payment Address:"})," DAI (ERC20) 0x64c37c278f4c975e44ffd99b6e5f0832a3e9e981"]}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,i.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(t.p,{children:"The aim of this proposal is to contribute and support the community in the face of multiple challenges connected to the use of Ledger applications in the Polkadot/Kusama/Substrate ecosystem."}),"\n",(0,i.jsx)(t.p,{children:"Our previous maintenance contract expired several months ago. Because of our commitment to the community (without funding or a contract), we have still been keeping track of support requests and upgrading applications as new runtimes were being released. In this respect, we are already discussing proposals to the respective treasuries but this process requires a deeper legal assessment on our side that may take several more weeks to get resolved."}),"\n",(0,i.jsx)(t.p,{children:"Because of the incredible success of substrate based projects, a sizeable amount of new users have recently joined the community. It is important to state that Zondax did not design or operate any web, desktop, mobile or browser extension in the Substrate ecosystem."}),"\n",(0,i.jsx)(t.p,{children:"Unfortunately, in recent days, changes to the user interface of Polkadot.js have resulted in some users incorrectly sending funds to destination addresses (actually public keys) derived for other networks. Although these funds are not irrecoverable, at the moment, these users cannot recover funds without a deep technical understanding of the problem. Actually, we do not recommend any of these stopgap solutions, and employing them may compromise the secrecy of Ledger\u2019s mnemonics."}),"\n",(0,i.jsx)(t.p,{children:"For this reason, we would like to propose a series of steps to address and mitigate future similar issues. As previously mentioned, we consider part of this grant as an intermediate step towards a fully treasury based approach. Unfortunately, given the urgency, we believe that in order to respond adequately, an open grant is more appropriate until we analyse in depth some legal uncertainties in the treasury model."}),"\n",(0,i.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,i.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,i.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Registered Legal Entity:"})," Zondax AG"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Registered Address:"})," 6300 Zug. Switzerland"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Name:"})," Juan Leni"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Email:"})," ",(0,i.jsx)(t.a,{href:"mailto:juan.leni@zondax.ch",children:"juan.leni@zondax.ch"})]}),"\n",(0,i.jsx)(t.li,{children:"zondax.ch"}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,i.jsx)(t.p,{children:"Our team has very specific experience in this subject matter. Zondax developed both Polkadot and Kusama apps. We have also maintained both applications along all runtime upgrades (more than 50 upgrades) and provided technical support on engineering aspects. Actually, Zondax has developed tens of different Ledger apps for a wide range of blockchain projects. Zondax is also Substrate delivery partner and we have experience in embedded systems, blockchain core and protocol development and applied cryptography."}),"\n",(0,i.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/Zondax",children:"https://github.com/Zondax"})}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,i.jsx)(t.h3,{id:"introduction",children:"Introduction"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.em,{children:"Ledger App Standard Runtime Upgrades"}),": Along the period of time covered by this grant (16 weeks), we will keep upgrading both the Polkadot and Ledger apps to align with important runtime upgrades, in particular, those that are not backwards compatible because of tx_version changes. We are already aware of some important changes happening in a few weeks."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.em,{children:"Ledger App (Polkadot & Kusama) Recovery Extensions"}),": We propose creating a special configuration setting that users can enable to allow for cross-chain derivation (multiple BIP44 derivation) on both Kusama and Polkadot apps. This would allow users to retrieve funds that have been sent by mistake to keypairs in other BIP44 paths and that are currently not easy to recover."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.em,{children:"JS key derivation library"}),": We strongly recommend not using mnemonics anywhere but on the HW wallets themselves. However, we understand the need for a simple tool to independently verify key derivation. For this reason, we propose creating an npm JavaScript and/or Typescript package that can derive keys in the exact same way that Ledger devices do."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.em,{children:"Support"}),": In Polkadot / Kusama, we do not develop or operate web/desktop/mobile wallets, servers, user interfaces, etc.. However, given our involvement in the community (and the fact that we have developed both Ledger apps in addition to other related grants), we are currently receiving a sizeable amount of requests and support questions."]}),"\n",(0,i.jsxs)(t.p,{children:["A large quantity of questions refers to the aforementioned problem (locked funds). In other cases, they are mostly about misusage or lack of training on polkadot.js user interface, connection issues or questions about polkadot and kusama network operations. We believe that newcomers to the ecosystem would definitely profit from a much better support experience and we can contribute to this. We also think that a closer collaboration and joining forces with ",(0,i.jsx)(t.a,{href:"https://support.polkadot.network",children:"https://support.polkadot.network"})," would be a major improvement."]}),"\n",(0,i.jsx)(t.p,{children:'Last but not least, in the following weeks after the release of the "recovery extensions", we understand that adequate and specific guidance and support will be necessary.'}),"\n",(0,i.jsx)(t.p,{children:"In this respect, we propose:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["To reactivate and improve our processes, response times and broadening the range of questions that the team at ",(0,i.jsx)(t.a,{href:"mailto:support@zondax.ch",children:"support@zondax.ch"})," are able to answer."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["To improve coordination with ",(0,i.jsx)(t.a,{href:"https://support.polkadot.network",children:"https://support.polkadot.network"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"To develop and expand a Polkadot/Kusama support website with documentation and articles that address a large quantity of the typical support questions that Zondax receives every day."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Estimated Duration:"})," 16 weeks"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Costs:"})," 49000 DAI (+VAT when applicable)"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-1--support",children:"Milestone 1 \u2014 Support"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated Duration:"})," 8 weeks"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"})," variable due to different skillset but approximately equivalent to 2.5-3.0 FTEs"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"})," 25000 DAI (+VAT when applicable)"]}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0a."}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Apache 2.0"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0b."}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"We will extend our documentation to include this additional features. We will also add more documentation about Ledger key derivation internals"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0c."}),(0,i.jsx)(t.td,{children:"Testing Guide"}),(0,i.jsx)(t.td,{children:"The code will have both unit and integration (zemu based) tests as our previous deliverables."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0d."}),(0,i.jsx)(t.td,{children:"Article/Tutorial"}),(0,i.jsx)(t.td,{children:"We will write an article or tutorial that explains the work done as part of the grant."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"1."}),(0,i.jsx)(t.td,{children:"Polkadot App Recovery Extension"}),(0,i.jsxs)(t.td,{children:["We will add a special recovery mode in the Polkadot app. To minimize mistakes, activating this option will require several steps and explicit confirmation. ",(0,i.jsx)("br",{})," This option will allow deriving Kusama key pairs. We will also adjust JS libraries and coordinate upgrades and Ledger review and publication process"]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"2."}),(0,i.jsx)(t.td,{children:"Kusama App Recovery Extension"}),(0,i.jsxs)(t.td,{children:["We will add a special recovery mode in the Polkadot app. To minimize mistakes, activating this option will require several steps and explicit confirmation. ",(0,i.jsx)("br",{})," This option will allow deriving Kusama key pairs. We will also adjust JS libraries and coordinate upgrades and Ledger review and publication process"]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"3."}),(0,i.jsx)(t.td,{children:"Ledger-Substrate-js Derivation"}),(0,i.jsx)(t.td,{children:"We will extend the ledger-substrate-js package to include host-side for Ledger's ed25519+BIP32 derivation. A minimal react site and examples will be provided"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"4."}),(0,i.jsx)(t.td,{children:"Polkadot App - Runtime Support Updates"}),(0,i.jsxs)(t.td,{children:["Due to substrate/scale design requirements, we will make periodic updates to align with changes in the node metadata. In particular, backward incompatible changes (indicated by ",(0,i.jsx)(t.code,{children:"tx_version"})," increases) require adjusting the code base, review and publication of a new Polkadot app."]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"5."}),(0,i.jsx)(t.td,{children:"Kusama App - Runtime Support Updates"}),(0,i.jsxs)(t.td,{children:["Due to substrate/scale design requirements, we will make periodic updates to align with changes in the node metadata. In particular, backward incompatible changes (indicated by ",(0,i.jsx)(t.code,{children:"tx_version"})," increases) require adjusting the code base, review and publication of a new Polkadot app."]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"6."}),(0,i.jsx)(t.td,{children:"Community Support"}),(0,i.jsxs)(t.td,{children:["We will reactivate and improve of our support processes, response times and broaden the range of questions the support team are able to answer even when they are beyond of our original scope. We will initiate a support subdomain with relevant content, material and tutorials to support both the recovery extension as well as to mitigate future community issues. Moreover, we will improve coordination with ",(0,i.jsx)(t.a,{href:"mailto:support@polkadot.network",children:"support@polkadot.network"}),"."]})]})]})]}),"\n",(0,i.jsx)(t.p,{children:"Notes:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"We will strongly prioritize the release of recovery extensions to both Kusama / Polkadot Ledger apps."}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-2--support",children:"Milestone 2 \u2014 Support"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated Duration:"})," 8 weeks"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"})," variable due to different skillset but approximately equivalent to 2.5-3.0 FTEs"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"})," 24000 DAI (+VAT when applicable)"]}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0a."}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Apache 2.0"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0b."}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"We will document any protocol level changes made as part of the runtime support upgrades"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0c."}),(0,i.jsx)(t.td,{children:"Testing Guide"}),(0,i.jsx)(t.td,{children:"The code will have both unit and integration (zemu based) tests as our previous deliverables."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0d."}),(0,i.jsx)(t.td,{children:"Article/Tutorial"}),(0,i.jsx)(t.td,{children:"We will write an article or tutorial that explains the work done as part of the grant."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"1."}),(0,i.jsx)(t.td,{children:"Polkadot App - Runtime Support Updates"}),(0,i.jsx)(t.td,{children:"Similar objective as the previous milestone"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"2."}),(0,i.jsx)(t.td,{children:"Kusama App - Runtime Support Updates"}),(0,i.jsx)(t.td,{children:"Similar objective as the previous milestone"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"3."}),(0,i.jsx)(t.td,{children:"Community Support"}),(0,i.jsx)(t.td,{})]})]})]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>o});var s=n(96540);const i={},r=s.createContext(i);function a(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/13912f36.df8ef2ff.js b/assets/js/13912f36.df8ef2ff.js new file mode 100644 index 00000000000..464c2e18bfe --- /dev/null +++ b/assets/js/13912f36.df8ef2ff.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[47998],{30087:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"applications/maintenance/Zondax-Support","title":"Zondax Support & Maintenance","description":"Team Name:* Zondax","source":"@site/applications/maintenance/Zondax-Support.md","sourceDirName":"applications/maintenance","slug":"/applications/maintenance/Zondax-Support","permalink":"/applications/maintenance/Zondax-Support","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/maintenance/Zondax-Support.md","tags":[],"version":"current","frontMatter":{}}');var i=n(74848),r=n(28453);const a={},o="Zondax Support & Maintenance",d={},l=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Contact",id:"contact",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Introduction",id:"introduction",level:3},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 Support",id:"milestone-1--support",level:3},{value:"Milestone 2 \u2014 Support",id:"milestone-2--support",level:3}];function c(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"zondax-support--maintenance",children:"Zondax Support & Maintenance"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Team Name:"})," Zondax"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Payment Address:"})," DAI (ERC20) 0x64c37c278f4c975e44ffd99b6e5f0832a3e9e981"]}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,i.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(t.p,{children:"The aim of this proposal is to contribute and support the community in the face of multiple challenges connected to the use of Ledger applications in the Polkadot/Kusama/Substrate ecosystem."}),"\n",(0,i.jsx)(t.p,{children:"Our previous maintenance contract expired several months ago. Because of our commitment to the community (without funding or a contract), we have still been keeping track of support requests and upgrading applications as new runtimes were being released. In this respect, we are already discussing proposals to the respective treasuries but this process requires a deeper legal assessment on our side that may take several more weeks to get resolved."}),"\n",(0,i.jsx)(t.p,{children:"Because of the incredible success of substrate based projects, a sizeable amount of new users have recently joined the community. It is important to state that Zondax did not design or operate any web, desktop, mobile or browser extension in the Substrate ecosystem."}),"\n",(0,i.jsx)(t.p,{children:"Unfortunately, in recent days, changes to the user interface of Polkadot.js have resulted in some users incorrectly sending funds to destination addresses (actually public keys) derived for other networks. Although these funds are not irrecoverable, at the moment, these users cannot recover funds without a deep technical understanding of the problem. Actually, we do not recommend any of these stopgap solutions, and employing them may compromise the secrecy of Ledger\u2019s mnemonics."}),"\n",(0,i.jsx)(t.p,{children:"For this reason, we would like to propose a series of steps to address and mitigate future similar issues. As previously mentioned, we consider part of this grant as an intermediate step towards a fully treasury based approach. Unfortunately, given the urgency, we believe that in order to respond adequately, an open grant is more appropriate until we analyse in depth some legal uncertainties in the treasury model."}),"\n",(0,i.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,i.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,i.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Registered Legal Entity:"})," Zondax AG"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Registered Address:"})," 6300 Zug. Switzerland"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Name:"})," Juan Leni"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Contact Email:"})," ",(0,i.jsx)(t.a,{href:"mailto:juan.leni@zondax.ch",children:"juan.leni@zondax.ch"})]}),"\n",(0,i.jsx)(t.li,{children:"zondax.ch"}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,i.jsx)(t.p,{children:"Our team has very specific experience in this subject matter. Zondax developed both Polkadot and Kusama apps. We have also maintained both applications along all runtime upgrades (more than 50 upgrades) and provided technical support on engineering aspects. Actually, Zondax has developed tens of different Ledger apps for a wide range of blockchain projects. Zondax is also Substrate delivery partner and we have experience in embedded systems, blockchain core and protocol development and applied cryptography."}),"\n",(0,i.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/Zondax",children:"https://github.com/Zondax"})}),"\n"]}),"\n",(0,i.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,i.jsx)(t.h3,{id:"introduction",children:"Introduction"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.em,{children:"Ledger App Standard Runtime Upgrades"}),": Along the period of time covered by this grant (16 weeks), we will keep upgrading both the Polkadot and Ledger apps to align with important runtime upgrades, in particular, those that are not backwards compatible because of tx_version changes. We are already aware of some important changes happening in a few weeks."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.em,{children:"Ledger App (Polkadot & Kusama) Recovery Extensions"}),": We propose creating a special configuration setting that users can enable to allow for cross-chain derivation (multiple BIP44 derivation) on both Kusama and Polkadot apps. This would allow users to retrieve funds that have been sent by mistake to keypairs in other BIP44 paths and that are currently not easy to recover."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.em,{children:"JS key derivation library"}),": We strongly recommend not using mnemonics anywhere but on the HW wallets themselves. However, we understand the need for a simple tool to independently verify key derivation. For this reason, we propose creating an npm JavaScript and/or Typescript package that can derive keys in the exact same way that Ledger devices do."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.em,{children:"Support"}),": In Polkadot / Kusama, we do not develop or operate web/desktop/mobile wallets, servers, user interfaces, etc.. However, given our involvement in the community (and the fact that we have developed both Ledger apps in addition to other related grants), we are currently receiving a sizeable amount of requests and support questions."]}),"\n",(0,i.jsxs)(t.p,{children:["A large quantity of questions refers to the aforementioned problem (locked funds). In other cases, they are mostly about misusage or lack of training on polkadot.js user interface, connection issues or questions about polkadot and kusama network operations. We believe that newcomers to the ecosystem would definitely profit from a much better support experience and we can contribute to this. We also think that a closer collaboration and joining forces with ",(0,i.jsx)(t.a,{href:"https://support.polkadot.network",children:"https://support.polkadot.network"})," would be a major improvement."]}),"\n",(0,i.jsx)(t.p,{children:'Last but not least, in the following weeks after the release of the "recovery extensions", we understand that adequate and specific guidance and support will be necessary.'}),"\n",(0,i.jsx)(t.p,{children:"In this respect, we propose:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["To reactivate and improve our processes, response times and broadening the range of questions that the team at ",(0,i.jsx)(t.a,{href:"mailto:support@zondax.ch",children:"support@zondax.ch"})," are able to answer."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["To improve coordination with ",(0,i.jsx)(t.a,{href:"https://support.polkadot.network",children:"https://support.polkadot.network"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"To develop and expand a Polkadot/Kusama support website with documentation and articles that address a large quantity of the typical support questions that Zondax receives every day."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Estimated Duration:"})," 16 weeks"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Total Costs:"})," 49000 DAI (+VAT when applicable)"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-1--support",children:"Milestone 1 \u2014 Support"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated Duration:"})," 8 weeks"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"})," variable due to different skillset but approximately equivalent to 2.5-3.0 FTEs"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"})," 25000 DAI (+VAT when applicable)"]}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0a."}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Apache 2.0"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0b."}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"We will extend our documentation to include this additional features. We will also add more documentation about Ledger key derivation internals"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0c."}),(0,i.jsx)(t.td,{children:"Testing Guide"}),(0,i.jsx)(t.td,{children:"The code will have both unit and integration (zemu based) tests as our previous deliverables."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0d."}),(0,i.jsx)(t.td,{children:"Article/Tutorial"}),(0,i.jsx)(t.td,{children:"We will write an article or tutorial that explains the work done as part of the grant."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"1."}),(0,i.jsx)(t.td,{children:"Polkadot App Recovery Extension"}),(0,i.jsxs)(t.td,{children:["We will add a special recovery mode in the Polkadot app. To minimize mistakes, activating this option will require several steps and explicit confirmation. ",(0,i.jsx)("br",{})," This option will allow deriving Kusama key pairs. We will also adjust JS libraries and coordinate upgrades and Ledger review and publication process"]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"2."}),(0,i.jsx)(t.td,{children:"Kusama App Recovery Extension"}),(0,i.jsxs)(t.td,{children:["We will add a special recovery mode in the Polkadot app. To minimize mistakes, activating this option will require several steps and explicit confirmation. ",(0,i.jsx)("br",{})," This option will allow deriving Kusama key pairs. We will also adjust JS libraries and coordinate upgrades and Ledger review and publication process"]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"3."}),(0,i.jsx)(t.td,{children:"Ledger-Substrate-js Derivation"}),(0,i.jsx)(t.td,{children:"We will extend the ledger-substrate-js package to include host-side for Ledger's ed25519+BIP32 derivation. A minimal react site and examples will be provided"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"4."}),(0,i.jsx)(t.td,{children:"Polkadot App - Runtime Support Updates"}),(0,i.jsxs)(t.td,{children:["Due to substrate/scale design requirements, we will make periodic updates to align with changes in the node metadata. In particular, backward incompatible changes (indicated by ",(0,i.jsx)(t.code,{children:"tx_version"})," increases) require adjusting the code base, review and publication of a new Polkadot app."]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"5."}),(0,i.jsx)(t.td,{children:"Kusama App - Runtime Support Updates"}),(0,i.jsxs)(t.td,{children:["Due to substrate/scale design requirements, we will make periodic updates to align with changes in the node metadata. In particular, backward incompatible changes (indicated by ",(0,i.jsx)(t.code,{children:"tx_version"})," increases) require adjusting the code base, review and publication of a new Polkadot app."]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"6."}),(0,i.jsx)(t.td,{children:"Community Support"}),(0,i.jsxs)(t.td,{children:["We will reactivate and improve of our support processes, response times and broaden the range of questions the support team are able to answer even when they are beyond of our original scope. We will initiate a support subdomain with relevant content, material and tutorials to support both the recovery extension as well as to mitigate future community issues. Moreover, we will improve coordination with ",(0,i.jsx)(t.a,{href:"mailto:support@polkadot.network",children:"support@polkadot.network"}),"."]})]})]})]}),"\n",(0,i.jsx)(t.p,{children:"Notes:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"We will strongly prioritize the release of recovery extensions to both Kusama / Polkadot Ledger apps."}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"milestone-2--support",children:"Milestone 2 \u2014 Support"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Estimated Duration:"})," 8 weeks"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"FTE:"})," variable due to different skillset but approximately equivalent to 2.5-3.0 FTEs"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Costs:"})," 24000 DAI (+VAT when applicable)"]}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Number"}),(0,i.jsx)(t.th,{children:"Deliverable"}),(0,i.jsx)(t.th,{children:"Specification"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0a."}),(0,i.jsx)(t.td,{children:"License"}),(0,i.jsx)(t.td,{children:"Apache 2.0"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0b."}),(0,i.jsx)(t.td,{children:"Documentation"}),(0,i.jsx)(t.td,{children:"We will document any protocol level changes made as part of the runtime support upgrades"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0c."}),(0,i.jsx)(t.td,{children:"Testing Guide"}),(0,i.jsx)(t.td,{children:"The code will have both unit and integration (zemu based) tests as our previous deliverables."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"0d."}),(0,i.jsx)(t.td,{children:"Article/Tutorial"}),(0,i.jsx)(t.td,{children:"We will write an article or tutorial that explains the work done as part of the grant."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"1."}),(0,i.jsx)(t.td,{children:"Polkadot App - Runtime Support Updates"}),(0,i.jsx)(t.td,{children:"Similar objective as the previous milestone"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"2."}),(0,i.jsx)(t.td,{children:"Kusama App - Runtime Support Updates"}),(0,i.jsx)(t.td,{children:"Similar objective as the previous milestone"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"3."}),(0,i.jsx)(t.td,{children:"Community Support"}),(0,i.jsx)(t.td,{})]})]})]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>o});var s=n(96540);const i={},r=s.createContext(i);function a(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/14502dfa.2e85c12a.js b/assets/js/14502dfa.2e85c12a.js new file mode 100644 index 00000000000..866a9e755af --- /dev/null +++ b/assets/js/14502dfa.2e85c12a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[62910],{67363:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>d});const i=JSON.parse('{"id":"applications/project_bodhi","title":"Project Bodhi - A Composable & Innovative Stack for EVM on Substrate","description":"This document is referenced in the terms and conditions and therefore needs to contain all the required information. Don\'t remove any of the mandatory parts presented in bold letters or as headlines! See the Open Grants Program Process on how to submit a proposal.","source":"@site/applications/project_bodhi.md","sourceDirName":"applications","slug":"/applications/project_bodhi","permalink":"/applications/project_bodhi","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/project_bodhi.md","tags":[],"version":"current","frontMatter":{}}');var r=n(74848),s=n(28453);const o={},l="Project Bodhi - A Composable & Innovative Stack for EVM on Substrate",a={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Background",id:"background",level:4},{value:"Current Solution",id:"current-solution",level:4},{value:"Our solution - Project Bodhi: Composable & Innovative Stack for EVM on Substrate",id:"our-solution---project-bodhi-composable--innovative-stack-for-evm-on-substrate",level:4},{value:"Project Details",id:"project-details",level:3},{value:"Details documentations of the project",id:"details-documentations-of-the-project",level:4},{value:"PoC",id:"poc",level:4},{value:"Technology Stack",id:"technology-stack",level:4},{value:"Scope",id:"scope",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Team Github",id:"team-github",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 ERC20 Playground",id:"milestone-1-erc20-playground",level:3},{value:"Milestone 2 Example \u2014 Additional features",id:"milestone-2-example--additional-features",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const t={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"project-bodhi---a-composable--innovative-stack-for-evm-on-substrate",children:"Project Bodhi - A Composable & Innovative Stack for EVM on Substrate"})}),"\n",(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsxs)(t.p,{children:["This document is referenced in the terms and conditions and therefore needs to contain all the required information. Don't remove any of the mandatory parts presented in bold letters or as headlines! See the ",(0,r.jsx)(t.a,{href:"https://github.com/w3f/Open-Grants-Program/blob/master/README_2.md",children:"Open Grants Program Process"})," on how to submit a proposal."]}),"\n"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Team Name:"})," Acala"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Payment Address:"})," BTC address: ",(0,r.jsx)(t.code,{children:"1Q88PtW866r4bfv2eMphobP78QnsDrRKfY"})]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.em,{children:"The above combination of your GitHub account submitting the application and payment address will be your unique identifier during the program. Please keep them safe."})}),"\n",(0,r.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,r.jsx)(t.p,{children:"If this application in response to an RFP then please indicate this on the first line of this section."}),"\n",(0,r.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,r.jsx)(t.h4,{id:"background",children:"Background"}),"\n",(0,r.jsx)(t.p,{children:"It is clear to us that building a better, faster and cheaper Ethereum is not nearly enough. Just like Ethereum can do things Bitcoin can never do and subsequently inspired many new innovations, Substrate and Polkadot are categorically different from Ethereum that will empower many new types of innovations outside of the sandbox."}),"\n",(0,r.jsx)(t.p,{children:"On a domain-specific chain like the Acala chain, there're many domain specific runtime optimizations. For example, there\u2019re DeFi primitives, liquidity and users that can be tapped into, there are also innovations that are simply not possible on Ethereum - customizable economic policy, for example Acala\u2019s Flex-Fee allows users to pay transaction fee with any supported tokens; native cross-chain capability; on-chain governance apparatus (no more locked funds); full upgradability (no more contract migrations) and more."}),"\n",(0,r.jsx)(t.p,{children:"We\u2019d love to have all of these and EVM compatibility."}),"\n",(0,r.jsx)(t.h4,{id:"current-solution",children:"Current Solution"}),"\n",(0,r.jsx)(t.p,{children:"Current solution i.e. Frontier in principle is to emulate the Ethereum node experience. It aims to implement the full set of Ethereum RPC and emulates Ethereum block production process. This allows existing Ethereum tools such as Metamask and Remix to work with a Frontier enabled node seamlessly."}),"\n",(0,r.jsx)(t.p,{children:"Integrating Frontier have revealed the following challenges by their severity:"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"Confined inside the EVM Sandbox (High): users will need to use a Substrate wallet (e.g. Polkadot-js Extension) and Metamask at the same time if they ever want to taste the real power of Acala, Substrate or Polkadot for that matter. This is certainly a deal-breaker for us."}),"\n",(0,r.jsx)(t.li,{children:"Making Nodes more Expensive (Medium-High): Substrate does not store transactions by hash nor historical events, nor does it provide any event filtering ability. Frontier injects special block importing logic, storing the transactions and events into an off-chain auxiliary store in order to power the query API required by Ethereum. This kind of goes against the goal to have a lightweight node to lower barriers for people from anywhere to run nodes which helps the network to be more decentralized."}),"\n"]}),"\n",(0,r.jsx)(t.h4,{id:"our-solution---project-bodhi-composable--innovative-stack-for-evm-on-substrate",children:"Our solution - Project Bodhi: Composable & Innovative Stack for EVM on Substrate"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{src:"https://drive.google.com/uc?id=1_tD0lZkvqbhrJNRW6aIVMV3AhBnBCBSz",alt:"solution"})}),"\n",(0,r.jsx)(t.p,{children:"Project Bodhi offers these benefits"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"Full-stack composability: expose pallets API as EVM precompiled contracts"}),"\n",(0,r.jsx)(t.li,{children:"Single-wallet experience: emulate full Ethereum JS SDK client (bodhi.js)"}),"\n",(0,r.jsx)(t.li,{children:"Lightweight while Queryable: Substrate node + Indexer node"}),"\n",(0,r.jsx)(t.li,{children:"Iterate fast with Typescript"}),"\n",(0,r.jsx)(t.li,{children:"Revamped EVM economics"}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"This solution can be very useful for any domain-specific chains that want to offer the full experience of runtime and Smart Contract."}),"\n",(0,r.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,r.jsx)(t.p,{children:"We expect the teams to already have a solid idea about the project's expected final state."}),"\n",(0,r.jsx)(t.p,{children:"Therefore, we ask the teams to submit (where relevant):"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Mockups/designs of any UI components"}),"\n",(0,r.jsx)(t.li,{children:"API specifications of the core functionality"}),"\n",(0,r.jsx)(t.li,{children:"An overview of the technology stack to be used"}),"\n",(0,r.jsx)(t.li,{children:"Documentation of core components, protocols, architecture etc. to be deployed"}),"\n",(0,r.jsx)(t.li,{children:"PoC/MVP or other relevant prior work or research on the topic"}),"\n"]}),"\n",(0,r.jsx)(t.h4,{id:"details-documentations-of-the-project",children:"Details documentations of the project"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Project overview PPT ",(0,r.jsx)(t.a,{href:"https://docs.google.com/presentation/d/1CfEFz3a5hLN2R-G25E32wNFTENVwRtO3m2JHTf5KJZI/edit?usp=sharing",children:"here"})]}),"\n"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Project brief & plan ",(0,r.jsx)(t.a,{href:"https://docs.google.com/document/d/1iqkgei9RoXQnZlDp3IoSsnNDIylTCcBAB5RJJQeu0Ec/edit?usp=sharing",children:"here"})]}),"\n"]}),"\n",(0,r.jsx)(t.h4,{id:"poc",children:"PoC"}),"\n",(0,r.jsxs)(t.p,{children:["We have completed a proof-of-concept to verify feasibility of the project ",(0,r.jsx)(t.a,{href:"https://github.com/AcalaNetwork/evm-provider",children:"here"})]}),"\n",(0,r.jsx)(t.h4,{id:"technology-stack",children:"Technology Stack"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"The SDK (bodhi.js): this will be a new provider SDK which gets injected into existing web3.js, and wraps around polkadot-js to do Ethereum and Substrate translations (transactions, RPC calls, weights to gas etc.). Written in Typescript."}),"\n"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"The Substrate Node: implement additional RPC to interact with EVM"}),"\n",(0,r.jsxs)(t.li,{children:["The Indexer server: integrate it with bodhi.js, EVM event logging etc. Current implementation ",(0,r.jsx)(t.a,{href:"https://github.com/open-web3-stack/open-web3.js/tree/master/packages/indexer",children:"here"})," which both Laminar and Acala testnets have been using."]}),"\n"]}),"\n",(0,r.jsx)(t.h4,{id:"scope",children:"Scope"}),"\n",(0,r.jsx)(t.p,{children:"There are a lot of work involved to get all of these into a product-ready state, which is what we always aiming for, but it'd be too big to fit into one single open grant. Therefore we have carved out a scope specifically for this grant, followed by details for future work."}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Grant Scope: Project Bodhi MVP"}),"\nThe MVP scope involves"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"building all necessary components for ERC20 playground"}),"\n",(0,r.jsx)(t.li,{children:"integrate with an existing Ethereum project that is reasonably sophisticated and requires us to build address mapping between Substrate & EVM addresses"}),"\n",(0,r.jsx)(t.li,{children:"integrate with one existing Ethereum deployment tool e.g. Waffle"}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Future development"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Expose ",(0,r.jsx)(t.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library/tree/master/currencies",children:"orml-currencies"})," precompiles to EVM"]}),"\n",(0,r.jsxs)(t.li,{children:["Expose ",(0,r.jsx)(t.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library/tree/master/nft",children:"orml-nft"})," precompiles to EVM"]}),"\n",(0,r.jsx)(t.li,{children:"Implement and integrate with Indexer Node"}),"\n",(0,r.jsx)(t.li,{children:"Integrate fully with Polkadot Extension"}),"\n",(0,r.jsx)(t.li,{children:"EVM economics: state renting, contract existential deposit, contract deployment economics"}),"\n",(0,r.jsx)(t.li,{children:"Replace Gas system with Weights system"}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,r.jsx)(t.p,{children:"Nope, if so we'd be more than happy to leverage it than build it ourselves."}),"\n",(0,r.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,r.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Architect: Bryan Chen"}),"\n",(0,r.jsx)(t.li,{children:"Product Manager: Bette Chen"}),"\n",(0,r.jsx)(t.li,{children:"Runtime Developer: Shaun Wang"}),"\n",(0,r.jsx)(t.li,{children:"Full-stack Developer: Nantian Duan"}),"\n",(0,r.jsx)(t.li,{children:"Full-stack Developer: Ermal Kaleci"}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Contact Name:"})," Bette Chen"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Contact Email:"})," ",(0,r.jsx)(t.a,{href:"mailto:bette@acala.network",children:"bette@acala.network"})]}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"http://acala.network/",children:"Acala Website"})}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Registered Address:"})," 105 Cecil Street #15-01, The Octagon, Singapore 069534"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Registered Legal Entity:"})," ACALA PTE. LTD."]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,r.jsx)(t.p,{children:"The team is made of experienced Substrate builders, various members are contributors to substrate, polkadot-js and other core libraries."}),"\n",(0,r.jsx)(t.p,{children:"Bryan Chen is an active contributor to substrate codebase, a Polkadot community ambassador, and substrate/polkadot lecturer. He's the architect and technical brainpower behind the Laminar & Acala project."}),"\n",(0,r.jsx)(t.p,{children:"Bette Chen has more than a decade product/program/project management experience with background in Software Engineering and MBA from Otago and Duke. She's in charge of product and operation for Laminar & Acala."}),"\n",(0,r.jsx)(t.p,{children:"Nantian Duan is a full-stack developer, who built DApps for ChainX and now Laminar exchanges, he also actively contributes to polkadot-js and other code-bases."}),"\n",(0,r.jsx)(t.p,{children:"Ermal Kaleci is a full-stack developer. He's an award winning mobile application (e.g. healthcare app developer turned Substrate developer."}),"\n",(0,r.jsx)(t.p,{children:"Shaun Wang has been contributing to several Polkadot ecosystem open source libraries, including Substrate, parity-common, type-metadata, etc."}),"\n",(0,r.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["SDK: ",(0,r.jsx)(t.a,{href:"https://github.com/AcalaNetwork/bodhi.js",children:"https://github.com/AcalaNetwork/bodhi.js"})]}),"\n",(0,r.jsxs)(t.li,{children:["EVM: ",(0,r.jsx)(t.a,{href:"https://github.com/AcalaNetwork/Acala/tree/master/modules/evm",children:"https://github.com/AcalaNetwork/Acala/tree/master/modules/evm"})]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/bryan-chen-1ba8ba52/",children:"https://www.linkedin.com/in/bryan-chen-1ba8ba52/"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/bette-chen/",children:"https://www.linkedin.com/in/bette-chen/"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/shaopeng-wang/",children:"https://www.linkedin.com/in/shaopeng-wang/"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/ermal-kaleci-98445287/",children:"https://www.linkedin.com/in/ermal-kaleci-98445287/"})}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"team-github",children:"Team Github"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Bryan: ",(0,r.jsx)(t.a,{href:"https://github.com/orgs/laminar-protocol/people/xlc",children:"https://github.com/orgs/laminar-protocol/people/xlc"})]}),"\n",(0,r.jsxs)(t.li,{children:["Bette: ",(0,r.jsx)(t.a,{href:"https://github.com/orgs/laminar-protocol/people/bette7",children:"https://github.com/orgs/laminar-protocol/people/bette7"})]}),"\n",(0,r.jsxs)(t.li,{children:["Shaun: ",(0,r.jsx)(t.a,{href:"https://github.com/orgs/laminar-protocol/people/shaopengw",children:"https://github.com/orgs/laminar-protocol/people/shaopengw"})]}),"\n",(0,r.jsxs)(t.li,{children:["Ermal: ",(0,r.jsx)(t.a,{href:"https://github.com/orgs/laminar-protocol/people/ermalkaleci",children:"https://github.com/orgs/laminar-protocol/people/ermalkaleci"})]}),"\n",(0,r.jsxs)(t.li,{children:["Nantian: ",(0,r.jsx)(t.a,{href:"https://github.com/orgs/laminar-protocol/people/aniiantt",children:"https://github.com/orgs/laminar-protocol/people/aniiantt"})]}),"\n"]}),"\n",(0,r.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,r.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Total Estimated Duration:"})," 3 months"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Full-time equivalent (FTE):"})," 2FTE, the listed members would contribute to different deliverables based on their skill-set."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Total Costs:"})," 1.79 BTC"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"milestone-1-erc20-playground",children:"Milestone 1 ERC20 Playground"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Estimated Duration:"})," 1.5 month"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"FTE:"})," 2"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Costs:"})," 0.79 BTC"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Goal - Develop a web DApp & necessary components to allow users"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"input token name, symbol, supply amount and deploy new ERC20 tokens"}),"\n",(0,r.jsx)(t.li,{children:"input ERC20 address and query balances and allowance"}),"\n",(0,r.jsx)(t.li,{children:"make transfer / transferFrom / approve transaction"}),"\n"]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Number"}),(0,r.jsx)(t.th,{children:"Deliverable"}),(0,r.jsx)(t.th,{children:"Specification"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"0a."}),(0,r.jsx)(t.td,{children:"License"}),(0,r.jsx)(t.td,{children:"Apache 2.0"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"0b."}),(0,r.jsx)(t.td,{children:"Documentation"}),(0,r.jsx)(t.td,{children:"We will provide both inline documentation of the code and a tutorial that explains how a user can use the playground, and deploy their own ERC20 contracts"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"0c."}),(0,r.jsx)(t.td,{children:"Testing Guide"}),(0,r.jsx)(t.td,{children:"The code will have proper unit-test coverage to ensure functionality and robustness. In the guide we will describe how to run these tests"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"1."}),(0,r.jsx)(t.td,{children:"SDK - bodhi.js: integrate"}),(0,r.jsx)(t.td,{children:"Integrate with one of an existing Ethereum JS library. e.g. ethers"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"2."}),(0,r.jsx)(t.td,{children:"SDK - bodhi.js: translate"}),(0,r.jsx)(t.td,{children:"Translate Ethereum transactions to Substrate transactions; Translate some Ethereum RPC to Substrate RPC needed for the MVP"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"3."}),(0,r.jsx)(t.td,{children:"Substrate pallet: modules-evm"}),(0,r.jsx)(t.td,{children:"Fork of pallet-evm from Substrate with necessary changes; Implements new RPC to allow SDK to emulate eth_estimateGas and eth_call"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"4."}),(0,r.jsx)(t.td,{children:"Web DApp: ERC20 Playground"}),(0,r.jsx)(t.td,{children:"Implement the dapp"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"5."}),(0,r.jsx)(t.td,{children:"Article/Tutorial"}),(0,r.jsx)(t.td,{children:"We will write an article or tutorial that explains the work done as part of the grant."})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"milestone-2-example--additional-features",children:"Milestone 2 Example \u2014 Additional features"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Estimated Duration:"})," 1.5 month"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"FTE:"})," 2.5"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Costs:"})," 1 BTC"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Goal - Integrate with one existing Ethereum project"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"Be able to deploy & run e2e tests in Acala EVM"}),"\n",(0,r.jsx)(t.li,{children:"Make sure the SDK provided by the project works with minimal changes"}),"\n"]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Number"}),(0,r.jsx)(t.th,{children:"Deliverable"}),(0,r.jsx)(t.th,{children:"Specification"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"0a."}),(0,r.jsx)(t.td,{children:"License"}),(0,r.jsx)(t.td,{children:"Apache 2.0"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"0b."}),(0,r.jsx)(t.td,{children:"Documentation"}),(0,r.jsx)(t.td,{children:"We will provide both inline documentation of the code and a tutorial that explains how the existing Ethereum project is deployed and benefits"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"0c."}),(0,r.jsx)(t.td,{children:"Testing Guide"}),(0,r.jsx)(t.td,{children:"The code will have proper unit-test coverage to ensure functionality and robustness. In the guide we will describe how to run these tests"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"1."}),(0,r.jsx)(t.td,{children:"SDK - bodhi.js: deployment tool"}),(0,r.jsx)(t.td,{children:"Integrate with one of an existing Ethereum deployment and testing tool e.g. Waffle"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"2."}),(0,r.jsx)(t.td,{children:"SDK - bodhi.js: Address mapping"}),(0,r.jsx)(t.td,{children:"Use module-evm-accounts to handle address mapping between Substrate & EVM addresses; Handles all Ethereum RPC used by project SDK"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"3."}),(0,r.jsx)(t.td,{children:"Substrate pallet: module-evm-accounts"}),(0,r.jsx)(t.td,{children:"provide a two way mapping between Substrate accounts and EVM accounts so user only have deal with one account / private key"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"4."}),(0,r.jsx)(t.td,{children:"Substrate pallet: modules-evm"}),(0,r.jsx)(t.td,{children:"Drop the gas price mechanism from Ethereum in favor of the weights mechanism from Substrate"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"5."}),(0,r.jsx)(t.td,{children:"Integration"}),(0,r.jsx)(t.td,{children:"Deploy an existing contract and ensure it works e2e"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"6."}),(0,r.jsx)(t.td,{children:"Article/Tutorial"}),(0,r.jsx)(t.td,{children:"We will write an article or tutorial that explains the work done as part of the grant."})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,r.jsx)(t.p,{children:"Our vision is to provide a composable and innovative stack for EVM on Substrate. We've seen the power of composibility in DeFi on Ethereum, and it's not limited to one domain. Meanwhile we also want to break-free from Ethereum constraints, and offer innovative economic models, fight scams, and improve usability. We're determined to make this next level unified experience happen on Substrate, through the the Project Bodhi stack. We are going to eat our own dog food to use it for Acala. And we believe it will be useful for most domain-specific parachains/parathreads who have custom runtime and also want to leverage smart contracts."}),"\n",(0,r.jsx)(t.p,{children:"Future development"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Expose ",(0,r.jsx)(t.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library/tree/master/currencies",children:"orml-currencies"})," precompiles to EVM"]}),"\n",(0,r.jsxs)(t.li,{children:["Expose ",(0,r.jsx)(t.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library/tree/master/nft",children:"orml-nft"})," precompiles to EVM"]}),"\n",(0,r.jsx)(t.li,{children:"Implement and integrate with Indexer Node"}),"\n",(0,r.jsx)(t.li,{children:"Integrate fully with Polkadot Extension"}),"\n",(0,r.jsx)(t.li,{children:"EVM economics: state renting, contract existential deposit, contract deployment economics"}),"\n",(0,r.jsx)(t.li,{children:"Replace Gas system with Weights system"}),"\n"]}),"\n",(0,r.jsxs)(t.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,r.jsx)(t.p,{children:"Any additional information that you think is relevant to this application that hasn't already been included."}),"\n",(0,r.jsx)(t.p,{children:"Possible additional information to include:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["What work has been done so far?","\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"we have done PoC to prove it's possible, evaluated edge cases and figured out to the full-scope for production ready development."}),"\n",(0,r.jsxs)(t.li,{children:["Project overview PPT ",(0,r.jsx)(t.a,{href:"https://docs.google.com/presentation/d/1CfEFz3a5hLN2R-G25E32wNFTENVwRtO3m2JHTf5KJZI/edit?usp=sharing",children:"here"})]}),"\n",(0,r.jsxs)(t.li,{children:["Project brief & plan ",(0,r.jsx)(t.a,{href:"https://docs.google.com/document/d/1iqkgei9RoXQnZlDp3IoSsnNDIylTCcBAB5RJJQeu0Ec/edit?usp=sharing",children:"here"})]}),"\n",(0,r.jsxs)(t.li,{children:["PoC code ",(0,r.jsx)(t.a,{href:"https://github.com/AcalaNetwork/evm-provider",children:"here"})]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["Are there are any teams who have already contributed (financially) to the project?","\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Just the Acala team"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["Have you applied for other grants so far?","\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Acala has a grant from W3F for stablecoin. Founding members of Acala project, Laminar and Polkawallet also received grants for their respective projects."}),"\n"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>l});var i=n(96540);const r={},s=i.createContext(r);function o(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/14502dfa.46975707.js b/assets/js/14502dfa.46975707.js deleted file mode 100644 index cec29c9239e..00000000000 --- a/assets/js/14502dfa.46975707.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[62910],{1481:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>d});const i=JSON.parse('{"id":"applications/project_bodhi","title":"Project Bodhi - A Composable & Innovative Stack for EVM on Substrate","description":"This document is referenced in the terms and conditions and therefore needs to contain all the required information. Don\'t remove any of the mandatory parts presented in bold letters or as headlines! See the Open Grants Program Process on how to submit a proposal.","source":"@site/applications/project_bodhi.md","sourceDirName":"applications","slug":"/applications/project_bodhi","permalink":"/applications/project_bodhi","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/project_bodhi.md","tags":[],"version":"current","frontMatter":{}}');var r=n(74848),s=n(28453);const o={},l="Project Bodhi - A Composable & Innovative Stack for EVM on Substrate",a={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Background",id:"background",level:4},{value:"Current Solution",id:"current-solution",level:4},{value:"Our solution - Project Bodhi: Composable & Innovative Stack for EVM on Substrate",id:"our-solution---project-bodhi-composable--innovative-stack-for-evm-on-substrate",level:4},{value:"Project Details",id:"project-details",level:3},{value:"Details documentations of the project",id:"details-documentations-of-the-project",level:4},{value:"PoC",id:"poc",level:4},{value:"Technology Stack",id:"technology-stack",level:4},{value:"Scope",id:"scope",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Team Github",id:"team-github",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 ERC20 Playground",id:"milestone-1-erc20-playground",level:3},{value:"Milestone 2 Example \u2014 Additional features",id:"milestone-2-example--additional-features",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function c(e){const t={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"project-bodhi---a-composable--innovative-stack-for-evm-on-substrate",children:"Project Bodhi - A Composable & Innovative Stack for EVM on Substrate"})}),"\n",(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsxs)(t.p,{children:["This document is referenced in the terms and conditions and therefore needs to contain all the required information. Don't remove any of the mandatory parts presented in bold letters or as headlines! See the ",(0,r.jsx)(t.a,{href:"https://github.com/w3f/Open-Grants-Program/blob/master/README_2.md",children:"Open Grants Program Process"})," on how to submit a proposal."]}),"\n"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Team Name:"})," Acala"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Payment Address:"})," BTC address: ",(0,r.jsx)(t.code,{children:"1Q88PtW866r4bfv2eMphobP78QnsDrRKfY"})]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.em,{children:"The above combination of your GitHub account submitting the application and payment address will be your unique identifier during the program. Please keep them safe."})}),"\n",(0,r.jsxs)(t.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,r.jsx)(t.p,{children:"If this application in response to an RFP then please indicate this on the first line of this section."}),"\n",(0,r.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,r.jsx)(t.h4,{id:"background",children:"Background"}),"\n",(0,r.jsx)(t.p,{children:"It is clear to us that building a better, faster and cheaper Ethereum is not nearly enough. Just like Ethereum can do things Bitcoin can never do and subsequently inspired many new innovations, Substrate and Polkadot are categorically different from Ethereum that will empower many new types of innovations outside of the sandbox."}),"\n",(0,r.jsx)(t.p,{children:"On a domain-specific chain like the Acala chain, there're many domain specific runtime optimizations. For example, there\u2019re DeFi primitives, liquidity and users that can be tapped into, there are also innovations that are simply not possible on Ethereum - customizable economic policy, for example Acala\u2019s Flex-Fee allows users to pay transaction fee with any supported tokens; native cross-chain capability; on-chain governance apparatus (no more locked funds); full upgradability (no more contract migrations) and more."}),"\n",(0,r.jsx)(t.p,{children:"We\u2019d love to have all of these and EVM compatibility."}),"\n",(0,r.jsx)(t.h4,{id:"current-solution",children:"Current Solution"}),"\n",(0,r.jsx)(t.p,{children:"Current solution i.e. Frontier in principle is to emulate the Ethereum node experience. It aims to implement the full set of Ethereum RPC and emulates Ethereum block production process. This allows existing Ethereum tools such as Metamask and Remix to work with a Frontier enabled node seamlessly."}),"\n",(0,r.jsx)(t.p,{children:"Integrating Frontier have revealed the following challenges by their severity:"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"Confined inside the EVM Sandbox (High): users will need to use a Substrate wallet (e.g. Polkadot-js Extension) and Metamask at the same time if they ever want to taste the real power of Acala, Substrate or Polkadot for that matter. This is certainly a deal-breaker for us."}),"\n",(0,r.jsx)(t.li,{children:"Making Nodes more Expensive (Medium-High): Substrate does not store transactions by hash nor historical events, nor does it provide any event filtering ability. Frontier injects special block importing logic, storing the transactions and events into an off-chain auxiliary store in order to power the query API required by Ethereum. This kind of goes against the goal to have a lightweight node to lower barriers for people from anywhere to run nodes which helps the network to be more decentralized."}),"\n"]}),"\n",(0,r.jsx)(t.h4,{id:"our-solution---project-bodhi-composable--innovative-stack-for-evm-on-substrate",children:"Our solution - Project Bodhi: Composable & Innovative Stack for EVM on Substrate"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{src:"https://drive.google.com/uc?id=1_tD0lZkvqbhrJNRW6aIVMV3AhBnBCBSz",alt:"solution"})}),"\n",(0,r.jsx)(t.p,{children:"Project Bodhi offers these benefits"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"Full-stack composability: expose pallets API as EVM precompiled contracts"}),"\n",(0,r.jsx)(t.li,{children:"Single-wallet experience: emulate full Ethereum JS SDK client (bodhi.js)"}),"\n",(0,r.jsx)(t.li,{children:"Lightweight while Queryable: Substrate node + Indexer node"}),"\n",(0,r.jsx)(t.li,{children:"Iterate fast with Typescript"}),"\n",(0,r.jsx)(t.li,{children:"Revamped EVM economics"}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"This solution can be very useful for any domain-specific chains that want to offer the full experience of runtime and Smart Contract."}),"\n",(0,r.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,r.jsx)(t.p,{children:"We expect the teams to already have a solid idea about the project's expected final state."}),"\n",(0,r.jsx)(t.p,{children:"Therefore, we ask the teams to submit (where relevant):"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Mockups/designs of any UI components"}),"\n",(0,r.jsx)(t.li,{children:"API specifications of the core functionality"}),"\n",(0,r.jsx)(t.li,{children:"An overview of the technology stack to be used"}),"\n",(0,r.jsx)(t.li,{children:"Documentation of core components, protocols, architecture etc. to be deployed"}),"\n",(0,r.jsx)(t.li,{children:"PoC/MVP or other relevant prior work or research on the topic"}),"\n"]}),"\n",(0,r.jsx)(t.h4,{id:"details-documentations-of-the-project",children:"Details documentations of the project"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Project overview PPT ",(0,r.jsx)(t.a,{href:"https://docs.google.com/presentation/d/1CfEFz3a5hLN2R-G25E32wNFTENVwRtO3m2JHTf5KJZI/edit?usp=sharing",children:"here"})]}),"\n"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Project brief & plan ",(0,r.jsx)(t.a,{href:"https://docs.google.com/document/d/1iqkgei9RoXQnZlDp3IoSsnNDIylTCcBAB5RJJQeu0Ec/edit?usp=sharing",children:"here"})]}),"\n"]}),"\n",(0,r.jsx)(t.h4,{id:"poc",children:"PoC"}),"\n",(0,r.jsxs)(t.p,{children:["We have completed a proof-of-concept to verify feasibility of the project ",(0,r.jsx)(t.a,{href:"https://github.com/AcalaNetwork/evm-provider",children:"here"})]}),"\n",(0,r.jsx)(t.h4,{id:"technology-stack",children:"Technology Stack"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"The SDK (bodhi.js): this will be a new provider SDK which gets injected into existing web3.js, and wraps around polkadot-js to do Ethereum and Substrate translations (transactions, RPC calls, weights to gas etc.). Written in Typescript."}),"\n"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"The Substrate Node: implement additional RPC to interact with EVM"}),"\n",(0,r.jsxs)(t.li,{children:["The Indexer server: integrate it with bodhi.js, EVM event logging etc. Current implementation ",(0,r.jsx)(t.a,{href:"https://github.com/open-web3-stack/open-web3.js/tree/master/packages/indexer",children:"here"})," which both Laminar and Acala testnets have been using."]}),"\n"]}),"\n",(0,r.jsx)(t.h4,{id:"scope",children:"Scope"}),"\n",(0,r.jsx)(t.p,{children:"There are a lot of work involved to get all of these into a product-ready state, which is what we always aiming for, but it'd be too big to fit into one single open grant. Therefore we have carved out a scope specifically for this grant, followed by details for future work."}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Grant Scope: Project Bodhi MVP"}),"\nThe MVP scope involves"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"building all necessary components for ERC20 playground"}),"\n",(0,r.jsx)(t.li,{children:"integrate with an existing Ethereum project that is reasonably sophisticated and requires us to build address mapping between Substrate & EVM addresses"}),"\n",(0,r.jsx)(t.li,{children:"integrate with one existing Ethereum deployment tool e.g. Waffle"}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Future development"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Expose ",(0,r.jsx)(t.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library/tree/master/currencies",children:"orml-currencies"})," precompiles to EVM"]}),"\n",(0,r.jsxs)(t.li,{children:["Expose ",(0,r.jsx)(t.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library/tree/master/nft",children:"orml-nft"})," precompiles to EVM"]}),"\n",(0,r.jsx)(t.li,{children:"Implement and integrate with Indexer Node"}),"\n",(0,r.jsx)(t.li,{children:"Integrate fully with Polkadot Extension"}),"\n",(0,r.jsx)(t.li,{children:"EVM economics: state renting, contract existential deposit, contract deployment economics"}),"\n",(0,r.jsx)(t.li,{children:"Replace Gas system with Weights system"}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,r.jsx)(t.p,{children:"Nope, if so we'd be more than happy to leverage it than build it ourselves."}),"\n",(0,r.jsxs)(t.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,r.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Architect: Bryan Chen"}),"\n",(0,r.jsx)(t.li,{children:"Product Manager: Bette Chen"}),"\n",(0,r.jsx)(t.li,{children:"Runtime Developer: Shaun Wang"}),"\n",(0,r.jsx)(t.li,{children:"Full-stack Developer: Nantian Duan"}),"\n",(0,r.jsx)(t.li,{children:"Full-stack Developer: Ermal Kaleci"}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Contact Name:"})," Bette Chen"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Contact Email:"})," ",(0,r.jsx)(t.a,{href:"mailto:bette@acala.network",children:"bette@acala.network"})]}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"http://acala.network/",children:"Acala Website"})}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Registered Address:"})," 105 Cecil Street #15-01, The Octagon, Singapore 069534"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Registered Legal Entity:"})," ACALA PTE. LTD."]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,r.jsx)(t.p,{children:"The team is made of experienced Substrate builders, various members are contributors to substrate, polkadot-js and other core libraries."}),"\n",(0,r.jsx)(t.p,{children:"Bryan Chen is an active contributor to substrate codebase, a Polkadot community ambassador, and substrate/polkadot lecturer. He's the architect and technical brainpower behind the Laminar & Acala project."}),"\n",(0,r.jsx)(t.p,{children:"Bette Chen has more than a decade product/program/project management experience with background in Software Engineering and MBA from Otago and Duke. She's in charge of product and operation for Laminar & Acala."}),"\n",(0,r.jsx)(t.p,{children:"Nantian Duan is a full-stack developer, who built DApps for ChainX and now Laminar exchanges, he also actively contributes to polkadot-js and other code-bases."}),"\n",(0,r.jsx)(t.p,{children:"Ermal Kaleci is a full-stack developer. He's an award winning mobile application (e.g. healthcare app developer turned Substrate developer."}),"\n",(0,r.jsx)(t.p,{children:"Shaun Wang has been contributing to several Polkadot ecosystem open source libraries, including Substrate, parity-common, type-metadata, etc."}),"\n",(0,r.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["SDK: ",(0,r.jsx)(t.a,{href:"https://github.com/AcalaNetwork/bodhi.js",children:"https://github.com/AcalaNetwork/bodhi.js"})]}),"\n",(0,r.jsxs)(t.li,{children:["EVM: ",(0,r.jsx)(t.a,{href:"https://github.com/AcalaNetwork/Acala/tree/master/modules/evm",children:"https://github.com/AcalaNetwork/Acala/tree/master/modules/evm"})]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/bryan-chen-1ba8ba52/",children:"https://www.linkedin.com/in/bryan-chen-1ba8ba52/"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/bette-chen/",children:"https://www.linkedin.com/in/bette-chen/"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/shaopeng-wang/",children:"https://www.linkedin.com/in/shaopeng-wang/"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://www.linkedin.com/in/ermal-kaleci-98445287/",children:"https://www.linkedin.com/in/ermal-kaleci-98445287/"})}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"team-github",children:"Team Github"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Bryan: ",(0,r.jsx)(t.a,{href:"https://github.com/orgs/laminar-protocol/people/xlc",children:"https://github.com/orgs/laminar-protocol/people/xlc"})]}),"\n",(0,r.jsxs)(t.li,{children:["Bette: ",(0,r.jsx)(t.a,{href:"https://github.com/orgs/laminar-protocol/people/bette7",children:"https://github.com/orgs/laminar-protocol/people/bette7"})]}),"\n",(0,r.jsxs)(t.li,{children:["Shaun: ",(0,r.jsx)(t.a,{href:"https://github.com/orgs/laminar-protocol/people/shaopengw",children:"https://github.com/orgs/laminar-protocol/people/shaopengw"})]}),"\n",(0,r.jsxs)(t.li,{children:["Ermal: ",(0,r.jsx)(t.a,{href:"https://github.com/orgs/laminar-protocol/people/ermalkaleci",children:"https://github.com/orgs/laminar-protocol/people/ermalkaleci"})]}),"\n",(0,r.jsxs)(t.li,{children:["Nantian: ",(0,r.jsx)(t.a,{href:"https://github.com/orgs/laminar-protocol/people/aniiantt",children:"https://github.com/orgs/laminar-protocol/people/aniiantt"})]}),"\n"]}),"\n",(0,r.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,r.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Total Estimated Duration:"})," 3 months"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Full-time equivalent (FTE):"})," 2FTE, the listed members would contribute to different deliverables based on their skill-set."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Total Costs:"})," 1.79 BTC"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"milestone-1-erc20-playground",children:"Milestone 1 ERC20 Playground"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Estimated Duration:"})," 1.5 month"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"FTE:"})," 2"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Costs:"})," 0.79 BTC"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Goal - Develop a web DApp & necessary components to allow users"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"input token name, symbol, supply amount and deploy new ERC20 tokens"}),"\n",(0,r.jsx)(t.li,{children:"input ERC20 address and query balances and allowance"}),"\n",(0,r.jsx)(t.li,{children:"make transfer / transferFrom / approve transaction"}),"\n"]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Number"}),(0,r.jsx)(t.th,{children:"Deliverable"}),(0,r.jsx)(t.th,{children:"Specification"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"0a."}),(0,r.jsx)(t.td,{children:"License"}),(0,r.jsx)(t.td,{children:"Apache 2.0"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"0b."}),(0,r.jsx)(t.td,{children:"Documentation"}),(0,r.jsx)(t.td,{children:"We will provide both inline documentation of the code and a tutorial that explains how a user can use the playground, and deploy their own ERC20 contracts"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"0c."}),(0,r.jsx)(t.td,{children:"Testing Guide"}),(0,r.jsx)(t.td,{children:"The code will have proper unit-test coverage to ensure functionality and robustness. In the guide we will describe how to run these tests"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"1."}),(0,r.jsx)(t.td,{children:"SDK - bodhi.js: integrate"}),(0,r.jsx)(t.td,{children:"Integrate with one of an existing Ethereum JS library. e.g. ethers"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"2."}),(0,r.jsx)(t.td,{children:"SDK - bodhi.js: translate"}),(0,r.jsx)(t.td,{children:"Translate Ethereum transactions to Substrate transactions; Translate some Ethereum RPC to Substrate RPC needed for the MVP"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"3."}),(0,r.jsx)(t.td,{children:"Substrate pallet: modules-evm"}),(0,r.jsx)(t.td,{children:"Fork of pallet-evm from Substrate with necessary changes; Implements new RPC to allow SDK to emulate eth_estimateGas and eth_call"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"4."}),(0,r.jsx)(t.td,{children:"Web DApp: ERC20 Playground"}),(0,r.jsx)(t.td,{children:"Implement the dapp"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"5."}),(0,r.jsx)(t.td,{children:"Article/Tutorial"}),(0,r.jsx)(t.td,{children:"We will write an article or tutorial that explains the work done as part of the grant."})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"milestone-2-example--additional-features",children:"Milestone 2 Example \u2014 Additional features"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Estimated Duration:"})," 1.5 month"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"FTE:"})," 2.5"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Costs:"})," 1 BTC"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Goal - Integrate with one existing Ethereum project"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"Be able to deploy & run e2e tests in Acala EVM"}),"\n",(0,r.jsx)(t.li,{children:"Make sure the SDK provided by the project works with minimal changes"}),"\n"]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Number"}),(0,r.jsx)(t.th,{children:"Deliverable"}),(0,r.jsx)(t.th,{children:"Specification"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"0a."}),(0,r.jsx)(t.td,{children:"License"}),(0,r.jsx)(t.td,{children:"Apache 2.0"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"0b."}),(0,r.jsx)(t.td,{children:"Documentation"}),(0,r.jsx)(t.td,{children:"We will provide both inline documentation of the code and a tutorial that explains how the existing Ethereum project is deployed and benefits"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"0c."}),(0,r.jsx)(t.td,{children:"Testing Guide"}),(0,r.jsx)(t.td,{children:"The code will have proper unit-test coverage to ensure functionality and robustness. In the guide we will describe how to run these tests"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"1."}),(0,r.jsx)(t.td,{children:"SDK - bodhi.js: deployment tool"}),(0,r.jsx)(t.td,{children:"Integrate with one of an existing Ethereum deployment and testing tool e.g. Waffle"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"2."}),(0,r.jsx)(t.td,{children:"SDK - bodhi.js: Address mapping"}),(0,r.jsx)(t.td,{children:"Use module-evm-accounts to handle address mapping between Substrate & EVM addresses; Handles all Ethereum RPC used by project SDK"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"3."}),(0,r.jsx)(t.td,{children:"Substrate pallet: module-evm-accounts"}),(0,r.jsx)(t.td,{children:"provide a two way mapping between Substrate accounts and EVM accounts so user only have deal with one account / private key"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"4."}),(0,r.jsx)(t.td,{children:"Substrate pallet: modules-evm"}),(0,r.jsx)(t.td,{children:"Drop the gas price mechanism from Ethereum in favor of the weights mechanism from Substrate"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"5."}),(0,r.jsx)(t.td,{children:"Integration"}),(0,r.jsx)(t.td,{children:"Deploy an existing contract and ensure it works e2e"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"6."}),(0,r.jsx)(t.td,{children:"Article/Tutorial"}),(0,r.jsx)(t.td,{children:"We will write an article or tutorial that explains the work done as part of the grant."})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"future-plans",children:"Future Plans"}),"\n",(0,r.jsx)(t.p,{children:"Our vision is to provide a composable and innovative stack for EVM on Substrate. We've seen the power of composibility in DeFi on Ethereum, and it's not limited to one domain. Meanwhile we also want to break-free from Ethereum constraints, and offer innovative economic models, fight scams, and improve usability. We're determined to make this next level unified experience happen on Substrate, through the the Project Bodhi stack. We are going to eat our own dog food to use it for Acala. And we believe it will be useful for most domain-specific parachains/parathreads who have custom runtime and also want to leverage smart contracts."}),"\n",(0,r.jsx)(t.p,{children:"Future development"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Expose ",(0,r.jsx)(t.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library/tree/master/currencies",children:"orml-currencies"})," precompiles to EVM"]}),"\n",(0,r.jsxs)(t.li,{children:["Expose ",(0,r.jsx)(t.a,{href:"https://github.com/open-web3-stack/open-runtime-module-library/tree/master/nft",children:"orml-nft"})," precompiles to EVM"]}),"\n",(0,r.jsx)(t.li,{children:"Implement and integrate with Indexer Node"}),"\n",(0,r.jsx)(t.li,{children:"Integrate fully with Polkadot Extension"}),"\n",(0,r.jsx)(t.li,{children:"EVM economics: state renting, contract existential deposit, contract deployment economics"}),"\n",(0,r.jsx)(t.li,{children:"Replace Gas system with Weights system"}),"\n"]}),"\n",(0,r.jsxs)(t.h2,{id:"additional-information-heavy_plus_sign",children:["Additional Information ","\u2795"]}),"\n",(0,r.jsx)(t.p,{children:"Any additional information that you think is relevant to this application that hasn't already been included."}),"\n",(0,r.jsx)(t.p,{children:"Possible additional information to include:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["What work has been done so far?","\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"we have done PoC to prove it's possible, evaluated edge cases and figured out to the full-scope for production ready development."}),"\n",(0,r.jsxs)(t.li,{children:["Project overview PPT ",(0,r.jsx)(t.a,{href:"https://docs.google.com/presentation/d/1CfEFz3a5hLN2R-G25E32wNFTENVwRtO3m2JHTf5KJZI/edit?usp=sharing",children:"here"})]}),"\n",(0,r.jsxs)(t.li,{children:["Project brief & plan ",(0,r.jsx)(t.a,{href:"https://docs.google.com/document/d/1iqkgei9RoXQnZlDp3IoSsnNDIylTCcBAB5RJJQeu0Ec/edit?usp=sharing",children:"here"})]}),"\n",(0,r.jsxs)(t.li,{children:["PoC code ",(0,r.jsx)(t.a,{href:"https://github.com/AcalaNetwork/evm-provider",children:"here"})]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["Are there are any teams who have already contributed (financially) to the project?","\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Just the Acala team"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["Have you applied for other grants so far?","\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Acala has a grant from W3F for stablecoin. Founding members of Acala project, Laminar and Polkawallet also received grants for their respective projects."}),"\n"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>l});var i=n(96540);const r={},s=i.createContext(r);function o(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/145e8536.9305901d.js b/assets/js/145e8536.9305901d.js new file mode 100644 index 00000000000..8e25b207634 --- /dev/null +++ b/assets/js/145e8536.9305901d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[83868],{90916:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"applications/DICO","title":"DICO","description":"Team Name:* DICO Team","source":"@site/applications/DICO.md","sourceDirName":"applications","slug":"/applications/DICO","permalink":"/applications/DICO","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/DICO.md","tags":[],"version":"current","frontMatter":{}}');var s=n(74848),r=n(28453);const l={},o="DICO",d={},c=[{value:"Project Overview",id:"project-overview",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Mockups and UI components",id:"mockups-and-ui-components",level:4},{value:"ICO",id:"ico",level:4},{value:"KYC",id:"kyc",level:4},{value:"DAO",id:"dao",level:4},{value:"Swap",id:"swap",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team",id:"team",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 Implement KYC, ICO, DAO Modules",id:"milestone-1--implement-kyc-ico-dao-modules",level:3}];function a(e){const t={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"dico",children:"DICO"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Team Name:"})," DICO Team"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Payment Address:"})," 0x0211ae8881a3a0a41150627da07c900b78144a84(USDT)"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Status:"})," ",(0,s.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/pull/636#issuecomment-1144901144",children:"Terminated"})]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"project-overview",children:"Project Overview"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"DICO"})," is to create a decentralized and governable ICO platform for the Polkadot/Kusama ecology. Our platform will allow entrepreneurs to quickly find investors. In a word: Be a platform to link ideas and capital."]}),"\n",(0,s.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(t.p,{children:"Our platform offers a few key features:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.em,{children:"KYC"}),": Includes identity authentication service(IAS), KYC users, and supervisor. responsible for providing users with a decentralized KYC certification service."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.em,{children:"ICO"}),": Apply for ICO and council review for the project party."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.em,{children:"DAO"}),": Integrate governance with the ICO module to provide governance logic for the opening and closing of the ICO of the project."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.em,{children:"Swap"}),": Provide an exchange agreement for tokens and an interest-generating method for collateralized tokens into the liquidity pool for disposable tokens"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.em,{children:"Oracle"}),": Provide an oracle for the platform."]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"Our project use substrate framework and is built on top of Polkadot/Kusama ecosystem:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.em,{children:"KYC"}),",",(0,s.jsx)(t.em,{children:"ICO"}),",",(0,s.jsx)(t.em,{children:"DAO"})," and ",(0,s.jsx)(t.em,{children:"Swap"})," modules are built on substrate runtime. they complete the basic user interaction logic."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.em,{children:"Oracle"})," enabled off-chain worker to query the current price feed of the platform or other tokens."]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(t.h4,{id:"mockups-and-ui-components",children:"Mockups and UI components"}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Me/Me-home.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)(t.h4,{id:"ico",children:"ICO"}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Ico/Add-project0.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Ico/council-ico-permitIco1.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Ico/ico-getReward.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Ico/ico-request%20release.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Ico/ico-unlock1.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Ico/ico-userReleaseIcoAmount1.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)(t.h4,{id:"kyc",children:"KYC"}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Kyc/Apply_certification2.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Kyc/Kyc_Clear2.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)(t.h4,{id:"dao",children:"DAO"}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Dao/Dao-create%20motion.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Dao/Dao-create%20motion.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)(t.h4,{id:"swap",children:"Swap"}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Swap/swap-AddLiquidity1.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Swap/swap-Exchange1-1.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Swap/swap-removeLiquidity1.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Where and how does your project fit into the ecosystem?"}),"\n"]}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsx)(t.p,{children:"We are aiming to offer the first decentralized KYC/ICO in the Polkadot/Kusama ecosystem."}),"\n"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)?"}),"\n"]}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsx)(t.p,{children:"To start with, our target audience are the DICO/DOT/KSM/other tokens holders who are looking to participate in ICO project. and the team funded through ICO.at this stage, we will provide a KYC area for legal regional ICO. next\uff0c we provide derivatives related to ICO. Such as providing token exchange and staking protocol. at this stage, allow any token holders to participate in their promising projects. in addition,We will go to support or self-improve all the required ecology, such as social. finally, we provide stable project maintenance and update functions that keep pace with the times, and serve the entire ecological stability."}),"\n"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"What need(s) does your project meet?"}),"\n"]}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsx)(t.p,{children:"Be a platform to link ideas and capital."}),"\n"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem?","\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["If so, how is your project different? ",(0,s.jsx)(t.em,{children:"coinlist"}),"\uff0cA token financing platform, all the mainstream virtual currencies above can be traded and financed. It provides token financing, but does not provide the funds needed by early creator and the control of the entire project cycle."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"If not, are there similar projects in related ecosystems? We have not yet found a project that will be focusing ICO and derivatives."}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"team",children:"Team"}),"\n",(0,s.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Name of team leader: gogomath"}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Names of team members",":Daniel",", gogomath,Dunham,cf,tokggo,cj1afs,meliart"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Contact Name:"})," gogomath"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Contact Email:"})," ",(0,s.jsx)(t.a,{href:"mailto:gogomath@outlook.com",children:"gogomath@outlook.com"})]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Website:"})," ",(0,s.jsx)(t.a,{href:"https://dico.io/",children:"https://dico.io/"})]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsx)(t.p,{children:"(we are in the process of registering the legal entity)"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Registered Address:"})," N/A"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Registered Legal Entity:"})," N/A"]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.em,{children:"Daniel"}),": Daniel is currently a venture investor at ",(0,s.jsx)(t.a,{href:"https://web3.vc/#/",children:"WEB3 Venture Capital"}),". Daniel previously is a solidity/EOS engineer."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.em,{children:"gogomath"}),": gogomath is the CTO of the team and has 10 years of software development experience. The fields involved are big data, machine learning, SAAS, devops. And familiar with eth/near/polkadot in the field of digital encryption development."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.em,{children:"cf"}),": cf is a full stack engineer with five years of development experience. and familiar with Go/Rust/Java/Python/Javascript/Typescript"]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.em,{children:"tokggo"}),": tokggo is the test/devops engineer of the team, he is very good at writing various documents.and has 6 years of development experience."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.em,{children:"cj1afs"}),": A graduate student in financial mathematics, a new friend in the field of blockchain, will participate in the development of various pallets."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.em,{children:"meliart"}),": Back-end development engineer with 3 years of experience, familiar with Go/Rust/Node/Typescript."]}),"\n",(0,s.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/DICO-TEAM/dico-chain",children:"https://github.com/DICO-TEAM/dico-chain"})}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.em,{children:"interface iterations and resource"}),": ",(0,s.jsx)(t.a,{href:"https://github.com/DICO-TEAM/resources",children:"https://github.com/DICO-TEAM/resources"})]}),"\n",(0,s.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Total Estimated Duration:"})," 1 months"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Full-Time Equivalent (FTE):"})," 6 FTE"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Total Costs:"})," 10k USD"]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"milestone-1--implement-kyc-ico-dao-modules",children:"Milestone 1 \u2014 Implement KYC, ICO, DAO Modules"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Estimated duration:"})," 1 month"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"FTE:"})," 6"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Costs:"})," 10,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(t.th,{children:"Deliverable"}),(0,s.jsx)(t.th,{children:"Specification"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0"}),(0,s.jsx)(t.td,{children:"License"}),(0,s.jsx)(t.td,{children:"Apache 2.0"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"1.a"}),(0,s.jsx)(t.td,{children:"Substrate module: KYC pallet"}),(0,s.jsxs)(t.td,{children:["KYC pallet Includes identity authentication service(IAS), KYC users, and swordholder. responsible for providing users with a decentralized KYC certification service.and provide area authentication of the account.Detailed explanation is described ",(0,s.jsx)(t.a,{href:"https://github.com/DICO-TEAM/dico-chain/tree/main/pallets/kyc/README.md",children:"here"})]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"1.b"}),(0,s.jsx)(t.td,{children:"Substrate module: ICO pallet"}),(0,s.jsxs)(t.td,{children:["Apply for ICO and council review for the project party. Detailed explanation is described ",(0,s.jsx)(t.a,{href:"https://github.com/DICO-TEAM/dico-chain/tree/main/pallets/ico/README.md",children:"here"})]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"1.c"}),(0,s.jsx)(t.td,{children:"Substrate module: DAO pallet"}),(0,s.jsxs)(t.td,{children:["Integrate governance with the ICO module to provide governance logic for the opening and closing of the ICO of the project. Detailed explanation is described ",(0,s.jsx)(t.a,{href:"https://github.com/DICO-TEAM/dico-chain/tree/main/pallets/dao/README.md",children:"here"})]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"2.a."}),(0,s.jsx)(t.td,{children:"Integration with front-end(dapp)"}),(0,s.jsx)(t.td,{children:"integrate our existing front end to the finalized module."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"2.b"}),(0,s.jsx)(t.td,{children:"Tutorial"}),(0,s.jsx)(t.td,{children:"We will create an screenshot tutorial and a demo video that will explain how users can start using the platform for KYC and ICO."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,s.jsx)(t.td,{children:"Testing Guide/Documentation"}),(0,s.jsx)(t.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests and add inline documentation of the code."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"4."}),(0,s.jsx)(t.td,{children:"Docker"}),(0,s.jsx)(t.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"5."}),(0,s.jsx)(t.td,{children:"Docker-compose"}),(0,s.jsx)(t.td,{children:"We will provide a docker-compse.yml that can be used to test parachain version node delivered with this milestone.in this version, users will be invited to this testnet"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"6."}),(0,s.jsx)(t.td,{children:"Lending module(research oriented)"}),(0,s.jsx)(t.td,{children:"Innovation combining ICO and borrowing/lending. In our 2.0 version, we hope to introduce an innovation combining lending and ICO. The goal is to make ICO more diversified through borrowing/lending. Through the logic of borrowing/lending, and participation in ICO, the participants will be more diverse. At the same time, in the 2.0 testnet, we will let users participate in this pallet. According to the test results, publish a blog to show the test results."})]})]})]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>l,x:()=>o});var i=n(96540);const s={},r=i.createContext(s);function l(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/145e8536.ceafc112.js b/assets/js/145e8536.ceafc112.js deleted file mode 100644 index 2b9cce63acd..00000000000 --- a/assets/js/145e8536.ceafc112.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[83868],{86778:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"applications/DICO","title":"DICO","description":"Team Name:* DICO Team","source":"@site/applications/DICO.md","sourceDirName":"applications","slug":"/applications/DICO","permalink":"/applications/DICO","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/DICO.md","tags":[],"version":"current","frontMatter":{}}');var s=n(74848),r=n(28453);const l={},o="DICO",d={},c=[{value:"Project Overview",id:"project-overview",level:2},{value:"Overview",id:"overview",level:3},{value:"Project Details",id:"project-details",level:3},{value:"Mockups and UI components",id:"mockups-and-ui-components",level:4},{value:"ICO",id:"ico",level:4},{value:"KYC",id:"kyc",level:4},{value:"DAO",id:"dao",level:4},{value:"Swap",id:"swap",level:4},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team",id:"team",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Development Status \ud83d\udcd6",id:"development-status-open_book",level:2},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 \u2014 Implement KYC, ICO, DAO Modules",id:"milestone-1--implement-kyc-ico-dao-modules",level:3}];function a(e){const t={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"dico",children:"DICO"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Team Name:"})," DICO Team"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Payment Address:"})," 0x0211ae8881a3a0a41150627da07c900b78144a84(USDT)"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Status:"})," ",(0,s.jsx)(t.a,{href:"https://github.com/w3f/Grants-Program/pull/636#issuecomment-1144901144",children:"Terminated"})]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"project-overview",children:"Project Overview"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"DICO"})," is to create a decentralized and governable ICO platform for the Polkadot/Kusama ecology. Our platform will allow entrepreneurs to quickly find investors. In a word: Be a platform to link ideas and capital."]}),"\n",(0,s.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(t.p,{children:"Our platform offers a few key features:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.em,{children:"KYC"}),": Includes identity authentication service(IAS), KYC users, and supervisor. responsible for providing users with a decentralized KYC certification service."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.em,{children:"ICO"}),": Apply for ICO and council review for the project party."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.em,{children:"DAO"}),": Integrate governance with the ICO module to provide governance logic for the opening and closing of the ICO of the project."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.em,{children:"Swap"}),": Provide an exchange agreement for tokens and an interest-generating method for collateralized tokens into the liquidity pool for disposable tokens"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.em,{children:"Oracle"}),": Provide an oracle for the platform."]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"Our project use substrate framework and is built on top of Polkadot/Kusama ecosystem:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.em,{children:"KYC"}),",",(0,s.jsx)(t.em,{children:"ICO"}),",",(0,s.jsx)(t.em,{children:"DAO"})," and ",(0,s.jsx)(t.em,{children:"Swap"})," modules are built on substrate runtime. they complete the basic user interaction logic."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.em,{children:"Oracle"})," enabled off-chain worker to query the current price feed of the platform or other tokens."]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"project-details",children:"Project Details"}),"\n",(0,s.jsx)(t.h4,{id:"mockups-and-ui-components",children:"Mockups and UI components"}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Me/Me-home.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)(t.h4,{id:"ico",children:"ICO"}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Ico/Add-project0.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Ico/council-ico-permitIco1.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Ico/ico-getReward.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Ico/ico-request%20release.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Ico/ico-unlock1.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Ico/ico-userReleaseIcoAmount1.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)(t.h4,{id:"kyc",children:"KYC"}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Kyc/Apply_certification2.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Kyc/Kyc_Clear2.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)(t.h4,{id:"dao",children:"DAO"}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Dao/Dao-create%20motion.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Dao/Dao-create%20motion.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)(t.h4,{id:"swap",children:"Swap"}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Swap/swap-AddLiquidity1.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Swap/swap-Exchange1-1.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"https://cdn.jsdelivr.net/gh/DICO-TEAM/resources/actions/app/Swap/swap-removeLiquidity1.jpg",width:"50%",syt:!0,height:"50%"})}),"\n",(0,s.jsx)(t.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Where and how does your project fit into the ecosystem?"}),"\n"]}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsx)(t.p,{children:"We are aiming to offer the first decentralized KYC/ICO in the Polkadot/Kusama ecosystem."}),"\n"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)?"}),"\n"]}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsx)(t.p,{children:"To start with, our target audience are the DICO/DOT/KSM/other tokens holders who are looking to participate in ICO project. and the team funded through ICO.at this stage, we will provide a KYC area for legal regional ICO. next\uff0c we provide derivatives related to ICO. Such as providing token exchange and staking protocol. at this stage, allow any token holders to participate in their promising projects. in addition,We will go to support or self-improve all the required ecology, such as social. finally, we provide stable project maintenance and update functions that keep pace with the times, and serve the entire ecological stability."}),"\n"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"What need(s) does your project meet?"}),"\n"]}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsx)(t.p,{children:"Be a platform to link ideas and capital."}),"\n"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem?","\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["If so, how is your project different? ",(0,s.jsx)(t.em,{children:"coinlist"}),"\uff0cA token financing platform, all the mainstream virtual currencies above can be traded and financed. It provides token financing, but does not provide the funds needed by early creator and the control of the entire project cycle."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"If not, are there similar projects in related ecosystems? We have not yet found a project that will be focusing ICO and derivatives."}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"team",children:"Team"}),"\n",(0,s.jsx)(t.h3,{id:"team-members",children:"Team members"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Name of team leader: gogomath"}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Names of team members",":Daniel",", gogomath,Dunham,cf,tokggo,cj1afs,meliart"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"contact",children:"Contact"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Contact Name:"})," gogomath"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Contact Email:"})," ",(0,s.jsx)(t.a,{href:"mailto:gogomath@outlook.com",children:"gogomath@outlook.com"})]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Website:"})," ",(0,s.jsx)(t.a,{href:"https://dico.io/",children:"https://dico.io/"})]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,s.jsx)(t.p,{children:"(we are in the process of registering the legal entity)"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Registered Address:"})," N/A"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Registered Legal Entity:"})," N/A"]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.em,{children:"Daniel"}),": Daniel is currently a venture investor at ",(0,s.jsx)(t.a,{href:"https://web3.vc/#/",children:"WEB3 Venture Capital"}),". Daniel previously is a solidity/EOS engineer."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.em,{children:"gogomath"}),": gogomath is the CTO of the team and has 10 years of software development experience. The fields involved are big data, machine learning, SAAS, devops. And familiar with eth/near/polkadot in the field of digital encryption development."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.em,{children:"cf"}),": cf is a full stack engineer with five years of development experience. and familiar with Go/Rust/Java/Python/Javascript/Typescript"]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.em,{children:"tokggo"}),": tokggo is the test/devops engineer of the team, he is very good at writing various documents.and has 6 years of development experience."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.em,{children:"cj1afs"}),": A graduate student in financial mathematics, a new friend in the field of blockchain, will participate in the development of various pallets."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.em,{children:"meliart"}),": Back-end development engineer with 3 years of experience, familiar with Go/Rust/Node/Typescript."]}),"\n",(0,s.jsx)(t.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/DICO-TEAM/dico-chain",children:"https://github.com/DICO-TEAM/dico-chain"})}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"development-status-open_book",children:["Development Status ","\ud83d\udcd6"]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.em,{children:"interface iterations and resource"}),": ",(0,s.jsx)(t.a,{href:"https://github.com/DICO-TEAM/resources",children:"https://github.com/DICO-TEAM/resources"})]}),"\n",(0,s.jsxs)(t.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,s.jsx)(t.h3,{id:"overview-1",children:"Overview"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Total Estimated Duration:"})," 1 months"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Full-Time Equivalent (FTE):"})," 6 FTE"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Total Costs:"})," 10k USD"]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"milestone-1--implement-kyc-ico-dao-modules",children:"Milestone 1 \u2014 Implement KYC, ICO, DAO Modules"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Estimated duration:"})," 1 month"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"FTE:"})," 6"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Costs:"})," 10,000 USD"]}),"\n"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"right"},children:"Number"}),(0,s.jsx)(t.th,{children:"Deliverable"}),(0,s.jsx)(t.th,{children:"Specification"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"0"}),(0,s.jsx)(t.td,{children:"License"}),(0,s.jsx)(t.td,{children:"Apache 2.0"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"1.a"}),(0,s.jsx)(t.td,{children:"Substrate module: KYC pallet"}),(0,s.jsxs)(t.td,{children:["KYC pallet Includes identity authentication service(IAS), KYC users, and swordholder. responsible for providing users with a decentralized KYC certification service.and provide area authentication of the account.Detailed explanation is described ",(0,s.jsx)(t.a,{href:"https://github.com/DICO-TEAM/dico-chain/tree/main/pallets/kyc/README.md",children:"here"})]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"1.b"}),(0,s.jsx)(t.td,{children:"Substrate module: ICO pallet"}),(0,s.jsxs)(t.td,{children:["Apply for ICO and council review for the project party. Detailed explanation is described ",(0,s.jsx)(t.a,{href:"https://github.com/DICO-TEAM/dico-chain/tree/main/pallets/ico/README.md",children:"here"})]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"1.c"}),(0,s.jsx)(t.td,{children:"Substrate module: DAO pallet"}),(0,s.jsxs)(t.td,{children:["Integrate governance with the ICO module to provide governance logic for the opening and closing of the ICO of the project. Detailed explanation is described ",(0,s.jsx)(t.a,{href:"https://github.com/DICO-TEAM/dico-chain/tree/main/pallets/dao/README.md",children:"here"})]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"2.a."}),(0,s.jsx)(t.td,{children:"Integration with front-end(dapp)"}),(0,s.jsx)(t.td,{children:"integrate our existing front end to the finalized module."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"2.b"}),(0,s.jsx)(t.td,{children:"Tutorial"}),(0,s.jsx)(t.td,{children:"We will create an screenshot tutorial and a demo video that will explain how users can start using the platform for KYC and ICO."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"3."}),(0,s.jsx)(t.td,{children:"Testing Guide/Documentation"}),(0,s.jsx)(t.td,{children:"Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests and add inline documentation of the code."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"4."}),(0,s.jsx)(t.td,{children:"Docker"}),(0,s.jsx)(t.td,{children:"We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"5."}),(0,s.jsx)(t.td,{children:"Docker-compose"}),(0,s.jsx)(t.td,{children:"We will provide a docker-compse.yml that can be used to test parachain version node delivered with this milestone.in this version, users will be invited to this testnet"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"right"},children:"6."}),(0,s.jsx)(t.td,{children:"Lending module(research oriented)"}),(0,s.jsx)(t.td,{children:"Innovation combining ICO and borrowing/lending. In our 2.0 version, we hope to introduce an innovation combining lending and ICO. The goal is to make ICO more diversified through borrowing/lending. Through the logic of borrowing/lending, and participation in ICO, the participants will be more diverse. At the same time, in the 2.0 testnet, we will let users participate in this pallet. According to the test results, publish a blog to show the test results."})]})]})]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>l,x:()=>o});var i=n(96540);const s={},r=i.createContext(s);function l(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/146bbd18.11293d04.js b/assets/js/146bbd18.11293d04.js new file mode 100644 index 00000000000..fa32d6d25cc --- /dev/null +++ b/assets/js/146bbd18.11293d04.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgrants=self.webpackChunkgrants||[]).push([[51261],{68503:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>l,metadata:()=>a,toc:()=>d});const a=JSON.parse('{"id":"applications/SubGame_Network","title":"SubGame Network","description":"Team Name:* SubGame-Network","source":"@site/applications/SubGame_Network.md","sourceDirName":"applications","slug":"/applications/SubGame_Network","permalink":"/applications/SubGame_Network","draft":false,"unlisted":false,"editUrl":"https://github.com/w3f/Grants-Program/edit/master/applications/SubGame_Network.md","tags":[],"version":"current","frontMatter":{}}');var i=s(74848),r=s(28453);const l={},t="SubGame Network",c={},d=[{value:"Project Overview \ud83d\udcc4",id:"project-overview-page_facing_up",level:2},{value:"Overview",id:"overview",level:3},{value:"Introduction",id:"introduction",level:4},{value:"Integration",id:"integration",level:4},{value:"Team Interest",id:"team-interest",level:4},{value:"Project Details",id:"project-details",level:3},{value:"Components",id:"components",level:4},{value:"Scenarios",id:"scenarios",level:4},{value:"First Game Template",id:"first-game-template",level:3},{value:"Ecosystem Fit",id:"ecosystem-fit",level:3},{value:"Team \ud83d\udc65",id:"team-busts_in_silhouette",level:2},{value:"Team members",id:"team-members",level:3},{value:"Contact",id:"contact",level:3},{value:"Legal Structure",id:"legal-structure",level:3},{value:"Team's experience",id:"teams-experience",level:3},{value:"Team Code Repos",id:"team-code-repos",level:3},{value:"Team LinkedIn Profiles",id:"team-linkedin-profiles",level:3},{value:"Development Roadmap \ud83d\udd29",id:"development-roadmap-nut_and_bolt",level:2},{value:"Overview",id:"overview-1",level:3},{value:"Milestone 1 : The testnet is completed and the first playable game template is built",id:"milestone-1---the-testnet-is-completed-and-the-first-playable-game-template-is-built",level:3},{value:"Future Plans",id:"future-plans",level:2},{value:"Marketing and Community Plans",id:"marketing-and-community-plans",level:4},{value:"Development Plans",id:"development-plans",level:4},{value:"Additional Information \u2795",id:"additional-information-heavy_plus_sign",level:2}];function m(e){const n={a:"a",annotation:"annotation",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",math:"math",mi:"mi",mo:"mo",mrow:"mrow",ol:"ol",p:"p",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"subgame-network",children:"SubGame Network"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Team Name:"})," ",(0,i.jsx)(n.a,{href:"https://github.com/SubGame-Network",children:"SubGame-Network"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Payment Address:"})," 3CK6HN4y2ZEKX7JMfdegds7B7GrUSmv65c"]}),"\n"]}),"\n",(0,i.jsxs)(n.h2,{id:"project-overview-page_facing_up",children:["Project Overview ","\ud83d\udcc4"]}),"\n",(0,i.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(n.h4,{id:"introduction",children:"Introduction"}),"\n",(0,i.jsx)(n.p,{children:"SubGame is a decentralized game platform. There are a large number of game templates running on the platform, so that participants can quickly start the game. The NPOS consensus mechanism is adopted to ensure the fairness of the entire platform. After the mainnet is launched, community autonomy allows the entire ecosystem Cycle forward.\nSubGame will also provide a friendly game front end, allowing players to enjoy the joy of the game."}),"\n",(0,i.jsx)(n.p,{children:"The early stage will be based on quiz and probability game templates. For example, you can choose a random factor to create a guessing game and play with your friends. You can also play World Cup quiz with your own friends, and of course you can also buy lottery tickets on it. The above games all exist as templates, you can start the game or participate in other people\u2019s games"}),"\n",(0,i.jsx)(n.h4,{id:"integration",children:"Integration"}),"\n",(0,i.jsx)(n.p,{children:"SubGame is based on the Substrate 2.0 Framework. Substrate's powerful non-fork upgrade solution will provide more help to the changing game platform. We will also use OCW to introduce more game random factors. SubGame will serve as a parachain , To provide more possibilities for the entire Polkadot ecology"}),"\n",(0,i.jsx)(n.h4,{id:"team-interest",children:"Team Interest"}),"\n",(0,i.jsx)(n.p,{children:"All members of the team are convinced that blockchain will change the world, and have been working hard to create more transparent rules of the game. We have been observing and learning Substrate technology for more than a year. From the current point of view, substrate is our best choice."}),"\n",(0,i.jsx)(n.h3,{id:"project-details",children:"Project Details"}),"\n",(0,i.jsx)(n.h4,{id:"components",children:"Components"}),"\n",(0,i.jsxs)(n.p,{children:["The SubGame project contains SubName Node, Game Template Library, Gamee Chips, Game Center and Front End.\n",(0,i.jsx)(n.img,{src:"https://raw.githubusercontent.com/SubGame-Network/graphics/main/subgame-core-modules.png",alt:"modules"})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"SubGame Node"})," is the customized chain node for SubGame network build by Substrate 2.0 ,it contains the basic functionalities as a normal chain node but also provides the ability to fetch external data needed for games with the OCW (Off-chain Worker) from Substrate 2.0 Framework."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsxs)(n.strong,{children:["SubGame Token ",(0,i.jsxs)(n.span,{className:"katex",children:[(0,i.jsx)(n.span,{className:"katex-mathml",children:(0,i.jsx)(n.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,i.jsxs)(n.semantics,{children:[(0,i.jsxs)(n.mrow,{children:[(0,i.jsx)(n.mi,{children:"S"}),(0,i.jsx)(n.mi,{children:"G"}),(0,i.jsx)(n.mi,{children:"B"}),(0,i.jsx)(n.mo,{children:"\u2217"}),(0,i.jsx)(n.mo,{children:"\u2217"}),(0,i.jsx)(n.mi,{children:"i"}),(0,i.jsx)(n.mi,{children:"s"}),(0,i.jsx)(n.mi,{children:"t"}),(0,i.jsx)(n.mi,{children:"h"}),(0,i.jsx)(n.mi,{children:"e"}),(0,i.jsx)(n.mi,{children:"n"}),(0,i.jsx)(n.mi,{children:"a"}),(0,i.jsx)(n.mi,{children:"t"}),(0,i.jsx)(n.mi,{children:"i"}),(0,i.jsx)(n.mi,{children:"v"}),(0,i.jsx)(n.mi,{children:"e"}),(0,i.jsx)(n.mi,{children:"t"}),(0,i.jsx)(n.mi,{children:"o"}),(0,i.jsx)(n.mi,{children:"k"}),(0,i.jsx)(n.mi,{children:"e"}),(0,i.jsx)(n.mi,{children:"n"}),(0,i.jsx)(n.mi,{children:"o"}),(0,i.jsx)(n.mi,{children:"f"}),(0,i.jsx)(n.mi,{children:"t"}),(0,i.jsx)(n.mi,{children:"h"}),(0,i.jsx)(n.mi,{children:"e"}),(0,i.jsx)(n.mi,{children:"S"}),(0,i.jsx)(n.mi,{children:"u"}),(0,i.jsx)(n.mi,{children:"b"}),(0,i.jsx)(n.mi,{children:"G"}),(0,i.jsx)(n.mi,{children:"a"}),(0,i.jsx)(n.mi,{children:"m"}),(0,i.jsx)(n.mi,{children:"e"}),(0,i.jsx)(n.mi,{children:"N"}),(0,i.jsx)(n.mi,{children:"e"}),(0,i.jsx)(n.mi,{children:"t"}),(0,i.jsx)(n.mi,{children:"w"}),(0,i.jsx)(n.mi,{children:"o"}),(0,i.jsx)(n.mi,{children:"r"}),(0,i.jsx)(n.mi,{children:"k"}),(0,i.jsx)(n.mo,{separator:"true",children:","}),(0,i.jsx)(n.mi,{children:"a"}),(0,i.jsx)(n.mi,{children:"n"}),(0,i.jsx)(n.mi,{children:"d"}),(0,i.jsx)(n.mi,{children:"i"}),(0,i.jsx)(n.mi,{children:"t"}),(0,i.jsx)(n.mi,{children:"w"}),(0,i.jsx)(n.mi,{children:"i"}),(0,i.jsx)(n.mi,{children:"l"}),(0,i.jsx)(n.mi,{children:"l"}),(0,i.jsx)(n.mi,{children:"p"}),(0,i.jsx)(n.mi,{children:"l"}),(0,i.jsx)(n.mi,{children:"a"}),(0,i.jsx)(n.mi,{children:"y"}),(0,i.jsx)(n.mi,{children:"t"}),(0,i.jsx)(n.mi,{children:"h"}),(0,i.jsx)(n.mi,{children:"e"}),(0,i.jsx)(n.mi,{children:"r"}),(0,i.jsx)(n.mi,{children:"o"}),(0,i.jsx)(n.mi,{children:"l"}),(0,i.jsx)(n.mi,{children:"e"}),(0,i.jsx)(n.mi,{children:"o"}),(0,i.jsx)(n.mi,{children:"f"}),(0,i.jsx)(n.mi,{children:"g"}),(0,i.jsx)(n.mi,{children:"o"}),(0,i.jsx)(n.mi,{children:"v"}),(0,i.jsx)(n.mi,{children:"e"}),(0,i.jsx)(n.mi,{children:"r"}),(0,i.jsx)(n.mi,{children:"n"}),(0,i.jsx)(n.mi,{children:"a"}),(0,i.jsx)(n.mi,{children:"n"}),(0,i.jsx)(n.mi,{children:"c"}),(0,i.jsx)(n.mi,{children:"e"}),(0,i.jsx)(n.mi,{children:"a"}),(0,i.jsx)(n.mi,{children:"n"}),(0,i.jsx)(n.mi,{children:"d"}),(0,i.jsx)(n.mi,{children:"o"}),(0,i.jsx)(n.mi,{children:"t"}),(0,i.jsx)(n.mi,{children:"h"}),(0,i.jsx)(n.mi,{children:"e"}),(0,i.jsx)(n.mi,{children:"r"}),(0,i.jsx)(n.mi,{children:"u"}),(0,i.jsx)(n.mi,{children:"t"}),(0,i.jsx)(n.mi,{children:"i"}),(0,i.jsx)(n.mi,{children:"l"}),(0,i.jsx)(n.mi,{children:"i"}),(0,i.jsx)(n.mi,{children:"t"}),(0,i.jsx)(n.mi,{children:"i"}),(0,i.jsx)(n.mi,{children:"e"}),(0,i.jsx)(n.mi,{children:"s"}),(0,i.jsx)(n.mi,{mathvariant:"normal",children:"."}),(0,i.jsx)(n.mo,{children:"\u2217"}),(0,i.jsx)(n.mo,{children:"\u2217"})]}),(0,i.jsx)(n.annotation,{encoding:"application/x-tex",children:"SGB** is the native token of the SubGame Network, and it will play the role of governance and other utilities. **"})]})})}),(0,i.jsxs)(n.span,{className:"katex-html","aria-hidden":"true",children:[(0,i.jsxs)(n.span,{className:"base",children:[(0,i.jsx)(n.span,{className:"strut",style:{height:"0.6833em"}}),(0,i.jsx)(n.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"SGB"}),(0,i.jsx)(n.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,i.jsx)(n.span,{className:"mbin",children:"\u2217"}),(0,i.jsx)(n.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,i.jsxs)(n.span,{className:"base",children:[(0,i.jsx)(n.span,{className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,i.jsx)(n.span,{className:"mord",children:"\u2217"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"i"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"s"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"t"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"h"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"e"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"na"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"t"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"i"}),(0,i.jsx)(n.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"e"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"t"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"o"}),(0,i.jsx)(n.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"},children:"k"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"e"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"n"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"o"}),(0,i.jsx)(n.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"f"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"t"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"h"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"e"}),(0,i.jsx)(n.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"u"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"b"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"G"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"am"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"e"}),(0,i.jsx)(n.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"N"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"e"}),(0,i.jsx)(n.span,{className:"mord mathnormal",style:{marginRight:"0.02691em"},children:"tw"}),(0,i.jsx)(n.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"or"}),(0,i.jsx)(n.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"},children:"k"}),(0,i.jsx)(n.span,{className:"mpunct",children:","}),(0,i.jsx)(n.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"an"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"d"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"i"}),(0,i.jsx)(n.span,{className:"mord mathnormal",style:{marginRight:"0.02691em"},children:"tw"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"i"}),(0,i.jsx)(n.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"llpl"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"a"}),(0,i.jsx)(n.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"t"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"h"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"ero"}),(0,i.jsx)(n.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"eo"}),(0,i.jsx)(n.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"f"}),(0,i.jsx)(n.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"g"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"o"}),(0,i.jsx)(n.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"}),(0,i.jsx)(n.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"er"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"nan"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"ce"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"an"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"d"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"o"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"t"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"h"}),(0,i.jsx)(n.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"er"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"u"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"t"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"i"}),(0,i.jsx)(n.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"i"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"t"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"i"}),(0,i.jsx)(n.span,{className:"mord mathnormal",children:"es"}),(0,i.jsx)(n.span,{className:"mord",children:"."}),(0,i.jsx)(n.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,i.jsx)(n.span,{className:"mbin",children:"\u2217"}),(0,i.jsx)(n.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,i.jsxs)(n.span,{className:"base",children:[(0,i.jsx)(n.span,{className:"strut",style:{height:"0.4653em"}}),(0,i.jsx)(n.span,{className:"mord",children:"\u2217"})]})]})]}),"SGB"]})," like ",(0,i.jsx)(n.strong,{children:"$DOT"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Game Chips:"})," is one of the core modules of SubGame, mainly including chips purchase, redemption and income distribution."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Game Template Library"})," is an ever-increasing library of game templates, and new game additions continue to increase through public chain upgrades. for"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Game Center"})," stores all game instances and player data. It is the data center of the entire platform"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Front End"})," will adapt to the basic game front end to ensure a friendly user experience"]}),"\n"]}),"\n",(0,i.jsx)(n.h4,{id:"scenarios",children:"Scenarios"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"Scenario to buy chips and transfer"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://raw.githubusercontent.com/SubGame-Network/graphics/main/chips-transfer-%26-buy.png",alt:"transfer"})}),"\n",(0,i.jsx)(n.p,{children:"As shown above, we will realize the chip exchange of $SGB in the first stage, and the ETH exchange in the later stage, and the chips of each address can also be freely transferred"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"Scenario to create new game and play games"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://raw.githubusercontent.com/SubGame-Network/graphics/main/create-%26-play-games.png",alt:"playgames"})}),"\n",(0,i.jsxs)(n.p,{children:["Players can build their own games or participate in other people\u2019s games. Each game has a gameplay designed in the ",(0,i.jsx)(n.code,{children:"pallet-gametemplates"}),". The first ",(0,i.jsx)(n.code,{children:"pallet-gametemplates"})," will be continuously designed and adjusted during the first development stage."]}),"\n",(0,i.jsx)(n.h3,{id:"first-game-template",children:"First Game Template"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Template Name:"})," Guess"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Design"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Random factor:"})," the hash string of the future block"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Gameplay:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Players create a new game instance and set parameters","\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Block number used for guessing"}),"\n",(0,i.jsx)(n.li,{children:"The smallest and largest bet amount"}),"\n",(0,i.jsx)(n.li,{children:"Game odds"}),"\n",(0,i.jsx)(n.li,{children:"Chips amount"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"All players can participate in the game and bet before the guessed block appears"}),"\n",(0,i.jsx)(n.li,{children:"When the target block is generated, the game chips are settled according to the game rules on the chain (this logic can be written in decl_module -> on_finalize)"}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"UI mock-ups"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"https://www.figma.com/file/8bSq6NEYOKfbcdFXLtsmFR/SubGame",children:"https://www.figma.com/file/8bSq6NEYOKfbcdFXLtsmFR/SubGame"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://raw.githubusercontent.com/SubGame-Network/graphics/main/ui-mockups.png",alt:"mock-ups"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"The hash string of the future block:"})," This random factor can actually be modified a lot to make more interesting games, such as lottery games."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"In addition to the above-mentioned future block hash as a random factor, we can still introduce off-chain data through OCW from the game design, for example, we want to guess the World Cup or NBA\nThe imagination of the game is endless, but the core of our first phase is to create a fair and reasonable distribution of benefits, and we will continue to increase game templates."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"ecosystem-fit",children:"Ecosystem Fit"}),"\n",(0,i.jsx)(n.p,{children:"At present, there is no real decentralized game platform, but more decentralized games. Unlike the past, this time we are going to build a truly decentralized game ecological platform."}),"\n",(0,i.jsxs)(n.h2,{id:"team-busts_in_silhouette",children:["Team ","\ud83d\udc65"]}),"\n",(0,i.jsx)(n.h3,{id:"team-members",children:"Team members"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Shanfeng xie - Project Lead/Management & Research"}),"\n",(0,i.jsx)(n.li,{children:"QiangKai - Full-stack Developer"}),"\n",(0,i.jsx)(n.li,{children:"ZheSheng Zhang - Front End Developer"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"contact",children:"Contact"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Contact Name:"})," shanfeng"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Contact Email:"})," ",(0,i.jsx)(n.a,{href:"mailto:shanfenggood@gmail.com",children:"shanfenggood@gmail.com"})]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"legal-structure",children:"Legal Structure"}),"\n",(0,i.jsx)(n.p,{children:"No Legal Entity"}),"\n",(0,i.jsx)(n.h3,{id:"teams-experience",children:"Team's experience"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Shanfeng Xie"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Full-stack Developer"}),"\n",(0,i.jsx)(n.li,{children:"Over 15 years of experiences in Development and Management"}),"\n",(0,i.jsx)(n.li,{children:"Has plenty of experience in Software Development and Blockchain Development"}),"\n",(0,i.jsx)(n.li,{children:"Currently, focus on Cross-chain technologies"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"QiangKai"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Full-stack Developer"}),"\n",(0,i.jsx)(n.li,{children:"Over 8 years of experiences in Product Development"}),"\n",(0,i.jsx)(n.li,{children:"Has plenty of experience in Software Development"}),"\n",(0,i.jsx)(n.li,{children:"Currently focused on Blockchain Development and Cross-chain Technologies"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"ZheSheng"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Front-end Developer"}),"\n",(0,i.jsx)(n.li,{children:"Over 6 years of experiences in Product Development"}),"\n",(0,i.jsx)(n.li,{children:"Has plenty of experience in React"}),"\n",(0,i.jsx)(n.li,{children:"Currently focused on Blockchain Development"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"team-code-repos",children:"Team Code Repos"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/SubGame-Network/",children:"https://github.com/SubGame-Network/"})}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"team-linkedin-profiles",children:"Team LinkedIn Profiles"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.linkedin.com/in/shanfengxie/",children:"https://www.linkedin.com/in/shanfengxie/"})}),"\n"]}),"\n",(0,i.jsxs)(n.h2,{id:"development-roadmap-nut_and_bolt",children:["Development Roadmap ","\ud83d\udd29"]}),"\n",(0,i.jsx)(n.h3,{id:"overview-1",children:"Overview"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Total Estimated Duration:"})," 12 weeks"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Full-time equivalent (FTE):"})," 3 FTE"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Total Costs:"})," 0.4 BTC"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"milestone-1---the-testnet-is-completed-and-the-first-playable-game-template-is-built",children:"Milestone 1 : The testnet is completed and the first playable game template is built"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Total Estimated Duration:"})," 12 weeks"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Full-time equivalent (FTE):"})," 3 FTE"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Total Costs:"})," 0.4 BTC"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Number"}),(0,i.jsx)(n.th,{children:"Deliverable"}),(0,i.jsx)(n.th,{children:"Specification"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0a."}),(0,i.jsx)(n.td,{children:"License"}),(0,i.jsx)(n.td,{children:"Apache 2.0 / MIT / Unlicense"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0b."}),(0,i.jsx)(n.td,{children:"Documentation"}),(0,i.jsx)(n.td,{children:"Documents containing the description of whole architecture design for SubGame Network."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0c."}),(0,i.jsx)(n.td,{children:"Testing Guide"}),(0,i.jsx)(n.td,{children:"We will provide a full test suite and guide for SubGame node manage and game template library api."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1a."}),(0,i.jsx)(n.td,{children:"SubGame Node"}),(0,i.jsx)(n.td,{children:"Provide node compilation and installation instructions, start the test network"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2a."}),(0,i.jsx)(n.td,{children:"pallet-chips"}),(0,i.jsx)(n.td,{children:"The Chips module has been developed and you can use Chips to participate in the game"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{children:"Storage:"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Chips get(fn get_chips): map hasher(blake2_128_concat) T::AccountId => u32;"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{children:"Function:"}),(0,i.jsxs)(n.td,{children:["1)",(0,i.jsx)(n.code,{children:"pub fn transfer_chips(origin,chips:u32)->dispatch::DispatchResult"})," ",(0,i.jsx)("br",{}),(0,i.jsx)("br",{})," 2)",(0,i.jsx)(n.code,{children:"pub fn sgt_to_chips(origin,pay:T::Balance)->dispatch::DispatchResult"})]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2b."}),(0,i.jsx)(n.td,{children:"pallet-gametemplates"}),(0,i.jsx)(n.td,{children:"Complete the basic module design and development of the template library, and complete the first game template"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{children:"Storage:"}),(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"Templates get(fn get_templates): Vec