Problema en la inserción a una matriz dentro de una estructura

Tengo un problema en el siguiente contrato inteligente.

He definido una estructura que incluye una matriz de cadenas. Y he definido un mapeo para esta estructura.

struct Stonedetails {

        uint stoneweight;
        string stoneimagehash;
        string stoneidbywholesaledealer;
        string[] stoneidsbycutter;


}

mapping (uint=>Stonedetails) public stonedetailsTable;

He almacenado los valores en la estructura usando los siguientes métodos dentro de una función pasando parámetros.

 stonedetailsTable[stoneid].stoneweight =stoneweight;
 stonedetailsTable[stoneid].stoneimagehash =stoneimagehash;
 stonedetailsTable[stoneid].stoneidbywholesaledealer =stoneidbywholesaledealer;

¿Cómo puedo almacenar los valores en una matriz de cadenas? ¿Es la forma de almacenar los valores uno por uno?

stonedetailsTable[stoneid1].stoneidsbycutter.push(stoneidbycuttervalue);

¿Cómo puedo encontrar la longitud de la matriz usando stoneidsbycutter.length?

No estoy seguro de cuál es tu pregunta. ¿El código que compartiste no funciona? ¿No está stonedetailsTable[stoneid].stoneidsbycutter.lengthfuncionando?
@smarx Traté de encontrar la longitud, pero devuelve el valor como '0'... ¿Es correcta la forma de inserción que utilicé?
Me parece bien. ¿Puede compartir algún código completo que muestre el problema? (Por ejemplo, a pushseguido de marcar el length.)

Respuestas (1)

Su código parece correcto. Probé lo siguiente y obtuve una longitud de 1 como se esperaba:

pragma solidity ^0.4.17;

contract Test {
    struct Stonedetails {
        uint stoneweight;
        string stoneimagehash;
        string stoneidbywholesaledealer;
        string[] stoneidsbycutter;
    }

    mapping (uint=>Stonedetails) public stonedetailsTable;

    function Test() public {
        stonedetailsTable[0].stoneidsbycutter.push("hello");
    }

    function getLength() public constant returns (uint256) {
        return stonedetailsTable[0].stoneidsbycutter.length; // returns 1
    }
}
Funcionó con éxito