以太坊PHP離線交易開發包

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配置文件

2. 使用說明

代碼包的主要類如下:

  • 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');
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章