使用PHP开发以太坊代币与合约以太坊以太坊(ethereum)实现研究

使用PHP开发以太坊代币与合约——使用公共节点

2019-08-23  本文已影响0人  有丫

前三篇写完后,因为公司变动,我顺势也就辞职了,然后出去逛了一个多月,现在终于有精力和时间继续完成本系列文章。
为什么使用公共节点在第一篇中已经说明,现在常用的以太坊公共节点API有两个:

  1. ETHERSCAN
  2. INFURA

一个是著名的,甚至能说是官方的以太坊区块浏览器,另一个是著名的以太坊API服务,metamask就是使用其API服务。

具体文档分别可以查看https://etherscan.io/apishttps://infura.io/docs

最常用的是Proxy API,几乎本地客户端提供的函数,这里都有对应的代理。

具体的调用和封装我这里做的很简陋,github有etherscan较好的PHP实现API封装,大家可以参考,由于没有infura的实现,所以我这里并没有使用其他类库。

简单的查询类API我这里就不一一说明,我只说eth_calleth_sendRawTransaction

  1. eth_call

eth_call之所以调用麻烦,是因为这里需要对以太坊基础有点认识,调用合约函数和我们编程直接调用函数没有太大区别,至少需要传入函数名和对应的参数,这里需要对于函数名和参数进行编码,具体编码规则如下:

  1. 对于函数名按ABI格式做sha3,然后截取前十位,伪代码:
substr(sha3('balanceOf(address))', 0, 10)
  1. 对于不同类型的参数,根据位置编码
  2. 拼接编码

其实传入参数的编码在etherscan的交易页面是可以看到的:


交易详情中对于参数的编码
  1. eth_sendRawTransaction

eth_sendRawTransaction就是做交易了,只要需要支付以太坊手续费的调用,都需要使用eth_sendRawTransaction
这里需要引入Transaction,索性github上有php的实现,这里引入就好。

以太坊交易这里有不少坑,准备接下来一篇来说明,这里就不继续说下去。

使用公共节点有不少好处,最大的好处应该是直接可以不使用服务端,私钥不过第三方应该是最保险的了。

上一篇下一篇

猜你喜欢

热点阅读