Я разрабатываю смарт-контракт (совместимый с ERC-721), который необходимо заполнить большим количеством различных данных.
Приблизительно 300 токенов ERC721 должны быть выпущены внутри контракта в момент развертывания.
У меня есть структура данных json, в которой подробно описаны все необходимые исходные токены и их атрибуты данных, которые должны быть созданы внутри контракта.
В настоящее время я создал новый сценарий миграции, например 4_populated_tokens.js
, который запускает трюфель при развертывании в каждой сети.
Это всегда удается локально с ganache, но при работе с любой тестовой сетью I это всегда, кажется, в конечном итоге терпит неудачу, иногда с 80% или более содержимого, обычно по следующей причине:
Error encountered, bailing. Network state unknown. Review successful transactions manually.
Я попытался настроить миграцию с некоторым успехом, выполнив следующие действия:
В этом есть некоторый успех.
Мой вопрос :
Правильно ли использовать трюфельную миграцию для заполнения таких больших объемов данных, если нет, то какое решение является предпочтительным?
Есть ли у других людей такая же проблема с использованием truffle для запуска больших объемов данных в рамках миграции?
Вся помощь приветствуется, спасибо.
Вы можете использовать truffle exec
для дополнительной настройки после развертывания.
Часто вам может понадобиться запустить внешние скрипты, взаимодействующие с вашими контрактами. Truffle предоставляет простой способ сделать это, загружая ваши контракты на основе желаемой сети и автоматически подключаясь к вашему клиенту Ethereum в соответствии с конфигурацией вашего проекта.
Ниже приведен пример из сообщения в блоге Truffle :
1 - Создайте файл с именем sampletx.js
и сохраните его в корне вашего проекта (в том же каталоге, что и ваш truffle.js
файл). Затем заполните его этим кодом:
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();
});
};
Этот код делает две вещи: во-первых, он запрашивает у Truffle абстракцию нашего контракта для контракта SimpleStorage. Затем он находит развернутый контракт и устанавливает значение, управляемое SimpleStorage , равным , используя функцию 65
контракта .set()
Параметр privateFor
не имеет отношения к вам здесь, и вы можете его опустить. Я копирую и вставляю его из источника.
2 - Запустите этот код, используя truffle exec
:
$ truffle exec sampletx.js
Ваш вывод должен выглядеть примерно так (но идентификатор вашей транзакции будет другим):
Using network 'development'.
Getting deployed version of SimpleStorage...
Setting value to 65...
Transaction: 0x0a7a661e657f5a706b0c39b4f197038ef0c3e77abc9970a623327c6f48ca9aff
Finished!
Вот сообщение в блоге от создателя Truffle о truffle exec
.
Надеюсь это поможет.
ivicaa
Джимбоб1987
ivicaa