加密貨幣交易所 加密貨幣交易所
Ctrl+D 加密貨幣交易所
ads
首頁 > NEAR > Info

DAOrayaki:Aptos & Move實操講解-ODAILY_UNT:Pegs Shares

Author:

Time:1900/1/1 0:00:00

DAOrayakiDAO研究獎金池:

資助地址:DAOrayaki

從現在開始,我們就可以通過添加--profilelocal命令以在本地測試網上運行它們。

ps:這里的--profile,就像是k8s里的kube-config,可以設置不同的profile環境,控制不同的網絡。

profile的配置,會設置執行者地址、node-rest-api、faucet-api信息。

#列出cli控制的所有賬戶aptosaccountlist#為賬戶注資:aptosaccountfund--profile$PROFILE--account$PROFILE#創建新的資源賬戶aptosaccountcreate-resource-account--profile$PROFILE--seed1#編譯move合約aptosmovecompile--package-dirhello_blockchain#部署合約aptosmovepublish--package-dirhello_blockchain--named-addressesbasecoin=--profilelocal#調用合約aptosmoverun--function-id::::--profilelocal#列出指定賬戶的modules/resources信息aptosaccountlist--querymodules--account0xa1285adb4b8abedf5faf7a46d260c5844f1f64d59dd9b8869db1543cf5bbadf4--profilelocalaptosaccountlist--queryresources--account0x4200c2b801870f20a709abba80b6edb90a45ecd9b8acce9842b93d597602edcf--profilelocal#合約升級aptosmovepublish--upgrade-policy`arbitrary`,`compatible`,`immutable`對應0,1,20不做任何檢查,強制替換code,1做兼容性檢查(同樣的public函數,不能改變已有Resource的內存布局)2禁止升級每次publish的時候會比較鏈上的policy和此次publish的policy(默認是1),只有此次的policy小于鏈上的policy時才允許合約升級

Arbitrum DAO社區成員建議在One和Nova上激活對帳戶抽象端點的支持:6月20日消息,Snapshot投票頁面顯示,Arbitrum DAO社區發起“在One和Nova上激活對帳戶抽象端點的支持”的建議提案,目前支持率達99.89%,投票將于6月27日結束。

根據該提案,作為帳戶抽象標準和工具更廣泛發展的一部分,以太坊研究人員提出了一個新的RPC端點eth_sendRawTransactionConditional,Offchain Labs通過開發、測試并將支持Arbitrum定序器端點的必要調整納入Nitro v.2.0.14來為這種新方法做出貢獻,該版本現已在Arbitrum測試網上運行。該AIP建議Arbitrum DAO在One和Nova主網上激活對這個端點的支持。[2023/6/20 21:49:37]

部署一個簡單的Move合約

moduleMyCounterAddr::MyCounter{usestd::signer;structCounterhaskey,store{value:u64,}publicfuninit(account:&signer){move_to(account,Counter{value:0});}publicfunincr(account:&signer)acquiresCounter{letcounter=borrow_global_mut(signer::address_of(account));counter

publicentryfuninit_counter(account:signer){Self::init(&account。publicentryfunincr_counter(account:signer)acquiresCounter{Self::incr(&account。

MyCounter源碼分析

module是發布在特定地址下的打包在一起的一組函數和結構體。使用script時需要與已發布的module或標準庫一起運行,而標準庫本身就是在0x1地址下發布的一組module。

moduleMyCounterAddr::MyCounter{}則在該MyCounterAddr地址下(對應Move

Makerdao聯創設立1400萬美元氣候基金的提議遭到社區質疑:2月7日消息,Makerdao聯合創始人Rune Christensen最近提出 Maker 改進提案 (MIP) 建議使用 20,000 個makerdao (MKR)代幣來資助科學可持續發展基金。一個旨在應對氣候變化和有關能源解決方案的錯誤信息的想法。目前 20,000 個makerdao (MKR)代幣的大約價值為 1,400 萬美元。該草案在社交媒體上受到批評,有人將Christensen的想法與有效利他主義運動進行了比較,該運動得到了 FTX 聯合創始人Sam Bankman-Fried的支持。還有用戶表示:他為什么不用自己的錢,而是用MKR國庫?[2023/2/7 11:52:58]

Struct&Abilities

structCounterhaskey,store{value:u64,}

使用struct定義了一個叫做Counter的結構體,同時被key,store兩種限制符修飾。

Move的類型系統靈活,每種類型都可以定義四種能力。

它們定義了類型的值是否可以被復制、丟棄和存儲。

這四種abilities限制符分別是:Copy,Drop,Store和Key。

它們的功能分別是:

Copy-值可以被復制。

Drop-在作用域結束時值可以被丟棄。

Key-值可以作為鍵值被「全局存儲操作」進行訪問。

Store-值可以被存儲到全局狀態。

這里用key、store修飾,則表示它不能被復制,也不能被丟棄或重新使用,但是它卻可以被安全地存儲和轉移。

Abilities的語法

基本類型和內建類型的abilities是預先定義好的并且不可改變:integers,vector,addresses和boolean類型的值先天具有copy、drop和storeability。

然而,結構體的ability可以按照下面的語法進行添加:

美CFTC向法院申請通過論壇帖子等方式向Ooki DAO匿名成員發送起訴傳票:9月28日消息,根據周二提交的法庭文件,美國商品期貨交易委員會 (CFTC) 使用非傳統方法對去中心化自治組織 (DAO) 的化名成員提起訴訟。在CFTC訴Ooki DAO案件中,CFTC向美國加州北區地方法院申請一項替代服務動議,要求法院批準使用聊天機器人和論壇帖子作為對被告(包括Ooki DAO成員)的送達告知和傳票的方式。CFTC稱其律師助理通過將訴訟及相關文件上傳至Ooki DAO在線論壇的方式,向被告告知了訴訟問題。

目前,Ooki DAO的匿名成員也面臨著CFTC對其的訴訟,其中一名成員有大約21天的時間對訴訟作出回應,以避免CFTC對其做出缺席判決。該動議認為,盡管DAO沒有人回應CFTC的聯系請求,但在Ooki DAO官方Telegram聊天中對訴訟的討論,以及“CFTC在在線論壇上關于該行動的帖子至少有112個觀點”,足以表明DAO得到了適當的服務。此案聽證會目前定于11月9日舉行。這是CFTC對DAO成員提起的第一起訴訟,可能對未來的DAO監管產生廣泛影響。(CoinDesk)[2022/9/28 5:56:59]

structNAMEhasABILITY{}

一個簡單的圖書館例子:

moduleLibrary{//eachabilityhasmatchingkeyword//multipleabilitiesarelistedwithcommastructBookhasstore,copy,drop{year:u64}//singleabilityisalsopossiblestructStoragehaskey{books:vector}//thisonehasnoabilitiesstructEmpty{}}

什么是Resource

Move白皮書中詳細描述了Resource這個概念。最初,它是作為一種名為resource的結構體類型被實現,自從引入ability以后,它被實現成擁有Key和Store兩種ability的結構體。Resource可以安全的表示數字資產,它不能被復制,也不能被丟棄或重新使用,但是它卻可以被安全地存儲和轉移。

BendDAO中有28枚NFT正清算拍賣,涉及BAYC等四個種類:8月22日消息,NFT抵押借貸協議BendDAO中有28枚NFT正清算拍賣,涉及到BAYC、Doodles、MAYC以及Clone X四個種類。具體包括:2枚Bored Ape Yacht Club、7枚Clone X、6枚Doodles以及13枚Mutant Ape Yacht Club。

此前8月19日消息,加密貨幣分析師Cirrus發推文稱,NFT借貸市場正面臨嚴重清算風險,僅NFT抵押借貸協議BendDAO就有價值32,267個以太坊的NFT被用作貸款抵押品。BendDAO中大量BAYC、MAYC健康系數低于1.2,瀕臨清算門檻。Cirrus提及,大多數NFT以地板價的30-40%進行抵押,但如果此抵押品的健康系數低于1 ,倘若不及時償還貸款,用戶的NFT將被拿來進行48小時拍賣,并賣給出價最高者。[2022/8/22 12:39:43]

Resource的定義

Resource是一種用key和storeability限制了的結構體:

moduleM{structThaskey,store{field:u8}}Resource的限制

在代碼中,Resource類型有幾個主要限制:

Resource存儲在帳戶下。因此,只有在分配帳戶后才會存在,并且只能通過該帳戶訪問。

一個帳戶同一時刻只能容納一個某類型的Resource。

Resource不能被復制;與它對應的是一種特殊的kind:resource,它與copyable不同,這一點在泛型章節中已經介紹。

Resource必需被使用,這意味著必須將新創建的Resourcemove到某個帳戶下,從帳戶移出的Resource必須被解構或存儲在另一個帳戶下。

剛才的案例

structCounterhaskey,store{value:u64,}

所以這里就有一個和solidity的區別了,在eth上如果需要發行一個新資產,比如usdc。那這個資產是記錄在合約里的某個map中。而move就不同了,資產是作為resource存在用戶地址下的。

MakerDAO發起有關添加UNI-V2-DAI-USDC為抵押品等投票:金色財經報道,據官方博客消息,MakerDAO治理促進者已代表MakerDAO授權的參與者將一系列治理投票納入投票系統。具體包括:將UNI-V2-DAI-USDC(UniswapV2 DAI-USDC LP代幣)添加為抵押品;將UNI-V2-ETH-USDT(UniswapV2 ETH-USDT LP代幣)添加為抵押品;在Starkware上為dYdX創建多個Oracle等。[2021/2/2 18:39:39]

定義函數

publicfuninit(account:&signer){move_to(account,Counter{value:0});}publicfunincr(account:&signer)acquiresCounter{letcounter=borrow_global_mut(signer::address_of(account));counter

publicentryfuninit_counter(account:signer){Self::init(&account。publicentryfunincr_counter(account:signer)acquiresCounter{Self::incr(&account。

定義格式則是:

publicfun函數名(參數:參數類型){}

move函數默認是私有函數,只能在定義它們的模塊中訪問。關鍵字public將更改函數的默認可見性并使其公開,即可以從外部訪問。

init方法參數是一個&signer,意味著該方法必須是一個賬戶合法簽名過后才可以調用,move_to則是move的一個原語,作用是發布、添加Counter資源到signer的地址下。Move的賬戶模型,code和data是存儲在一個賬戶地址下的。

下面是列舉的常用原語

move_to<T>(&signer,T):發布、添加類型為T的Resource到signer的地址下。

move_from<T>(addr:address):T-從地址下刪除類型為T的Resource并返回這個資源。

borrow_global<T>(addr:address):&T-返回地址下類型為T的Resource的不可變引用。

borrow_global_mut<T>(addr:address):&mutT-返回地址下類型為T的Resource的可變引用。

exists<T>(address):bool:判斷地址下是否有類型為T的Resource。

incr方法參數也是一個&signer,意味著該方法必須是一個賬戶合法簽名過后才可以調用,

關鍵字acquires,放在函數返回值之后,用來顯式定義此函數獲取的所有Resource。

Signer::address_of(account)從簽名者中拿到address

borrow_global_mut上面有介紹到,可變借用到address下的resourceCounter,然后將Counter結構體下的value進行+1操作。

這下面的兩個方法則是script方法,它與上面兩個函數有什么區別呢?

publicfun:方法可以在任何模塊中被調用。

public(script)fun/publicentryfun:scriptfunction是模塊中的入口方法,表示該方法可以通過控制臺發起一個交易來調用,就像本地執行腳本一樣

下個版本的Move會用publicentryfun替代public(script)fun

Self則是代表自身module。

使用AptosCli編譯、部署、調用合約

#創建新的測試環境aptosinit--profiledevtest--rest-url--faucet-url#編譯move合約aptosmovecompile--package-dirmy-counter#部署合約#例如:aptosmovepublish--package-dirmy-counter--named-addressesbasecoin=0x8e00bd9827faf171996ef37f006dd622bb5c3e43ec52298a8f37fd38cd59664--profiledevtestaptosmovepublish--package-dirmy-counter--named-addressesbasecoin=--profiledevtest#調用合約#例如:#aptosmoverun--function-id0x8e00bd9827faf171996ef37f006dd622bb5c3e43ec52298a8f37fd38cd59664::MyCounter::init_counter--profiledevtest#aptosmoverun--function-id0x8e00bd9827faf171996ef37f006dd622bb5c3e43ec52298a8f37fd38cd59664::MyCounter::incr_counter--profiledevtestaptosmoverun--function-id::::--profiledevtest#列出指定賬戶的modules/resources信息aptosaccountlist--querymodules--account0xa1285adb4b8abedf5faf7a46d260c5844f1f64d59dd9b8869db1543cf5bbadf4--profiledevtestaptosaccountlist--queryresources--account0x4200c2b801870f20a709abba80b6edb90a45ecd9b8acce9842b93d597602edcf--profiledevtest

AptosSDK調用Move合約

編譯好合約之后,我們可以通過sdk調用我們的合約。

我們可以選擇通過sdk部署合約,也可以通過sdk調用move合約。

通過sdk部署合約

當我們編譯完成之后,會在move合約文件夾下生成build/文件夾

我們需要把my-counter/build/Examples/bytecode_modules/MyCounter

通過SDK發送交易

這里,我們以my-counter合約中的init_counter和incr_counter為例。

構造兩個方法用于調用這兩個方法,從而實現客戶端調用init和incr的功能。

asyncfunctioninitCounter(contractAddress:string,accountFrom:AptosAccount):Promise<string>{constscriptFunctionPayload=newTxnBuilderTypes

asyncfunctionincrCounter(contractAddress:string,accountFrom:AptosAccount):Promise<string>{constscriptFunctionPayload=newTxnBuilderTypes

通過SDK獲取賬戶里的資源信息。

resource是存放在所屬的賬戶地址下的,我們可以根據account地址,查詢相關的resource信息。

getCounter()方法其實就是獲取my-counter下的**Counter**資源。

asyncfunctiongetCounter(contractAddress:string,accountAddress:MaybeHexString):Promise<string>{try{constresource=awaitclient

catch(_){return"";}}

其實這個效果就類似sdk里的

aptosaccountlist--queryresources--account0x4200c2b801870f20a709abba80b6edb90a45ecd9b8acce9842b93d597602edcf

最終的主函數

asyncfunctionmain(){assert(process

,);});constmodulePath=process

執行效果

執行成功,在這里通過SDK,給一個隨機生成的賬戶init了Counter資源,然后incr了三次,所以最后Counter的Value為3。

image-20220831200516865

my-counter相關代碼:https://github.com/99Kies/Aptos-Move-Dapp

參考資料

UsingCLItoRunaLocalTestnet|AptosDocs:https://aptos.dev/nodes/local-testnet/using-cli-to-run-a-local-testnet

源碼:https://github.com/aptos-labs/aptos-core/blob/main/aptos-move/framework/move-stdlib/sources/signer.move

Tags:UNTCOURESTERBHUNTanticounterfeitchainPegs SharesInterfinex

NEAR
CryptoRank發布“市值與TVL比率最低的TOP10 DeFi項目”榜單,SUN.io高居第一-ODAILY_CRYPTO:CRY

9月12日,CryptoRank發布“市值與TVL比率最低的TOP10DeFi項目”榜單,SUN.io高居第一,JustLendDAO位居第三.

1900/1/1 0:00:00
印度央行即將啟動數字盧比試點項目-ODAILY_BDC:BDCC Gold Chain

印度儲備銀行(RBI)發布了一份關于擬議央行數字貨幣(CBDC)的說明。該說明討論了CBDC的一些關鍵問題,比如技術和設計選擇,數字盧比的潛在用途,以及發行機制等.

1900/1/1 0:00:00
波場TRON賬戶總數突破1.29億-ODAILY_TRO:DeFine

區塊鏈瀏覽器TRONSCAN最新數據顯示,截至12月13日,波場TRON賬戶總數達到129,205,956,正式突破1.29億.

1900/1/1 0:00:00
Weekly Brief:鏈上期權協議擁擠的DeFi子賽道-ODAILY_NFT:SEA

鏈上期權協議:擁擠的DeFi子賽道一個成熟的交易市場中,衍生品的交易額往往遠大于現貨。在Crypto領域,去中心化衍生品,或者說鏈上合約交易,仍有很大的發展空間.

1900/1/1 0:00:00
從Metaka Wars的「侵權」事件分析NFT市場版權問題-ODAILY_NFT:Sabaka Inu

近幾年NFT領域不斷發展,得益于區塊鏈的開放特性,每個人都可以成為創作者。很多藝術家也將自己的作品通過NFT的形式上傳至區塊鏈上,在各大平臺中“發行”,還有很多創作者基于一些知名的NFT項目進行.

1900/1/1 0:00:00
波卡生態中的Substrate Connect是如何工作的? -ODAILY_SUBS:BST

“波卡知識圖譜”是我們針對波卡從零到一的入門級文章,我們嘗試從波卡最基礎的部分講起,為大家提供全方位了解波卡的內容,當然這是一項巨大的工程,也充滿了挑戰.

1900/1/1 0:00:00
ads