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.js
welche 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:
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.
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.
Unten ist das Beispiel aus einem Truffle- Blogpost :
1 - Erstellen Sie eine Datei namens sampletx.js
und speichern Sie sie im Stammverzeichnis Ihres Projekts (dasselbe Verzeichnis wie Ihre truffle.js
Datei). 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 65
mithilfe der set()
Funktion des Vertrags auf .
Der privateFor
Parameter 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.
ivicaa
Jimbo1987
ivicaa