Ich gehe ein Tutorial aus dem Jahr 2017 durch, das besagt, dass es im Januar 2018 aktualisiert wurde. Es besagt, dass Sie derzeit kein Array von Zeichenfolgen direkt an den Konstruktor eines Vertrags übergeben können und dass Sie ein Array von so etwas wie byte32 verwenden müssen. Ist das noch so?
Wenn Sie jetzt ein Array von Zeichenfolgen verwenden können und einen Link zu einer Beispielseite haben, teilen Sie diese bitte mit.
Sie können tatsächlich ein Array von byte32 als Argument für eine Soliditätsfunktion verwenden, wie bei dieser Konstruktorfunktion:
constructor(bytes32[] memory proposalNames) public { chairperson = msg.sender; voters[chairperson].weight = 1; // For each of the provided proposal names, // create a new proposal object and add it // to the end of the array. for (uint i = 0; i < proposalNames.length; i++) { // `Proposal({...})` creates a temporary // Proposal object and `proposals.push(...)` // appends it to the end of `proposals`. proposals.push(Proposal({ name: proposalNames[i], voteCount: 0 })); } }
Und so können Sie es mit web3 weitergeben:
let args = ['one', 'two', 'three', 'four']; ballot = await new web3.eth.Contract(JSON.parse(interface)) .deploy({ data: bytecode, arguments: [args.map((arg) => web3.utils.asciiToHex(arg))] }) .send({ from: accounts[0], gas: '6000000' });
Der Punkt ist, das String-Array in ein Byte32-Array (die Hex-Darstellung) zu konvertieren und es einfach weiterzugeben. Das einzige, was ich getan habe, um die Hex-Darstellung zu erhalten, ist Folgendes:
args.map((arg) => web3.utils.asciiToHex(arg))
Wenn Sie einen Byte32-Rückgabetyp in einer Soliditätsfunktion haben, können Sie ebenfalls eine der Dienstprogrammfunktionen von web3 (web3.utils.bytesToHex ('0xf2323de')) verwenden, um ihn in einen Zeichenfolgenwert zu konvertieren.
In der Tat können Sie kein Array von Zeichenfolgen oder Bytes32 verwenden. Frage wurde hier schon beantwortet;).
Jovial Wanderer
Robert Oschler
Jovial Wanderer