文档章节

以太坊PHP离线开发包

汇智网教程
 汇智网教程
发布于 2018/12/08 13:21
字数 898
阅读 109
收藏 0

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,主要代码文件清单如下:

<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>

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

© 著作权归作者所有

汇智网教程
粉丝 17
博文 240
码字总数 293219
作品 0
东城
私信 提问
Php如何调用以太坊JSON RPC接口

以太坊规定了每个节点需要实现的JSON RPC应用开发接口,如果希望使用PHP开发一个以太坊区块链 上的去中心化应用(DApp),首先要解决的问题就是如何使用PHP调用以太坊JSON RPC接口: 如果你希...

智能合约
2018/07/19
155
0
以太坊接口应用开发JSON-RPC协议

以太坊应用开发接口指的是以太坊节点软件提供的API接口,去中心化应用可以利用这个接口访问以太坊上的智能合约。以太坊应用开发接口采用JSON-PRC标准,通常是通过HTTP或websocket提供给应用程...

编程狂魔
2018/12/18
0
0
以太坊应用开发接口:JSON RPC API

以太坊应用开发接口指的是以太坊节点软件提供的API接口,去中心化应用可以利用这个接口访问以太坊上的智能合约。以太坊应用开发接口采用JSON-PRC标准,通常是通过HTTP或websocket提供给应用程...

汇智网教程
2018/12/16
130
0
用web3dart为flutter应用生成以太坊地址

Flutter是采用Dart语言的跨平台应用开发框架,目前已经支持ios、安卓和web等多个平台。本文将介绍如何在Flutter应用中生成以太坊地址,如果你要开发一个手机钱包,或者要对接以太坊区块链,相...

汇智网教程
06/24
31
0
技术分享:以太坊PHP离线交易开发包

EthTool开发包适用于希望采用裸交易的PHP以太坊应用开发,主要包含以下特性: 支持裸交易部署/调用合约 内置etherscan和infura支持 keystore生成与读取,兼容geth/parity 采用裸交易的一个好...

geek12345
2018/12/10
467
0

没有更多内容

加载失败,请刷新页面

加载更多

redis 内存信息解析

used_memory:由 Redis 分配器分配的内存总量,包含了redis进程内部的开销和数据占用的内存,以字节(byte)为单位 used_memory_rss:向操作系统申请的内存大小。与 top 、 ps等命令的输出一...

Canaan_
27分钟前
4
0
windows 下 python3 安装 pip setuptools

本文链接:https://blog.csdn.net/huzuxing/article/details/80807744 最近在家使用python的时候,总是报setuptools 模块未找到,于是在网上搜索了相关解决办法,但是都没有解决问题。 于是去...

开源中国首席CYO
33分钟前
4
0
数据库添加索引

mysql索引添加 navicat 步骤 - 选择表 -> 设计表 ->索引

以谁为师
43分钟前
6
0
java7与java9中的try-finally关闭资源

1.java7中的try 在java7之前,对于一些需要使用finally关闭资源的操作,会显得很臃肿. try{//}catch(Exception e){//}finally{if(xxxx != null){xxxx.close();}} 在jav...

Blueeeeeee
45分钟前
4
0
字节序转换详解

在跨平台和网络编程中我们经常会提到网络字节序和主机字节序,如果没有正确对两者进行转换,从而导致两方产生了不同的解释,就会出现意想不到的bug。 目录 0x01 概念 0x02 分类 0x03 两种字节...

无心的梦呓
55分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部