以太坊区块链离线开发包

综合技术 2018-12-08 阅读原文

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.phpRPC回调类
ethtool/src/Credential.php身份标识类
ethtool/src/KeyStore.phpKeystore类,V3算法
ethtool/src/EthApi.php以太坊交易接口基类
ethtool/src/EthApiEtherscan.phpEtherscan交易接口类
ethtool/src/EthApiWeb3.phpInfura/Web3交易接口类
ethtool/src/RawContract.php裸交易合约类
ethtool/src/RawTxBuilder.php裸交易构造器
test/demo-etherscan.php裸交易演示代码,使用etherscan提交
test/demo-infura.php裸交易演示代码,使用infura提交
test/demo-keystore.phpkeystore演示代码
vendor第三方依赖包目录
composer.jsoncomposer配置文件

2. 使用说明

代码包的主要类如下:

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

裸交易构造

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

$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');

责编内容by:学习软件编程 【阅读原文】。感谢您的支持!

您可能感兴趣的

ETH&EOS开发资源及工具集合(完整汇总版)... ETH开发资源篇 一、开发语言 Solidity - 官方推荐以太坊智能合约开发语言,也是目前最为主流的智能合约语言 Bamboo - 是一种将智能合约描述为有限状态机的语言,把智能合约看成一个状态和交易的函数...
php调用以太坊geth API说明 上一篇我们开始环境构建,并做了一些基本的API调用。 这次我想再挖一下API的调用。 1.上次的补充 2.关于API的种类 3.从PHP调用 1.上次的补充 上一次,说明了 ...
如何实现一键调用以太坊智能合约 今天有人问如何用按钮调用智能合约,我不知道在哪里找,所以我决定写这个,很快就可以。 在这篇文章中,我将给出一个简单但有希望有效的演示,说明JavaScript开发人员如何创建一个能够调用智能合约的网页,并通过单击即可向其汇款(...
Ethereum Oracle Contracts: Setup and Orientation Ethereum Smart Contracts are more than just “the new hot thing.” It’s my belief that they (or something related) are poi...
geth以太坊源码学习-启动服务 最近区块链这么火,出于好奇想看看源码实现,比较著名的就是比特币和以太坊了,前者是始祖,后者因为有智能合约的存在,所以大量不会写区块链底层的人可以利用以太坊实现自己的链,实际上,就是ICO, token了。 找了两者的官...