您现在的位置是:首页 > 文章详情

以太坊PHP离线交易开发包

日期:2018-12-10点击:913

EthTool开发包适用于希望采用裸交易的PHP以太坊应用开发,主要包含以下特性:

  • 支持裸交易部署/调用合约
  • 内置etherscan和infura支持
  • keystore生成与读取,兼容geth/parity

采用裸交易的一个好处是开发者不必自己部署以太坊节点 —— 同步区块是很痛苦的过程。使用EthTool构造 好裸交易之后,只需要使用第三方(etherscan/infura/...)提供的服务来广播交易即可。

下载地址:http://sc.hubwiz.com/codebag/eth-php-lib/

EthTool运行在**Php 7.1+**环境下,当前版本1.0.0,主要代码文件清单如下:

代码文件 说明
ethtool/src/Callback.php RPC回调类
ethtool/src/Credential.php 身份标识类
ethtool/src/KeyStore.php Keystore类,V3算法
ethtool/src/EthApi.php 以太坊交易接口基类
ethtool/src/EthApiEtherscan.php Etherscan交易接口类
ethtool/src/EthApiWeb3.php Infura/Web3交易接口类
ethtool/src/RawContract.php 裸交易合约类
ethtool/src/RawTxBuilder.php 裸交易构造器
test/demo-etherscan.php 裸交易演示代码,使用etherscan提交
test/demo-infura.php 裸交易演示代码,使用infura提交
test/demo-keystore.php keystore演示代码
vendor 第三方依赖包目录
composer.json composer配置文件

使用说明

代码包的主要类如下:

  • RawTxBuilder: 裸交易构造器
  • Credential: 账户私钥与交易签名封装
  • EthApi: 以太坊交易接口封装
  • KeyStore: V3版本的keystore,兼容geth/parity

裸交易构造

使用RawTxBuildercreate()静态方法获取一个构造器实例,例如:

$rtb = RawTxBuilder::create(); 

裸交易构造器需要绑定一个账户对象,使用credential()方法:

$crendetial = Crendetial::fromKey('...'); $rtb->credential($credential); 

RawTxBuilder目前支持三种裸交易的构造:

  • 普通裸交易,例如以太币转账交易。使用getPlaintx()方法获取。
  • 合约部署裸交易,使用getDeployTx()方法获取。
  • 合约方法调用裸交易,使用getSendTx()方法获取。

例如,下面的代码生成合约部署裸交易:

$rawtx = RawTxBuilder::create() ->credential($credential) ->gasLimit('4000000') ->gasPrice('10000000000') ->chainId($chainId) ->nonce($nonce) ->contract($abi) //创建合约对象,一个RawContract实例 ->bytecode($bin) //设置合约对象的字节码 ->getDeployTx(1000000,'HAPPY COIN',0,'HAPY'); //获取部署裸交易码流 

裸交易广播

EthApi基类目前定义以下方法,可以根据自己的需要扩充

  • getTransactionCount
  • sendRawTransaction
  • getTransactionReceipt

EthApiEtherscan是基于Etherscan服务的EthApi实现,EthApiWeb3是基于以太坊RPC的EthApi 实现。例如,下面的代码使用Etherscan在rinkeby测试链部署前面获得的裸交易:

$eth = new EthApiEtherscan($your_api_key/*etherscan api key*/,4/*rinkeby*/); $txid = $eth->sendRawTransaction($rawtx); 

KeyStore读写

KeyStore类可以读取geth/parity生成的keystore文件,其生成的 keystore文件也可以被geth/parity读取。

使用KeyStore类的静态方法save()将私钥转化为keystore格式写入指定目录:

$credential = Credential::new(); $prv = $credential->getPrivateKey(); $fileName = KeyStore::save($prv,'123','./keystore') 

使用KeyStore类的静态方法load()载入指定的keystore文件并解密私钥:

$fileName = './keystore/....' $prv = KeyStore::load($fileName,'123'); 
原文链接:https://my.oschina.net/u/2275217/blog/2986016
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章