Abrufen von Speicher-Array-Daten aus dem Vertrag

Ich habe einen Soliditätsvertrag, der eine Reihe von ProposalInformationen speichert:

contract Submissions {

    Proposal[] public proposals;

    struct Proposal {
        // ....
    }
}

In einem Test (mit Truffle Framework) versuche ich, auf die Vorschlagsdaten zuzugreifen:

const proposals = await Submissions.proposals();

Aber ich bekomme diese Ausnahme:

Ungültige Anzahl von Argumenten für Solidity-Funktion

Ich verstehe das nicht, da es keine Funktion ist und daher keine Argumente benötigt. An anderer Stelle in meinen Tests habe ich mit dieser Methode erfolgreich Vertragsdaten gesammelt (allerdings nicht für Arrays) - was fehlt mir?

Antworten (1)

Der automatisch generierte Getter für ein Array akzeptiert einen einzigen Parameter: den Index in das Array.

Sie sollten also in der Lage sein, , usw. aufzurufen proposals(0), proposals(1)um Mitglieder des Arrays abzurufen.

Nur eine Frage, eine solche Indizierung scheint eher eine Adresse als die gesamte von mir definierte Struktur zurückzugeben - warum ist das so? Und um welche Adresse geht es?
Möglicherweise müssen Sie teilen, was Sie sehen. Jeder Aufruf sollte ein zurückgeben Proposal, obwohl ich denke, dass einige Mitglieder der Struktur übersprungen werden könnten, wenn ihre Typen nicht vom ABI-Encoder unterstützt werden. Ohne zu wissen, was Proposaldrin ist, ist es schwer, weiter zu spekulieren.