链资讯 链资讯
Ctrl+D收藏链资讯
首页 > OKB > 正文

EST:DAOrayaki:Aptos & Move实操讲解-ODAILY_TEST价格

作者:

时间:

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时才允许合约升级

Paradigm为审计DAO Code4rena提供600万美元代币购买资金:金色财经报道,加密风投公司Paradigm正在资助Code4rena DAO,该DAO通过600万美元的代币购买为寻找漏洞的独立审计人员提供激励。

据悉,Code4rena于去年成立,致力于通过众包任务并将人员与他们独特的专业领域相匹配来解决困扰传统审计模式的低效率问题。目前,DAO已经有3500名审计员(在平台上被称为“监督员”)参与了217次审计。Code4rena曾与OpenSea、Blur、zkSync、Aave、Trader Joe、Sushi和Chainlink等业内知名公司合作。[2023/3/17 13:09:04]

部署一个简单的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

以太坊前核心开发者:未来DAO注定将接管世界:12月7日消息,以太坊前核心开发者之一Lane Rettig认为,加密货币可以改变日常生活的方方面面,从工资支付方式到企业组建和管理方式。Lane Rettig认为,加密货币离变得更加直观还有一两年的时间。它有潜力通过让创办一家公司变得更便宜、更容易来激励新一代的初创企业和企业家。加密货币可以让小企业飞速发展,推动全球经济增长。

Rettig认为,去中心化自治组织(DAO)是潜在经济爆发的关键。它们是民主化的,由购买和持有代币的人(而不是首席执行官)管理,并透明运作。“我认为DAO是人类组织进化的下一步,我认为这是一代人的转变,需要几十年才能发挥出来。”他承认DAO存在很多问题,但坚信它们注定要接管世界。(Invezz)[2021/12/7 12:57:04]

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可以按照下面的语法进行添加:

DAOSquare 完成天使轮融资:据官方消息,DAOSquare 完成天使轮融资,此轮估值4,000万美金,由 HashKey 领投,投资机构包括:Alameda、NGC、CMS Holdings、SRC Capital、Pluto Digital Assets PLC、安比实验室、LD Capital、Spark Capital、LangHash、ArkStream Capital、DFG、Hash Global、Zonff Partners、Crasolum Pte Ltd、Double Peak Group Limited (HK)、HunFan Labs、MetaCartel Ventures China、Kucoin Labs、Hot Labs、Gate Labs,另外 MetaCartel Ventures 的发起人Peter_Pan 等其他个人投资人也参与了此轮投资。

DAOSquare 诞生于西方以太坊社区 MetaCartel,致力于 Web3 时代孵化器的构建,其目标是成为 Web3 时代的 Y·Combinator,DAOSquare 即将上线孵化器 MVP,第一期全球性孵化计划已经启动,近期会公布第一期孵化名单。另外,孵化基金 (VentureDAO) 也将于近期启动。[2021/4/22 20:47:29]

structNAMEhasABILITY{}

一个简单的图书馆例子:

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

什么是Resource

Move白皮书中详细描述了Resource这个概念。最初,它是作为一种名为resource的结构体类型被实现,自从引入ability以后,它被实现成拥有Key和Store两种ability的结构体。Resource可以安全的表示数字资产,它不能被复制,也不能被丢弃或重新使用,但是它却可以被安全地存储和转移。

MakerDAO发起调整基本费率等投票:金色财经报道,据官方博客消息,Maker Foundation智能合约团队今日已将一项执行投票纳入投票系统。具体包括:1.基本费率调整:用户可选择的范围为-4%至4%;2.采用更灵活、透明的方式添加抵押品;3.添加ETH-B Vault类型。[2020/10/6]

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存在用户地址下的。

定义函数

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。

动态 | 以太坊创业公司Argent集成MakerDAO协议:据The Block消息,以太坊创业公司Argent集成了MakerDAO协议,将为用户提供直接的信贷渠道,希望通过贷款、流动资金参与和短期路线图上的管理。[2019/7/31]

定义格式则是:

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

标签:ESTICKTICFILETEST价格CHICKSParticlfilecoin币中文名

OKB热门资讯
加密货币:打破边界的加密货币女性创新者-ODAILY_SHIN

尽管加密货币诞生之时,正处于一个各行各业都鼓励平等和多样性的时代,但也不能仅仅基于这一背景,就否认加密货币领域在性别包容性上存在一些问题.

稳定币:漫谈日本稳定币,告别动荡的2022-ODAILY_MAT

本文由PlatONCTOJamesQU于2022年12月31日写于东京2022年是加密货币行业跌宕起伏的一年,在这一年即将结束之际,我想谈谈日本的稳定币.

EST:Aptos开发入门教程:创建资源(一)-ODAILY_ICK

本文目标:资源、能力、全局存储、单元测试 介绍 Move语言使得在区块链世界中创造数字“事物”,以及拥有和转移它们变得非常容易。Move是一种非常简单的语言——这是有意为之.

WELL:SignalPlus每日晨报(20221103)-ODAILY_Welltrado

各位朋友,欢迎来到SignalPlus每日晨报。SignalPlus晨报每天为各位更新宏观市场信息,并分享我们对宏观趋势的观察和看法。欢迎追踪订阅,与我们一起关注最新的市场动态.

TPS:Daoswap攻击事件分析:卡Bug给自己「开工资」-ODAILY_CHTT

北京时间2022年9月5日,CertiK审计团队监测到Daoswap由于挖矿奖励大于交换过程中收取的费用以及缺乏验证,允许用户将邀请者地址设置为自己,在一次攻击中损失了58万USDT.

TRO:Decrypt重磅推出TRON科普专栏-ODAILY_RON

据最新消息,Decrypt已重磅推出TRON科普专栏。 挪威政府将在Decentraland设立元宇宙税务局和办事处:10月27日消息,挪威政府机构Br?nn?ysund注册中心和挪威税务局(S.