--- a/README.md +++ b/README.md @@ -133,6 +133,81 @@ Additional CLI usage options are available and may be shown by running `cargo run -- --help`. +## Building and Running as Parachain locally + +Rust toolchain: nightly-2021-04-23 +Note: checkout this project and polkadot project (see below) in the sibling folders (both under the same folder) + +### Parachain Code and Other Configurations + +Some changes need to be made in the parachain code depending on the relay chain it connects to + +1. Chain Spec (incl. chain_spec.rs) +``` +Extensions { + relay_chain: "rococo".into(), + para_id: PARA_ID, +} +``` + +2. All collators need to have at least existential balance + + + + +### Build relay + +``` +git clone https://github.com/paritytech/polkadot.git +cd polkadot +git checkout aa386760 +cargo build --release +``` + +### Build parachain + +Run in the root of this project: +``` +cargo --build +``` + +### Run 4-node Relay + +1. Download `rococo-custom-4.json` chain spec here: https://substrate.dev/cumulus-workshop/shared/chainspecs/rococo-custom-4.json +2. Use these instructions to launch 4 nodes: https://substrate.dev/cumulus-workshop/#/en/2-relay-chain/1-launch + +Example (Run in polkadot folder. Replace `12D3KooWNLAmKcyee3oqSgTMthaQVXaAcXeo8RrGCzMfMVA3B5on` with output from Alice node): +``` +./target/release/polkadot --alice --validator --base-path ./cumulus_relay0 --chain rococo-custom-4.json --port 50555 --ws-port 9944 +./target/release/polkadot --bob --validator --base-path ./cumulus_relay1 --chain rococo-custom-4.json --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/12D3KooWNLAmKcyee3oqSgTMthaQVXaAcXeo8RrGCzMfMVA3B5on --port 50556 --ws-port 9945 +./target/release/polkadot --charlie --validator --base-path ./cumulus_relay1 --chain rococo-custom-4.json --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/12D3KooWNLAmKcyee3oqSgTMthaQVXaAcXeo8RrGCzMfMVA3B5on --port 50557 --ws-port 9946 +./target/release/polkadot --dave --validator --base-path ./cumulus_relay1 --chain rococo-custom-4.json --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/12D3KooWNLAmKcyee3oqSgTMthaQVXaAcXeo8RrGCzMfMVA3B5on --port 50558 --ws-port 9947 + +``` + +3. Export genesis state and runtime wasm from NFT parachain: + +Run from this project root: +``` +./target/release/nft export-genesis-state --parachain-id 2000 > ./resources/para-2000-genesis +./target/release/nft export-genesis-wasm > ./resources/para-2000-wasm +``` + +4. Run two parachain nodes: + +Replace `12D3KooWN1ah2bFQSysEFnwZqcmcVpDDR8UedXyo6xfzV1zDNMNg` with Alice or Bob relay ID + +Run from this project root: +``` +./target/release/nft --alice --collator --force-authoring --base-path ./tmp/parachain-alice --parachain-id 2000 --port 40333 --ws-port 9844 -- --execution wasm --chain ../polkadot/rococo-custom-4.json --port 30343 --ws-port 9977 +./target/release/nft --bob --collator --force-authoring --parachain-id 2000 --base-path ./tmp/parachain/bob --port 40334 --ws-port 9845 -- --execution wasm --chain ../polkadot/rococo-custom-4.json --port 30344 --ws-port 9978 --bootnodes /ip4/127.0.0.1/tcp/50556/p2p/12D3KooWN1ah2bFQSysEFnwZqcmcVpDDR8UedXyo6xfzV1zDNMNg +``` + +4. Reserve parachain ID as described here: https://substrate.dev/cumulus-workshop/#/en/2-relay-chain/2-reserve + +5. Register parachain in relay as described here: https://substrate.dev/cumulus-workshop/#/en/3-parachains/2-register + + ## Run Integration Tests 1. Install all needed dependecies --- a/runtime_types.json +++ b/runtime_types.json @@ -1,109 +1,103 @@ { - "AccessMode": { - "_enum": [ - "Normal", - "WhiteList" - ] - }, - "DecimalPoints": "u8", - "CollectionMode": { - "_enum": { - "Invalid": null, - "NFT": null, - "Fungible": "DecimalPoints", - "ReFungible": null - } - }, - "Ownership": { - "Owner": "AccountId", - "Fraction": "u128" - }, - "FungibleItemType": { - "Value": "u128" - }, - "NftItemType": { - "Owner": "AccountId", - "ConstData": "Vec", - "VariableData": "Vec" - }, - "ReFungibleItemType": { - "Owner": "Vec>", - "ConstData": "Vec", - "VariableData": "Vec" - }, - "SponsorshipState": { - "_enum": { - "Disabled": null, - "Unconfirmed": "AccountId", - "Confirmed": "AccountId" - } - }, - "Collection": { - "Owner": "AccountId", - "Mode": "CollectionMode", - "Access": "AccessMode", - "DecimalPoints": "DecimalPoints", - "Name": "Vec", - "Description": "Vec", - "TokenPrefix": "Vec", - "MintMode": "bool", - "OffchainSchema": "Vec", - "SchemaVersion": "SchemaVersion", - "Sponsorship": "SponsorshipState", - "Limits": "CollectionLimits", - "VariableOnChainSchema": "Vec", - "ConstOnChainSchema": "Vec" - }, - "RawData": "Vec", - "Address": "AccountId", - "LookupSource": "AccountId", - "Weight": "u64", - "CreateNftData": { - "const_data": "Vec", - "variable_data": "Vec" - }, - "CreateFungibleData": { - "value": "u128" - }, - "CreateReFungibleData": { - "const_data": "Vec", - "variable_data": "Vec", - "pieces": "u128" - }, - "CreateItemData": { - "_enum": { - "NFT": "CreateNftData", - "Fungible": "CreateFungibleData", - "ReFungible": "CreateReFungibleData" - } - }, - "SchemaVersion": { - "_enum": [ - "ImageURL", - "Unique" - ] - }, - "CollectionId": "u32", - "TokenId": "u32", - "ChainLimits": { - "CollectionNumbersLimit": "u32", - "AccountTokenOwnershipLimit": "u32", - "CollectionAdminsLimit": "u64", - "CustomDataLimit": "u32", - "NftSponsorTimeout": "u32", - "FungibleSponsorTimeout": "u32", - "RefungibleSponsorTimeout": "u32", - "OffchainSchemaLimit": "u32", - "VariableOnChainSchemaLimit": "u32", - "ConstOnChainSchemaLimit": "u32" - }, - "CollectionLimits": { - "AccountTokenOwnershipLimit": "u32", - "SponsoredDataSize": "u32", - "SponsoredDataRateLimit": "Option", - "TokenLimit": "u32", - "SponsorTimeout": "u32", - "OwnerCanTransfer": "bool", - "OwnerCanDestroy": "bool" + "AccessMode": { + "_enum": [ + "Normal", + "WhiteList" + ] + }, + "DecimalPoints": "u8", + "CollectionMode": { + "_enum": { + "Invalid": null, + "NFT": null, + "Fungible": "DecimalPoints", + "ReFungible": null + } + }, + "Ownership": { + "Owner": "AccountId", + "Fraction": "u128" + }, + "FungibleItemType": { + "Value": "u128" + }, + "NftItemType": { + "Owner": "AccountId", + "ConstData": "Vec", + "VariableData": "Vec" + }, + "ReFungibleItemType": { + "Owner": "Vec>", + "ConstData": "Vec", + "VariableData": "Vec" + }, + "Collection": { + "Owner": "AccountId", + "Mode": "CollectionMode", + "Access": "AccessMode", + "DecimalPoints": "DecimalPoints", + "Name": "Vec", + "Description": "Vec", + "TokenPrefix": "Vec", + "MintMode": "bool", + "OffchainSchema": "Vec", + "SchemaVersion": "SchemaVersion", + "Sponsor": "AccountId", + "SponsorConfirmed": "bool", + "Limits": "CollectionLimits", + "VariableOnChainSchema": "Vec", + "ConstOnChainSchema": "Vec" + }, + "RawData": "Vec", + "Address": "AccountId", + "LookupSource": "AccountId", + "Weight": "u64", + "CreateNftData": { + "const_data": "Vec", + "variable_data": "Vec" + }, + "CreateFungibleData": { + "value": "u128" + }, + "CreateReFungibleData": { + "const_data": "Vec", + "variable_data": "Vec", + "pieces": "u128" + }, + "CreateItemData": { + "_enum": { + "NFT": "CreateNftData", + "Fungible": "CreateFungibleData", + "ReFungible": "CreateReFungibleData" } -} \ No newline at end of file + }, + "SchemaVersion": { + "_enum": [ + "ImageURL", + "Unique" + ] + }, + "CollectionId": "u32", + "TokenId": "u32", + "ChainLimits": { + "CollectionNumbersLimit": "u32", + "AccountTokenOwnershipLimit": "u32", + "CollectionAdminsLimit": "u64", + "CustomDataLimit": "u32", + "NftSponsorTimeout": "u32", + "FungibleSponsorTimeout": "u32", + "RefungibleSponsorTimeout": "u32", + "OffchainSchemaLimit": "u32", + "VariableOnChainSchemaLimit": "u32", + "ConstOnChainSchemaLimit": "u32" + }, + "CollectionLimits": { + "AccountTokenOwnershipLimit": "u32", + "SponsoredMintSize": "u32", + "TokenLimit": "u32", + "SponsorTimeout": "u32", + "OwnerCanTransfer": "bool", + "OwnerCanDestroy": "bool" + }, + "AccountInfo": "AccountInfoWithDualRefCount" +}