Contract-Development

如何與現實世界中部署的智能合約進行互動?

  • July 1, 2018

我正在學習 Solidity。現在可以使用 testrpc、truffle、MetaMask 和 MyEtherWalet 編寫和測試智能合約。基本上,MyEtherWalet 提供了我在智能合約中定義的功能,因此我可以使用它們並將參數傳遞給它們,並可以與部署在 testrpc 上的智能合約進行互動。

問題:如果我將我的智能合約部署到真正的乙太坊區塊鏈,那麼是否有任何使用者界面可以讓我以與在 MyEtherWalet 中相同的方式訪問合約功能?

問題2:Web3在這裡的作用是什麼?

問題:如果我將我的智能合約部署到真正的乙太坊區塊鏈,那麼是否有任何使用者界面可以讓我以與在 MyEtherWalet 中相同的方式訪問合約功能?

您可以使用節點的控制台界面,如下所示:

<path-to-geth>/geth attach <path-to-datadir>/geth.ipc console

控制台為您提供 javascript 介面,您可以在其中操作節點的狀態、呼叫 api 方法、查找塊、帳戶等。

問題2:Web3在這裡的作用是什麼?

Web3 是一個乙太坊客戶端庫。它可以用不同的語言編寫。最受歡迎(我認為)是 Web3 的 javascript 版本。實際上,使用 geth 的控制台,您正在使用 web3 的所有功能。

從技術上講,要與已部署的合約互動,另一方必須知道合約的 ABI,它是聲明名稱、返回值類型、您作為合約開發人員決定可見的所有函式/欄位的參數類型的正式介面(公開閱讀)。

ABI 是一個 Json 文件,為簡單起見,請查看此範例。

//This contract takes your money and store your addr
//for greetings. Nothing special. Then the deployer
//can destroy all and take money. Genius!

contract Hello{
 address public greetings;
 address public owner;
 function Hello() public{
   owner = msg.sender;
 }
 function () payable public{
   greetings = msg.sender;
 }

 function takeMoneyAndDestroy() public{
   require(msg.sender == owner);
   selfdestruct(owner);
 }
}

相應的 ABI 將是

[
   {
       "constant": true,
       "inputs": [],
       "name": "owner",
       "outputs": [
           {
               "name": "",
               "type": "address"
           }
       ],
       "payable": false,
       "stateMutability": "view",
       "type": "function"
   },
   {
       "constant": true,
       "inputs": [],
       "name": "greetings",
       "outputs": [
           {
               "name": "",
               "type": "address"
           }
       ],
       "payable": false,
       "stateMutability": "view",
       "type": "function"
   },
   {
       "constant": false,
       "inputs": [],
       "name": "takeMoneyAndDestroy",
       "outputs": [],
       "payable": false,
       "stateMutability": "nonpayable",
       "type": "function"
   },
   {
       "inputs": [],
       "payable": false,
       "stateMutability": "nonpayable",
       "type": "constructor"
   },
   {
       "payable": true,
       "stateMutability": "payable",
       "type": "fallback"
   }
 ]

一旦你在鏈上部署了這個合約,你就會得到一個合約地址,比如 0x01。然後,您可以從 MyEtherWallet 之類的錢包訪問此合約,在https://www.myetherwallet.com/#contracts部分,您可以輕鬆插入地址和 ABI。

下一步很簡單,因為 MyEtherWallet 將允許您使用合約呼叫函式/交易。

關於 Web3。該庫將瀏覽器中的 html/js 應用程序與“提供者”服務(您的 ETH 全節點或其他 API 生產者)連接起來,進而將呼叫轉換為事務。

引用自:https://ethereum.stackexchange.com/questions/25605