Array der Zuordnung

Ich möchte ein Array von Mappings, ist das möglich?

mapping (address >= value) sentValue;

sentValue[] public sentValues;

Ich möchte Beträge aufzeichnen, die nach Adresse gesendet werden, und ich möchte, dass jedes Sendeereignis einzigartig ist, mit der Möglichkeit, dass eine Adresse mehrere verschiedene Beträge senden kann und jeder einzeln im Array verfolgt wird? Das Endergebnis wäre die Möglichkeit, dieses Array zu durchlaufen und vom Benutzer gesendete Bestellmengen anzuzeigen.

Wie definiere ich jedes Mal eine neue Zuordnung, wenn ein Benutzer einen bestimmten Betrag sendet, und wie lautet der Code, um diese neue Zuordnung am Ende des Arrays zu verschieben?

Stimmt es wirklich, dass ich eine Zuordnung (uint => struct) mit der Struktur verwenden muss, die Adress- und Betragsmitglieder enthält, und dann die uint aus dem Array als eindeutigen Schlüssel drücken und ablegen muss? Scheint das nicht zu komplex für eine so einfache Operation? Bitte helft jemandem...
Auch wenn das wirklich der Fall ist, wird der Speicher nicht auf eine wahnsinnige Menge anwachsen ... Ich möchte diese Daten nicht unbedingt für immer speichern, aber wenn ich diesen Proxy-Speicher verwenden muss, dann, wenn ich die ID aus dem Array drücke, nur den Wert in Das Array wird gelöscht und der Eintrag in der Zuordnung (uint => struct) wird zu einem permanenten Geist. Das kommt mir schrecklich vor?
Sieht so aus, als ob "Iterable Mapping" das ist, wonach Sie suchen.

Antworten (1)

Was Sie suchen, ist eine Abbildung der Abbildung. Ich habe den folgenden intelligenten Vertrag erstellt, der meiner Meinung nach das erreicht, was Sie beschrieben haben.

// 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]++;
    }

}

Bitte beachten Sie, dass die Verwendung von publicfor paymentsund lastPayment-Variablen den Compiler anweist, zwei intelligente Vertragsfunktionen zu erstellen, um diese Werte zu lesen.

Hier das Wesentliche , und hier der Link , um es selbst mit Remix zu versuchen .