TypeError: no se puede leer la propiedad 'llamada' de indefinido

Básicamente, recién estoy comenzando con Truffle y he creado mi primer código de Solidity, que se ve así:

pragma solidity ^0.4.4;
contract HelloWorld
{

function SayHello() internal pure returns (string)
{
    return ("Hello World!");
}

}

Luego abrí Powershell y ejecuté el siguiente comando: testrpc Entonces compilé y migré mi código usando la compilación "trufa" y "migración de trufa"

Los problemas comenzaron a ocurrir cuando abrí la "consola de trufas" e hice esto, dándome un error al final:

PS C:\Users\**\MetaCoin> truffle console

truffle(development)> var hw

undefined

truffle(development)> HelloWorld.deployed().then(function(deployed){hw=deployed});

undefined

truffle(development)> hw.SayHello.call()

**TypeError: Cannot read property 'call' of undefined**

truffle(development)>

¿Puede alguien ayudarme con esto? Gracias.

Respuestas (1)

Es asíncrono.

Intentar

> var hw;
> var saidSomething;
> HelloWorld.deployed().then(... hw = instance; });
> hw.SayHello().then(function(response) { saidSomething = response; }); 
> saidSomething;
Hello World!    <=== worked?

Espero eso ayude.

Muchas gracias por la respuesta. Recibí un error cuando llegué a esta línea: > HelloWorld.deployed().then(... hw = instancia; }); que se veía así:
evalmachine.<anónimo>:1 HelloWorld.deployed().then(... hw = instancia;}); ^^^^^^^^ SyntaxError: falta) después de la lista de argumentos en el nuevo Script (vm.js:51:7) en createScript (vm.js:136:10) en Object.runInContext (vm.js:181:10 ) en Console.interpretar
Logré mejorarlo para que se convirtiera en: HelloWorld.deployed().then(hw = instancia); con este error: ReferenceError: la instancia no está definida
HelloWorld.deployed().then(función(instancia) { hw = instancia; }); // instancia es el nombre que le da a la respuesta del método implementado.
TypeError: hw.SayHello no es una función
ese es el error que obtengo en: > hw.SayHello().then(function(response) { saidSomething = response; });
Lo siento, podría ser un poco molesto, solo soy un novato probando las aguas
Eso significaría que hwno es la instancia de contrato que creemos que es de un paso anterior... HelloWord.deployed() ... Puede > hwimprimirlo y debería ver los métodos de contrato o algo está mal.
Nah, cuando hago eso, todo parece estar bien. Me gusta una lista muy larga: TruffleContract { constructor: { [Función: TruffleContract] _static_methods: { setProvider: [Función: setProvider], new: [Function: new], at: [Function: at], pero por lo demás lo único que se destaca es: transactionHash: null,