使用 Infura 和 web3.js 调用智能合约

Infura 提供公开的 Ethereum 主网和测试网络节点。到 Infura 官网申请,输入一些基本资料和 Email,就可以收到 API-key。

11831773-94406916dcbc6f6e

infura

使用 RPC 查询合约内存储的状态

最常需要查询的状态就是 Token 的余额。就用 EOS Token 合约做为示例来看看。

取得取得合约信息

可以通过 Etherscan,大部分知名的合约可以直接搜索到。

11831773-084a14c6276645a0

etherscan

要调用合约,至少需要:

  • 合约地址,例如:0x86Fa049857E0209aa7D9e616F7eb3b3B78ECfdb0
  • 要调用的 function signature,例如以 ERC 20 Token 合约来说,查询余额要呼叫的 function 是 balanceOf(address),其对应的 function signature 是 70a08231

如何取得 function signature 呢?

balanceOf(address) 为例:

i. 把 balanceOf(address) 经过 sha3:

0x70a08231b98ef4ca268c9cc3f6b4590e4bfec28280db06bb5d45e689f2a360be

ii. 取除了 0x 外,前面的 8 位

70a08231

以上流程可以用任何工具完成,以 web3.js 为例:

var functionSig = web3.sha3("balanceOf(address)").substr(2,8)

另外也可以把 contract code 贴到 Remix 在合约的 Details 中可以看到完整的合约接口和对应的 function signature。

11831773-352bfe0042648d94

abi

使用 RPC

可以通过一个简单的 POST 用 Infura 提供的节点调用一个 RPC。有哪些 RPC method 可以看 Ethereum RPC doc

如果要调用的 function 只是查询,而没有要更新合约的状态,那就用 eth_call 这个 R

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值