淺談swap去中心化交易所繫統開發技術方案
現在,每當
gen_gender()
在pallet內呼叫時,它都會返回
Gender
的偽隨機列舉值。
實現鏈上隨機性
如果我們希望能夠區分這些小貓,我們需要賦予它們獨特的屬性!在上一步中,我們使用了尚未實際定義的
KittyRandomness
。
我們將使用
frame_support
中的
執行此操作。它將能夠生成一個隨機的種子,我們將用它來建立獨特的小貓,並培育新的小貓。
- 在pallet的配置特徵中,定義受
Randomness
特徵約束的新型別。
來自
frame_support
中
Randomness
trait 需要使用引數來指定
Output
和
BlockNumber
泛型。
將 ACTION #5 行替換為:
type KittyRandomness: Randomness<Self::Hash, Self::BlockNumber>;
- 在runtime中指定實際型別。
鑑於我們在pallet的配置中新增了一個新型別,我們需要配置runtime以設定其具體型別。如果我們想更改正在使用的演算法,而無需修改pallet內的使用位置,
KittyRandomness
可能會派上用場。為了展示這一點,我們將設定 KittyRandomness 型別為 FRAME 的 RandomnessCollectiveFlip 的一個例項。 方便的是,node template已經有一個 RandomnessCollectiveFlip pallet的例項。
在runtime的
runtime/src/lib.rs
中設定
KittyRandomness
型別:
impl pallet_kitties::Config for Runtime { type Event = Event; type Currency = Balances; type KittyRandomness = RandomnessCollectiveFlip; // <-- ACTION: add this line.}
在這裡,我們從其介面(
Randomness<Self::Hash, Self::BlockNumber>
)中抽象出隨機性生成實現(
RandomnessCollectiveFlip
)。
- 隨機生成DNA
生成DNA類似於使用隨機性隨機分配性別型別。不同之處在於,我們將使用在上一部分中匯入的
blake2_128
。如果我們在同一塊中多次呼叫此函式,我們還將使用
從
frame_system
pallet中生成不同的雜湊。將 ACTION #6 行替換為:
impl pallet_kitties::Config for Runtime { type Event = Event; type Currency = Balances; type KittyRandomness = RandomnessCollectiveFlip; // <-- ACTION: add this line.}
寫入剩餘的儲存項
為了輕鬆跟蹤我們所有的小貓咪,我們將標準化我們的邏輯,以使用一的 ID 作為儲存項的全域性KEY。這意味著單個唯鍵將指向我們的Kitty物件(即我們之前宣告的結構)。
為了使其正常工作,我們需要確保新Kitty的ID始終是唯的。我們可以使用新的儲存項
Kitties
來執行此操作,該儲存項將從ID(雜湊)對映到Kitty物件。
使用此物件,我們只需檢查此儲存項是否已包含使用特定 ID 的對映,即可輕鬆檢查衝突。例如,從可排程函式內部,我們可以使用以下命令進行檢查:
ensure!(!<Kitties<T>>::exists(new_id), "This new id already exists");
我們的runtime需要注意:
- 獨特的資產,如貨幣或小貓(這將由名為
Kitties
的儲存map持有)。 - 這些資產的所有權,如帳戶ID(這將處理一個名為
KittiesOwned
的新儲存對映)。
要為結構
Kitty
建立儲存例項,我們將使用
— FRAME 提供給我們的。
儲存項的外觀如下:
#[pallet::storage]#[pallet::getter(fn kitties)]pub(super) type Kitties<T: Config> = StorageMap< _, Twox64Concat, T::Hash, Kitty<T>,>;
KittiesOwned
儲存項與此類似,只是我們將使用
BoundedVec
來跟蹤我們將在
runtime/src/lib.s
中配置的 Kitties 的最大數量。
#[pallet::storage]#[pallet::getter(fn kitties_owned)]/// Keeps track of what accounts own what Kitty.pub(super) type KittiesOwned<T: Config> = StorageMap< _, Twox64Concat, T::AccountId, BoundedVec<T::Hash, T::MaxKittyOwned>, ValueQuery,>;
複製上面的兩個程式碼片段以替換操作 #7 行。
在檢查pallet編譯之前,我們需要在配置特徵中新增一個新型別
MaxKittyOwned
,這是一個pallet常量型別(類似於前面
KittyRandomness
的步驟)。將操作 #9 替換為:
#[pallet::constant]type MaxKittyOwned: Get<u32>;
最後,我們在
runtime/src/lib.rs
中定義型別
MaxKittyOwned
。這與我們對 Currency 和 KittyRandomness 遵循的模式相同,只是我們將使用 parameter_types ! 宏新增一個固定的 u32!
parameter_types! { // <- add this macro // One can own at most 9,999 Kitties pub const MaxKittyOwned: u32 = 9999;}/// Configure the pallet-kitties in pallets/kitties.impl pallet_kitties::Config for Runtime { type Event = Event; type Currency = Balances; type KittyRandomness = RandomnessCollectiveFlip; type MaxKittyOwned = MaxKittyOwned; // <- add this line}
檢查Kitties 區塊鏈編譯
cargo build --release
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70016646/viewspace-2944920/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於Swap去中心化交易所繫統軟體開發(技術支援)中心化
- 去中心化交易所繫統開發邏輯丨去中心化薄餅交易所開發技術方案中心化
- swap交易所繫統(原始碼)丨swap交易所繫統開發(去中心化交易所開發詳細)原始碼中心化
- Swap去中心化合約交易所繫統技術開發(功能細節)中心化
- 淺談uniswap丨justswap去中心化交易所繫統開發組成中心化
- DAPP去中心化 swap 交易所繫統開發功能分析APP中心化
- swap交易所繫統開發(成熟技術)交易所中心繫統開發流程(原始碼搭建)原始碼
- 淺談區塊鏈swap交易所繫統開發功能技術講解區塊鏈
- Swap去中心化交易所/系統開發技術/Swap智慧合約交易所原始碼搭建中心化原始碼
- swap去中心化交易所繫統開發(正式版)丨swap交易所原始碼部署中心化原始碼
- 去中心化交易所繫統開發需求中心化
- 去中心化薄餅交易所繫統開發詳細,PancakeSwap去中心化交易所繫統開發原理分析中心化
- swap去中心化交易所繫統開發實現邏輯(原始碼示例)中心化原始碼
- 去中心化交易所開發正式版丨去中心化交易所繫統開發技術詳細及原始碼分析中心化原始碼
- 數字貨幣交易所繫統開發技術原始碼丨區塊鏈去中心化交易所繫統開發(成熟技術)原始碼區塊鏈中心化
- DEX去中心化交易所|去中心化交易所APP系統定製開發技術中心化APP
- OEX去中心化量化交易所繫統技術開發/秒合約/技術程式設計中心化程式設計
- DAPP/Swap智慧合約交易所繫統技術開發/方案解析APP
- 數字貨幣swap去中心化博餅交易所繫統開發/(成熟原始碼)中心化原始碼
- BSEX交易所去中心化系統開發技術(邏輯分析)中心化
- DAPP去中心化交易所繫統開發|詳情方案|規則邏輯APP中心化
- OEX去中心化合約交易所繫統技術開發/原始碼程式搭建/DAPP中心化原始碼APP
- 數字貨幣交易所繫統技術開發方案
- 去中心化交易所swap系統開發智慧合約定製部署詳情中心化
- BOW弓箭swap交易所繫統技術開發原理及邏輯說明
- DAPP智慧合約中心化交易所繫統技術開發(程式碼示例)APP中心化
- 去中心化OPENSEA模式系統開發技術原理中心化模式
- DEFI去中心化交易所開發,DEFI去中心化交易APP原始碼系統中心化APP原始碼
- 區塊鏈去中心化交易所原始碼|去中心化交易系統開發區塊鏈中心化原始碼
- 去中心化交易所swap系統開發dapp智慧合約定製功能介紹中心化APP
- about區塊鏈交易所繫統開發講解(技術方案)區塊鏈
- 區塊鏈DAPP去中心繫統開發技術程式碼流程區塊鏈APP
- 去中心化DAPP交易所開發中心化APP
- 永續合約技術開發系統方案丨槓槓交易所繫統開發技術原始碼搭建原始碼
- 交易所繫統APP開發-功能技術分析APP
- 去中心化交易所繫統開發|案例詳細|專案測試|原始碼搭建中心化原始碼
- 區塊鏈去中心化DAPP系統開發技術(成熟技術)區塊鏈中心化APP
- 量化合約交易所繫統開發技術方案丨成熟Demo搭建