Startnet合约部署概要记述

一、工具

remix: Remix - Ethereum IDE
编程语言:cairo

学习参考: 

1)WTF-cairo github.com/WTFAcademy/WTF-Cairo

2)Scarb: The Package Manager - The Starknet Book

二、电脑上配置环境

1)Starkli, 可以与Startnet各种环境交互的客户端工具

安装命令:

curl https://get.starkli.sh | sh

starkliup

2)Scarb, 编译工具

安装命令:

curl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/install.sh | sh

3)Katana,本地部署的startnet环境,类似(ganache,或者foundry的anvil)

安装命令:

curl -L https://install.dojoengine.org | bash

dojoup

三、用一个程序部署本机全流程演示一遍

1、创建项目:

scarb new smartcase

在src/lib.cairo下替换如下代码:

#[starknet::contract]
mod hello {
    #[storage]
    struct Storage {
        name: felt252,
    }

    #[constructor]
    fn constructor(ref self: ContractState, name: felt252) {
        self.name.write(name);
    }

    #[external(v0)]
        fn get_name(self: @ContractState) -> felt252 {
            self.name.read()
        }
    #[external(v0)]
        fn set_name(ref self: ContractState, name: felt252) {
            let previous = self.name.read();
            self.name.write(name);
        }
}

2、打开一个新的终端

touch src/.env

输入如下内容:

export STARKNET_ACCOUNT=katana-0
export STARKNET_RPC=http://0.0.0.0:5050

运行:

source src/.env

katana

输出如下:

3、在原先终端编译:

命令:scarb build

此时编译后的中间文件,就存放在target/dev目录下了

ls -la  target/dev/

        smartcase.starknet_artifacts.json

        smartcase_hello.contract_class.json

命令:(声明declare)

starkli declare target/dev/smartcase_hello.contract_class.json

输出:

Sierra compiler version not specified. Attempting to automatically decide version to use...
Unknown network. Falling back to the default compiler version 2.1.0. Use the --compiler-version flag to choose a different version.
Declaring Cairo 1 class: 0x00b9535d9e97b840cc8bbf73b207875cafd1d948d420362e33418fd4a53fe36e
Compiling Sierra class to CASM with compiler version 2.1.0...
CASM class hash: 0x05f2d2a3a5bc9f40d2ac9e2b63d19d74829478833b3ddb824e46e2325df79c49
Contract declaration transaction: 0x05a2e023eabfcfe2d1aba0a83e94824d755763fe0f6ed495d2569b70689390f1
Class hash declared:
0x00b9535d9e97b840cc8bbf73b207875cafd1d948d420362e33418fd4a53fe36e

4、部署

两个前提:

1、必须有hash code

2、需要构造参数

此处需要注意,由于构造参数需要一个字符串,但是部署时候不能直接输入字符串,只能是16进制串。所以需要转换。

比如:参数是 hellosmart,转换的方法是:

starkli to-cairo-string hellosmart
0x68656c6c6f736d617274

所以部署的命令就是:

starkli deploy 0x00b9535d9e97b840cc8bbf73b207875cafd1d948d420362e33418fd4a53fe36e  0x68656c6c6f736d617274

运行结果是:

Deploying class 0x00b9535d9e97b840cc8bbf73b207875cafd1d948d420362e33418fd4a53fe36e with salt 0x07184a76a681f316cbf19f606067148f5fefecd9c969954fd7f79c75aa2278d9...
The contract will be deployed at address 0x002d19d5de44c5d17eb6422b4aed8d1d0a1089a011ed224ae7ec85f09c017b04
Contract deployment transaction: 0x0130ea9e91b60a46c71e4409fcc11f98559e4c921053c1d7efd6aa245a0ff9a2
Contract deployed:
0x002d19d5de44c5d17eb6422b4aed8d1d0a1089a011ed224ae7ec85f09c017b04

5、与合约交互

两种交互命令:

call :调用合约只读函数

invoke: 调用合约读写函数

starkli call 0x002d19d5de44c5d17eb6422b4aed8d1d0a1089a011ed224ae7ec85f09c017b04  get_name

[
    "0x0000000000000000000000000000000000000000000068656c6c6f736d617274"
]

此处调用get_name 返回的是一个16进制串,需要使用函数转换成可读字符串

starkli parse-cairo-string 0x68656c6c6f736d617274
hellosmart

接下来,调用修改合约状态函数

1、先转换要写入的字符串

starkli to-cairo-string hellomybaby

得到:

0x68656c6c6f6d7962616279

2、starkli invoke 0x002d19d5de44c5d17eb6422b4aed8d1d0a1089a011ed224ae7ec85f09c017b04 set_name 0x68656c6c6f6d7962616279

返回:

Invoke transaction: 0x05c8e9e5bc3b6efb0a4ed467fb67a94c3445649750b304675ec895b5909931c6

3、再次调用get_name函数

starkli call 0x002d19d5de44c5d17eb6422b4aed8d1d0a1089a011ed224ae7ec85f09c017b04  get_name

返回:

[
    "0x00000000000000000000000000000000000000000068656c6c6f6d7962616279"
]

4、解析

starkli parse-cairo-string 0x68656c6c6f6d7962616279

得到:

hellomybaby

修改成功!

至此,一趟全流程的合约部署体验完成。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值