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架構師Nikolai Muchgian身亡,3天前曾表示遭遇威脅:11月1日消息,MakerDAO前技術合作伙伴、DAI架構師、Balancer聯合創始人Nikolai Muchgian在波多黎各康達多海灘(Condado beach)被發現溺水身亡,年僅29歲。
Nikolai于今年4月重返社交媒體,并在去世前三天在社交媒體發布有關美執法部門的部分信息,并表示遭遇威脅。Tether創始人Craig Sellars、21stParadigm聯創Dylan Leclair已在推特證實此消息并表示悼念。
Nikolai是DappHub的CEO,也是著名的安全研究員。參與過多個區塊鏈項目,包括基于DSProxy委托調用的動態原子組合、DSNote通用日志記錄實用程序、DSAuth靈活授權模式等dappsys實踐。他還參與了最初的Maker/Dai合約系統的架構設計,并創建了Balancer AMM。曾經防止MakerDAO發生類似The DAO同樣的攻擊。(Trustnodes)[2022/11/1 12:04:29]
部署一個簡單的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源碼分析
Developer DAO已開放治理代幣CODE空投查詢頁面:8月4日消息,開發者社區Developer DAO已開放治理代幣CODE空投查詢頁面,或即將開放空投申領。快照已于北京時間2021年11月14日15:41:06完成。
CODE總量共計1000萬枚,其中25%(250萬枚)將分發給滿足以下要求的DAO成員:在區塊高度13612670之前持有指定NFT,在Season 0之前參與早期Snapshot提案投票以及擁有指定POAP的成員。總量的10%(100萬枚)分發給早期貢獻者,即幫助建立DAO并做出卓越貢獻的活躍社區成員。[2022/8/4 5:23:28]
module是發布在特定地址下的打包在一起的一組函數和結構體。使用script時需要與已發布的module或標準庫一起運行,而標準庫本身就是在0x1地址下發布的一組module。
moduleMyCounterAddr::MyCounter{}則在該MyCounterAddr地址下(對應Move
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。
派盾:BabyDAO發生RugPull,約773枚BNB被轉入Tornado Cash:7月6日消息,據PeckShield監測顯示,BNBChain項目Baby DAO發生RugPull,Token下跌99.9%%,約773枚BNB(約18萬美元)被轉移至Tornado Cash。[2022/7/6 1:54:18]
然而,結構體的ability可以按照下面的語法進行添加:
structNAMEhasABILITY{}
一個簡單的圖書館例子:
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類型有幾個主要限制:
Resource存儲在帳戶下。因此,只有在分配帳戶后才會存在,并且只能通過該帳戶訪問。
一個帳戶同一時刻只能容納一個某類型的Resource。
Resource不能被復制;與它對應的是一種特殊的kind:resource,它與copyable不同,這一點在泛型章節中已經介紹。
NFT社區OpenDAO多簽競選結束,SushiSwap聯合創始人獲得最高票數支持:1月2日消息,據官方消息,NFT社區OpenDAO多簽競選結束,共有9位候選人獲得多簽的控制權。其中,獲得票數支持排在前三位的分別是:0xmaki、9x9x9以及OKEx。[2022/1/2 8:20:04]
Resource必需被使用,這意味著必須將新創建的Resourcemove到某個帳戶下,從帳戶移出的Resource必須被解構或存儲在另一個帳戶下。
剛才的案例
structCounterhaskey,store{value:u64,}
所以這里就有一個和solidity的區別了,在eth上如果需要發行一個新資產,比如usdc。那這個資產是記錄在合約里的某個map中。而move就不同了,資產是作為resource存在用戶地址下的。
定義函數
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是存儲在一個賬戶地址下的。
聲音 | MakerDAO創始人:將推出錨定其他法幣的DAI:據cryptopolitan報道,MakerDAO最新推出多抵押品穩定幣Dai,將與除美元之外的多種法定貨幣掛鉤。多抵押品Dai一經推出便取得重大成功,目前多抵押品Dai的發行總數接近5000萬枚大關,支持抵押注意力幣(BAT)和以太(ETH)。[2019/12/16]
下面是列舉的常用原語
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:UNTCOURESTERBinaHunterCOURSE價格Threshold NetworkECOTERRA
分析鏈上數據首先要學會使用瀏覽器,早在今年8月歐科云鏈OKLink已經出過一篇OKLink多鏈瀏覽器的N個隱藏功能-1的文章.
1900/1/1 0:00:00web3項目越來越多地通過無許可治理分層來控制。這種治理分層——以Curve戰爭1的投票托管模型為代表——受到價值捕獲的激勵,并由可組合性實現.
1900/1/1 0:00:00由成都市人民政府、中國信息通信研究院主辦的“第二屆中國可信區塊鏈安全攻防大賽”將于11月19日正式開啟決賽.
1900/1/1 0:00:00LSD將是DeFi生態系統的催化劑,通過合理利用LSD資本效率,可以撬動ETH的資產杠桿,這些釋放出來的流動性杠桿將大幅增加鏈上的資產價值和TVL,帶來第二個DeFiSummer.
1900/1/1 0:00:00萬物皆有周期,加密市場亦如此。歷經兩年投資盛宴后,2022年加密市場鏈上各項數據嚴重縮水,足以見證市場的慘烈,尤其是FTX等巨頭的倒塌讓這個加密寒冬格外凜冽,到處彌漫著無盡的悲觀情緒.
1900/1/1 0:00:00相關閱讀 KuCoinLabs第一季孵化計劃項目解析KuCoinLabs第一季孵化計劃項目解析KuCoinLabs第一季孵化計劃項目解析近日,KuCoinLabs第1季孵化計劃開始.
1900/1/1 0:00:00