From 312f5d50a5ec053edb7f511974fb719a0e2b0657 Mon Sep 17 00:00:00 2001 From: icodezjb Date: Wed, 19 May 2021 10:46:19 +0800 Subject: [PATCH] Add GPL-v3 license --- zenlink-protocol/rpc/Cargo.toml | 1 + zenlink-protocol/rpc/README.md | 4 + zenlink-protocol/rpc/runtime-api/Cargo.toml | 1 + zenlink-protocol/src/README.md | 100 ++++++++++++++++++ .../src/docs/zenlink-protocol-v0.4.0.png | Bin 0 -> 33886 bytes zenlink-protocol/src/transfer/mod.rs | 3 + 6 files changed, 109 insertions(+) create mode 100644 zenlink-protocol/src/README.md create mode 100644 zenlink-protocol/src/docs/zenlink-protocol-v0.4.0.png diff --git a/zenlink-protocol/rpc/Cargo.toml b/zenlink-protocol/rpc/Cargo.toml index 8004aa8..c45d79a 100644 --- a/zenlink-protocol/rpc/Cargo.toml +++ b/zenlink-protocol/rpc/Cargo.toml @@ -3,6 +3,7 @@ name = "zenlink-protocol-rpc" version = "0.4.0" authors = ["Zenlink Developers"] edition = "2018" +license = "GPL-3.0-only" [package.metadata.docs.rs] targets = ['x86_64-unknown-linux-gnu'] diff --git a/zenlink-protocol/rpc/README.md b/zenlink-protocol/rpc/README.md index 5c33988..c7cfa8e 100644 --- a/zenlink-protocol/rpc/README.md +++ b/zenlink-protocol/rpc/README.md @@ -541,3 +541,7 @@ } } ``` + +## License + +[GPL-v3](LICENSE) diff --git a/zenlink-protocol/rpc/runtime-api/Cargo.toml b/zenlink-protocol/rpc/runtime-api/Cargo.toml index 02f2a4e..02196ec 100644 --- a/zenlink-protocol/rpc/runtime-api/Cargo.toml +++ b/zenlink-protocol/rpc/runtime-api/Cargo.toml @@ -3,6 +3,7 @@ name = "zenlink-protocol-runtime-api" version = "0.4.0" authors = ["Zenlink Developers"] edition = "2018" +license = "GPL-3.0-only" [dependencies] # alias "parity-scale-code" to "codec" diff --git a/zenlink-protocol/src/README.md b/zenlink-protocol/src/README.md new file mode 100644 index 0000000..65ca6f0 --- /dev/null +++ b/zenlink-protocol/src/README.md @@ -0,0 +1,100 @@ +## Zenlink Protocol v0.4.0 Overview +![zenlink protocol](./docs/zenlink-protocol-v0.4.0.png) + +`Zenlink Protocol` mainly consists of two parts: assets and asset operations, +namely `Zenlink Assets` and `Zenlink Actions`. +Through the `UAI`(unified asset identifier) and `MultiAssetsHandler` interfaces, +`Zenlink` can perform `Swap` and `Transfer By XCM` any asset on the chain. + +## Zenlink Protocol v0.4.0 Features +- Based on the `newest` XCM design +- Based on `FRAMEv2` +- Swap exchange fee `configurable` +- `Compatible` Polkadot XCMP cross-chain asset processing +- Zenlink Protocol registration whitelist-XCM `trust collection management` +- Through Transfer-By-XCM, `assets can flow freely` between parachains +- ZenlinkMultiAssets adapter comes with `LIQUIDITY` and `Foreign` asset processing, which can `adapt to various native assets such as NATIVE/LOCAL/RESERVE` +- Provide LocalAssetHandler, OtherAssetHandler and other traits to `support locally defined assets such as LOCAL and RESERVE` +- Under the control of MultiAssetsHandler, `assets can swap freely` + +## UAI v0.1.0 + +- UAI v0.1.0 definition + +```rust +pub struct AssetId { + pub chain_id: u32, // ParaId + pub asset_type: u8, // Asset types supported by Zenlink Assets + pub asset_index: u32, // the index number of the asset +} +``` + +- UAI v0.1.0 asset type + +`asset_type` currently only supports the following values: + +```rust +/// Native currency, the most basic asset on each parachain +pub const NATIVE: u8 = 0; +/// Swap module asset, LP token generated by Zenlink DEX +pub const LIQUIDITY: u8 = 1; +/// Other asset type on this chain, other asset modules on this chain +pub const LOCAL: u8 = 2; +/// Reserved for future, reserved asset type +pub const RESERVED: u8 = 3; +``` + +In the current version of UAI, `Zenlink Assets` supports up to four locally defined assets of `Native/LIQUIDITY/LOCAL/RESERVED`. +When these four assets are transferred across chains, a cross-chain mapping asset category `Foreign` will be generated inside `ZenlinkProtocol`. + +- `Before and after the cross-chain asset transfer, the UAI of the asset has not changed`. + +## MultiAssetsHandler + +The trait is defined as follows +```rust +pub trait MultiAssetsHandler { + fn balance_of(asset_id: AssetId, who: &AccountId) -> AssetBalance; + fn total_supply(asset_id: AssetId) -> AssetBalance; + fn is_exists(asset_id: AssetId) -> bool; + fn transfer( + asset_id: AssetId, + origin: &AccountId, + target: &AccountId, + amount: AssetBalance, + ) -> DispatchResult { + let withdrawn = Self::withdraw(asset_id, origin, amount)?; + let _ = Self::deposit(asset_id, target, withdrawn)?; + Ok(()) + } + fn deposit( + asset_id: AssetId, + target: &AccountId, + amount: AssetBalance, + ) -> Result; + + fn withdraw( + asset_id: AssetId, + origin: &AccountId, + amount: AssetBalance, + ) -> Result; +} + +``` + +- `is_exists` is a unified access interface for `Zenlink Actions` +- `balance_of`, `total_supply`, `transfer` are `Zenlink Swap Action` access interface +- `deposit`, `withdraw` are `Zenlink Transfer-By-XCM Action` access interface +- `MultiAssetsHandler` can operate in addition to the four native defined assets identified by `UAI`, +as well as the `cross-chain mapping asset Foreign` inside `ZenlinkProtocol`. + + +## Swap and Transfer-By-XCM +- Four native defined assets (`NATIVE/LIQUIDITY/LOCAL/RESERVED`) and cross-chain mapping assets (`Foreign`) can be exchanged through `MultiAssetsHandler`. +- Four native defined assets (`NATIVE/LIQUIDITY/LOCAL/RESERVED`) Cross-chain asset transfer through `Transfer-By-XCM`, and a mapped asset `Foreign` is generated +on the target parachain, Also through the `Transfer-By-XCM` cross-chain transfer back to the original definition chain of the asset. + + +## License + +[GPL-v3](LICENSE) diff --git a/zenlink-protocol/src/docs/zenlink-protocol-v0.4.0.png b/zenlink-protocol/src/docs/zenlink-protocol-v0.4.0.png new file mode 100644 index 0000000000000000000000000000000000000000..1992609e8c15027468696ea13cf4879c27dc2aab GIT binary patch literal 33886 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 literal 0 HcmV?d00001 diff --git a/zenlink-protocol/src/transfer/mod.rs b/zenlink-protocol/src/transfer/mod.rs index 5ac447b..545b3ee 100644 --- a/zenlink-protocol/src/transfer/mod.rs +++ b/zenlink-protocol/src/transfer/mod.rs @@ -1,3 +1,6 @@ +// Copyright 2020-2021 Zenlink +// Licensed under GPL-3.0. + use super::*; impl Pallet {