北漂的程序猿-Adhere 发表于 2021-9-2 20:45:46

PHP使用RPC接入ETH链教程

随着互联网遭遇区块链的打击,各种依傍ETH发布各种钱币的操纵频繁出现,在这里我们不得不说一下我们程序员比如我们PHP是怎么到场的,获取内里的数据以及地点等等信息。在这里起首我们要相识,我们PHP要通过哪些方式去获取数据?然后怎么获取数据?
PHP获取链上数据的方式大概有Web3.0与RPC两种,比如利用第三方还有爬虫写脚本等方式咱们就另说了。PHP安装Web3.0的扩展利用内里封装的方法也可用,这次我们重点说一下RPC是怎么获取数据的。
先版署一下所封装的数组模板:
/** * 数组模板 * @param $method * @param array $params * @return array */public static function Template($method,$params = array()){    $opts = [      'jsonrpc' => '2.0',      'method' => $method,      'params' => $params,      'id' => time()    ];    $data = json_encode($opts);        // POST哀求 各位可以自行封装    $res = Curl::post(self::$url, $data, 10, array('Content-Type:application/json;charset=UTF-8'));    $res_arr = json_decode($res, true);    return $res_arr;}    // 节点url    public static $url = 'XXXXX';1.获取全部账户地点:
// 获取钱包地点public function getAccountSList(){    $list = Eth::Template('eth_accounts');    if(!empty($list['result'])){      foreach($list['result'] as $key => $val){            echo "
";            print_r($val);      }    }else{      die("error");    }}2.获取指定地点账户的余额:
// 获取指定地点账户的余额public function getBalance(){    $send_arr = array("检查余额的地点","latest");    $list = Eth::Template('eth_getBalance', $send_arr);    if(!empty($list['result'])){      echo "
";      print_r($list['result']);    }else{      die("error");    }}3.转账:
// 转账public function sendTransaction(){    // 转为16进制    $value = number_format(12 * pow(10,18), 0, '', '');    $amout_value = base_convert($value, 10, 16);    $send_arr = array(      array(            'from' => "发送交易的源地点",            'to' => "交易的目标地点",            'value' => '0x'.$amout_value,            'gas' => '0xf4240',            'gasPrice' => '0xe8d4a51000'      )    );    $res_arr = Eth::Template('eth_sendTransaction', $send_arr);    if(empty($res_arr['result'])){      echo "转账失败"."\n";      die;    }    echo "转账乐成"."\n";}4.解锁账户:
/** * 解锁账户 * @param array $params */private static function Unlocking(array $params){    $address = $params['address'];    $res_arr = Eth::Template('personal_unlockAccount',array($address,'Gex_15+Etv123456'));    if(empty($res_arr['result'])){      return 'No';    }    return 'Ok';}上面大概简单的列出几个例子,其他的操纵可以依次类推。如果说我们想本地存储指定链上的指定钱包地点全部交易数据,各人可以参考我一下我的思路和代码,献丑了。
1.写脚本利用Redis存储最新的区块高度:
页: [1]
查看完整版本: PHP使用RPC接入ETH链教程