forked from paritytech/substrate
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Uniques: An economically-secure basic-featured NFT pallet (paritytech…
…#8813) * Uniques: An economically-secure basic-featured NFT pallet * force_transfer * freeze/thaw * team management * approvals * Fixes * force_asset_status * class_metadata * instance metadata * Fixes * use nmap * Fixes * class metadata has information field * Intiial mock/tests and a fix * Remove impl_non_fungibles * Docs * Update frame/uniques/src/lib.rs Co-authored-by: Shawn Tabrizi <[email protected]> * Update frame/uniques/src/lib.rs Co-authored-by: Shawn Tabrizi <[email protected]> * Update frame/uniques/src/lib.rs Co-authored-by: Shawn Tabrizi <[email protected]> * Update frame/uniques/src/lib.rs Co-authored-by: Shawn Tabrizi <[email protected]> * Reserve, don't transfer. * Fixes * Tests * Tests * refresh_deposit * Tests and proper handling of metdata destruction * test burn * Tests * Update impl_fungibles.rs * Initial benchmarking * benchmark * Fixes * cargo run --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_uniques --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/uniques/src/weights.rs --template=./.maintain/frame-weight-template.hbs * Attributes * Attribute metadata * Fixes * Update frame/uniques/README.md * Docs * Docs * Docs * Simple metadata * Use BoundedVec * cargo run --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_uniques --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/uniques/src/weights.rs --template=./.maintain/frame-weight-template.hbs * Update frame/uniques/src/lib.rs Co-authored-by: Lohann Paterno Coutinho Ferreira <[email protected]> * Update frame/uniques/src/lib.rs Co-authored-by: Lohann Paterno Coutinho Ferreira <[email protected]> * Update frame/uniques/src/lib.rs Co-authored-by: Lohann Paterno Coutinho Ferreira <[email protected]> * Update frame/uniques/src/lib.rs Co-authored-by: Lohann Paterno Coutinho Ferreira <[email protected]> * Update frame/uniques/src/lib.rs Co-authored-by: Lohann Paterno Coutinho Ferreira <[email protected]> * Fixes * Update frame/uniques/README.md Co-authored-by: Alexander Popiak <[email protected]> * Update frame/uniques/README.md Co-authored-by: Alexander Popiak <[email protected]> * Update frame/uniques/README.md Co-authored-by: Alexander Popiak <[email protected]> * Docs * Bump Co-authored-by: Shawn Tabrizi <[email protected]> Co-authored-by: Parity Bot <[email protected]> Co-authored-by: Lohann Paterno Coutinho Ferreira <[email protected]> Co-authored-by: Alexander Popiak <[email protected]>
- Loading branch information
1 parent
fa23b18
commit d8b3fce
Showing
17 changed files
with
2,973 additions
and
15 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
[package] | ||
name = "pallet-uniques" | ||
version = "3.0.0" | ||
authors = ["Parity Technologies <[email protected]>"] | ||
edition = "2018" | ||
license = "Apache-2.0" | ||
homepage = "https://substrate.dev" | ||
repository = "https://github.com/paritytech/substrate/" | ||
description = "FRAME NFT asset management pallet" | ||
readme = "README.md" | ||
|
||
[package.metadata.docs.rs] | ||
targets = ["x86_64-unknown-linux-gnu"] | ||
|
||
[dependencies] | ||
codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false } | ||
sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" } | ||
sp-core = { version = "3.0.0", default-features = false, path = "../../primitives/core" } | ||
sp-runtime = { version = "3.0.0", default-features = false, path = "../../primitives/runtime" } | ||
frame-support = { version = "3.0.0", default-features = false, path = "../support" } | ||
frame-system = { version = "3.0.0", default-features = false, path = "../system" } | ||
frame-benchmarking = { version = "3.1.0", default-features = false, path = "../benchmarking", optional = true } | ||
|
||
[dev-dependencies] | ||
sp-std = { version = "3.0.0", path = "../../primitives/std" } | ||
sp-core = { version = "3.0.0", path = "../../primitives/core" } | ||
sp-io = { version = "3.0.0", path = "../../primitives/io" } | ||
pallet-balances = { version = "3.0.0", path = "../balances" } | ||
|
||
[features] | ||
default = ["std"] | ||
std = [ | ||
"codec/std", | ||
"sp-std/std", | ||
"sp-core/std", | ||
"sp-runtime/std", | ||
"frame-support/std", | ||
"frame-system/std", | ||
"frame-benchmarking/std", | ||
] | ||
runtime-benchmarks = [ | ||
"frame-benchmarking", | ||
"sp-runtime/runtime-benchmarks", | ||
"frame-system/runtime-benchmarks", | ||
] | ||
try-runtime = ["frame-support/try-runtime"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
# Uniques Module | ||
|
||
A simple, secure module for dealing with non-fungible assets. | ||
|
||
## Overview | ||
|
||
The Uniques module provides functionality for asset management of non-fungible asset classes, including: | ||
|
||
* Asset Issuance | ||
* Asset Transfer | ||
* Asset Destruction | ||
|
||
To use it in your runtime, you need to implement the assets [`uniques::Config`](https://docs.rs/pallet-uniques/latest/pallet_uniques/pallet/trait.Config.html). | ||
|
||
The supported dispatchable functions are documented in the [`uniques::Call`](https://docs.rs/pallet-uniques/latest/pallet_uniques/pallet/enum.Call.html) enum. | ||
|
||
### Terminology | ||
|
||
* **Asset issuance:** The creation of a new asset instance. | ||
* **Asset transfer:** The action of transferring an asset instance from one account to another. | ||
* **Asset burning:** The destruction of an asset instance. | ||
* **Non-fungible asset:** An asset for which each unit has unique characteristics. There is exactly | ||
one instance of such an asset in existance and there is exactly one owning account. | ||
|
||
### Goals | ||
|
||
The Uniques pallet in Substrate is designed to make the following possible: | ||
|
||
* Allow accounts to permissionlessly create asset classes (collections of asset instances). | ||
* Allow a named (permissioned) account to mint and burn unique assets within a class. | ||
* Move asset instances between accounts permissionlessly. | ||
* Allow a named (permissioned) account to freeze and unfreeze unique assets within a | ||
class or the entire class. | ||
* Allow the owner of an asset instance to delegate the ability to transfer the asset to some | ||
named third-party. | ||
|
||
## Interface | ||
|
||
### Permissionless dispatchables | ||
* `create`: Create a new asset class by placing a deposit. | ||
* `transfer`: Transfer an asset instance to a new owner. | ||
* `redeposit`: Update the deposit amount of an asset instance, potentially freeing funds. | ||
* `approve_transfer`: Name a delegate who may authorise a transfer. | ||
* `cancel_approval`: Revert the effects of a previous `approve_transfer`. | ||
|
||
### Permissioned dispatchables | ||
* `destroy`: Destroy an asset class. | ||
* `mint`: Mint a new asset instance within an asset class. | ||
* `burn`: Burn an asset instance within an asset class. | ||
* `freeze`: Prevent an individual asset from being transferred. | ||
* `thaw`: Revert the effects of a previous `freeze`. | ||
* `freeze_class`: Prevent all asset within a class from being transferred. | ||
* `thaw_class`: Revert the effects of a previous `freeze_class`. | ||
* `transfer_ownership`: Alter the owner of an asset class, moving all associated deposits. | ||
* `set_team`: Alter the permissioned accounts of an asset class. | ||
|
||
### Metadata (permissioned) dispatchables | ||
* `set_attribute`: Set a metadata attribute of an asset instance or class. | ||
* `clear_attribute`: Remove a metadata attribute of an asset instance or class. | ||
* `set_metadata`: Set general metadata of an asset instance. | ||
* `clear_metadata`: Remove general metadata of an asset instance. | ||
* `set_class_metadata`: Set general metadata of an asset class. | ||
* `clear_class_metadata`: Remove general metadata of an asset class. | ||
|
||
### Force (i.e. governance) dispatchables | ||
* `force_create`: Create a new asset class. | ||
* `force_asset_status`: Alter the underlying characteristics of an asset class. | ||
|
||
Please refer to the [`Call`](https://docs.rs/pallet-assets/latest/pallet_assets/enum.Call.html) enum | ||
and its associated variants for documentation on each function. | ||
|
||
## Related Modules | ||
|
||
* [`System`](https://docs.rs/frame-system/latest/frame_system/) | ||
* [`Support`](https://docs.rs/frame-support/latest/frame_support/) | ||
* [`Assets`](https://docs.rs/pallet-assets/latest/pallet_assetss/) | ||
|
||
License: Apache-2.0 |
Oops, something went wrong.