Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Загрузка изображений в IPFS... Ошибка инициализации

Виктор Сулим Ученик (109), на голосовании 5 месяцев назад
 import * as dotenv from "dotenv"; 

import { toNano } from "ton-core";
import { readdir } from "fs/promises";

import { openWallet } from "./utils";
import { waitSeqno } from "./delay";
import { NftCollection } from "./contracts/NftCollection";
import { NftItem } from "./contracts/NftItem";
import { updateMetadataFiles, uploadFolderToIPFS } from "./metadata";
import { GetGemsSaleData, NftSale } from "./contracts/NftSale";
import { NftMarketplace } from "./contracts/NftMarketplace";

dotenv.config();

async function init() {
try {
const metadataFolderPath = "./data/metadata/";
const imagesFolderPath = "./data/images/";

const wallet = await openWallet(process.env.MNEMONIC!.split(" "), true);

console.log("Started uploading images to IPFS...");
const imagesIpfsHash = await uploadFolderToIPFS(imagesFolderPath);
console.log(
`Successfully uploaded the pictures to ipfs: https://gateway.pinata.cloud/ipfs/${imagesIpfsHash}`
);

console.log("Started uploading metadata files to IPFS...");
await updateMetadataFiles(metadataFolderPath, imagesIpfsHash);
const metadataIpfsHash = await uploadFolderToIPFS(metadataFolderPath);
console.log(
`Successfully uploaded the metadata to ipfs: https://gateway.pinata.cloud/ipfs/${metadataIpfsHash}`
);

console.log("Start deploy of nft collection...");
const collectionData = {
ownerAddress: wallet.contract.address,
royaltyPercent: 0.05, // 0.05 = 5%
royaltyAddress: wallet.contract.address,
nextItemIndex: 0,
collectionContentUrl: `ipfs://${metadataIpfsHash}/collection.json`,
commonContentUrl: `ipfs://${metadataIpfsHash}/`,
};
const collection = new NftCollection(collectionData);
let seqno = await collection.deploy(wallet);
console.log(`Collection deployed: ${collection.address}`);
await waitSeqno(seqno, wallet);

// Deploy nft items
const files = await readdir(metadataFolderPath);
files.pop();
let index = 0;

seqno = await collection.topUpBalance(wallet, files.length);
await waitSeqno(seqno, wallet);
console.log(`Balance top-upped`);

for (const file of files) {
try {
console.log(`Start deploy of ${index + 1} NFT`);
const mintParams = {
queryId: 0,
itemOwnerAddress: wallet.contract.address,
itemIndex: index,
amount: toNano("0.05"),
commonContentUrl: file,
};
const nftItem = new NftItem(collection);
seqno = await nftItem.deploy(wallet, mintParams);
console.log(`Successfully deployed ${index + 1} NFT`);
await waitSeqno(seqno, wallet);
index++;
} catch (error) {
console.error(`Error deploying ${index + 1} NFT:`, error);
}
}

console.log("Start deploy of new marketplace ");
const marketplace = new NftMarketplace(wallet.contract.address);
seqno = await marketplace.deploy(wallet);
await waitSeqno(seqno, wallet);
console.log("Successfully deployed new marketplace");

try {
const nftToSaleAddress = await NftItem.getAddressByIndex(collection.address, 0);
const saleData: GetGemsSaleData = {
isComplete: false,
createdAt: Math.ceil(Date.now() / 1000),
marketplaceAddress: marketplace.address,
nftAddress: nftToSaleAddress,
nftOwnerAddress: null,
fullPrice: toNano("10"),
marketplaceFeeAddress: wallet.contract.address,
marketplaceFee: toNano("1"),
royaltyAddress: wallet.contract.address,
royaltyAmount: toNano("0.5"),
};
const nftSaleContract = new NftSale(saleData);
seqno = await nftSaleContract.deploy(wallet);
await waitSeqno(seqno, wallet);

} catch (error) {
console.error('Error setting up NFT for sale:', error);
}
}
Дополнен 6 месяцев назад
catch (error) {
console.error('Initialization failed:', error);
}
}

void init();

А получаю такую ошибку, хотя с пинтой все нормально:
% yarn start
yarn run v1.22.19
$ tsc --skipLibCheck && node dist/app.js
Started uploading images to IPFS...
Initialization failed: {
reason: 'FORBIDDEN',
details: 'Account blocked due to plan usage limit'
}
✨ Done in 3.96s.
Голосование за лучший ответ
frontDev Мастер (1534) 6 месяцев назад
Ошибка, с которой вы столкнулись, похоже, связана с процессом инициализации вашего приложения. Предоставленный вами код пытается загрузить изображения в IPFS, обновить файлы метаданных, развернуть коллекцию NFT и настроить продажу NFT. Однако похоже, что в процессе инициализации возникла проблема.

Судя по коду, функция init() выполняет основную логику. Сообщение об ошибке указывает на то, что инициализация не удалась, ошибка перехватывается и регистрируется.

Чтобы помочь вам решить эту проблему, я бы предложил следующее:
  • **Проверьте сообщение об ошибке**. Внимательно изучите записываемое сообщение об ошибке. Он должен предоставить некоторую информацию о конкретной проблеме, вызывающей сбой инициализации.
  • **Проверьте переменные среды**: убедитесь, что необходимые переменные среды, такие как MNEMONIC, правильно установлены и доступны приложению.
  • **Проверьте пути к файлам**. Убедитесь, что переменные `metadataFolderPath` и `imagesFolderPath` указывают на правильные места, где хранятся файлы метаданных и изображений.
  • **Проверьте загрузку IPFS**. Убедитесь, что функция `uploadFolderToIPFS` работает должным образом и что хеши IPFS генерируются правильно.
  • **Отладка процесса развертывания**. Выполните процесс развертывания коллекции NFT, элементов NFT и торговой площадки, чтобы выявить любые потенциальные проблемы.
  • **Элегантная обработка ошибок**. Внедрите более надежную обработку ошибок во всем коде, чтобы обеспечить лучшую видимость основной причины сбоя инициализации.

Вот пример того, как вы можете изменить функцию init() для более изящной обработки ошибок:
 async function init() { 
try {
// Your existing code here
} catch (error) {
console.error('Initialization failed:', error);
// Add additional error handling logic here, such as retrying the operation or providing more detailed error messages
}
}

void init();

Улучшив обработку ошибок и предоставив более подробную информацию о проблемах, возникших в процессе инициализации, вы сможете лучше определить и устранить основную причину проблемы.
Похожие вопросы