EthTool開發包適用於但願採用__裸交易__旳PHP以太坊應用開發,主要包含如下特性:php
採用裸交易的一個好處是開發者沒必要本身部署以太坊節點 —— 同步區塊是很痛苦的過程。使用EthTool構造 好裸交易以後,只須要使用第三方(etherscan/infura/...)提供的服務來廣播交易便可。算法
EthTool運行在**Php 7.1+**環境下,當前版本1.0.0,主要代碼文件清單以下:api
<table class="table table-striped"> <thead> <tr><th>代碼文件</th><th>說明</th></tr> </thead> <tbody> <tr><td>ethtool/src/Callback.php</td><td>RPC回調類</td></tr> <tr><td>ethtool/src/Credential.php</td><td>身份標識類</td></tr> <tr><td>ethtool/src/KeyStore.php</td><td>Keystore類,V3算法</td></tr> <tr><td>ethtool/src/EthApi.php</td><td>以太坊交易接口基類</td></tr> <tr><td>ethtool/src/EthApiEtherscan.php</td><td>Etherscan交易接口類</td></tr> <tr><td>ethtool/src/EthApiWeb3.php</td><td>Infura/Web3交易接口類</td></tr> <tr><td>ethtool/src/RawContract.php</td><td>裸交易合約類</td></tr> <tr><td>ethtool/src/RawTxBuilder.php</td><td>裸交易構造器</td></tr> <tr><td>test/demo-etherscan.php</td><td>裸交易演示代碼,使用etherscan提交</td></tr> <tr><td>test/demo-infura.php</td><td>裸交易演示代碼,使用infura提交</td></tr> <tr><td>test/demo-keystore.php</td><td>keystore演示代碼</td></tr> <tr><td>vendor</td><td>第三方依賴包目錄</td></tr> <tr><td>composer.json</td><td>composer配置文件</td></tr> </tbody> </table>composer
代碼包的主要類以下:測試
裸交易構造ui
使用RawTxBuilder的create()
靜態方法獲取一個構造器實例,例如:code
$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基類目前定義如下方法,能夠根據本身的須要擴充
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');