Probleme beim Aufrufen einer Funktion mit einem zweidimensionalen Array

Entschuldigung im Voraus für mein Englisch, aber ich lerne noch :)

Ich mache einige Tests mit einem Vertrag, der diese konkrete Funktion hat

function createBuyOrder(
    address token, 
    uint tokensTotal,
    uint8[] exchanges,
    address[5][] orderAddresses,
    uint[6][] orderValues,
    uint[] exchangeFees,
    uint8[] v,
    bytes32[] r,
    bytes32[] s
  ) 

Wie Sie sehen können, muss ich 2 verschachtelte Arrays an die Funktion übergeben, aber wenn ich es in Remix mache, erhalte ich diesen Fehler: "Fehler beim Codieren von Argumenten".

Die Argumente im Vorbeigehen sind:

Token: "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359"

TokenGesamt: 1233

Austausch: [1]

Bestelladressen :

[["0x0004e79c978b95974dca16f56b516be0c50cc652"], ["0x0000000000000000000000000000000000000000"],["0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"],["0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359"],["0xa258b39954cef5cb142fd567a46cddb31a670124"]]

Bestellwerte :

[[20000000000000000000], [13826078276400000000000],[0],[0],[1526956201,[44981771799304801685616814501018498376938501293606517488617232210966542022274]]

Wechselgebühren: [0]

v: [27]

r:["0xde7ff8f42676ba3bb5986f869ac00b6aa061f41a281b943f9e8c88c3c17cd4fa"]

s:["0x2628b4330c1cb3e3ee6be748cc5c55ed19374a016063ebd9a0b1c77fd91e8024"]

Antworten (1)

Ok, ich habe ein bisschen mit zweidimensionalen Arrays gespielt, nachdem ich Ihre Frage gelesen hatte, und es stellt sich heraus, dass, wenn Sie ein Argument in dieser Form erwarten:

uint[6][] orderValues

Ihr äußeres 'Array' kann beliebig groß sein, aber jedes 'innere' muss genau sechs Elemente enthalten.

Also zum Beispiel, anstatt so zu argumentieren

[[1],[1],[1],[1],[1],[1]]

Sie sollten es so bereitstellen:

[[1,1,1,1,1,1]]

Wenn es nicht zu Ihrem Modell passt, müssen Sie es irgendwie umarrangieren.

Bearbeiten: Mir ist auch aufgefallen, dass beim Versuch, eine sehr große Zahl als uint-Argument anzugeben, z. B. 20000000000000000000 in Ihrem Beispiel, möglicherweise auch ein Fehler auftritt. Um dies zu beheben, können Sie versuchen, diesen Wert in doppelte Anführungszeichen zu setzen, obwohl er uint und keine Zeichenfolge ist, wie folgt: "20000000000000000000"