# StarkNet代码交互流程 **Published by:** [scriptmoney](https://paragraph.com/@scriptmoney/) **Published on:** 2022-08-29 **URL:** https://paragraph.com/@scriptmoney/starknet ## Content 一些开发类的StarkNet教程教的是创建新的账户、编写新合约和测试。而本文主要介绍如何导出已有钱包账户,并和已经上线的合约进行交互。1. 初始化nile项目nile 是 StarkNet 上流行的cli开发工具,能简化流程提高效率。根据README安装后,确保输入 nile version 会显示版本号。 然后新建文件夹,输入nile init初始化项目并用nile compile编译一下示例合约。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路径:别名,我用的是 starknet-cairo-101 的第1个练习,别名写的是ex01。所以 goerli.deployments.txt 的新增的内容是:0x29e2801df18d7333da856467c79aa3eb305724db57f386e3456f85d66cbd58b:artifacts/abis/ex01.json:ex014. 发送交易创建一个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用钱包和合约进行代码交互的流程,有疑问欢迎和我沟通,推特是 @scriptdotmoney ## Publication Information - [scriptmoney](https://paragraph.com/@scriptmoney/): Publication homepage - [All Posts](https://paragraph.com/@scriptmoney/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@scriptmoney): Subscribe to updates - [Twitter](https://twitter.com/scriptdotmoney): Follow on Twitter