Kann Solidity Zuordnungen als Eingabeparameter in einer Funktion akzeptieren? Ich habe versucht, eine Funktion mit einer zweiten Parameterzuordnung (String => String) aMapping zu erstellen,
pragma solidity ^0.4.6;
contract testInputArray {
// Events
event LogFunctionWithMappingAsInput(address from, address to, string message);
function sendMessage(address to, mapping (string => string) aMapping) {
LogFunctionWithMappingAsInput(msg.sender, to, aMapping["test1"]);
}
}
aber der Compiler wirft den folgenden Fehler:
Untitled:7:35: Error: Type is required to live outside storage.
Gemäß Kann ich Mapping als Funktionsargumente aufrufen? Die Funktion muss intern oder privat sein, um eine Wrapping-Struktur zu akzeptieren, aber ich muss die Funktion von außerhalb des Vertrags direkt durch eine Ethereum-Transaktion aufrufbar sein.
Gibt es eine Möglichkeit, eine Zuordnung (assoziatives Array oder Wörterbuch) als Eingabeparameter in Solidity zu übergeben? Vielen Dank!
Ref.:
Sie können nicht das gesamte Mapping bestehen. Sie könnten eine Struktur intern übergeben. Idealerweise würden Sie die Felder aufzählen, die Sie wirklich übergeben müssen, damit Sie eine Schnittstelle erstellen können, die mit anderen Verträgen und Kunden funktioniert.
Ihr obiges Beispiel scheint ein einzelnes Mitglied der Quellzuordnung zu übergeben. Ich würde das ungefähr so interpretieren:
pragma solidity ^0.4.6;
contract testInputArray {
mapping (string => string) aMapping;
// Log event to print the message details
event Log(address from, address to, string message);
function sendMessage(address to, string key) {
Log(msg.sender, to, aMapping[key]);
}
}
Ich hoffe es hilft.
PS Es wäre nachlässig, die übliche Bevorzugung von bytes32 gegenüber string wegzulassen, wenn dies in diesem Fall möglich ist. Habe es der Übersichtlichkeit halber als String belassen.
paulhauner