Enviar cadena como dirección a contrato inteligente

Tengo problemas para enviar una dirección a un contrato implementado, mi función se ve así:

function addNote(uint _value, address _owner) public { 
... 
}

y cuando estoy enviando los parámetros:

contract.deployed().then(function(instance) {
    return instance.addNote(value,"0x092f90acAbb3b23Aded64D59FB6f6Be97615476b");
})
.then(function(result) {
    console.log(result);
})
.catch(function(error) {
    console.log(error);
});

Estoy recibiendo este error:

Error: invalid address
at inputAddressFormatter (/Desktop/Server/node_modules/truffle-contract/node_modules/web3/lib/web3/formatters.js:274:11)

También cuando estoy agregando el último parámetro:

{
    from: "0x092f90acAbb3b23Aded64D59FB6f6Be97615476b",
    gas: 1000000
}

entonces el error es:

TypeError: Cannot read property 'constructor' of undefined
at /Desktop/Server/node_modules/truffle-contract/contract.js:96:1

¿Cuál es el problema?

¿Estás usando trufa? ¿Puedes agregar una salida más grande del error? ¿Especificaste una dirección de envío? ¿El que usas para enviar la transacción como la función addNote?
sí, trufa, he editado preguntas con más detalles
publique a dónde llama constructorque resultó en este error Cannot read property 'constructor' of undefinedy está claro que el invalid addresserror desapareció al agregar el fromatributo.
una dirección internamente es una matriz de 20 bytes. Una cadena tiene un prefijo interno con su longitud, y luego siguen los datos de la cadena. La cadena contiene datos codificados en Unicode, mientras que la dirección contiene bytes puros. Ambos tipos son completamente incompatibles.
@Nulik, es cierto. pero eso sería algo en solidez, no en javascript. así que supongo que web3 realiza la conversión y las verificaciones de tipo automáticamente.
@KakiMasterOfTime, bueno, no soy un usuario de truffle, pero en web3js esta conversión se realiza automáticamente cuando codifica inputsu contrato como extra dataparámetro en la transacción. Solo tiene que proporcionar la especificación ABI correcta. Ahora, si desea administrar las direcciones como una cadena dentro del contrato, esa es una historia totalmente diferente y puede hacer todo, ya que EVM es una máquina completa de Turing y puede realizar cualquier tipo de cálculo genérico.
por qué no despliegas tu contrato con gethen lugar de trufa, vas a entender mejor cómo funciona. medium.com/@gus_tavo_guim/…
¿Qué hay en contract.jsla línea 96?

Respuestas (1)

Una dirección es un número hexadecimal de 20 bytes , por lo que no debe enviarla como una cadena. Intentar:

return instance.addNote(value, 0x092f90acAbb3b23Aded64D59FB6f6Be97615476b);

ACTUALIZACIÓN : el problema no está relacionado con la cadena de dirección. Porfavor lea abajo.

La parte confusa en su ejemplo específico es que está recibiendo un error que lo induce a creer erróneamente que hay algo mal con la función function addNote(uint _value, address _owner). Sin embargo, el error se trata de la invalidez de su web3.eth.defaultAccountdirección, es decir, desde dónde se ejecutan las llamadas de su contrato.

Inmediatamente después de compilar y migrar sus contratos, haga lo siguiente:

web3.eth.defaultAccount = web3.eth.accounts[0];
no funciona,
Vuelva a verificar la respuesta :) Encontré el problema, eventualmente.
Ahora hice esto y todavía error Error: no válido en inputAddressFormatter. ¿Se trata de la dirección del servidor, no de que esté pasando a funcionar?
No debería tener ese error si está usando truffle developy sigue mi respuesta anterior. No estoy seguro de qué dirección de servidor está utilizando. Echa un vistazo a este hilo para obtener más consejos.