Matriz de mapeo

Me gustaría una matriz de asignaciones, ¿es posible?

mapping (address >= value) sentValue;

sentValue[] public sentValues;

Quiero registrar los montos enviados por dirección, y quiero que cada evento de envío sea único con la capacidad de que una dirección envíe múltiples montos diferentes y que cada uno sea rastreado en la matriz individualmente. El resultado final sería la capacidad de iterar a través de esta matriz y mostrar en orden las cantidades enviadas por el usuario.

¿Cómo defino una nueva asignación cada vez que un usuario envía cierta cantidad y cuál es el código para enviar esa nueva asignación al final de la matriz?

¿Es realmente cierto que debo usar un mapeo (uint => struct) con la estructura que contiene los miembros de dirección y cantidad, y luego presionar y extraer el uint de la matriz como una clave única? ¿No parece esto demasiado complejo para una operación tan simple? Por favor ayuda a alguien...
Además, si ese es realmente el caso, entonces la memoria no crecerá hasta una cantidad increíble ... No necesariamente quiero almacenar estos datos para siempre, pero si debo usar este almacenamiento proxy, cuando saque la identificación de la matriz solo el valor en la matriz se eliminará y la entrada en el mapeo (uint => struct) se convertirá en un fantasma permanente. ¿Esto me parece terrible?
Parece que "Mapeo iterable" es lo que está buscando.

Respuestas (1)

Lo que estás buscando es un mapeo de mapeo. Creé el siguiente contrato inteligente que creo que logra lo que describiste.

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.5.0 <0.8.0;

contract myContract {
    
    mapping (address => mapping (uint => uint)) public payments;
    mapping (address => uint) public lastPayment;

    function sendMoney() public payable {
        require(msg.value > 0);
        payments[msg.sender][lastPayment[msg.sender]] = msg.value;
        lastPayment[msg.sender]++;
    }

}

Tenga en cuenta que el uso publicde variables paymentsy lastPaymentfor le dice al compilador que cree dos funciones de contrato inteligente para leer esos valores.

Aquí la esencia , y aquí el enlace para probar por ti mismo con el remix .