一些开发类的StarkNet教程教的是创建新的账户、编写新合约和测试。而本文主要介绍如何导出已有钱包账户,并和已经上线的合约进行交互。
1. 初始化nile项目
nile 是 StarkNet 上流行的cli开发工具,能简化流程提高效率。根据README安装后,确保输入 nile version
会显示版本号。
然后新建文件夹,输入nile init
初始化项目
输入nile compile
编译一下示例合约。compile 后 artifacts 中会出现 json 格式的 ABI 文件。
2. 导出私钥
私钥可以本地生成,也可以从钱包导出,重点介绍钱包导出的私钥如何使用。下图分别是argent和braavo的导出位置。
获得私钥后,在nile init生产的项目的根目录创建一个 .env
文件,设置一个变量放置私钥,比如PK1=1234,这个PK1是alias,可以设置简单一些,后面会用到。
然后输入nile setup PK1 --network goerli
,会在测试网部署一个合约账户,同时根目录会出现一个 goerli.accounts.json ,里面包含PK1这个私钥派生出的公钥和地址。这个新生成的合约地址和之前钱包里的不一样,需 手动替换 成网页钱包的地址。同样还需要替换 goerli.deployments.txt 中的账户合约地址。
3. 去浏览器获取目标合约的abi
打开voyager,搜索目标合约,在code标签里找到abi,复制到新文件artifacts/abis/[alias].json
下。alias可以任意取。
在根目录的 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和地址
最后用 nile debug [TxHash] --network goerli
去检查交易状态。
以上就是StarkNet用钱包和合约进行代码交互的流程,有疑问欢迎和我沟通。