ethjsonrpc转账,eth_sendTransaction转账
需要:
1. 以太坊节点服务器
2. jsonrpc 接⼝ eth_sendTransaction ,personal_unlockAccount,personal_lockAccount
3. 组装jsonrpc 发送请求数据 (1:解锁账户, 2:发起交易 ,3: 锁定账户)
4. 发送请求
⼀,节点服务器
⼆, jsonrpc接⼝使⽤接⼝参数如下
eth_sendTransaction 发起转账
from: DATA, 20字节 - 发送交易的源地址
to: DATA, 20字节 - 交易的⽬标地址,当创建新合约时可选
gas:QUANTITY - 交易执⾏可⽤gas量,可选整数,默认值90000,未⽤gas将返还。
gasPrice: QUANTITY -gas价格,可选,默认值:待定(To-Be-Determined)
value: QUANTITY - 交易发送的⾦额,可选整数
data:DATA - 合约的编译带啊或被调⽤⽅法的签名及编码参数
nonce: QUANTITY - nonce,可选。可以使⽤同⼀个nonce来实现挂起的交易的重写
personal_unlockAccount 解锁账户
QUANTITY -解锁地址
QUANTITY -解锁地址密码
personal_lockAccount 锁定账户
QUANTITY -锁定地址
三,组装jsonrpc发送数据
jsonprc 公⽤参数
$opts=[
'jsonrpc'=>'2.0',
'method'=>'',
'params'=>[],
'id'=>time()
];
curl post 请求
* @param $url  节点url 地址  "localhost:8845"
* @param $post_data  发起请求post数据  $opts
* @return array
*/
function curlPost($url,$post_data)
{
$curl=curl_init();
$jsonStringData=json_encode($post_data);
$options=[
CURLOPT_URL=>$url,
CURLOPT_POST=>true,
CURLOPT_USERAGENT=>"Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0", CURLOPT_RETURNTRANSFER=>1,
CURLOPT_TIMEOUT=>20,
CURLOPT_HTTPHEADER=>[
'Content-Type: application/json',
'Content-Length: '.strlen($jsonStringData)
],
];
curl_setopt_array($curl,$options);
//设置post数据
curl_setopt($curl,CURLOPT_POSTFIELDS,$jsonStringData);
//执⾏命令
$data=curl_exec($curl);
//关闭URL请求
if($data){
curl_close($curl);
$res_data=json_decode($data,true);
return['status'=>true,'data'=>$res_data];
}else{
$error=curl_errno($curl);
curl_close($curl);
return['status'=>false,'data'=>'','msg'=>$error];
}
}
先解锁账户
$opts=[
'jsonrpc'=>'2.0',
'method'=>'personal_unlockAccount',//解锁账户接⼝
'params'=>[
'0xb60e8dd61c5d32be8058bb8eb970870f07233155',//解锁账户地址
curl命令发送post请求带参数'123456'//账户密码
],
'id'=>time()
];
解锁账户常见错误
1. 节点⾥⾯有没有导⼊需要解锁的地址, 解锁失败
2. 地址的密码错误,解锁失败
发起交易
'jsonrpc'=>'2.0',
'method'=>'eth_sendTransaction',//转账接⼝
'params'=>[
0=>[
'from'=>'0xb60e8dd61c5d32be8058bb8eb970870f07233155',//转账地址
'to'=>'0xdac17f958d2ee523a2206206994597c13d831ec7',//收款地址
'value'=>'0x'.dechex('1000000000000000000'),
//转账⾦额1eth  1* 1000000000000000000 , eth⼩数位为18位
'gas'=>'0x'.dechex('21000'),,// 21000 可根据⾃⼰修改, 少的话,交易失败率⾼
'gasPrice'=>'0x'.dechex('1000000000'),//同 gas
]
,
],
'id'=>time()
];
转账结果
array(2){
["status"]=>bool(true)
["data"]=>array(3){
["jsonrpc"]=>string(3)"2.0"
["id"]=>int(1574131996)
["result"]=>string(66)"0xa284222543831e4ad0c363c0c6eadd94f25f829150e0fbb37680c54c6ccacc6c" }
}
// result 为交易hash
锁定账户
$opts=[
'jsonrpc'=>'2.0',
'method'=>'personal_lockAccount',//锁定账户接⼝
'params'=>[
'0xb60e8dd61c5d32be8058bb8eb970870f07233155'//锁定账户地址
],
'id'=>time()
];
交易结束