Ich möchte eine Zeichenfolge aus einem Skript in node.js in Blockchain speichern. Das ist der Vertrag.
pragma solidity ^0.4.0;
contract SimpleStorage {
string storedData;
function set(string x) {
storedData = x;
}
function get() constant returns (string) {
return storedData;
}
}
Um den Vertrag im Netz bereitzustellen (in meinem Fall Testnet), muss ich eine Instanz des Vertrags erstellen. Um eine Instanz zu erstellen und bereitzustellen, benötige ich 3 Dinge: web3-Bibliothek, abi und Vertragsadresse:
var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
abi = JSON.parse(....) //==> I got abi following this tutorial(https://medium.com/@mvmurthy/full-stack-hello-world-voting-ethereum-dapp-tutorial-part-1-40d2d0d807c2)
StoreContract = web3.eth.contract(abi);
contractInstance = VotingContract.at('CONTRACT ADDRESS');
//And now I can use contract function
contractInstance.set(string data)
Also meine Frage ist....Wie bekomme ich die Vertragsadresse???
Sie benötigen Adresse und ABI, um einen Vertrag abzuschließen. Bevor Sie einen Vertrag aufrufen, müssen Sie ihn bereitstellen. Sie haben nur die abi-Definition. Sie müssen den Vertrag bereitstellen, indem Sie ihn abbauen lassen und die Adresse abrufen. Verwenden,
var simpleStorage = StoreContract.new(your_parameters ,{from:web3.eth.accounts[0], data: compiled_code , gas: gas_amount}, call_back_function)
Sobald der Vertrag abgebaut ist, wird er so etwas zurückgeben,
Contract mined! address: contract_address
wo Sie die Vertragsadresse unter contract_address finden können
Sehen Sie sich das einfache Greeter-Beispiel auf der Ethereum-Website an, um eine detaillierte Erklärung zum Beginnen mit Smart Contracts zu erhalten.
UPDATE-1:
Wenn Sie den Blogbeitrag , auf den Sie verwiesen haben, sorgfältig lesen, ist klar, dass Sie eine Transaktion senden müssen, damit der Vertrag bereitgestellt werden kann. (Er enthält auch einige schöne Diagramme).
Dies ist das Code-Snippet aus dem Blogbeitrag,
abiDefinition = JSON.parse(compiledCode.contracts[':Voting'].interface)
VotingContract = web3.eth.contract(abiDefinition)
byteCode = compiledCode.contracts[':Voting'].bytecode
// the following line is what you need to do get the address
deployedContract = VotingContract.new(['Rama','Nick','Jose'],{data: byteCode, from:
web3.eth.accounts[0], gas: 4700000})
deployedContract.address
contractInstance = VotingContract.at(deployedContract.address)
und nach dem was du gepostet hast,
var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
abi = JSON.parse(....) //==> I got abi following this tutorial(https://medium.com/@mvmurthy/full-stack-hello-world-voting-ethereum-dapp-tutorial-part-1-40d2d0d807c2)
//at this point you need to send the transaction using "StoredContract.new(params,transaction details, callback[optional]);"
StoreContract = web3.eth.contract(abi);
contractInstance = VotingContract.at('CONTRACT ADDRESS');
Sie benötigen keine Adresse, um einen Vertrag bereitzustellen, Sie müssen nur eine Transaktion mit den Vertragsdetails senden. Sobald der Vertrag bereitgestellt ist (nachdem die Transaktion abgebaut wurde), wird die Adresse ausgegeben, mit der Sie die jeweilige Instanz anrufen können.
UPDATE-2:
Sie können viele Instanzen desselben Vertrags bereitstellen, indem Sie Transaktionen senden, und diese werden an verschiedenen Adressen gespeichert. Sie können eine bestimmte Instanz mit der entsprechenden Adresse verwenden (z. B. um in Ihrem Fall eine Funktion wie setter aufzurufen). Siehe die folgende Antwort, die hier veröffentlicht wurde .
So wie Code in Quellform vorliegen oder in ausführbare Form konvertiert/kompiliert werden kann, gilt dasselbe für Verträge.
Aus dem Quellcode können viele Kopien der ausführbaren Form generiert werden.
In Quellcodeform ist ein Vertrag in Solidity wie eine Klasse in OOP-Begriffen: Er kann viele Male instanziiert und von ihm geerbt werden.
Einen Vertrag ausführbar zu machen, umfasst normalerweise 2 Schritte:
Konvertieren der Quelle in Ethereum Virtual Machine (EVM) Bytecode Bereitstellen der EVM in einer Ethereum-Blockchain Derselbe Vertragsquellcode oder EVM kann viele Male in einer Blockchain bereitgestellt werden. Jede Instanz eines bereitgestellten Vertrags hat eine eindeutige Adresse.
Achala Dissanayake
contractInstance = VotingContract.at('CONTRACT ADDRESS');
sollte esStoreContract
nicht seinVotingContract