火星链 火星链
Ctrl+D收藏火星链

UNT: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??{??}

一个简单的图书馆例子:

TempleDAO:将为所有受影响的用户进行补偿:10月12日消息,TempleDAO 的一位贡献者在该项目的 Discord 频道中表示,其核心金库拥有超过 1 亿美元的 Stablecoin,项目运转不受影响,攻击者不会造成进一步的伤害,将为所有受影响的用户进行补偿。

此前报道,据推特用户 Spreek 披露,TempleDAO 疑似遭受黑客攻击,损失达 200 万美元。市场数据显示,TempleDAO Token 在质押金库被盗后短暂下跌了 20%。[2022/10/12 10:31:59]

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可以安全的表示数字资产,它不能被复制,也不能被丢弃或重新使用,但是它却可以被安全地存储和转移。

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]

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必须被解构或存储在另一个帐户下。

DeFi协议Ondo Finance提案组成DAO联盟接管Sushi部分治理:2 月 5 日,DeFi协议OndoFinance本周三在Sushi的论坛上发布了一项提案,提议由Ondo Finance组织的DAO联盟Poke Bowl来接管Sushi的部分管理权。由Ondo Finance组织的DAO联盟Poke Bowl还包括Frax、Synapse、UMA和NEAR等,它们希望为SushiDAO建立一个正式的区块链上和合法的离岸实体。(彭博社)[2022/2/5 9:33:08]

刚才的案例

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

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

HDAO 公开课:NFT市场极为广阔,但最好的项目还未出现:11月13日晚8点,加密资产投资机构BKFUND创始人许超逸先生做客超导公开课第34期,表示NFT市场极为广阔,但最好的项目还未出现。

许总认为,实物资产NFT是一个非常有前景的行业,因为实物资产本身的市场空间非常庞大,但是实物资产最关键的问题是需要有可信第三方进行NFT的发行与承兑,这里面有市场教育和用户教育的过程,还有涉及到监管合规的问题。总的来说,实物上链为NFT依然是一个比较漫长的过程,需要大家有足够的耐心去等待。

HDAO作为去中心化的金融服务生态系统,一直致力于创建一个高效、透明和可实现的数字金融生态系统。HDAO作为万物上链先锋践行者,正在稳健推进NFT铸造系统,使用户可以方便地放置真实世界的资产作为抵押品,进行借贷和挖矿,引领NFT行业商业创新与应用落地。[2020/11/13 20:46:06]

定义格式则是:

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

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

init方法参数是一个&signer,意味着该方法必须是一个账户合法签名过后才可以调用,move_to则是move的一个原语,作用是发布、添加Counter资源到signer的地址下。Move的账户模型,code和data是存储在一个账户地址下的。

下面是列举的常用原语

move_to<T>(&signer,T):发布、添加类型为T的?Resource?到signer的地址下。

HDAO:HyperPay将为HDAO用户提供多样的数字资产存储和理财服务:10月15日晚8点,HyperPay技术总监及投资总监做客HDAO中国社区,探讨DeFi理财如何实现安全与高收益兼顾。

HyperPay与HDAO长期以来建立了良好的合作关系。HyperPay是最早支持HDAO代币的钱包,作为生态合作伙伴,HyperPay曾经支持HDAO社区在HyperPay钱包完成了社区投票。

HDAO作为去中心化的金融服务生态系统,一直致力于创建一个高效、透明和可实现的数字金融生态系统。HyperPay钱包作为平台,将发挥流量入口作用,支持HDAO的生态建设与发展,并将针对HDAO用户提供多样的数字资产存储和理财服务。[2020/10/15]

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

标签:UNTCOURESTERUNT币CouchainFresco NetworkPolyStarter

莱特币最新价格热门资讯
CHZ:CHZ和AVAX在日本 DMM 比特币上市后为波动做好准备

CHZ现已在日本DMM交易所上市。它创造了一个双顶图案。AVAX已从上升支撑线跌破。公众号:币圈一级市场阿生所有平台均为,由于平台限制,图片未能展现出来,大家可以到公众平台阅读此文Chiliz(.

1900/1/1 0:00:00
SEI:美 CFTC 对 bZx 协议原控制团队处罚 25 万美元民事罚款,并对 Ooki DAO 提起诉讼

ForesightNews消息,美国商品期货交易委员会发布声明称,已对被告bZeroX及其创始人TomBean和KyleKistner提起诉讼.

1900/1/1 0:00:00
以太坊:合并至今币价跌掉两成,为何说以太币尚未「Price In」

近期加密市场最为关注的TheMerge顺利完成后,比特币跌破两万、以太币合并至今跌幅约20%。这类似于Coinbase上市后一路崩盘,以太坊合并也正成为一个「SelltheNews」事件,但偏向.

1900/1/1 0:00:00
OBLOX:元宇宙公司MyMetaverse在其Minecraft和GTA 5服务器中引入NFT

9月19日消息,尽管《我的世界》开发公司MojangStudios规定禁止使用NFT,元宇宙公司MyMetaverse成功地将NFT引入到几个游戏中,包括其在《我的世界》的服务器.

1900/1/1 0:00:00
DES:9/20中秋佳节百万福利红包天天抽

尊敬的唯客用户您好!中秋佳节百万福利大放送活动时间:2022/09/0712:00至2022/09/2011:59福利五:红包天天抽活动方式:当日有充值100USDT并进行合约交易的用户.

1900/1/1 0:00:00
WORLD:Dcoin(大币网) 支持Cardano(ADA)網絡升級及硬分叉的公告

亲爱的大币网用户:Cardano的网络升级和硬分叉,预计于以下两个阶段进行:epoch365时期,2022年09月23日05:45epoch366时期.

1900/1/1 0:00:00