Quiero ejecutar un script en la consola de truffle.
const artifacts = require('./build/contracts/Message.json')
const contract = require('truffle-contract')
const Message = contract(artifacts);
Message.setProvider(web3.currentProvider);
module.exports = ()=> {
creator = web3.eth.accounts[0];
purchaser = web3.eth.accounts[1];
web3.personal.unlockAccount(creator);
var messageInstance = null;
Message.deployed().then(inst => { return messageInstance = inst}).then( () =>{ console.log("Creating Message"); return messageInstance.createMessage(creator, "message.newMessage") }).catch((error)=> { console.error("error", error) }).then( ()=> { return console.log("End");} )
}
Cuando inserto manualmente el script (solo la parte dentro de module.exports), funciona línea por línea y obtengo el último archivo console.log
.
Cuando ejecuto exec ./run.js
: el script se atasca en la segunda Promesa sin ningún error.
Esta solución funcionó:
const messageBuild = require('./build/contracts/Message.json')
const contract = require('truffle-contract')
const Message = contract(messageBuild);
module.exports = (callback)=> {
Message.setProvider(web3.currentProvider);
var creator = web3.eth.accounts[0]
var purchaser = web3.eth.accounts[1]
web3.eth.defaultAccount = creator
web3.personal.unlockAccount(creator);
Message.defaults({from: creator})
var messageInstance = null
Message.deployed().then(inst => { return messageInstance = inst}).then( () =>{ console.log("Creating Message:", typeof messageInstance.createMessage, "creator", creator, "web3.eth.defaultAccount", web3.eth.defaultAccount); return messageInstance.createMessage(creator, "This is a classic warning") }).catch((error)=> { console.error("\n\n\n\n==>error", error) }).then( () =>{ console.log("Reading Message", typeof messageInstance.readMessage); return messageInstance.readMessage(creator).then((msg) => console.log("The result is:", msg)) }).then( ()=> { return console.log("End"); return callback()} )
}
Creo que fue el faltante de:
Message.defaults({from: creator})
Pablo Razvan Berg
web3.eth.defaultAccount = web3.eth.accounts[0]
detruffle develop
antemano?ismael
module.exports
, y debe usarse cuando desee que una función se use desde otro archivo. Si solo desea ejecutar el cuerpo de la función, entonces no necesita una función ni asignarlamodule.exports
, escriba la instrucción directamente en su archivo.andi giga
module.exports
está bien: truffleframework.com/docs/truffle/getting-started/…andi giga
Error: invalid address
error al llamar a la cadena de promesas con exec. Que suele ser el error por no tener una cuenta predeterminada. Iconsole.log
la cuenta predeterminada y muestra la correcta en ambas soluciones (antes y en el script).andi giga