Hice el siguiente contrato usando el código de Visual Studio
pragma solidity ^0.4.17;
contract IDSCheck {
mapping( string => string ) PersonHash;
function AddHash(string name, string hash) {
PersonHash[name] = hash;
}
function GetHash (string name) public returns (string) {
return PersonHash[name];
}
}
Ahora quiero llamar a esta función desde truffle usando el comando exec.
Escribí un archivo js llamado idscheck.js con los siguientes comandos
var IDSCheck = artifacts.require("./IDSCheck.sol");
module.exports = function (deployer) {
var ss;
IDSCheck.deployed().then(function(deployed){ ss=deployed; });
ss.GetHash.call("sal");
}
Recibo un error de salida que dice
Error de tipo: no se puede leer la propiedad 'GetHash' de undefined en .....
Estoy tratando de hacer esto en la consola de trufas. El objetivo principal es crear un script que se ejecute a través de un archivo por lotes utilizando la consola truffle para obtener el resultado de la función GetHash del contrato anterior.
Su problema es el comportamiento asíncrono de la promesa devuelta por IDSCheck.deployed()
. Es posible que la variable ss
no se inicialice si llama ss.GetHash()
inmediatamente después.
Puede solucionarlo ejecutando la llamada después de estar seguro de que se inicializó correctamente dentro de la .then()
función.
var IDSCheck = artifacts.require("./IDSCheck.sol");
module.exports = function (callback) {
var ss;
IDSCheck.deployed().then(function(deployed){
ss = deployed;
// Here we are sure `ss` is initialized and it is safe to call `.GetHash()`
ss.GetHash.call("sal");
});
// This code 'might' be excuted before the code inside `.then()`
// ss.GetHash.call("sal");
}
Cambia esto:
var IDSCheck = artifacts.require("./IDSCheck.sol");
A esto:
var IDSCheck = artifacts.require("./IDSCheck.sol").new();
Muben