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);
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.
Nick9214
ismael
-d
generar cuentas de forma determinista, de modo que cada vez que tenga las mismas cuentas se generen. Cree un directorio mydatadir y luego ejecutetestrpc --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.Nick9214
Nick9214
ismael