今回は、phpクライアントとイーサリアムクライアントの対話型使用について詳しく説明します。 phpクライアントとイーサリアムクライアントの対話型使用における注意事項について、実際の事例を見てみましょう。
phpはイーサリアムrpcサーバーと通信します
1. Json RPC
Json RPCはjsonに基づくリモートプロシージャコールです。 この説明は比較的抽象的です。簡単に言うと、rpcサーバーにメソッドを呼び出すためのjson形式のデータを投稿することです。 json形式は一般的に次のような項目があります。 params: パラメータリスト- id: プロシージャ呼び出しの一意の識別番号
2. Json RPC クライアントを構築する
{ "method": "", "params": [], "id": idNumber }
呼び出す必要があるメソッドは 2 種類あります。1 つは RPC サーバー独自のメソッドです。もう 1 つはコントラクト メソッドです。
RPC サーバー メソッドは json 形式を呼び出します<?php class jsonRPCClient { /** * Debug state * * @var boolean */ private $debug; /** * The server URL * * @var string */ private $url; /** * The request id * * @var integer */ private $id; /** * If true, notifications are performed instead of requests * * @var boolean */ private $notification = false; /** * Takes the connection parameters * * @param string $url * @param boolean $debug */ public function construct($url,$debug = false) { // server URL $this->url = $url; // proxy empty($proxy) ? $this->proxy = '' : $this->proxy = $proxy; // debug state empty($debug) ? $this->debug = false : $this->debug = true; // message id $this->id = 1; } /** * Sets the notification state of the object. In this state, notifications are performed, instead of requests. * * @param boolean $notification */ public function setRPCNotification($notification) { empty($notification) ? $this->notification = false : $this->notification = true; } /** * Performs a jsonRCP request and gets the results as an array * * @param string $method * @param array $params * @return array */ public function call($method,$params) { // check if (!is_scalar($method)) { throw new Exception('Method name has no scalar value'); } // check if (is_array($params)) { // no keys $params = $params[0]; } else { throw new Exception('Params must be given as array'); } // sets notification or request task if ($this->notification) { $currentId = NULL; } else { $currentId = $this->id; } // prepares the request $request = array( 'method' => $method, 'params' => $params, 'id' => $currentId ); $request = json_encode($request); $this->debug && $this->debug.='***** Request *****'."\n".$request."\n".'***** End Of request *****'."\n\n"; // performs the HTTP POST $opts = array ('http' => array ( 'method' => 'POST', 'header' => 'Content-type: application/json', 'content' => $request )); $context = stream_context_create($opts); if ($fp = fopen($this->url, 'r', false, $context)) { $response = ''; while($row = fgets($fp)) { $response.= trim($row)."\n"; } $this->debug && $this->debug.='***** Server response *****'."\n".$response.'***** End of server response *****'."\n"; $response = json_decode($response,true); } else { throw new Exception('Unable to connect to '.$this->url); } // debug output if ($this->debug) { echo nl2br($debug); } // final checks and return if (!$this->notification) { // check if ($response['id'] != $currentId) { throw new Exception('Incorrect response id (request id: '.$currentId.', response id: '.$response['id'].')'); } if (!is_null($response['error'])) { throw new Exception('Request error: '. var_export($response['error'], true)); } return $response['result']; } else { return true; } } } ?>RPC サーバーの組み込みメソッドのリスト
組み込みメソッドの呼び出しは比較的簡単です。上記のリンクを参照してください。ほとんどのメソッドには例があります。
コントラクト メソッド呼び出し json 形式 組み込みメソッドでコントラクト メソッド eth_call を呼び出すために使用する必要があります。 コントラクト メソッド名とコントラクト メソッドのパラメーター リストは、params を使用して反映されます。 例:コントラクト、JSON データはどのように構築する必要がありますか? まず getBalanace の関数実装を確認します:{ "method": "eth_accounts", "params": [], "id": 1 }関数プロトタイプを抽出します:
function balanceOf(address _owner) public view returns (uint256 balance)geth コンソールでコマンドを実行します:
balanceOf(address)関数ハッシュ "0x70a08231" を取得します。 "クエリ対象のアドレスが address _owner = "0x38aabef4cd283ccd5091298dedc88d27c5ec5750" であると仮定します。次に、先頭の "0x" を削除し、左側に 24 個のゼロを追加します (一般的なアドレスの長さは 42 ビットで、'0x' を削除した後は 40 ビットです) 、64ビットの16進パラメータを形成します。最後のパラメータは「0x70a08231000000000000000000000038aabef4cd283ccd5091298dedc88d27c5ec57 50」ですコントラクトアドレスが「0xaeab40841」であると仮定します94B2a425096fb583Fbcd67385210ac3".取得された最終的な JSON データは次のとおりです:
web3.sha3("balanceOf(address)").substring(0, 10)上記の JSON データをサーバーをポストモードで呼び出し、コントラクトメソッド「balanceOf」を呼び出して、指定されたアドレスのトークン残高をクエリできます。コントラクト内の他のメソッドを呼び出す場合も、上記のメソッドに従う必要があります。印象を深めるために、転送メソッドを再度分析してみましょう。 :まず、コード内の関数の実装を確認します:
{ "method": "eth_call", "params": [{"from": "0x38aabef4cd283ccd5091298dedc88d27c5ec5750", "to": "0xaeab4084194B2a425096fb583Fbcd67385210ac3", "data": "0x70a0823100000000000000000000000038aabef4cd283ccd5091298dedc88d27c5ec5750"}, "latest"], "id": 1 }次に、関数のプロトタイプを抽出します:
function transfer(address _to, uint256 _value) public returns (bool)もう一度、コンソールで sha3 関数を実行します:
transfer(address,uint256) //注意逗号后面不能有空格関数ハッシュ "0xa9059cbb" を取得します最初のパラメータはアドレス _to = "0x38aabef4cd283ccd5091298dedc88d27c5ec5750" と仮定し、次に "0x" に移動して 64 ビットにゼロを追加します。 2 番目のパラメータは uint256 _value = 43776 と仮定し、それを 16 進数の "0xab00" に変換し、"0x" を削除してゼロを追加します。 88d27c5ec57500000000000000000000000000000000000000000000000000000ab00"json データを構築します:
web3.sha3("transfer(address,uint256)").substring(0, 10)
転送者のアドレスから
契約アドレスへ data 上記の操作で得られた16進数
- 上記の手順をコードに変換します.Ethereum RPC クライアントを構築する
{ "method": "eth_call", "params": [{"from": "0x38aabef4cd283ccd5091298dedc88d27c5ec5750", "to": "0xaeab4084194B2a425096fb583Fbcd67385210ac3", "data": "0xa9059cbb00000000000000000000000038aabef4cd283ccd5091298dedc88d27c5ec5750000000000000000000000000000000000000000000000000000000000000ab00"}, "latest"], "id": 1 }
不能使用php自带的dechex函数. 因为dechex要求整型不能大于 PHP_INT_MAX, 而这个数在32位机上为4294967295。由于第1 点, 所有的数都要乘于10的18次方, 所以得到的数要远远大于PHP_INT_MAX. 建议自己实现10进制转16进制,如果你不知道如何实现,参考上述代码。
在运行某些合约方法, 比如transfer时, 要先unlock用户.
发送交易之后, 一定要在服务器端启动挖矿, 这样交易才会真的写入到区块, 比如你调用transfer之后,却发现对方没有到账,先别吃惊,启动挖矿试试。如果想启用自动挖码, 在geth --rpc ...最后加上 --mine.
测试:
<?php var_dump(EthereumRPCClient::personal_newAccount(['password'])); var_dump(EthereumRPCClient::personal_unlockAccount([EthereumRPCClient::COINBASE, "password", 3600]); var_dump(EthereumRPCClient::getBalance("0x...."));
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
PHP使用file_get_contents发送http请求步骤详解
以上がphpとイーサリアムクライアント間のやり取りの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

thesecrettokeepingaphp-poweredwebsterunningsmootlyunderheavyloadinvolvesseveralkeystrategies:1)emform opcodecoduceSciptionexecutiontime、2)aatabasequerycachingwithiThing withiThistolessendavasoload、

コードをより明確かつ維持しやすくするため、依存関係が関心(DI)に注意する必要があります。 1)DIは、クラスを切り離すことにより、よりモジュール化されます。2)テストとコードの柔軟性の利便性を向上させ、3)DIコンテナを使用して複雑な依存関係を管理しますが、パフォーマンスの影響と円形の依存関係に注意してください。

はい、最適化されたAphPossibleandessention.1)CachingingusapCutoredatedAtabaseload.2)最適化、効率的なQueries、およびConnectionPooling.3)EnhcodeCodewithBultinctions、Avoididingglobalbariables、およびUsingopcodeching

keyStrategIestsoSificlyvoostphpappliceperformanceare:1)useopcodecachinglikeToreexecutiontime、2)最適化abaseの相互作用とプロペラインデックス、3)3)構成

aphpDependencyInjectionContaineriSATOULTAINATINAGECLASSDEPTINCIES、強化測定性、テスト可能性、および維持可能性。

SELECT DEPENTENCINGINOFCENT(DI)大規模なアプリケーションの場合、ServicElocatorは小さなプロジェクトまたはプロトタイプに適しています。 1)DIは、コンストラクターインジェクションを通じてコードのテスト可能性とモジュール性を改善します。 2)ServiceLocatorは、センター登録を通じてサービスを取得します。これは便利ですが、コードカップリングの増加につながる可能性があります。

phpapplicationscanbeoptimizedforspeedandEfficiencyby:1)enabingopcacheinphp.ini、2)PreparedStatementswithpordatabasequeriesを使用して、3)LoopswithArray_filterandarray_mapfordataprocessing、4)の構成ngincasaSearverseproxy、5)

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

メモ帳++7.3.1
使いやすく無料のコードエディター
