使用Foundry中的cast与链上信息交互
与合约交互的方式有:1. 开源的代码直接调用ehterscan。2. 用开发工具编程进行交互。
在某些情况下我们没有办法直接通过浏览器调用合约查看一些合约中的简单配置,如果使用ethers.js或者web3.js编写代码进行查看,我们需要创建项目,导入库等操作,再编写大概五行到十行代码调用后才能查看到结果。对于开发者来说只是无限的造轮子的操作,再了解到foundry后,可以通过使用foundry的cast call命令,可以直接调用链上的不需要发布交易的方法,简单快速。所有写了这个文章,希望对需要的人能提供帮助。
cast call的主要参数有:1. 调用合约的地址(address)。2 调用合约的方法(method)。3. RPC端点(rpc)
address:可以填入地址或者ENS名称。例如:vitalik.eth或者0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
–rpc-url: 填入一个节点即可
sig: 可以是函数名+参数+返回值,也可以是函数选择器+参数编码。例如:"balanceOf(address)"或者0x70a08231000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045
调用示例
获取到的值是十六进制,通过–to-ascii可以将十六进制转换为字符
用–to-unit转换单位为ether
对应一下链上的信息是没有问题的。
常用的方法有以下几个:
十六进制转换为十进制 --to-base number type(10)
十六进制转化为ascii码 --to-ascii number
将数字转换为wei或者ether cast --to-unit value type
获取函数选择器 cast sig “someFunc(address,uint256)”
解析函数选择器 cast 4byte 0x8cc5ce99
编码带参数的函数 cast calldata “someFunc(address,uint256)” 0x… 1