Ethereum
有沒有辦法在 JavaScript 中按名稱訪問乙太坊智能合約的變數?
假設我有一個簡單的智能合約:
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>