Unterstützt Solidity die Übergabe einer Reihe von Zeichenfolgen an den Konstruktor eines Vertrags?

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.

Antworten (2)

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.

Der Konstruktorcode stammt aus den Soliditätsdokumenten: solidity.readthedocs.io/en/v0.5.0/solidity-by-example.html
Vielen Dank. Haben Sie Probleme mit der Verwendung von starkem Gas mit Funktionen gehabt, die ein Array von Bytes 32 oder Fehler "Stapel zu tief" akzeptieren?
Ich hatte kein Problem mit dem Gasverbrauch. Für das obige Beispiel habe ich 6000000 Wei für ein Gas verwendet, und es hat gut funktioniert.

In der Tat können Sie kein Array von Zeichenfolgen oder Bytes32 verwenden. Frage wurde hier schon beantwortet;).