比特幣價格 比特幣價格
Ctrl+D 比特幣價格
ads
首頁 > SAND > Info

UNT:DAOrayaki:Aptos & Move實操講解-ODAILY_RES

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時才允許合約升級

MakerDAO代幣回購計劃上線后MKR周漲幅近28%:金色財經報道,在DEFI貸款平臺MakerDAO引入代幣回購計劃后, 其治理代幣MKR飆升至接近一年的高價。MKR自去年八月以來首次上漲至1,200美元以上,當前以1,148美元左右的價格易手,過去一周漲幅約28%,根據Etherscan的區塊鏈數據,在過去24小時內,該協議回購了價值約23萬美元的 MKR 。按照這個速度,該協議有望在下個月回購約700萬美元的代幣。[2023/7/22 15:51:52]

部署一個簡單的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

Struct&Abilities

structCounterhaskey,store{value:u64,}

Avalanche推出NFT計劃Avaissance,涵蓋藝術家駐留計劃和NFT策展DAO:3月30日消息,據官方博客,Avalanche基金會啟動NFT計劃Avaissance,旨在支持正在崛起的數字藝術家,并推動Avalanche NFT生態系統的增長。Avaissance有兩個組成部分:一個是針對50多位藝術家的藝術家駐留計劃(AIR),另一個是“蒙娜麗莎計劃”(MLI),這是一個數字藝術策展合作項目。

AIR計劃的申請目前已開放并將于4月28日截止,第一批50名入選者將于5月宣布。AIR將為被錄取的藝術家提供6個月的機會來從事個人創意項目,同時獲得資金、一對一指導、虛擬研討會機會以及Avalanche生態系統的支持。MLI計劃則是將Avalanche NFT贈予以藝術為中心的DAO,從而擴大DAO的NFT收藏。參與MLI管理的DAO將很快公布。[2023/3/30 13:35:26]

使用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可以按照下面的語法進行添加:

structNAMEhasABILITY{}

United Planetary DAO對購買“吉米鑰匙”的提案獲得通過,擬按690 ETH價格提出購買邀約:金色財經報道,United Planetary DAO社區對“吉米鑰匙”提出購買邀約的提案獲得通過,旨在從“無聊猿” Bored Ape Yacht Club的DooKey Dash獲得最具價值的“金鑰匙”,據United Planetary DAO在社交媒體稱,現在該組織已被授權對排名第一的下水道通行證出價690 ETH(約合1,1130,000美元),但是目前尚不清楚“吉米鑰匙”持有者Mongraal是否會接受United Planetary DAO的出價,因為該NFT在NFT市場OpenSea的“掛牌價”高達2,222 ETH(約合3,650,000美元),與United Planetary DAO的出價差距較大。[2023/2/23 12:24:33]

一個簡單的圖書館例子:

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

什么是Resource

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

Resource的定義

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

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

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

安全團隊:MTDAO項目方的未開源合約遭受閃電貸攻擊,損失近50萬美元:金色財經報道,據Beosin EagleEye Web3安全預警與監控平臺檢測顯示,MTDAO項目方的未開源合約0xFaC064847aB0Bb7ac9F30a1397BebcEdD4879841遭受閃電貸攻擊,受影響的代幣為MT和ULM。攻擊交易為0xb1db9743efbc306d9ba7b5b892e5b5d7cc2319d85ba6569fed01892bb49ea499,共獲利487,042.615 BUSD。攻擊者通過未開源合約中的0xd672c6ce和0x70d68294函數,調用了MT與ULM代幣合約中的sendtransfer函數獲利(因為同為項目方部署,未開源合約0xFaC06484具有minter權限)。

Beosin安全團隊分析發現攻擊者共獲利1930BNB,其中1030BNB發送到0xb2e83f01D52612CF78e94F396623dFcc608B0f86地址后全部轉移到龍卷風地址,其余的swap為其他代幣轉移到其它地址。用戶和項目方請盡快移除流動性,防止攻擊合約有提幣和兌換接口。[2022/10/17 17:29:32]

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

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

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

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

剛才的案例

structCounterhaskey,store{value:u64,}

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

定義函數

ENS DAO通過EP4提案,將創建基礎工作組并制定相關規則:12月20日消息,ENSDAO通過了EP4提案,將創建基礎工作組并制定工作組相關規則。基礎工作組將用于管理與DAO相關的工作,而無需將DAO的每項舉措或決定都作為提案通過。據悉,ENSDAO將設立以下4個基礎工作組:1.元治理:為ENSDAO和工作組的管理和運營提供治理監督和支持;2.ENS生態系統:持續開發和改進ENS協議和生態系統,重點關注與ENS相關的所有技術問題;3.社區:支持作為ENS用戶的個人和組織,重點關注非技術問題;4.公共物品:將ENS放大為公共物品并資助ENS生態系統內的公共物品,更廣泛地在web3中。[2021/12/20 7:50:38]

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:UNTCOURESTERSUNT幣Neverend Ecentralization Could ExangeRESET價格Magic Shiba Starter

SAND
區塊鏈:晉級可信區塊鏈安全攻防大賽決賽,歐科云鏈“鏈上天眼”產品獲評審團高度認可-ODAILY_ZOR

由成都市人民政府、中國信息通信研究院主辦的“第二屆中國可信區塊鏈安全攻防大賽”將于11月19日正式開啟決賽.

1900/1/1 0:00:00
CER:CertiK 8月報:31起重大攻擊事件,最高一次蒸發近2億美元-ODAILY_ERT

Web3.0世界本年度發生了共計377次黑客攻擊,到目前為止因漏洞風險及騙局所造成的資產損失已達到了約2,338,681,983美元.

1900/1/1 0:00:00
KUS:波卡官方近期正在引領新項目誕生,波卡新一輪插槽項目的情況如何?-ODAILY_KUSA價格

Polkadot生態研究院出品,必屬精品 背景 最近Kusama迎來第50次平行鏈插槽拍賣,對于之前設定的一條中繼鏈可能支持100條來說,賽程已經過半,雖然盡管有老項目在續拍新的平行鏈.

1900/1/1 0:00:00
MEV:什么是MEV,如何實現交易利益最大化?-ODAILY_interstellarchain

最大可提取價值(MaximalextractablevalueMEV)是指驗證者通過添加、刪除并更改區塊中的交易順序,在超過標準區塊獎勵和gas費用的區塊生產中所能提取的最大價值.

1900/1/1 0:00:00
BIT:Bitfinex一周簡報(1226-0101)-ODAILY_INE

展望:Bitfinex對2023年有何期待?任何在加密貨幣市場呆得足夠久的人都知道,市場是不可預測的.

1900/1/1 0:00:00
DMC:多米尼克政府官宣波場TRON成為該國指定國家級區塊鏈基礎設施-ODAILY_DMCH

10月7日,多米尼克政府官方發布公告,正式宣布波場TRON作為該國指定國家級區塊鏈基礎設施,以構建一個更具包容性和多樣化的經濟體系。這是區塊鏈行業首次與主權國家達成的最高級別的合作.

1900/1/1 0:00:00
ads