Ich habe Probleme beim Senden einer Adresse an einen bereitgestellten Vertrag. Meine Funktion sieht folgendermaßen aus:
function addNote(uint _value, address _owner) public {
...
}
und wenn ich die Parameter sende:
contract.deployed().then(function(instance) {
return instance.addNote(value,"0x092f90acAbb3b23Aded64D59FB6f6Be97615476b");
})
.then(function(result) {
console.log(result);
})
.catch(function(error) {
console.log(error);
});
Ich bekomme diesen Fehler:
Error: invalid address
at inputAddressFormatter (/Desktop/Server/node_modules/truffle-contract/node_modules/web3/lib/web3/formatters.js:274:11)
Auch wenn ich den letzten Parameter hinzufüge:
{
from: "0x092f90acAbb3b23Aded64D59FB6f6Be97615476b",
gas: 1000000
}
dann ist der fehler:
TypeError: Cannot read property 'constructor' of undefined
at /Desktop/Server/node_modules/truffle-contract/contract.js:96:1
Was ist das Problem?
Eine Adresse ist eine 20-Byte-Hexadezimalzahl , also sollten Sie sie nicht als Zeichenfolge senden. Versuchen:
return instance.addNote(value, 0x092f90acAbb3b23Aded64D59FB6f6Be97615476b);
UPDATE : Das Problem hängt nicht mit der Adressstringifizierung zusammen. Bitte lesen Sie unten.
Der verwirrende Teil in Ihrem speziellen Beispiel ist, dass Sie einen Fehler erhalten, der Sie zu der Annahme verleitet, dass mit der Funktion etwas nicht stimmt function addNote(uint _value, address _owner)
. Der Fehler bezieht sich jedoch auf die Ungültigkeit Ihrer web3.eth.defaultAccount
Adresse, dh von wo aus Ihre Vertragsabrufe ausgeführt werden.
Gehen Sie direkt nach dem Kompilieren und Migrieren Ihrer Verträge wie folgt vor:
web3.eth.defaultAccount = web3.eth.accounts[0];
truffle develop
und ihr folgen. Ich bin mir nicht sicher, welche Serveradresse Sie verwenden. Schau mal in diesen Thread für weitere Tipps.
Kaki Meister der Zeit
addNote
?Pawelo
Kaki Meister der Zeit
constructor
, was zu diesem Fehler geführt hat,Cannot read property 'constructor' of undefined
und es ist klar, dass derinvalid address
Fehler beim Hinzufügen desfrom
Attributs verschwunden ist.Nulik
Kaki Meister der Zeit
Nulik
input
Ihren Vertrag alsextra data
Parameter in der Transaktion codieren. Sie müssen nur die korrekte ABI-Spezifikation angeben. Wenn Sie nun Adressen als Zeichenfolgen innerhalb des Vertrags verwalten möchten, ist das eine ganz andere Geschichte, und Sie können alles tun, da EVM eine Turing Complete-Maschine ist und jede Art von generischer Berechnung durchführen kann.Nulik
geth
anstelle von Trüffel ein, Sie werden besser verstehen, wie es funktioniert. medium.com/@gus_tavo_guim/…Michail Wladimirow
contract.js
Zeile 96?