TestRPC und Persistenz von Daten

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);

BEARBEITENGeben Sie hier die Bildbeschreibung ein

Antworten (1)

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.

Also schreibe ich: "Testrpc -- db/home/ " und es erstellt eine db in diesem Verzeichnis??
Sie möchten wahrscheinlich auch -dKonten deterministisch generieren, sodass Sie jedes Mal dieselben Konten generieren. Erstellen Sie ein Verzeichnis mydatadir und führen Sie dann aus testrpc --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.
Für das, was ich jetzt tun muss, muss ich nur meinen Vertrag nutzen können, ohne jedes Mal alle Befehle wiederholen zu müssen
Ich habe einen Fehler, schau dir den Beitrag an
Der Fehler besagt, dass ein anderer Prozess Port 8545 verwendet, wahrscheinlich haben Sie eine andere Instanz testrpc oder geth ausgeführt.