如何與現實世界中部署的智能合約進行互動?
我正在學習 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 生產者)連接起來,進而將呼叫轉換為事務。