使用PHP开发以太坊代币与合约——使用公共节点
2019-08-23 本文已影响0人
有丫
前三篇写完后,因为公司变动,我顺势也就辞职了,然后出去逛了一个多月,现在终于有精力和时间继续完成本系列文章。
为什么使用公共节点在第一篇中已经说明,现在常用的以太坊公共节点API有两个:
- ETHERSCAN
- INFURA
一个是著名的,甚至能说是官方的以太坊区块浏览器,另一个是著名的以太坊API服务,metamask就是使用其API服务。
具体文档分别可以查看https://etherscan.io/apis和https://infura.io/docs
最常用的是Proxy API,几乎本地客户端提供的函数,这里都有对应的代理。
具体的调用和封装我这里做的很简陋,github有etherscan较好的PHP实现API封装,大家可以参考,由于没有infura的实现,所以我这里并没有使用其他类库。
简单的查询类API我这里就不一一说明,我只说eth_call
和eth_sendRawTransaction
。
- eth_call
eth_call
之所以调用麻烦,是因为这里需要对以太坊基础有点认识,调用合约函数和我们编程直接调用函数没有太大区别,至少需要传入函数名和对应的参数,这里需要对于函数名和参数进行编码,具体编码规则如下:
- 对于函数名按ABI格式做sha3,然后截取前十位,伪代码:
substr(sha3('balanceOf(address))', 0, 10)
- 对于不同类型的参数,根据位置编码
- 拼接编码
其实传入参数的编码在etherscan的交易页面是可以看到的:
交易详情中对于参数的编码
- eth_sendRawTransaction
eth_sendRawTransaction
就是做交易了,只要需要支付以太坊手续费的调用,都需要使用eth_sendRawTransaction
。
这里需要引入Transaction
,索性github上有php的实现,这里引入就好。
以太坊交易这里有不少坑,准备接下来一篇来说明,这里就不继续说下去。
使用公共节点有不少好处,最大的好处应该是直接可以不使用服务端,私钥不过第三方应该是最保险的了。