Das ist meine Funktion in Solidität
function transferForm(address _from, address _to, uint256 _value) public returns (bool success) {
}
Jetzt rufe ich dieselbe Funktion in der Testdatei auf, um meinen Smart Contract zu testen
tokenInstance.transferForm(spendingAccount,10,{from : fromAccount})
Ich habe von Konto zu Konten initialisiert[3]
Warum senden wir die Daten mit{from : fromAccount}
Warum können wir keine Daten wie z
tokenInstance.transferForm(from,spendingAccount,10,)
Gibt es einen Unterschied?
Woher weiß die Funktion, wann wir die Position der von uns gesendeten Funktionseingabeparameter ändern?
Bitte helfen Sie mir, die Logik zu verstehen
Obwohl sie ähnlich verwirrende Namen haben, beziehen sie sich auf verschiedene Dinge.
Das Format { key: value }
ist das Web3-Format zum Bereitstellen zusätzlicher Metadaten für die Funktion. Diese werden nicht als Parameter an die Funktion weitergegeben, sondern intern behandelt. Beispielsweise kann der Schlüssel from
verwendet werden, um festzulegen, von welchem der verfügbaren Konten die Transaktion gesendet wird. Dieser Wert wird nicht direkt an die Funktion weitergegeben, sondern die Transaktion wird von diesem Konto erstellt.
Die transferFrom
Funktion erwartet ein erstes Argument vom Typ address
und muss bereitgestellt werden. Die Funktionssignatur hat keine Ahnung, von welchem Konto die eigentliche Transaktion stammt - das kann später in der Funktion mit überprüft werden msg.sender
. Wenn Sie also ein { from: fromAccount }
für den Funktionsaufruf angeben, fromAccount
wird das msg.sender
innerhalb der Funktion.
BEARBEITEN
Außerdem transferFrom
erwartet die Funktion 3 Parameter, aber Sie übergeben ihr in Ihrem ersten Beispiel nur zwei Parameter. Die Funktion kann die Parameter in keiner Weise aus Metadaten "neu zuordnen", sodass Sie einen Fehler erhalten, da eine Funktion mit Ihrer Signatur (2 Parameter) nicht existiert.
eth
transferForm
sollte wohl seintransferFrom