Devolver una asignación en una función getAll

pragma solidity ^0.4.24;

contract User {
    mapping(uint=>address) addresses;
    uint addressRegistryCount;   

    function set(address userAddress) public {
        addresses[addressRegistryCount] = userAddress;
        addressRegistryCount++;
    }

    function get(address userAddress) public view returns (uint) {
        for (uint i = 0; i <= addressRegistryCount; i++) {
            if(addresses[i] == userAddress)
                return i;
        }
    }

    /*function getAll() {

    }*/
}

En este contrato tengo una función llamada getAll. Dentro de esa función, intento devolver el mapeo completo de los usuarios. ¿Cómo puedo hacer eso?

Si desea obtenerlo fuera de la cadena, simplemente agregue publicbefore addressesy obtendrá una función "getAll" (que puede invocar desde fuera de la cadena a través de addresses()).
@goodvibration Agregar el publicidentificador no da como resultado una getAllfunción. Le brinda una función pública que toma el índice como entrada y devuelve solo un elemento de mapeo.

Respuestas (2)

No puede devolver un mappingdirectamente. Lo que puede hacer es crear una matriz y agregarle todos addresslos valores almacenados en la addressesasignación. Luego devuelva esa matriz.

function getAll() public view returns (address[] memory){
    address[] memory ret = new address[](addressRegistryCount);
    for (uint i = 0; i < addressRegistryCount; i++) {
        ret[i] = addresses[i];
    }
    return ret;
}
En realidad, puede devolver un mapping, siempre que asigne tipos de longitud fija (y en el ejemplo anterior, uinty addressson tales).
¿Podría proporcionar un código de ejemplo?
Ver mi comentario a la pregunta.
Funciona bien gracias a ambos ;D
De nada ;-)

En lugar de una asignación, puede devolver 2 matrices. Echa un vistazo a este ejemplo de trabajo...

function getAvailableMintsForUser(WhitelistStorage storage self) public view returns (uint256[] memory, uint8[] memory) {
    uint256 balance = self.contract.balanceOf(msg.sender);
    uint256[] memory tokenIds = new uint256[](balance);
    uint8[] memory available = new uint8[](balance);
    for(uint256 i = 0 ; i < balance ; i++) {
        tokenIds[i] = self.chroma.tokenOfOwnerByIndex(msg.sender, i);
        available[i] = calcAvailableMintsPerTokenId(self, tokenIds[i]);
    }
    return (tokenIds, available);
}