linke / blockchain-ethereum-client
此包最新版本(dev-master)没有可用的许可证信息。
以太坊RPC客户端,离线签名,PHP
dev-master
2023-08-26 22:48 UTC
Requires
- guzzlehttp/guzzle: ~6.5.5
- kornrunner/keccak: ^1.0
- simplito/elliptic-php: ^1.0
This package is not auto-updated.
Last update: 2024-09-23 02:06:01 UTC
README
以太坊RPC客户端,离线签名,PHP
PHP版本的以太坊RPC客户端,支持离线交易、生成私钥与地址。您无需专门购买一台服务器来运行以太坊客户端。
您可以使用以太坊公共节点,例如:https://infura.io 您可以将用户的私钥加密存储在数据库中,使用时取出解密,直接发送交易。
这样不仅效率高且安全(如果您坚持要在服务器上运行以太坊客户端,该项目也支持)。
安装
composer.json
{
"require": {
"myxtype/ethereum-client": "dev-master"
}
}
然后执行composer update
即可。
或者直接执行
composer require myxtype/ethereum-client:dev-master
使用
详细使用请参考examples
文件夹
您可以在https://infura.io/docs看到更多可用的RPC方法。
初始化
初始化可以直接提供一个RPC连接地址,或者参考GuzzleHttp Options
提供一些自定义选项。
use xtype\Ethereum\Client as EthereumClient;
$client = new EthereumClient('https://kovan.infura.io/v3/a0d810fdff64493baba47278f3ebad27');
// or
// $client = new EthereumClient('http://127.0.0.1:8545');
GuzzleHttp Options.
$client = new EthereumClient([
'base_uri' => 'https://kovan.infura.io/v3/a0d810fdff64493baba47278f3ebad27',
'timeout' => 20,
]);
RPC
使用RPC接口非常简单,您可以直接参考https://ethereum.gitbooks.io/frontier-guide/content/rpc.html这里列出的接口使用。
您需要根据RPC文档设置参数,注意数字通常需要转换为十六进制。
// net_version
print_r($client->net_version());
// eth_getBlockByNumber
print_r($client->eth_getBlockByNumber('0x' . dechex(2), false));
您也可以使用额外的RPC方法,当然这需要您的私有节点,如果您使用的是公共节点则没有此方法。
print_r($client->personal_newAccount());
您可以直接使用该类提供的离节点创建地址与私钥。
// You can to create an address offline
list($address, $privateKey) = $client->newAccount();
离线创建交易并用节点广播
您可以在本地直接发送交易,而无需私有节点,您只需连接到公共节点即可。
// 1. Fill in the private key you want to use
// Like 'C34ADB7969999FE9FF327ED73E8A7CD58BF712CA12CC489DD533839229E567EB'
$client->addPrivateKeys(['C34ADB79691CBFE9FF327ED73E8A7CD58BF712C012CC489DD533839119E567EB']);
// 2. Build Your Transaction
$trans = [
"from" => '0x69A34E519D9944CA7E3B55278a4EaF744769198C',
"to" => '0x69A34E519D9944CA7E3B55278a4EaF744769198C',
"value" => Utils::ethToWei('0.01', true),
"data" => '0x',
];
// And you can set gas, nonce, gasPrice
$trans['gas'] = dechex(hexdec($client->eth_estimateGas($trans)) * 1.5);
$trans['gasPrice'] = $client->eth_gasPrice();
$trans['nonce'] = $client->eth_getTransactionCount('0x69A34E519D9944CA7E3B55278a4EaF744769198C', 'pending');
// 3. Send Your Transaction
// or use eth_sendTransaction if you need your server.
$txid = $client->sendTransaction($trans);
// 4. If there is no mistake
// you will see txid here. Like string(66) "0x1adcb80b413bcde285f93f0274e6cf04bc016e8813c8390ff31a6ccb43e75f51"
var_dump($txid);
// 5. And you will ...
// https://ethereum.gitbooks.io/frontier-guide/content/rpc.html#eth_gettransactionreceipt
var_dump($client->eth_getTransactionReceipt($txid));