String als Adresse an SmartContract senden

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?

Verwenden Sie Trüffel? Können Sie eine größere Ausgabe des Fehlers anzeigen? Haben Sie eine Absenderadresse angegeben? die, die Sie verwenden, um die Transaktion als Funktion zu senden addNote?
Ja, Trüffel, im bearbeitete Fragen mit mehr Details
Bitte posten Sie, wo Sie anrufen constructor, was zu diesem Fehler geführt hat, Cannot read property 'constructor' of undefinedund es ist klar, dass der invalid addressFehler beim Hinzufügen des fromAttributs verschwunden ist.
eine Adresse ist intern ein Array von 20 Bytes. Einem String wird intern seine Länge vorangestellt, dann folgen die Stringdaten. String enthält Unicode-codierte Daten, während die Adresse reine Bytes enthält. Beide Arten sind völlig inkompatibel.
@Nulik, es ist wahr. aber das wäre etwas in Solidität, nicht in Javascript. Ich gehe also davon aus, dass web3 die Konvertierung und Typüberprüfung automatisch durchführt.
@KakiMasterOfTime, nun, ich bin kein Truffle-Benutzer, aber in web3js erfolgt diese Konvertierung automatisch, wenn Sie inputIhren Vertrag als extra dataParameter 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.
Warum setzen Sie Ihren Vertrag nicht mit gethanstelle von Trüffel ein, Sie werden besser verstehen, wie es funktioniert. medium.com/@gus_tavo_guim/…
Was steht in contract.jsZeile 96?

Antworten (1)

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.defaultAccountAdresse, 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];
es funktioniert nicht,
Überprüfen Sie die Antwort noch einmal :) Ich habe das Problem schließlich gefunden.
Jetzt habe ich dies getan und immer noch Fehler Error: invalid at inputAddressFormatter. Es geht um die Serveradresse, die ich nicht übergebe, um zu funktionieren?
Sie sollten diesen Fehler nicht haben, wenn Sie meine obige Antwort verwenden truffle developund ihr folgen. Ich bin mir nicht sicher, welche Serveradresse Sie verwenden. Schau mal in diesen Thread für weitere Tipps.