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时才允许合约升级
Hash Global Labs完成对NFT项目MaoDAO的收购:6月30日消息,Hash Global Labs宣布完成对MaoDAO的收购,MaoDAO现有的金库资金将全部用于社区建设。MaoDAO品牌定位将全面升级为综合性文娱社区。Hash Global Labs和MaoDAO将落地香港和新加坡,实践Web3的各种商业模式:社区共建IP、粉丝俱乐部、私域流量管理和分发以及创作者生态等。
Hash Global Labs邀请MaoDAO创始人小毛哥在拟成立的MaoDAO理事会担任第一届的主席,帮助MaoDAO和HG Labs的发展。[2023/6/30 22:10:12]
部署一个简单的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
BendDAO 社区投票通过将 Moonbirds 作为抵押品的提案:9月29日消息,NFT 借贷平台 BendDAO 社区已经投票通过将 Moonbirds 作为抵押品的提案,支持率为 99.97%。提案显示,建议的抵押比率为 30%,清算门槛为 80%。[2022/9/30 6:03:19]
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可以按照下面的语法进行添加:
structNAMEhasABILITY{}
一个简单的图书馆例子:
moduleLibrary{//eachabilityhasmatchingkeyword//multipleabilitiesarelistedwithcommastructBookhasstore,copy,drop{year:u64}//singleabilityisalsopossiblestructStoragehaskey{books:vector}//thisonehasnoabilitiesstructEmpty{}}
加密风投Paradigm申请加入美CFTC起诉Ooki DAO案件的辩论:金色财经报道,加密风险投资基金Paradigm Operations周一向联邦法院申请以法庭之友(friend of the court)的身份加入商品期货交易委员会(CFTC)诉Ooki DAO案的辩论中。“法庭之友”不是案件事实上的当事人,但基于对案件的浓厚兴趣或重大利益,以第三方身份向法庭呈送法律意见书(Brief)甚至参加口头辩论,表达案件所涉法律问题的观点。
Paradigm表示,CFTC试图将所有投票代币持有者定义为同一协会的成员“有可能严重扭曲法律”。[2022/10/18 17:29:38]
什么是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不同,这一点在泛型章节中已经介绍。
Resource必需被使用,这意味着必须将新创建的Resourcemove到某个帐户下,从帐户移出的Resource必须被解构或存储在另一个帐户下。
刚才的案例
structCounterhaskey,store{value:u64,}
Ankr Network发布2.0升级版并推出AnkrDAO:7月15日消息,去中心化Web3基础设施提供商Ankr Network(ANKR)宣布推出Ankr Network2.0升级版,旨在将区块链转变为更具弹性的节点网络,新功能包括:运行独立节点、在全节点上质押ANKR Token、以及推出Ankr DAO。
对于开发人员来说,Ankr2.0提供了三种全新应用程序接口(API)服务,旨在简化查询所有类型的区块链数据,这些API可以减少搜索地址和交易时间,允许在Ankr支持的EVM兼容区块链上进行搜索,以及在六个不同的区块链上搜索NFT所有权历史和元数据。(Cointelegraph)[2022/7/15 2:14:55]
所以这里就有一个和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是存储在一个账户地址下的。
Bybit向去中心化自治组织BitDAO财库捐款约1930万美元:加密货币衍生品交易所Bybit宣布已向去中心化自治组织BitDAO的财库提供了约1930万美元的捐款(以 ETH、USDT 和 USDC 的方式),该笔资金相当于7月15日至7月24日期间期货交易量的0.025%,Bybit承诺在可预见的未来定期捐款。
旨在推动开放式金融发展的去中心化自治组织BitDAO于6月完成2.3亿美元融资,Bybit已承诺将其期货合约交易量的0.025%收入贡献到BitDAO的财库中。[2021/7/26 1:15:48]
下面是列举的常用原语
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
标签:COUUNTRESTERMeta CourseUNTD币Restore Truth TokenPurple Butterfly Trading
July.2022,VincyDataSource:FootprintAnalytics-PolygonDashboard近期市场的崩盘已将许多加密资产价格拖至接近零的底部.
1900/1/1 0:00:00据最新消息,USDD-FRAXBP矿池已正式登陆Curve。 USDD-FRAXBP矿池奖励可观,上线后APR高达174.8%.
1900/1/1 0:00:00前言七月随着币价的回升,安全事件也变的频繁发生,攻击者在本月也是“火力全开”,从各个方面进行攻击.
1900/1/1 0:00:00Bitfinex已支持Tezos网络上的Tether(USDt)存取款我们很高兴地宣布,Bitfinex用户可以在UTC时间21/07/22上午10:00使用Tezos传输层在Bitfinex平.
1900/1/1 0:00:0001游戏出海浪潮国内游戏市场增速已呈萎靡态势。据游戏工委数据,2021年中国游戏市场规模为2965亿元,增速下滑至6.4%,用户规模超过6.6亿人,较2020年仅增长0.2%.
1900/1/1 0:00:00据最新消息,JustLendDAO已成功通过区块链安全公司CertiK的安全审计。 CertiK是一家成立于2018年的区块链安全公司,利用一流的形式验证和人工智能技术为区块链应用和智能合约提供.
1900/1/1 0:00:00