.. _Accessing Contracts and Transactions:

********************************************************************************
璁块棶鍚堢害鍜屼氦鏄�
********************************************************************************

RPC
================================================================================

鍦ㄥ墠闈㈢殑绔犺妭涓紝鎴戜滑浠嬬粛浜嗗悎绾︾殑缂栧啓銆侀儴缃插拰浜や簰銆傜幇鍦ㄥ埌浜嗘繁鍏ヤ簡瑙d互澶潑缃戠粶鍜屾櫤鑳藉悎绾︿氦浜掔粏鑺傚埌鏃堕棿銆�

浠ュお鍧婅妭鐐归兘鎻愪緵 `RPC <https://wikipedia.org/wiki/Remote_procedure_call>`_ 鎺ュ彛锛岃繖浜涙帴鍙e悜脨app鎻愪緵璁块棶浠ュお鍧婂尯鍧楅摼鍜岃妭鐐规敮鎸佺殑鍔熻兘锛屼緥濡傜紪璇戞櫤鑳藉悎绾︿唬鐮併€傚畠浣跨敤 `JSON-RPC 2.0 <http://www.jsonrpc.org/specification>`_ 瑙勮寖(涓嶆敮鎸侀€氱煡鎴栧彉閲忓懡鍚�)鐨勫瓙闆嗕綔涓哄簭鍒楀寲鍗忚锛屽苟涓旀敮鎸丠TTP鍜孖PC銆�

濡傛灉浣犲缁嗚妭涓嶅叧蹇冧粎浠呭彧鍏冲績javascript搴撶殑浣跨敤锛岄偅涔堜綘鍙互璺宠繃涓嬮潰鐨勭珷鑺傦紝鐩存帴闃呰锛� :ref:`Using Web3 <using_web3.js>` 銆�

鍗忚
================================================================================
RPC鎺ュ彛浣跨敤浜嗕竴浜涗笉灞炰簬JSON-RPC 2.0瑙勮寖鐨勫崗璁€�

* 鏁板瓧浣跨敤鍗佸叚杩涘埗缂栫爜锛岃繖涓喅瀹氭槸鍥犱负涓€浜涜瑷€涓嶆敮鎸佹垨鏈夐檺鏀寔瓒呭ぇ鏁板瓧绫诲瀷銆傞槻姝㈣繖绉嶇被鍨嬮敊璇殑鍙戠敓锛屾暟鍊艰缂栫爜涓哄崄鍏繘鍒讹紝骞朵笖浜ょ敱寮€鍙戣€呰繘琛屽Ε鍠勫鐞嗭紝璇峰弬鑰僿iki涓婄殑绀轰緥 `hex encoding section <https://github.com/ethereum/wiki/wiki/JSON-RPC#output-hex-values>`_ 銆�
* 榛樿鐨勫尯鍧楃紪鍙凤紝涓€浜汻PC鏂规硶鎺ュ彈鍖哄潡缂栧彿锛屽湪涓€浜涙儏鍐典笅锛屼笉鑳借兘鑾峰彇鍖哄潡缂栧彿鎴栬€呴潪甯镐笉鏂逛究鑾峰緱鍖哄潡缂栧彿銆傚湪杩欑鎯呭喌涓嬶紝榛樿鍖哄潡缂栧彿鍙互鏄繖浜涘瓧绗︿覆涓殑鍏朵腑涓€涓� ["earliest", "latest", "pending"] 銆傛煡鐪� `wiki page <https://github.com/ethereum/wiki/wiki/JSON-RPC#the-default-block-parameter>`_ 鏉ヨ幏鍙朢PC鏂规硶鍙敤鐨勯粯璁ゅ尯鍧楀弬鏁板垪琛ㄣ€�


閮ㄧ讲鍚堢害
================================================================================
鎴戜滑灏嗛€氳繃涓嶅悓鐨勬楠わ紝浠呬娇鐢≧PC鎺ュ彛鏉ラ儴缃插涓嬬殑鍚堢害銆�

.. code:: js

   contract Multiply7 {
      event Print(uint);
      function multiply(uint input) returns (uint) {
         Print(input * 7);
         return input * 7;
      }
   }

闇€瑕佸仛鐨勭涓€浠朵簨锛屽氨鏄‘淇滺TTP RPC鎺ュ彛琚惎鐢� 锛岃繖鎰忓懗鐫€鎴戜滑闇€瑕佸湪鍚姩鏃剁粰geth鎻愪緵 ``--rpc`` 鏍囪瘑锛岀粰eth鎻愪緵 ``-j`` 鏍囪瘑銆傚湪杩欎釜渚嬪瓙涓垜浠娇鐢ㄤ竴涓猤eth绉佹湁寮€鍙戣妭鐐癸紝杩欐牱鐨勮瘽鎴戜滑灏变笉闇€瑕佷娇鐢ㄦ寮忕綉缁滀笂鐨勪互澶竵銆�

.. code:: bash

    > geth --rpc --dev --mine --minerthreads 1 --unlock 0 console 2>>geth.log

鎴戜滑鍦ㄨ繖涓鍙e惎鐢℉TTP RPC鎺ュ彛锛� ``http://localhost:8545``銆�

.. note:: geth鏀寔 `CORS(璺ㄥ煙璧勬簮鍏变韩) <https://en.wikipedia.org/wiki/Cross-origin_resource_sharing>`_锛屾煡鐪嬪弬鏁� ``--rpccorsdomain`` 鏉ヨ幏鍙栨洿澶氫俊鎭€�

鎴戜滑鍙互閫氳繃 `curl <https://curl.haxx.se/download.html>`_ 鑾峰彇璐︽埛鍦板潃鍜屼綑棰濇潵楠岃瘉鎺ュ彛鏄惁宸茬粡杩愯锛岃娉ㄦ剰涓嬮潰渚嬪瓙涓殑鏁版嵁鍜屼綘鏈湴鐨勮妭鐐逛笉涓€鏍凤紝濡傛灉浣犳兂灏濊瘯濡備笅鐨勫懡浠よ淇敼璇锋眰鐨勫弬鏁般€�

.. code:: bash

    > curl --data '{"jsonrpc":"2.0","method":"eth_coinbase", "id":1}' localhost:8545
    {"id":1,"jsonrpc":"2.0","result":["0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a"]}

    > curl --data '{"jsonrpc":"2.0","method":"eth_getBalance", "params": ["0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a", "latest"], "id":2}' localhost:8545
    {"id":2,"jsonrpc":"2.0","result":"0x1639e49bba16280000"}

杩樿寰楁垜浠墠闈㈣杩囨暟瀛楅兘鏄互鍗佸叚杩涘埗缂栫爜鐨勫悧锛熷湪杩欎釜鎯呭喌涓处鎴蜂綑棰濊繑鍥炰互wei涓哄崟浣嶇殑鍗佸叚杩涘埗缂栫爜瀛楃涓诧紝濡傛灉鎴戜滑鎯冲緱鍒颁互ether涓哄崟浣嶇殑鏁板€兼垜浠彲浠ラ€氳繃鍛戒护鍙颁娇鐢╳eb3銆�

.. code:: js

    > web3.fromWei("0x1639e49bba16280000", "ether")
    "410"

鐜板湪鎴戜滑鍦ㄧ鏈夊紑鍙戦摼涓婃湁浜嗕竴浜涗互澶竵锛屽彲浠ヨ繘琛屽悎绾︾殑閮ㄧ讲浜嗭紝绗竴姝ラ渶瑕侀獙璇乻olidity缂栬瘧鍣ㄥ浜庡彲鐢ㄧ姸鎬侊紝鎴戜滑鍙互閫氳繃 ``eth_getCompilers`` 杩欎釜RPC鏂规硶鏉ヨ幏鍙栧綋鍓嶅彲鐢ㄧ殑缂栬瘧鍣ㄣ€�

.. code:: bash

   > curl --data '{"jsonrpc":"2.0","method": "eth_getCompilers", "id": 3}' localhost:8545
   {"id":3,"jsonrpc":"2.0","result":["Solidity"]}

鎴戜滑鐪嬪埌solidity缂栬瘧鍣ㄥ彲鐢紝濡傛灉涓嶅彲鐢ㄨ鍙傝€� `鐩稿叧鏂囨。 <http://solidity.readthedocs.org/en/latest/installing-solidity.html>`_ 璇存槑銆�

涓嬩竴姝ユ妸Multiply7鍚堢害缂栬瘧涓哄彲浠ュ彂閫佺粰浠ュお鍧婅櫄鎷熸満鐨勫瓧鑺傜爜銆�

.. code:: bash

   > curl --data '{"jsonrpc":"2.0","method": "eth_compileSolidity", "params": ["contract Multiply7 { event Print(uint); function multiply(uint input) returns (uint) { Print(input * 7); return input * 7; } }"], "id": 4}' localhost:8545
   {"id":4,"jsonrpc":"2.0","result":{"Multiply7":{"code":"0x6060604052605f8060106000396000f3606060405260e060020a6000350463c6888fa18114601a575b005b60586004356007810260609081526000907f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da90602090a15060070290565b5060206060f3","info":{"source":"contract Multiply7 { event Print(uint); function multiply(uint input) returns (uint) { Print(input * 7); return input * 7; } }","language":"Solidity","languageVersion":"0.2.2","compilerVersion":"0.2.2","compilerOptions":"--bin --abi --userdoc --devdoc --add-std --optimize -o /tmp/solc205309041","abiDefinition":[{"constant":false,"inputs":[{"name":"input","type":"uint256"}],"name":"multiply","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"","type":"uint256"}],"name":"Print","type":"event"}],"userDoc":{"methods":{}},"developerDoc":{"methods":{}}}}}}

鐜板湪鎴戜滑宸茬粡缂栬瘧瀹屾垚浜嗕唬鐮侊紝鎴戜滑闇€瑕佸喅瀹氳姳璐瑰灏戠摝鏂潵閮ㄧ讲瀹冿紝RPC鎺ュ彛鐨� ``eth_estimateGas`` 鏂规硶鍙互缁欐垜浠彁渚涗竴涓弬鑰冨€笺€�

.. code:: bash

   > curl --data '{"jsonrpc":"2.0","method": "eth_estimateGas", "params": [{"from": "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a", "data": "0x6060604052605f8060106000396000f3606060405260e060020a6000350463c6888fa18114601a575b005b60586004356007810260609081526000907f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da90602090a15060070290565b5060206060f3"}], "id": 5}' localhost:8545
   {"id":5,"jsonrpc":"2.0","result":"0xb8a9"}

鏈€缁堬紝鎴戜滑閮ㄧ讲濂戒簡鍚堢害銆�

.. code:: bash

   > curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a", "gas": "0xb8a9", "data": "0x6060604052605f8060106000396000f3606060405260e060020a6000350463c6888fa18114601a575b005b60586004356007810260609081526000907f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da90602090a15060070290565b5060206060f3"}], "id": 6}' localhost:8545
   {"id":6,"jsonrpc":"2.0","result":"0x3a90b5face52c4c5f30d507ccf51b0209ca628c6824d0532bcd6283df7c08a7c"}

浜ゆ槗琚妭鐐规帴鍙楀苟涓斾氦鏄撶殑鍝堝笇琚繑鍥烇紝鎴戜滑鍙互閫氳繃杩欎釜鍝堝笇鏉ヨ拷韪氦鏄撱€�

涓嬩竴姝ユ潵鍐冲畾鎴戜滑閮ㄧ讲鍚堢害鐨勫湴鍧€锛屼氦鏄撶殑姣忎竴娆℃墽琛岄兘浼氬垱寤轰竴涓敹鎹紝杩欎釜鏀舵嵁鍖呭惈浜ゆ槗鐨勫悇绉嶄俊鎭紝渚嬪浜ゆ槗鍖呭惈鍦ㄥ摢涓尯鍧椾腑銆佷氦鏄撹繃绋嬭姳璐逛簡澶氬皯鐡︽柉绛夈€傚鏋滀竴涓氦鏄撳垱寤轰簡涓€涓悎绾︼紝瀹冧篃浼氬寘鍚悎绾︾殑鍦板潃锛屾垜浠彲浠ラ€氳繃RPC鎺ュ彛鐨� ``eth_getTransactionReceipt`` 鏂规硶鏉ヨ幏鍙栨敹鎹€�

.. code:: bash

   > curl --data '{"jsonrpc":"2.0","method": "eth_getTransactionReceipt", "params": ["0x3a90b5face52c4c5f30d507ccf51b0209ca628c6824d0532bcd6283df7c08a7c"], "id": 7}' localhost:8545
   {"id":7,"jsonrpc":"2.0","result":{"transactionHash":"0x3a90b5face52c4c5f30d507ccf51b0209ca628c6824d0532bcd6283df7c08a7c","transactionIndex":"0x0","blockNumber":"0x4c","blockHash":"0xe286656e478a1b99030e318d0f5c3a61a644f25e63deaa8be52e80da1e7b0c47","cumulativeGasUsed":"0xb8a9","gasUsed":"0xb8a9","contractAddress":"0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d","logs":[]}}

鎴戜滑鍙互鐪嬪埌鍚堢害鍒涘缓浜� ``0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d`` 锛屽鏋滀綘鑾峰彇鍒皀ull鏀舵嵁锛岄偅涔堣鏄庝氦鏄撹繕娌℃湁琚墦鍖呰繘鍖哄潡涓紝璇锋鏌ヤ綘鐨勭熆宸ヨ繕鍦ㄥ伐浣滃苟涓旂瓑寰呬竴浼氬啀閲嶆柊纭銆�


涓庢櫤鑳藉悎绾︿氦浜�
================================================================================
鎴戜滑鐨勫悎绾﹀凡缁忛儴缃插畬姣曪紝鍙互涓庝箣杩涜浜や簰浜嗐€傚墠闈㈠凡缁忚杩囷紝鎴戜滑鏈� `涓ょ鏂规硶 <interacting_with_a_contract>` 鍙互涓庡悎绾﹁繘琛屼氦浜�: `sendTransaction` 鍜� `call` 銆傚湪涓嬮潰鐨勪緥瀛愪腑锛屾垜浠皢浣跨敤sendTransaction鐨勬柟寮忔潵涓庡悎绾︿腑鐨刴ultiply鏂规硶浜や簰銆�

閫氳繃闃呰 `eth_sendTransaction <https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sendtransaction>`_ 鐨勬枃妗o紝鎴戜滑鍙戠幇闇€瑕佹彁渚涗竴浜涘弬鏁帮紝鍒嗗埆闇€瑕佹寚瀹氾細``from`` 锛� ``to`` 鍜� ``data`` 銆俙from` 鏄垜浠彂璧蜂氦鏄撹处鎴风殑鍏紑鍦板潃锛� `to` 鏄悎绾︾殑鍦板潃锛� `data` 鍙傛暟鏈変竴鐐瑰鏉傦紝瀹冪殑鍐呭鍖呭惈浜嗗摢涓嚱鏁板皢琚皟鐢ㄥ苟涓旇瀹氫簡璋冪敤鐨勫弬鏁帮紝杩欐槸閫氳繃ABI杩涜瀹炵幇鐨勶紝ABI瀹氫箟浜嗗浣曚负浠ュお鍧婅櫄鎷熸満(EVM)瀹氫箟鍜岀紪鐮佹暟鎹紝浣犲彲浠ラ槄璇� `ABI缁嗚妭wiki <https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI>`_ 銆�

`data` 鐨勫瓧鑺傚簭鍒楁槸涓€涓嚱鏁伴€夋嫨鍣紝瀹氫箟浜嗗摢涓嚱鏁板皢浼氳璋冪敤锛屽畠鏄€氳繃Keccak鍝堝笇璁$畻鍑芥暟鍚嶇О鍜岃皟鐢ㄥ弬鏁帮紝鐒跺悗鍙栧叾鍝堝笇鍊肩殑鍓�4瀛楄妭骞剁敤鍗佸叚杩涘埗杩涜缂栫爜锛屾垜浠墠闈㈠畾涔夌殑涔樻硶鍑芥暟鎺ュ彈涓€涓�256浣嶇殑鏁村瀷鏁帮紝杩欒鎴戜滑鏈夛細

.. code:: js

   > web3.sha3("multiply(uint256)").substring(0, 8)
   "c6888fa1"

鏇村缁嗚妭锛岃鐐瑰嚮 `鍑芥暟閫夋嫨鍣� <https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI#function-selector>`_ 銆�

涓嬩竴姝ユ槸瀵瑰弬鏁拌繘琛岀紪鐮侊紝鎴戜滑鐨勫弬鏁板彧鏈変竴涓猽int256锛屾垜浠亣璁捐繖涓€间负6锛� `鍙傛暟缂栫爜瑙勫垯 <https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI#argument-encoding>`_ 涓殑濡備笅绔犺妭鎸囧嚭浜嗘垜浠簲璇ュ浣曠紪鐮乽int256銆�

   `int<M>: enc(X) 鏄疿鐨勫ぇ绔簩杩涘埗琛ョ爜缂栫爜锛�0xff濉厖鍦ㄨ礋鏁扮殑楂樹綅(宸︿晶)锛岀敤闆跺~鍏呬娇寰楅暱搴︿负32瀛楄妭銆俙

杩欐牱缂栫爜缁撴灉涓� ``0000000000000000000000000000000000000000000000000000000000000006`` 銆�

灏嗗嚱鏁扮紪鐮佸拰鍙傛暟缂栫爜杩涜缁勫悎锛屽氨寰楀埌鎴戜滑鐨� ``data`` 锛屼篃灏辨槸 ``0xc6888fa100000000000000000000000000000000000000000000000000000006``.

鎴戜滑鏉ュ皾璇曡皟鐢細

.. code:: bash

   > curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a", "to": "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", "data": "0xc6888fa10000000000000000000000000000000000000000000000000000000000000006"}], "id": 8}' localhost:8545
   {"id":8,"jsonrpc":"2.0","result":"0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74"}

璋冪敤瀹屾瘯鍚庢垜浠緱鍒颁氦鏄撶殑鍝堝笇锛屽鏋滄垜浠幏鍙栨敹鎹垜浠彲浠ュ緱鍒板涓嬪唴瀹癸細

.. code-block:: js
   :emphasize-lines: 7

   {
      blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55",
      blockNumber: 268,
      contractAddress: null,
      cumulativeGasUsed: 22631,
      gasUsed: 22631,
      logs: [{
         address: "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d",
         blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55",
         blockNumber: 268,
         data: "0x000000000000000000000000000000000000000000000000000000000000002a",
         logIndex: 0,
         topics: ["0x24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"],
         transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",
         transactionIndex: 0
     }],
     transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",
     transactionIndex: 0
   }

鏀舵嵁涓寘鍚棩蹇楋紝杩欎釜鏃ュ織鏄互澶潑铏氭嫙鏈哄湪浜ゆ槗鎵ц鐨勮繃绋嬩腑鍒涘缓鐨勶紝骞朵笖琚寘鍚湪鏀舵嵁涓€傚鏋滄垜浠煡鐪嬩箻娉曞嚱鏁帮紝浼氬彂鐜癙rint浜嬩欢灏嗚緭鍏ョ殑鍙傛暟涔樹互7锛岄€氳繃ABI缂栫爜瑙勫垯锛屾垜浠彲浠ヨВ鐮佸緱鍒伴鏈熺殑缁撴灉42銆傞櫎浜哾ata瀛楁涔嬪锛屽€煎緱娉ㄦ剰鐨勬槸topics瀛楁锛岄€氳繃瀹冨彲浠ュ緱鐭ユ槸鍝釜浜嬩欢鍒涘缓浜嗘棩蹇椼€�

.. code:: js

   > web3.sha3("Print(uint256)")
   "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"

浣犲彲浠ラ槄璇绘洿澶氭湁鍏砮vent銆乼opics鐨勫唴瀹癸紝鍙互鏌ョ湅 `Solidity鏁欑▼ <http://solidity.readthedocs.org/en/latest/contracts.html#events>`_ 銆�

杩欓噷鎴戜滑浠呬粎鍋氫簡绠€鍗曠殑浠嬬粛锛屾兂瑕佹煡鐪嬪畬鏁村彲鐢ㄧ殑RPC鏂规硶鍒楄〃璇锋煡鐪嬶細 `RPC鐨剋iki椤甸潰 <https://github.com/ethereum/wiki/wiki/JSON-RPC#json-rpc-methods>`_ 銆�

.. _using_web3.js:

Web3.js
================================================================================
浠庝笂闈㈢殑渚嬪瓙涓垜浠湅鍒癑SON-RPC鎺ュ彛鐨勪娇鐢ㄦ槸闈炲父浜戦暱涔忓懗骞朵笖瀹规槗鍑洪敊鐨勶紝鐗瑰埆鏄垜浠渶瑕佷娇鐢ˋBI鏃讹紝Web3.js鏄竴涓湪浠ュお鍧奟PC鎺ュ彛涓婂伐浣滅殑javascript搴擄紝瀹冪殑鐩爣鏄彁渚涗竴涓洿鍙嬪ソ鐨勪氦浜掔晫闈紝鍚屾椂鍑忓皯鍑洪敊鐨勬鐜囥€�

浣跨敤web3鏉ラ儴缃茶緭鍏ヤ箻7鐨勫悎绾﹀皢浼氭槸濡備笅鐨勬牱瀛愶細

.. code:: js

   var source = 'contract Multiply7 { event Print(uint); function multiply(uint input) returns (uint) { Print(input * 7); return input * 7; } }';
   var compiled = web3.eth.compile.solidity(source);
   var code = compiled.Multiply7.code;
   var abi = compiled.Multiply7.info.abiDefinition;

   web3.eth.contract(abi).new({from: "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a", data: code}, function (err, contract) {
      if (!err && contract.address)
         console.log("deployed on:", contract.address);
      }
   );

   deployed on: 0x0ab60714033847ad7f0677cc7514db48313976e2

鍔犺浇涓€涓凡缁忛儴缃茬殑鍚堢害骞朵笖閫氳繃浜ゆ槗鏉ヨ繘琛屼氦浜掞細

.. code:: js

   var source = 'contract Multiply7 { event Print(uint); function multiply(uint input) returns (uint) { Print(input * 7); return input * 7; } }';
   var compiled = web3.eth.compile.solidity(source);
   var Multiply7 = web3.eth.contract(compiled.Multiply7.info.abiDefinition);
   var multi = Multiply7.at("0x0ab60714033847ad7f0677cc7514db48313976e2")
   multi.multiply.sendTransaction(6, {from: "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a"})

娉ㄥ唽涓€涓悕涓� ``Print`` 鐨勪簨浠舵潵鍒涘缓鏃ュ織銆�

.. code:: js

   multi.Print(function(err, data) { console.log(JSON.stringify(data)) })
   {"address":"0x0ab60714033847ad7f0677cc7514db48313976e2","args": {"":"21"},"blockHash":"0x259c7dc07c99eed9dd884dcaf3e00a81b2a1c83df2d9855ce14c464b59f0c8b3","blockNumber":539,"event":"Print","logIndex":0, "transactionHash":"0x5c115aaa5418118457e96d3c44a3b66fe9f2bead630d79455d0ecd832dc88d48","transactionIndex":0}

鏇村淇℃伅璇锋煡鐪� `web3.js鐨剋iki椤甸潰 <https://github.com/ethereum/wiki/wiki/JavaScript-API>`_ 銆�

鍛戒护琛�
================================================================================

geth鐨� `鍛戒护琛� <https://github.com/ethereum/go-ethereum/wiki/JavaScript-Console>`_ 鎻愪緵javascript杩愯鏃跺懡浠よ鎺ュ彛锛屽畠鍙互杩炴帴鍒版湰鍦版垨杩滅▼鐨刧eth鎴杄th鑺傜偣锛岃繍琛屾椂浼氬姞杞絯eb3.js搴撲緵鐢ㄦ埛浣跨敤锛岃繖灏变娇寰楃敤鎴峰彲浠ラ€氳繃web3.js鍛戒护鏉ラ儴缃插拰璋冪敤鏅鸿兘鍚堢害锛屼簨瀹炰笂锛屽墠闈� :ref:`Web3.js <using_web3.js>` 涓殑浠g爜鍙互鐩存帴鎷疯礉鍒板懡浠よ涓繘琛岃繍琛屻€�


鏌ョ湅绾夸笂鍚堢害鍜屼氦鏄�
================================================================================

浣犲彲浠ラ€氳繃澶氱鏂瑰紡鏉ユ煡鐪嬩互澶潑鍖哄潡閾句笂鐨勫悎绾﹀拰浜ゆ槗锛岀偣鍑绘煡鐪�  :ref:`鍖哄潡閾炬煡璇� <blockchain_explorers>`銆�


.. _blockchain_explorers:

鍖哄潡閾炬煡璇㈢綉绔�
--------------------------------------------------------------------------------

-  `EtherChain <https://www.etherchain.org/>`_
-  `EtherCamp <https://live.ether.camp/>`_
-  `EtherScan <http://etherscan.io/>`_ (and for `Testnet <http://testnet.etherscan.io>`_)

鍏朵粬璧勬簮
--------------------------------------------------------------------------------

* `EtherNodes <http://ethernodes.org/>`_ - 鑺傜偣鐨勫湴鐞嗕綅缃拰瀹㈡埛绔被鍨嬪垝鍒�
* `EtherListen <http://www.etherlisten.com>`_ - 瀹炴椂鏌ョ湅浠ュお鍧婁氦鏄撲俊鎭�