需要:
1. 以太坊節點服務器
2. jsonrpc 接口 eth_sendTransaction ,personal_unlockAccount,personal_lockAccount
3. 組裝jsonrpc 發送請求數據 (1:解鎖賬戶, 2:發起交易 ,3: 鎖定賬戶)
4. 發送請求
一,節點服務器
地址: http://localhost
端口:8545
節點服務器搭建請看 : 以太坊代幣usdt節點搭建.
二, 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 地址 "http://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', //解鎖賬戶地址
'123456' //賬戶密碼
],
'id' => time()
];
解鎖賬戶常見錯誤
- 節點裏面有沒有導入需要解鎖的地址, 解鎖失敗
- 地址的密碼錯誤,解鎖失敗
發起交易
$opts = [
'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()
];
交易結束