difftreelog
Add end user documentation
in: master
4 files changed
README.mddiffbeforeafterboth--- a/README.md
+++ b/README.md
@@ -1,60 +1,52 @@
-# Substrate Node Template
+# NFT Parachain
-A new Substrate node, ready for hacking. This node includes:
+## Application Development
-* A FRAME-based runtime
-* A template pallet
-* Aura block authoring
-* Grandpa finality gadget
+If you are building an application that operates NFT tokens, use [this guide](doc/application_development.md).
-## Build
+## Building
Install Rust:
```bash
curl https://sh.rustup.rs -sSf | sh
+rustup default nightly
+sudo apt-get install libssl-dev pkg-config libclang-dev clang
+
```
-Initialize your Wasm Build environment:
+Install required tools:
```bash
./scripts/init.sh
```
-Build Wasm and native code:
+Build the WebAssembly binary:
```bash
-cargo build --release
+./scripts/build.sh
```
-
-## Run
-
-### Single Node Development Chain
-Purge any existing developer chain state:
+Build all native code:
```bash
-./target/release/node-template purge-chain --dev
+cargo build --release
```
-Start a development chain with:
+## Run
+You can start a development chain with:
+
```bash
-./target/release/node-template --dev
+cargo run -- --dev
```
Detailed logs may be shown by running the node with the following environment variables set: `RUST_LOG=debug RUST_BACKTRACE=1 cargo run -- --dev`.
-### Multi-Node Local Testnet
+If you want to see the multi-node consensus algorithm in action locally, then you can create a local testnet with two validator nodes for Alice and Bob, who are the initial authorities of the genesis chain that have been endowed with testnet units. Give each node a name and expose them so they are listed on the Polkadot [telemetry site](https://telemetry.polkadot.io/#/Local%20Testnet). You'll need two terminal windows open.
-If you want to see the multi-node consensus algorithm in action locally, then you can create a local testnet with two validator nodes for Alice and Bob, who are the initial authorities of the genesis chain that have been endowed with testnet units.
-
-Optionally, give each node a name and expose them so they are listed on the Polkadot [telemetry site](https://telemetry.polkadot.io/#/Local%20Testnet).
-
-You'll need two terminal windows open.
+We'll start Alice's substrate node first on default TCP port 30333 with her chain database stored locally at `/tmp/alice`. The bootnode ID of her node is `QmQZ8TjTqeDj3ciwr93EJ95hxfDsb9pEYDizUAbWpigtQN`, which is generated from the `--node-key` value that we specify below:
-We'll start Alice's substrate node first on default TCP port 30333 with her chain database stored locally at `/tmp/alice`. The bootnode ID of her node is `QmRpheLN4JWdAnY7HGJfWFNbfkQCb6tFf4vvA6hgjMZKrR`, which is generated from the `--node-key` value that we specify below:
-
```bash
cargo run -- \
--base-path /tmp/alice \
@@ -70,7 +62,7 @@
```bash
cargo run -- \
--base-path /tmp/bob \
- --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/QmRpheLN4JWdAnY7HGJfWFNbfkQCb6tFf4vvA6hgjMZKrR \
+ --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/QmQZ8TjTqeDj3ciwr93EJ95hxfDsb9pEYDizUAbWpigtQN \
--chain=local \
--bob \
--port 30334 \
@@ -78,30 +70,4 @@
--validator
```
-Additional CLI usage options are available and may be shown by running `cargo run -- --help`.
-
-## Advanced: Generate Your Own Substrate Node Template
-
-A substrate node template is always based on a certain version of Substrate. You can inspect it by
-opening [Cargo.toml](Cargo.toml) and see the template referred to a specific Substrate commit(
-`rev` field), branch, or version.
-
-You can generate your own Substrate node-template based on a particular Substrate
-version/commit by running following commands:
-
-```bash
-# git clone from the main Substrate repo
-git clone https://github.com/paritytech/substrate.git
-cd substrate
-
-# Switch to a particular branch or commit of the Substrate repo your node-template based on
-git checkout <branch/tag/sha1>
-
-# Run the helper script to generate a node template.
-# This script compiles Substrate and takes a while to complete. It takes a relative file path
-# from the current dir. to output the compressed node template.
-.maintain/node-template-release.sh ../node-template.tar.gz
-```
-
-Noted though you will likely get faster and more thorough support if you stick with the releases
-provided in this repository.
+Additional CLI usage options are available and may be shown by running `cargo run -- --help`.
\ No newline at end of file
doc/application_development.mddiffbeforeafterboth--- /dev/null
+++ b/doc/application_development.md
@@ -0,0 +1,221 @@
+# Building an NFT Application
+
+## Architecture
+
+Both centralized and serverless architectures are supported and application creator can decide which one to use depending on how much logic and data they intend to manage off-chain and off-line.
+
+### Server-based architecture
+
+In server-based architecture the application creator manually creates NFT collections and authorizes server to perform operations on each collection. See NFT palette methods that have admin permission level to understand better what server (or administrators) can do.
+
+
+
+### Serverless architecture
+
+In serverless architecture the application creator does all initialization and token distribution manually. Alternatively, smart contracts may be used in order to implement some distribution mechanics such as token sales or claiming. The dApp has access to all properties of an NFT token, but it does not have any elevated permissions, since it resides on user site. All operations happen on user's behalf signed by user's private key.
+
+
+
+## NFT Palette Methods
+
+### Collection Management
+
+#### CreateCollection
+
+##### Description
+This method creates a Collection of NFTs. Each Token may have multiple properties encoded as an array of bytes of certain length. The initial owner and admin of the collection are set to the address that signed the transaction. Both addresses can be changed later.
+
+##### Permissions
+Anyone
+
+##### Parameters
+customDataSz: Size of NFT properties data.
+
+##### Events
+CollectionCreated
+CollectionID: Globally unique identifier of newly created collection.
+Owner: Collection owner
+
+#### ChangeCollectionOwner
+
+##### Description
+Change the owner of the collection
+
+##### Permissions
+Collection Owner
+
+##### Parameters
+CollectionId
+
+#### DestroyCollection
+
+##### Description
+DANGEROUS: Destroys collection and all NFTs within this collection. Users irrecoverably lose their assets and may lose real money.
+
+##### Permissions
+Collection Owner
+
+##### Parameters
+CollectionId
+
+#### CreateItem
+
+##### Description
+This method creates a concrete instance of NFT Collection created with CreateCollection method.
+
+##### Permissions
+Collection Owner
+Collection Admin
+
+##### Parameters
+CollectionID: ID of the collection
+Properties: Array of bytes that contains NFT properties. Since NFT Module is agnostic of properties’ meaning, it is treated purely as an array of bytes
+Owner: Address, initial owner of the NFT
+
+##### Events
+ItemCreated
+ItemId: Identifier of newly created NFT, which is unique within the Collection, so the NFT is uniquely identified with a pair of values: CollectionId and ItemId.
+
+#### BurnItem
+
+##### Description
+This method destroys a concrete instance of NFT.
+
+##### Permissions
+Collection Owner
+Collection Admin
+Current NFT Owner
+
+##### Parameters
+CollectionID: ID of the collection
+ItemID: ID of NFT to burn
+
+##### Events
+ItemDestroyed
+CollectionID
+ItemId: Identifier of burned NFT
+
+
+#### AddCollectionAdmin
+
+##### Description
+NFT Collection can be controlled by multiple admin addresses (some which can also be servers, for example). Admins can issue and burn NFTs, as well as add and remove other admins, but cannot change NFT or Collection ownership.
+
+This method adds an admin of the Collection.
+
+##### Permissions
+Collection Owner
+Collection Admin
+
+##### Parameters
+CollectionID: ID of the Collection to add admin for
+Admin: Address of new admin to add
+
+#### RemoveCollectionAdmin
+
+##### Description
+Remove admin address of the Collection. An admin address can remove itself. List of admins may become empty, in which case only Collection Owner will be able to add an Admin.
+
+##### Permissions
+Collection Owner
+Collection Admin
+
+##### Parameters
+CollectionID: ID of the Collection to remove admin for
+Admin: Address of admin to remove
+
+### Item Ownership and Transfers
+This group of methods allows managing NFT ownership.
+
+#### GetOwner
+
+##### Description
+Return the address of the NFT owner.
+
+##### Permissions
+Anyone
+
+##### Parameters
+CollectionId
+ItemId: ID of the NFT
+
+##### Returns
+Owner address
+
+#### BalanceOf
+
+##### Description
+This method is included for compatibility with ERC-721. Return the total count of NFTs of a given Collection that belong to a given address.
+
+##### Permissions
+Anyone
+
+##### Parameters
+CollectionId
+Address to count NFTs for
+
+##### Returns
+Total count of NFTs for Address
+
+
+#### Transfer
+
+##### Description
+Change ownership of the NFT.
+
+##### Permissions
+Collection Owner
+Collection Admin
+Current NFT owner
+
+##### Parameters
+Recipient: Address of token recipient
+ClassId: ID of item class
+ItemId: ID of the item
+
+#### TransferFrom
+
+##### Description
+Change ownership of a NFT on behalf of the owner. See Approve method for additional information. After this method executes, the approval is removed so that the approved address will not be able to transfer this NFT again from this owner.
+
+##### Permissions
+Collection Owner
+Collection Admin
+Current NFT owner
+Address approved by current NFT owner
+
+##### Parameters
+Recipient: Address of token recipient
+ClassId: ID of item class
+ItemId: ID of the item
+
+
+#### Approve
+
+##### Description
+Set, change, or remove approved address to transfer the ownership of the NFT.
+
+##### Permissions
+Collection Owner
+Collection Admin
+Current NFT owner
+
+##### Parameters
+Approved: Address that is approved to transfer this NFT or zero (if needed to remove approval)
+ClassId: ID of item class
+ItemId: ID of the item
+
+#### GetApproved
+
+##### Description
+Get the approved address for a single NFT.
+
+##### Permissions
+Anyone
+
+##### Parameters
+ClassId: ID of item class
+ItemId: ID of the item
+
+##### Returns
+Approved address
doc/server_architecture.pngdiffbeforeafterbothbinary blob — no preview
doc/serverless_architecture.pngdiffbeforeafterbothbinary blob — no preview