Verwenden Sie Truffle-Migrationen, um viele Daten in einen Smart Contract einzuspeisen?

Ich habe einen Smart Contract (ERC-721-konform) entwickelt, der mit vielen verschiedenen Daten gefüllt werden muss.

Etwa 300 ERC721-Token müssen zum Zeitpunkt der Bereitstellung innerhalb des Vertrags geprägt werden.

Ich habe eine JSON-Datenstruktur, die alle erforderlichen Anfangstoken und ihre Datenattribute enthält, die im Vertrag geprägt werden sollen.

Ich habe derzeit ein neues Migrationsskript erstellt, z. B. 4_populated_tokens.jswelche Trüffel bei der Bereitstellung in jedem Netzwerk ausgeführt werden.

Dies gelingt lokal immer mit Ganache, aber wenn ich gegen ein Testnetz laufe, scheint dies immer irgendwann fehlzuschlagen, gelegentlich mit 80% oder mehr des Inhalts, normalerweise aus folgendem Grund:

Error encountered, bailing. Network state unknown. Review successful transactions manually.

Ich habe versucht, die Migration mit einigem Erfolg anzupassen, indem ich Folgendes mache:

  • Prägen Sie nur einen einzigen Token auf einmal, dh seriell, anstatt viele Einsätze auf einmal zu feuern
  • Erhöhung des Gases pro Transaktion

Damit sind einige Erfolge erzielt worden.

Meine Frage :

  • Ist es richtig, Truffle Migrate zu verwenden, um so große Datenmengen zu füllen, wenn nicht, was ist die bevorzugte Lösung?

  • Haben andere Leute auch dieses Problem, wenn sie Truffle verwenden, um im Rahmen einer Migration große Datenmengen einzuspielen?

Alle Hilfe geschätzt, danke.

Trüffel ist ein Allzweckwerkzeug. Wenn es also im Allgemeinen Sinn macht, es in Ethereum zu tun, ist es auch sinnvoll, es mit Trüffel zu tun. "Netzwerkstatus unbekannt" sieht nach einem Verbindungsproblem aus. Wie verbindest du dich mit dem Netzwerk? Über etwas wie Infura oder über Ihren eigenen Knoten?
Ich verwende Infra und HDWalletProvider
Dann nehme ich an, dass Sie Transaktionen möglicherweise zu schnell senden und ein Quotenmechanismus auf der Infura-Seite ausgelöst wird. Versuchen Sie, zwischen den Sendevorgängen einen Ruhezustand hinzuzufügen, und sehen Sie, ob dies hilfreich ist.

Antworten (1)

Sie können verwenden truffle exec, um nach der Bereitstellung zusätzliche Einstellungen vorzunehmen.

Häufig möchten Sie möglicherweise externe Skripts ausführen, die mit Ihren Verträgen interagieren. Truffle bietet eine einfache Möglichkeit, dies zu tun, indem Sie Ihre Verträge basierend auf Ihrem gewünschten Netzwerk booten und sich automatisch gemäß Ihrer Projektkonfiguration mit Ihrem Ethereum-Client verbinden.

Quelle

Unten ist das Beispiel aus einem Truffle- Blogpost :

1 - Erstellen Sie eine Datei namens sampletx.jsund speichern Sie sie im Stammverzeichnis Ihres Projekts (dasselbe Verzeichnis wie Ihre truffle.jsDatei). Dann füllen Sie es mit diesem Code:

var SimpleStorage = artifacts.require("SimpleStorage");

module.exports = function(done) {
    console.log("Getting deployed version of SimpleStorage...")
    SimpleStorage.deployed().then(function(instance) {
        console.log("Setting value to 65...");
        return instance.set(65, {
            privateFor: ["ROAZBWtSacxXQrOe3FGAqJDyJjFePR5ce4TSIzmJ0Bc="]
        });
    }).then(function(result) {
        console.log("Transaction:", result.tx);
        console.log("Finished!");
        done();
    }).catch(function(e) {
        console.log(e);
        done();
    });
};

Dieser Code macht zwei Dinge: Erstens fordert er Truffle auf, unsere Vertragsabstraktion für den SimpleStorage-Vertrag zu erhalten. Dann findet es den bereitgestellten Vertrag und setzt den von SimpleStorage verwalteten Wert 65mithilfe der set()Funktion des Vertrags auf .

Der privateForParameter ist hier für Sie nicht relevant und Sie können ihn weglassen. Ich kopiere und füge es aus der Quelle ein.

2 - Führen Sie diesen Code aus mit truffle exec:

$ truffle exec sampletx.js

Ihre Ausgabe sollte in etwa so aussehen (Ihre Transaktions-ID wird jedoch anders sein):

Using network 'development'.

Getting deployed version of SimpleStorage...
Setting value to 65...
Transaction: 0x0a7a661e657f5a706b0c39b4f197038ef0c3e77abc9970a623327c6f48ca9aff
Finished!

Hier ist ein Blogbeitrag des Trüffel-Erstellers über truffle exec.

Hoffe das hilft.