TestRPC y persistencia de datos

Estoy usando un contrato inteligente en la red TestRPC. Para implementar mi contrato por primera vez, escribo esto en el nodo 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

De esta manera obtengo contrato abi y dirección. El único problema es que cada vez que reinicio TestRPC tengo que repetir los comandos anteriores... ¿Hay alguna manera de evitar esto o, al menos, hacerlo automático?

(este es el script js que realmente uso para usar el contrato:

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

EDITARingrese la descripción de la imagen aquí

Respuestas (1)

Testrpc acepta un parámetro--db

--db: especifique una ruta a un directorio para guardar la base de datos de la cadena. Si ya existe una base de datos, TestRPC inicializará esa cadena en lugar de crear una nueva.

Entonces escribo: "Testrpc - db/home/" y crea una base de datos en ese directorio.
Probablemente también desee -dgenerar cuentas de forma determinista, de modo que cada vez que tenga las mismas cuentas se generen. Cree un directorio mydatadir y luego ejecute testrpc --db mydatadir -d. Pero recuerde que testrpc es principalmente para pruebas rápidas si desea un desarrollo más complejo, probablemente desee configurar una red de prueba privada o usar una red de prueba pública como Ropsten.
Para lo que tengo que hacer ahora, solo necesito poder usar mi contrato sin repetir cada comando cada vez.
Tengo un error, mira la publicación.
El error dice que algún otro proceso está usando el puerto 8545, probablemente tenga otra instancia testrpc o geth ejecutándose.