¿Cómo recuperar la longitud de la matriz almacenada en el mapeo en la interfaz?

Tengo un contrato con el siguiente mapeo:

mapping (uint16 => uint256[]) public barLengthToBarIndexForSale;

¿Cuál es la mejor manera de recuperar la longitud de una matriz para una clave dada en la interfaz usando trufa?

Algo como esto...

barERC721Inst.barLengthToBarIndexForSale(5).length;

... parece no funcionar.

Usando una función adicional en mi contrato para recuperar la longitud...

    function getBarLengthToBarIndexForSaleLength(uint16 _length) external view returns (uint) {
    return barLengthToBarIndexForSale[_length].length;
}

... parece que tampoco funciona :(

Intenté llamarlo en la interfaz de esta manera:

barERC721Inst.barLengthToBarAmtForSale.call(5)

y

barERC721Inst.barLengthToBarAmtForSale(5)

ambos arrojan errores.

Cualquier ayuda es apreciada.

Su segundo enfoque debería funcionar bien. Lo único que cambiaría es el nombre del argumento de entrada: de _lengtha _index. Aparte de eso, deberá explicar qué es exactamente "parece que tampoco funciona".

Respuestas (1)

Podría simplemente escribir una función getter en su contrato que devuelva la longitud de la matriz. Asegúrate de hacerlo view.

function getSize(uint16 key) public view returns (uint){
    return barLengthToBarAmtForSale[5].length
}

si no es posible (el contrato ya está implementado), entonces podría "intentar" recorrer la matriz (no cuesta gasolina) hasta que obtenga un error. Esto es un poco sucio, pero debería funcionar.

Espero eso ayude.