Angenommen, ich habe einen einfachen Smart Contract:
contract Simple {
string32 message;
function Simple() {
message = "Hello world!";
}
}
Wie kann ich message
in JavaScript einfach über den Namen auf die Variable zugreifen? Es sieht so aus, als gäbe es eine Möglichkeit, Funktionen in JS abzubilden , aber Variablen scheinen nur auf komplizierte Weise zugänglich zu sein :
var storageObject = web3.eth.storageAt(contractAddress);
document.getElementById('fullName').innerText = web3.toAscii(storageObject['0x']) + ' ' + web3.toAscii(storageObject['0x01']);
Beachten Sie, dass diese Frage automatisch reddit zugeordnet und dort beantwortet wurde.
Wenn Sie Ihre Zustandsvariablen als deklarieren public
, wird vom Compiler automatisch eine Funktion zum Lesen ihrer Werte erstellt (" Zugriffsfunktion "). Wenn Sie die von web3.js bereitgestellte reichhaltige Schnittstelle verwenden , können Sie ein JavaScript-Vertragsobjekt erstellen und dieses einfach aufrufen message()
, um den entsprechenden Wert zu erhalten.
Für Arrays und Mappings generiert der Compiler eine Funktion mit zusätzlichen Argumenten, die den Indizes entsprechen. Beispielsweise ist mapping(uint => uint[]) public data;
die Funktion für eine Variable äquivalent zu function data(uint x, uint y) constant returns (uint) { return data[x][y]; }
.
Sie sollten es sich ansehen web3.eth.contract
- es sollte genau das haben, was Sie brauchen. https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethcontract
Hier ist ein JavaScript-Code für Node.JS zum Lesen von a
Sie benötigen den Contract Solidity-Quellcode, um ABI zu erhalten
Mit diesen ABI- und web3-Komfortmethoden können Sie die Vertragsdaten auslesen
Beispiel:
var Web3 = require('web3');
var solc = require("solc");
var fs = require('fs');
// Connect to a geth server over JSON-RPC
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
console.log("Talking with a geth server", web3.version.api);
// Read standard token contract from https://www.ethereum.org/token
var sourceCode = fs.readFileSync('sol/token.sol','utf8')
var compiled = solc.compile(sourceCode);
var abiArray = compiled.contracts["MyToken"].interface;
abiArray = JSON.parse(abiArray);
// Create a proxy object to access the smart contract
var MyContract = web3.eth.contract(abiArray);
// instantiate by address
var address = "0x091cc7F4ACA751a6b8A4101715d6B07CD4232341";
var contractInstance = MyContract.at(address);
// All public variables have automatically generated getters
// http://bitcoin.stackexchange.com/a/38079/5464
var result = {
"totalSupply": contractInstance.totalSupply(),
"symbol": contractInstance.symbol(),
"name": contractInstance.name(),
};
console.log(JSON.stringify(result));
DerPiachu
public
Funktion zu verwenden. Ich habe die Funktion zum Vertragsdeskriptor hinzugefügt, aber jetzt, wo ich sie aufrufe, denkt das Javascript, dass ich eine Transaktion an den Vertrag senden möchte, um diese Funktion aufzurufen ...Rob Myers
DerPiachu
Christin
string32
wurde durch ersetztbytes32
und auch Ihre Schnittstelle json sieht unvollständig aus.DerPiachu
Stein.212
Christin
Dominik