脚本刷钱/StarkNet代码交互流程

Created Mon, 29 Aug 2022 23:00:00 +0800 Modified Thu, 15 Sep 2022 13:07:48 +0000
1094 Words

一些开发类的StarkNet教程教的是创建新的账户、编写新合约和测试。而本文主要介绍如何导出已有钱包账户,并和已经上线的合约进行交互。

1. 初始化nile项目

nile 是 StarkNet 上流行的cli开发工具,能简化流程提高效率。根据README安装后,确保输入 nile version 会显示版本号。

然后新建文件夹,输入nile init初始化项目

输入nile compile编译一下示例合约。compile 后 artifacts 中会出现 json 格式的 ABI 文件。

2. 导出私钥

私钥可以本地生成,也可以从钱包导出,重点介绍钱包导出的私钥如何使用。下图分别是argent和braavo的导出位置。

01 argent导出

02 braavos导出

获得私钥后,在nile init生产的项目的根目录创建一个 .env文件,设置一个变量放置私钥,比如PK1=1234,这个PK1是alias,可以设置简单一些,后面会用到。

03 env

然后输入nile setup PK1 --network goerli,会在测试网部署一个合约账户,同时根目录会出现一个 goerli.accounts.json ,里面包含PK1这个私钥派生出的公钥和地址。这个新生成的合约地址和之前钱包里的不一样,需 手动替换 成网页钱包的地址。同样还需要替换 goerli.deployments.txt 中的账户合约地址。

04 替换地址

3. 去浏览器获取目标合约的abi

打开voyager,搜索目标合约,在code标签里找到abi,复制到新文件artifacts/abis/[alias].json下。alias可以任意取。

05 获取abi

在根目录的 goerli.deployments.txt 下添加 合约地址:abi路径:alias,我取的是starknet-cairo-101的第1个练习,alias写的是ex01。所以 goerli.deployments.txt 的新增的内容是:0x29e2801df18d7333da856467c79aa3eb305724db57f386e3456f85d66cbd58b:artifacts/abis/ex01.json:ex01

4. 发送交易

创建一个python脚本,一般放到scripts或tests目录下,编写def run(nre)方法通过nile run指令去执行测试脚本。

下面示例代码是让PK1这个账户去执行ex01的claim_points方法,没有参数。

参数通常需要转换,建议先参考该教程

最后 max_fee 需要用官方cli的starknet estimate_fee指令去获取,可以先随意设置,如果debug报错再修改。

from nile.nre import NileRuntimeEnvironment
from nile.core.account import Account

def run(nre: NileRuntimeEnvironment):
    account: Account = nre.get_or_deploy_account("PK1")
    result = account.send(
        "0x29e2801df18d7333da856467c79aa3eb305724db57f386e3456f85d66cbd58b",  # 目标合约地址
        "claim_points", # 方法
        [],  # 参数
        2278140156336 # max_fee
    )
    print(result)

如果需要通过发送交易到合约钱包去和其他合约交互,必须使用account.send方法,而不是invoke。

输入nile run tests/demo.py --network goerli 会执行上面的脚本,并输出交易的hash和地址

06 地址和Hash

最后用 nile debug [TxHash] --network goerli 去检查交易状态。

07 交易状态

以上就是StarkNet用钱包和合约进行代码交互的流程,有疑问欢迎和我沟通。