Ethereum

有沒有辦法在 JavaScript 中按名稱訪問乙太坊智能合約的變數?

  • May 9, 2016

假設我有一個簡單的智能合約:

contract Simple {
   string32 message;

   function Simple() {
       message = "Hello world!";
   }
}

如何message在 JavaScript 中通過名稱輕鬆訪問變數?看起來有一些方法可以將函式映射到 JS中,但變數似乎只能通過複雜的方式訪問:

var storageObject = web3.eth.storageAt(contractAddress);
document.getElementById('fullName').innerText = web3.toAscii(storageObject['0x']) + ' ' + web3.toAscii(storageObject['0x01']);

請注意,此問題已自動映射到reddit並在那裡回答。

如果您將狀態變數聲明為public,則編譯器將自動創建一個讀取其值的函式(“訪問器函式”)。如果您使用web3.js 提供的豐富介面,您可以創建一個 javascript 合約對象並呼叫message()它來獲取相應的值。

對於數組和映射,編譯器將生成一個函式,該函式具有與索引相對應的附加參數。例如,對於變數mapping(uint => uint[]) public data;,函式將等效於function data(uint x, uint y) constant returns (uint) { return data[x][y]; }.

你應該檢查一下web3.eth.contract——它應該有你需要的東西。<https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethcontract>

引用自:https://bitcoin.stackexchange.com/questions/38070