Problemas para llamar a una función con un Array bidimensional

Disculpas de antemano por mi inglés, pero todavía estoy aprendiendo :)

Estoy haciendo algunas pruebas con un contrato que tiene esta función concreta.

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

como puede ver, necesito pasar 2 matrices anidadas a la función, pero cuando lo hago en remix me sale este error: "Error encoding arguments".

Los argumentos que estoy pasando son:

ficha: "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359"

fichasTotal: 1233

intercambios: [1]

direcciones de pedido :

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

valores de pedido :

[[2000000000000000000000], [13826078276400000000000], [0], [0], [1526956201, [449817717993048016856168145010184983769385012936065174861722222222220

tarifas de intercambio: [0]

v: [27]

r:["0xde7ff8f42676ba3bb5986f869ac00b6aa061f41a281b943f9e8c88c3c17cd4fa"]

s:["0x2628b4330c1cb3e3ee6be748cc5c55ed19374a016063ebd9a0b1c77fd91e8024"]

Respuestas (1)

Ok, jugué un poco con matrices bidimensionales después de leer tu pregunta y resulta que cuando esperas un argumento en esa forma:

uint[6][] orderValues

su 'matriz' exterior puede tener cualquier tamaño, pero cada 'interior' debe contener exactamente seis elementos.

Entonces, por ejemplo, en lugar de proporcionar un argumento como ese

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

deberías proporcionarlo así:

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

Si no se ajusta a su modelo, debe reorganizarlo de alguna manera.

Editar: También noté que al intentar proporcionar un número muy grande como argumento uint, como 200000000000000000000 en su ejemplo, también puede obtener algún error. Para resolver eso, puede intentar poner este valor entre comillas dobles, aunque sea uint y no una cadena, así: "20000000000000000000"