Aptos发布模块
创始人
2024-05-29 13:24:36
0

背景

之前那么文章我们已经了解了如何使用Aptos提供的TypeScript SDK在Aptos实现转帐。这篇文章将会讲述如何编译测试和发布Move模块,然后与之交互。

创建账户

首先我们需要创建一个aptos账户,然后获取一些代币,我们可以使用以下命令去初始化一个新的本地账户,这个是需要安装aptos命令行工具。

aptos init

这时候提示选择网络,直接回车即可,默认是开发网devnet:

Configuring for profile default
Choose network from [devnet, testnet, mainnet, local, custom | defaults to devnet]

然后会提示输入私钥,直接回车即可

No key given, generating key...
Account 19fee192e4fe141685670019c53784a6cf895df76d96b05738415f5ae618a9cb doesn't exist, creating it and funding it with 100000000 Octas
Account 19fee192e4fe141685670019c53784a6cf895df76d96b05738415f5ae618a9cb funded successfully

这时候我们就生成了一个账户,其地址如下,由于这个账户是随机生成的,所以其与一般账户有所不同,在使用上这个账户地址与default等价。

0x19fee192e4fe141685670019c53784a6cf895df76d96b05738415f5ae618a9cb

然后使用以下命令获取代币

aptos account fund-with-faucet --account default

其结果如下

{
  "Result": "Added 500000 Octas to account 19fee192e4fe141685670019c53784a6cf895df76d96b05738415f5ae618a9cb"
}

编译测试Move模块

官网提供的Move模块在aptos-core/aptos-move/move-examples/hello_blockchain目录下,首先进入该目录下

cd aptos-core/aptos-move/move-examples/hello_blockchain

通过以下命令编译hello_blockchain模块

aptos move compile --named-addresses hello_blockchain=default

其结果如下

Compiling, may take a little while to download git dependencies...
INCLUDING DEPENDENCY AptosFramework
INCLUDING DEPENDENCY AptosStdlib
INCLUDING DEPENDENCY MoveStdlib
BUILDING Examples
{
  "Result": [
    "0d92c50938eef8bdd4dea8661a78506f3795ca484e9b9d335f59b42079ff82cd::message"
  ]
}

还可以通过以下命令测试

aptos move test --named-addresses hello_blockchain=default

结果如下

INCLUDING DEPENDENCY AptosFramework
INCLUDING DEPENDENCY AptosStdlib
INCLUDING DEPENDENCY MoveStdlib
BUILDING Examples
Running Move unit tests
[ PASS    ] 0xd92c50938eef8bdd4dea8661a78506f3795ca484e9b9d335f59b42079ff82cd::message_tests::sender_can_set_message
[ PASS    ] 0xd92c50938eef8bdd4dea8661a78506f3795ca484e9b9d335f59b42079ff82cd::message::sender_can_set_message
Test result: OK. Total tests: 2; passed: 2; failed: 0
{
  "Result": "Success"
}

在上述命令中--named-addresses是必须的,因为在Move.toml中没有定义

[package]
name = "Examples"
version = "0.0.0"

[addresses]
hello_blockchain = "_"

[dependencies]
AptosFramework = { local = "../../framework/aptos-framework" }

发布模块

在编译测试好模块后,可以通过以下命令发布模块

aptos move publish --named-addresses hello_blockchain=default

其结果如下

Compiling, may take a little while to download git dependencies...
INCLUDING DEPENDENCY AptosFramework
INCLUDING DEPENDENCY AptosStdlib
INCLUDING DEPENDENCY MoveStdlib
BUILDING Examples
package size 1734 bytes
Do you want to submit a transaction for a range of [36500 - 54700] Octas at a gas unit price of 100 Octas? [yes/no] >
yes
{
  "Result": {
    "transaction_hash": "0x92de1f4947d6e52a64d8a4cf301fbfafa0f80586f1af057b488a1a298014a93d",
    "gas_used": 365,
    "gas_unit_price": 100,
    "sender": "19fee192e4fe141685670019c53784a6cf895df76d96b05738415f5ae618a9cb",
    "sequence_number": 1,
    "success": true,
    "timestamp_us": 1678027127523865,
    "version": 1703269,
    "vm_status": "Executed successfully"
  }
}

这时候这个模块已经在aptos区块链上了。

交互

Move模块是通过暴露的入口函数交互的,在hello_blockchain模块中暴露链一个set_message入口函数

module hello_blockchain::message {
    use std::error;
    use std::signer;
    use std::string;
    use aptos_framework::account;
    use aptos_framework::event;

//:!:>resource
    struct MessageHolder has key {
        message: string::String,
        message_change_events: event::EventHandle,
    }
//<:!:resource

    struct MessageChangeEvent has drop, store {
        from_message: string::String,
        to_message: string::String,
    }

    /// There is no message present
    const ENO_MESSAGE: u64 = 0;

    public fun get_message(addr: address): string::String acquires MessageHolder {
        assert!(exists(addr), error::not_found(ENO_MESSAGE));
        *&borrow_global(addr).message
    }

    public entry fun set_message(account: signer, message: string::String)
    acquires MessageHolder {
        let account_addr = signer::address_of(&account);
        if (!exists(account_addr)) {
            move_to(&account, MessageHolder {
                message,
                message_change_events: account::new_event_handle(&account),
            })
        } else {
            let old_message_holder = borrow_global_mut(account_addr);
            let from_message = *&old_message_holder.message;
            event::emit_event(&mut old_message_holder.message_change_events, MessageChangeEvent {
                from_message,
                to_message: copy message,
            });
            old_message_holder.message = message;
        }
    }
    ```
    
可以通过命令行工具用以下命令进行调用:
    ```
    aptos move run \
  --function-id 'default::message::set_message' \
  --args 'string:hello, blockchain'
其结果如下:
  {
"Result": {
  "transaction_hash": "0x1de44a4870826aaf2e75093550f934f34d591623654984d38356d6e48d57c20f",
  "gas_used": 504,
  "gas_unit_price": 100,
  "sender": "19fee192e4fe141685670019c53784a6cf895df76d96b05738415f5ae618a9cb",
  "sequence_number": 2,
  "success": true,
  "timestamp_us": 1678029220436585,
  "version": 1718721,
  "vm_status": "Executed successfully"
}
}

set_message函数修改hello_blockchain的MessageHolder资源。

最后

这篇文章主要讲述了如何在aptos上发布Move模块。

相关内容

热门资讯

Python|位运算|数组|动... 目录 1、只出现一次的数字(位运算,数组) 示例 选项代...
张岱的人物生平 张岱的人物生平张岱(414年-484年),字景山,吴郡吴县(今江苏苏州)人。南朝齐大臣。祖父张敞,东...
西游西后传演员女人物 西游西后传演员女人物西游西后传演员女人物 孙悟空 六小龄童 唐僧 徐少华 ...
名人故事中贾岛作诗内容简介 名人故事中贾岛作诗内容简介有一次,贾岛骑驴闯了官道.他正琢磨着一句诗,名叫《题李凝幽居》全诗如下:闲...
和男朋友一起优秀的文案? 和男朋友一起优秀的文案?1.希望是惟一所有的人都共同享有的好处;一无所有的人,仍拥有希望。2.生活,...
戴玉手镯的好处 戴玉手镯好还是... 戴玉手镯的好处 戴玉手镯好还是碧玺好 女人戴玉?戴玉好还是碧玺好点佩戴手镯,以和田玉手镯为佳!相嫌滑...
依然什么意思? 依然什么意思?依然(汉语词语)依然,汉语词汇。拼音:yī    rán基本解释:副词,指照往常、依旧...
高尔基的散文诗 高尔基的散文诗《海燕》、《大学》、《母亲》、《童年》这些都是比较出名的一些代表作。
心在飞扬作者简介 心在飞扬作者简介心在飞扬作者简介如下。根据相关公开资料查询,心在飞扬是一位优秀的小说作者,他的小说作...
卡什坦卡的故事赏析? 卡什坦卡的故事赏析?讲了一只小狗的故事, 我也是近来才读到这篇小说. 作家对动物的拟人描写真是惟妙...
林绍涛为简艾拿绿豆糕是哪一集 林绍涛为简艾拿绿豆糕是哪一集第三十二集。 贾宽认为是阎帅间接导致刘映霞住了院,第二天上班,他按捺不...
小爱同学是女生吗小安同学什么意... 小爱同学是女生吗小安同学什么意思 小爱同学,小安同学说你是女生。小安是男的。
内分泌失调导致脸上长斑,怎么调... 内分泌失调导致脸上长斑,怎么调理内分泌失调导致脸上长斑,怎么调理先调理内分泌,去看中医吧,另外用好的...
《魔幻仙境》刺客,骑士人物属性... 《魔幻仙境》刺客,骑士人物属性加点魔幻仙境骑士2功1体质
很喜欢她,该怎么办? 很喜欢她,该怎么办?太冷静了!! 太理智了!爱情是需要冲劲的~不要考虑着考虑那~否则缘...
言情小说作家 言情小说作家我比较喜欢匪我思存的,很虐,很悲,还有梅子黄时雨,笙离,叶萱,还有安宁的《温暖的玄》 小...
两个以名人的名字命名的风景名胜... 两个以名人的名字命名的风景名胜?快太白楼,李白。尚志公园,赵尚志。
幼儿教育的代表人物及其著作 幼儿教育的代表人物及其著作卡尔威特的《卡尔威特的教育》,小卡尔威特,他儿子成了天才后写的《小卡尔威特...
海贼王中为什么说路飞打凯多靠霸... 海贼王中为什么说路飞打凯多靠霸气升级?凯多是靠霸气升级吗?因为之前刚到时确实打不过人家因为路飞的实力...
运气不好拜财神有用吗运气不好拜... 运气不好拜财神有用吗运气不好拜财神有没有用1、运气不好拜财神有用。2、拜财神上香前先点蜡烛,照亮人神...