木星链 木星链
Ctrl+D收藏木星链

COU:DAOrayaki:Aptos & Move实操讲解

作者:

时间:1900/1/1 0:00:00

DAOrayakiDAO研究奖金池:

资助地址:?DAOrayaki

Struct&Abilities

struct?Counter?has?key,?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可以按照下面的语法进行添加:

struct?NAME?has?ABILITY??{??}

一个简单的图书馆例子:

BreederDAO推出BDIP-3提案,将建立内部DAO法院:11月9日消息,NFT资产制作平台BreederDAO推出BDIP-3提案,通过建立DAO法院以尽可能在内部进行管理和解决。BreederDAO是面向区块链游戏的NFT资产制作平台,此前,BreederDAO宣布完成由A16Z和Delphi Digital领投的1000万美元A轮融资,Hashed、com2us、Morningstar Ventures、Mechanism Capital、Sfermion、The LAO和Emfarsis等参投。[2022/11/9 12:38:57]

module?Library?{????//?each?ability?has?matching?keyword????//?multiple?abilities?are?listed?with?comma????struct?Book?has?store,?copy,?drop?{????????year:?u64????}????//?single?ability?is?also?possible????struct?Storage?has?key?{????????books:?vector????}????//?this?one?has?no?abilities????struct?Empty?{}}

什么是Resource

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

a16z在美CFTC诉Ooki DAO案中称:监管应用程序而非协议是双赢选择:11月2日消息,a16z总法律顾问Miles Jennings在推特上表示:“a16z已在美国商品期货交易委员会(CFTC)诉Ooki DAO案中提交了法庭之友简报,并主要关注‘CFTC应该监管应用程序,而不是协议’这一观点的原因,根据美国联邦法案,为非法人团体提供有效服务要求CFTC声称团体的成员具有‘共同的合法目的’,而CFTC并没有声称Ooki DAO有合法的目的,尽管他们确实有一个合法目的,即管理Ooki Protocol。最终,这种方法将使CFTC既能追究不良行为者的责任,又能保护Web3和它的良好行为者。换句话说,这是双赢的。”[2022/11/2 12:09:28]

Resource的定义

Resource是一种用?key?和?store?ability限制了的结构体:

module?M?{????struct?T?has?key,?store?{????????field:?u8????}}Resource的限制

在代码中,Resource类型有几个主要限制:

Resource存储在帐户下。因此,只有在分配帐户后才会存在,并且只能通过该帐户访问。

一个帐户同一时刻只能容纳一个某类型的Resource。

Resource不能被复制;与它对应的是一种特殊的kind:resource,它与copyable不同,这一点在泛型章节中已经介绍。

Resource必需被使用,这意味着必须将新创建的Resource?move到某个帐户下,从帐户移出的Resource必须被解构或存储在另一个帐户下。

Orange DAO筹集8000万美元资金,以支持加密初创公司:8月24日消息,风险投资DAO组织Orange DAO已筹集8000万美元资金,资金主要来自其战略投资者Algorand和NEAR,其余资金来自担任该基金有限合伙人的DAO成员以及一些机构投资者。

该组织最初打算从投资者那里筹集1000万美元资金,用于支持加密初创公司。自1月份以来,该组织的成员已从1000名增至1300名,并已支持90家初创公司,包括Liquifi、Goldfinch和Spritz。

据此前报道,今年3月,由Y Combinator校友创建的Orange DAO选择NEAR作为其首选的Layer 1区块链,同时NEAR基金会将向Orange DAO投资1500万美元,以支持在NEAR区块链上建立Web3公司的创始人。(Techcrunch)[2022/8/24 12:44:14]

刚才的案例

struct?Counter?has?key,?store?{????value:u64,}

所以这里就有一个和solidity的区别了,在eth上如果需要发行一个新资产,比如usdc。那这个资产是记录在合约里的某个map中。而move就不同了,资产是作为resource存在用户地址下的。

定义函数

public?fun?init(account:?&signer){????move_to(account,?Counter{value:0});}public?fun?incr(account:?&signer)?acquires?Counter?{????let?counter?=?borrow_global_mut(signer::address_of(account));????counter

波场TRON与DuckDAO正式达成合作,波场TRON上的项目可以无缝参与DuckDAO的初始DEX产品:据最新消息,波场TRON与DuckDAO正式达成合作,此后,波场TRON上的项目可以在DuckDAO平台上进行IDO。

波场TRON的低交易费用、极速的交易速度大大降低了运营成本,并改善了去中心化应用程序(包括去中心化金融协议)的用户体验。在这种合作关系的框架内,波场TRON上的项目可以无缝参与DuckDAO的初始DEX产品,以筹集资金用于进一步的开发。

波场TRON创始人兼BitTorrent CEO孙宇晨对此表示:“我们很高兴与DuckDAO团队合作以进一步扩展两个项目的功能,与DuckDAO等出色的区块链解决方案建立合作伙伴关系对于波场TRON不断进阶至关重要。”

DuckDAO 是一个由社区支持的去中心化孵化器,目标是向所有社区用户提供一个投资早期加密项目的机会,以此向有潜力的加密货币项目提供资金、专业知识以及营销支持。[2021/4/1 19:36:01]

public?entry?fun?init_counter(account:?signer){????Self::init(&account。public?entry?fun?incr_counter(account:?signer)??acquires?Counter?{????Self::incr(&account。

定义格式则是:

public?fun?函数名(参数:参数类型){?}

move函数默认是私有函数,只能在定义它们的模块中访问。关键字public将更改函数的默认可见性并使其公开,即可以从外部访问。

动态 | MakerDAO锁定以太坊占比达年内最低:过去一个月内,锁定在MakerDAO上的以太坊在总流通量中占比不断下降,由1.74%降为0.79%,这也是今年年初以来最低的水平。发生这种变化的原因是,ETH 价格在过去一月不断下跌,降幅将近30%,促使更多的用户赎回抵押债仓(CDP)。[2019/12/17]

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编译、部署、调用合约

#?创建新的测试环境aptos?init?--profile?devtest?--rest-url??--faucet-url?#?编译move合约aptos?move?compile?--package-dir?my-counter#?部署合约#?例如:aptos?move?publish?--package-dir?my-counter?--named-addresses?basecoin=0x8e00bd9827faf171996ef37f006dd622bb5c3e43ec52298a8f37fd38cd59664?--profile?devtestaptos?move?publish?--package-dir?my-counter?--named-addresses?basecoin=?--profile?devtest#?调用合约#?例如:#?aptos?move?run?--function-id?0x8e00bd9827faf171996ef37f006dd622bb5c3e43ec52298a8f37fd38cd59664::MyCounter::init_counter?--profile?devtest#?aptos?move?run?--function-id?0x8e00bd9827faf171996ef37f006dd622bb5c3e43ec52298a8f37fd38cd59664::MyCounter::incr_counter?--profile?devtestaptos?move?run?--function-id?::::?--profile?devtest#?列出指定账户的modules/resources信息aptos?account?list?--query?modules?--account?0xa1285adb4b8abedf5faf7a46d260c5844f1f64d59dd9b8869db1543cf5bbadf4?--profile?devtestaptos?account?list?--query?resources?--account?0x4200c2b801870f20a709abba80b6edb90a45ecd9b8acce9842b93d597602edcf?--profile?devtest

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?的功能。

async?function?initCounter(contractAddress:?string,?accountFrom:?AptosAccount):?Promise?{??const?scriptFunctionPayload?=?new?TxnBuilderTypes

async?function?incrCounter(contractAddress:?string,?accountFrom:?AptosAccount):?Promise?{??const?scriptFunctionPayload?=?new?TxnBuilderTypes

通过?SDK?获取账户里的资源信息。

resource是存放在所属的账户地址下的,我们可以根据account地址,查询相关的resource信息。

getCounter()方法其实就是获取?my-counter?下的**Counter**资源。

async?function?getCounter(contractAddress:?string,?accountAddress:?MaybeHexString):?Promise?{??try?{????const?resource?=?await?client

执行效果

执行成功,在这里通过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

标签:COUUNTRESTERCouponBaymhunt币最新价格ARES价格The Unfettered

以太坊价格今日行情热门资讯
Gate.io Startup:ChainPort (PORTX) Initial Sale Result & Listing Schedule

1ChainPort(PORTX)TokenSaleResultTheGate.ioStartupChainPort(PORTX)saleresultisasfollows:PORTXStart.

1900/1/1 0:00:00
CPI:加息落地!如有神助, 精准暴揍大丰收!

凌晨2点加息终于是落地了!但透露的信息很不妙,具体解读可以查阅《凌晨2点加息行情解读》,鲍尔默讲话透露了什么?未来总体行情怎么走都有说.这是一个一波比一波反弹弱,震荡下降的熊市中期行情.

1900/1/1 0:00:00
XRP:XRP的价格它能否保持看涨复苏?

XRP价格在其图表上注意到上涨趋势。资产整合了几天后,终于北上。在过去24小时内,XRP价格上涨了6%。在过去的一周里,代币上涨了20%以上。买家试图推高价格,他们终于在过去24小时内成功了.

1900/1/1 0:00:00
ION:详析ERC-4337:我们离普及智能合约钱包还有多远?

引子当前主流以太坊钱包的用户体验很有限,以下便捷性功能都只能通过智能合约钱包来完成。无私钥&助记词体验,社交找回批量交易纯链上游戏中,无需多次签名幸运的是,我们已经很接近通行的智能合约标.

1900/1/1 0:00:00
比特币:比特币面临高抛压,什么会拍它的价格?

比特币和其他主要山寨币已显示出宏观经济因素与虚拟货币之间的相关性。8月CPI数据发布后,几乎所有加密资产都开始下跌。报告数据显示通货膨胀率较高,增加了恐惧并导致加密货币价格暴跌.

1900/1/1 0:00:00
BTC:BTC、ETH止跌反弹 利率决议前维持震荡

一波连续性的下跌之后,价格直接打到日线支撑位1280,但在这个位置价格有效支撑,不仅在晚间遏制价格进一步下破,短线上更是依托此位置迎来反弹修复;大饼方面昨日整体表现更强.

1900/1/1 0:00:00