Skip to content

Commit

Permalink
Staging (#7)
Browse files Browse the repository at this point in the history
  • Loading branch information
osipov-mit authored Dec 22, 2023
1 parent dae3ce1 commit c8280bb
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 27 deletions.
1 change: 1 addition & 0 deletions assets/cb-storage.meta.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
000200010000000000010600000001100000000000000001110000000112000000c128740008186e66745f696f1c496e69744e465400002001106e616d65040118537472696e6700012c6465736372697074696f6e040118537472696e67000140697066735f666f6c6465725f6c696e6b040118537472696e6700011461646d696e08011c4163746f72496400014c73746172745f6e756d6265725f6f665f6e667414010c75333200015c6e65775f73746172745f6e756d6265725f6f665f6e667414010c7533320001386e756d6265725f6f665f6e66747314010c7533320001346d656469615f6d6f64756c757314010c75333200000400000502000810106773746418636f6d6d6f6e287072696d6974697665731c4163746f724964000004000c01205b75383b2033325d00000c0000032000000010001000000503001400000505001808186e66745f696f244e4654416374696f6e000140104d696e74040124726563697069656e7408011c4163746f7249640000001c417070726f76650c011c6163636f756e7408011c4163746f724964000140617070726f7665645f6163636f756e7408011c4163746f724964000120746f6b656e5f696414010c753332000100385265766f6b65417070726f76616c08011c6163636f756e7408011c4163746f724964000120746f6b656e5f696414010c753332000200104275726e08011c6163636f756e7408011c4163746f724964000120746f6b656e5f696414010c7533320003006c416363657074546f6b656e46726f6d4f7468657253746f72616765080120746f6b656e5f696414010c7533320001106d6574611c0138496e6e6572546f6b656e4d657461000400205472616e736665720c011c6163636f756e7408011c4163746f724964000124726563697069656e7408011c4163746f724964000120746f6b656e5f696414010c753332000500144f776e6572040120746f6b656e5f696414010c75333200060038546f6b656e73466f724f776e65720401206f776e65725f696408011c4163746f72496400070030416464417474726962757465080120746f6b656e5f696414010c753332000124617474726962757465040118537472696e670008002041646441646d696e04012061646d696e5f696408011c4163746f7249640009002c44656c65746541646d696e04012061646d696e5f696408011c4163746f724964000a0038557064617465497066734c696e6b040140697066735f666f6c6465725f6c696e6b040118537472696e67000b00485570646174654e756d6265724f664e6674730401386e756d6265725f6f665f6e66747314010c753332000c005855706461746553746172744e756d6265724f664e667404014c73746172745f6e756d6265725f6f665f6e667414010c753332000d00244275726e466f726365040124746f6b656e5f6964733401205665633c7533323e000e0024416464546f6b656e73040118746f6b656e733801685665633c287533322c20496e6e6572546f6b656e4d657461293e000f00001c08186e66745f696f38496e6e6572546f6b656e4d65746100001001146d6564696114010c7533320001146f776e657208011c4163746f7249640001286163746976697469657320015c5665633c28537472696e672c207531362c20753634293e0001106c696e6b3001384f7074696f6e3c537472696e673e0000200000022400240000040c04282c002800000504002c00000506003004184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000340000021400380000023c003c00000408141c004008186e66745f696f204e46545265706c79000124184d696e746564080120746f6b656e5f696414010c7533320001106d6574611c0138496e6e6572546f6b656e4d657461000000144f776e65720801146f776e657208011c4163746f724964000120746f6b656e5f696414010c75333200010038546f6b656e73466f724f776e6572040118746f6b656e733401205665633c7533323e000200284e66744368616e6765640401106d6574611c0138496e6e6572546f6b656e4d65746100030020417070726f766564000400144275726e740401106d6574611c0138496e6e6572546f6b656e4d6574610005002c5472616e7366657272656400060034546f6b656e41636365707465640401106d6574611c0138496e6e6572546f6b656e4d6574610007003c417070726f76616c5265766f6b6564000800004408186e66745f696f285374617465517565727900013424546f6b656e496e666f040014010c75333200000024416c6c546f6b656e7300010040416c6c546f6b656e735261774461746100020034546f6b656e73496e52616e676508011066726f6d14010c753332000108746f14010c753332000300504e756d6265724f664d696e746564546f6b656e73000400304f776e65724f66546f6b656e040014010c7533320005003849706673466f6c6465724c696e6b0006001841646d696e730007003c417070726f76616c4f66546f6b656e040014010c75333200080030416c6c417070726f76616c7300090038546f6b656e73466f724f776e6572040008011c4163746f724964000a003c4d61784e756d6265724f664e667473000b004053746172744e756d6265724f664e6674000c00004808186e66745f696f2853746174655265706c7900013424546f6b656e496e666f04004c012c4f7074696f6e3c4e66743e00000024416c6c546f6b656e73040058014c5665633c284163746f7249642c204e6674293e00010040416c6c546f6b656e7352617744617461040060014c5665633c496e6e6572546f6b656e4d6574613e00020034546f6b656e73496e52616e6765040058014c5665633c284163746f7249642c204e6674293e000300504e756d6265724f664d696e746564546f6b656e7304002c010c753634000400304f776e65724f66546f6b656e040008011c4163746f7249640005003849706673466f6c6465724c696e6b0400040118537472696e670006001841646d696e7304006401305665633c4163746f7249643e0007003c417070726f76616c4f66546f6b656e040068013c4f7074696f6e3c4163746f7249643e00080030416c6c417070726f76616c7304006c014c5665633c287533322c204163746f724964293e00090038546f6b656e73466f724f776e657204003401205665633c7533323e000a003c4d61784e756d6265724f664e667473040014010c753332000b004053746172744e756d6265724f664e6674040014010c753332000c00004c04184f7074696f6e04045401500108104e6f6e6500000010536f6d6504005000000100005008186e66745f696f0c4e667400001401146f776e657208011c4163746f7249640001106e616d65040118537472696e6700012c6465736372697074696f6e040118537472696e670001246d656469615f75726c040118537472696e670001286174747269625f75726c54012c5665633c537472696e673e0000540000020400580000025c005c00000408085000600000021c006400000208006804184f7074696f6e04045401080108104e6f6e6500000010536f6d6504000800000100006c00000270007000000408140800
12 changes: 7 additions & 5 deletions src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,13 @@ config();
export default {
nfts: {
cb: getEnv('NFT_CB'),
vit: getEnv('NFT_VIT'),
draft: getEnv('NFT_DRAFT'),
vitMigratedAtBlock: getEnv('VIT_MIGRATED_AT_BLOCK'),
vitMigratedTS: Number(getEnv('VIT_MIGRATED_TS')),
readMigrateNfts: Boolean(getEnv('READ_MIGRATED_NFTS', '')),
vit: getEnv('NFT_VIT', ''),
draft: getEnv('NFT_DRAFT', ''),
vitMigratedAtBlock: getEnv('VIT_MIGRATED_AT_BLOCK', '0'),
cbMigratedAtBlock: getEnv('CB_MIGRATED_AT_BLOCK', '0'),
vitMigratedTS: Number(getEnv('VIT_MIGRATED_TS', '0')),
cbMigratedTs: Number(getEnv('CB_MIGRATED_TS', '0')),
readMigratedNfts: Boolean(getEnv('READ_MIGRATED_NFTS', '')),
old: getEnv('NFT_OLD', ''),
},
squid: {
Expand Down
45 changes: 28 additions & 17 deletions src/handlers/vit-nft.ts → src/handlers/migrated-nft.ts
Original file line number Diff line number Diff line change
@@ -1,37 +1,49 @@
import { HexString, HumanTypesRepr, ProgramMetadata } from '@gear-js/api';
import { readFileSync } from 'fs';

import config from '../config';
import { StateReply, VitNftStateReply } from '../types';
import { StateReply, StorageStateReply } from '../types';
import { gearReadStateBatchReq, gearReadStateReq, getDate } from '../utils';
import { readFileSync } from 'fs';
import { BatchState } from '../batchState';
import { getCollectionDescription, getCollectionName } from './helpers';

async function getStorages(meta: ProgramMetadata) {
const payload = '0x01';
const result = await gearReadStateReq(config.nfts.vit, payload);
const result = await gearReadStateReq(config.nfts.cb, payload);
const data = meta.createType<StateReply>((meta.types.state as HumanTypesRepr).output, result);
if (data.isStorageIds) {
return data.asStorageIds.toJSON() as HexString[];
}
}

const meta = ProgramMetadata.from(readFileSync('./assets/cb-nft.meta.txt', 'utf8'));
const nftMeta = ProgramMetadata.from(readFileSync('./assets/vit-nft.meta.txt', 'utf8'));
const blockNumber = BigInt(config.nfts.vitMigratedAtBlock);
const timestamp = new Date(config.nfts.vitMigratedTS);
const nftMeta = ProgramMetadata.from(readFileSync('./assets/cb-storage.meta.txt', 'utf8'));
const blockNumber = BigInt(config.nfts.cbMigratedAtBlock);
const timestamp = new Date(config.nfts.cbMigratedTs);

export async function readMigratedNfts(state: BatchState) {
const storages = await getStorages(meta);
const description = await getCollectionDescription(meta, config.nfts.vit);
const name = await getCollectionName(meta, config.nfts.vit);
const collection = state.newCollection(config.nfts.vit, name, description);
for (let i = 0; i < storages.length; i += 5) {
const result = await gearReadStateBatchReq(storages.slice(i, i + 5), '0x02');

for (const value of result) {
const data = nftMeta.createType<VitNftStateReply>((nftMeta.types.state as HumanTypesRepr).output, value);
const description = await getCollectionDescription(meta, config.nfts.cb);
const name = await getCollectionName(meta, config.nfts.cb);
const collection = state.newCollection(config.nfts.cb, name, description);

const batchSize = 5;
for (let i = 0; i < storages.length; i += batchSize) {
console.log(`Reading storage ${i + 1} - ${i + batchSize} of ${storages.length}`);

const [tokens, links] = await Promise.all([
gearReadStateBatchReq(storages.slice(i, i + batchSize), '0x02'),
gearReadStateBatchReq(storages.slice(i, i + batchSize), '0x06'),
]);

for (let j = 0; j < batchSize; j++) {
const data = nftMeta.createType<StorageStateReply>((nftMeta.types.state as HumanTypesRepr).output, tokens[j]);
const link = nftMeta.createType<StorageStateReply>((nftMeta.types.state as HumanTypesRepr).output, links[j]);

const mediaLink = link.asIpfsFolderLink;

if (data.isAllTokensRawData) {
for (const { media, owner, link, activities } of data.asAllTokensRawData) {
for (const { media, owner, activities } of data.asAllTokensRawData) {
await state.mintNft(
media.toString(),
collection,
Expand All @@ -44,14 +56,13 @@ export async function readMigratedNfts(state: BatchState) {
}),
description,
name + ' - ' + media.toString(),
link.toString(),
`${mediaLink}/${media.toString()}.png`,
blockNumber,
timestamp,
);
}
}
}
}

await state.save();
}
4 changes: 2 additions & 2 deletions src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { UserMessageSentArgs } from './types';
import config from './config';
import { BatchState } from './batchState';
import { cbNftHandler } from './handlers/cb-nft';
import { readMigratedNfts } from './handlers/vit-nft';
import { readMigratedNfts } from './handlers/migrated-nft';
import { draftNftHandler } from './handlers/draft-nft';

const programs = [config.nfts.cb, config.nfts.vit];
Expand All @@ -14,7 +14,7 @@ if (config.nfts.old !== '') {
simpleNfts.push(...config.nfts.old.split(','));
}

let isMigratedNftsSaved = !config.nfts.readMigrateNfts;
let isMigratedNftsSaved = !config.nfts.readMigratedNfts;

const state = new BatchState();

Expand Down
6 changes: 4 additions & 2 deletions src/types/vit.nft.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { Enum, Vec } from '@polkadot/types';
import { Enum, Text, Vec } from '@polkadot/types';
import { InnerTokenMeta } from './cb-nft';

export interface VitNftStateReply extends Enum {
export interface StorageStateReply extends Enum {
isAllTokensRawData: boolean;
asAllTokensRawData: Vec<InnerTokenMeta>;
isIpfsFolderLink: boolean;
asIpfsFolderLink: Text;
}
1 change: 0 additions & 1 deletion src/utils.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { CreateType } from '@gear-js/api';
import config from './config';

export function getDate(ts: string) {
Expand Down

0 comments on commit c8280bb

Please sign in to comment.