Ich verwende einen Smart Contract im TestRPC-Netz. Um meinen Vertrag zum ersten Mal bereitzustellen, schreibe ich dies in den Knoten cmd:
>Web3 = require('web3')
> web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
> code = fs.readFileSync('store.sol').toString()
> solc = require('solc')
> compiledCode = solc.compile(code)
> abiDefinition = JSON.parse(compiledCode.contracts[':SimpleStorage'].interface)
> SimpleStorage = web3.eth.contract(abiDefinition)
> byteCode = compiledCode.contracts[':SimpleStorage'].bytecode
> deployedContract = SimpleStorage.new(['Rama'],{data: byteCode, from: web3.eth.accounts[0], gas: 4700000})
> deployedContract.address
Auf diese Weise bekomme ich Vertragsabi und Adresse. Das einzige Problem ist, dass ich jedes Mal, wenn ich TestRPC neu starte, die obigen Befehle wiederholen muss ... Gibt es eine Möglichkeit, dies zu vermeiden oder zumindest automatisch zu machen?
(Dies ist das js-Skript, das ich tatsächlich verwende, um den Vertrag zu verwenden:
var net = require('net');
var HOST = '127.0.0.1';
var PORT = 10001;
var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider('localhost:8545'));
net.createServer(function(sock) {
sock.setEncoding('utf8');
sock.on('data', function(data) {
console.log('__________');
console.log(data);
console.log('__________');
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
abi = JSON.parse('[{"constant":false,"inputs":[{"name":"x","type":"string"}],"name":"set","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"}]');
SimpleStorage = web3.eth.contract(abi);
contractInstance = SimpleStorage.at('0x08cf472e9192d3c48e03f501472c8aecb9350c16');
contractInstance.set(data, {from: web3.eth.accounts[0], gas: 4700000});
x=contractInstance.get({from: web3.eth.accounts[0], gas: 4700000});
console.log(x);
});
// Aggiungiamo l'event handler 'close' per questa istanza di socket
sock.on('close', function(data) {
});
}).listen(PORT, HOST);
console.log('Server listening on ' + HOST +':'+ PORT);
Testrpc akzeptiert einen Parameter--db
--db
: Geben Sie einen Pfad zu einem Verzeichnis an, um die Kettendatenbank zu speichern. Wenn bereits eine Datenbank vorhanden ist, initialisiert TestRPC diese Kette, anstatt eine neue zu erstellen.
Nick9214
Ismael
-d
Konten deterministisch generieren, sodass Sie jedes Mal dieselben Konten generieren. Erstellen Sie ein Verzeichnis mydatadir und führen Sie dann austestrpc --db mydatadir -d
. Denken Sie jedoch daran, dass testrpc hauptsächlich für schnelle Tests gedacht ist. Wenn Sie eine komplexere Entwicklung wünschen, möchten Sie wahrscheinlich ein privates Testnetz einrichten oder ein öffentliches Testnetz wie Ropsten verwenden.Nick9214
Nick9214
Ismael