Skip to content

Commit

Permalink
add data migration with locking
Browse files Browse the repository at this point in the history
  • Loading branch information
sarmatdev committed Mar 15, 2023
1 parent 2b0ded8 commit b7f78a2
Showing 1 changed file with 57 additions and 0 deletions.
57 changes: 57 additions & 0 deletions scripts/deploy.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import { GSN_MUMBAI_FORWARDER_CONTRACT_ADDRESS } from '@big-whale-labs/constants'
import { OBSSStorage } from 'typechain'
import { cwd } from 'process'
import { ethers, run, upgrades } from 'hardhat'
import { readFileSync } from 'fs'
import { resolve } from 'path'
import { utils } from 'ethers'
import { version } from '../package.json'
import prompt from 'prompt'
Expand All @@ -8,6 +12,25 @@ const regexes = {
ethereumAddress: /^0x[a-fA-F0-9]{40}$/,
}

type LegacyData =
| OBSSStorage.LegacyPostStruct[]
| OBSSStorage.LegacyReactionStruct[]

function getBatchOfData(data: LegacyData, start: number, end: number) {
return data.slice(start, end)
}

function prepareAllBatches(data: LegacyData) {
const batchStep = 10
const batches: LegacyData[] = []
for (let i = 0; i < data.length; i += batchStep) {
const batch = getBatchOfData(data, i, i + batchStep)
console.log(batch)
batches.push(batch)
}
return batches
}

async function main() {
const [deployer] = await ethers.getSigners()

Expand Down Expand Up @@ -79,10 +102,44 @@ async function main() {
)
const adminAddress = await upgrades.erc1967.getAdminAddress(contract.address)

const deployedContract = factory.attach(contract.address).connect(provider)

console.log('OBSSStorage Proxy address:', contract.address)
console.log('Implementation address:', implementationAddress)
console.log('Admin address:', adminAddress)

console.log('Migrating data...')
const legacyPosts = JSON.parse(
readFileSync(resolve(cwd(), 'data', 'legacy-posts.json'), 'utf-8')
)
const legacyReactions = JSON.parse(
readFileSync(resolve(cwd(), 'data', 'legacy-reactions.json'), 'utf-8')
)
const legacyPostsBatches = prepareAllBatches(legacyPosts)
const legacyReactionsBatches = prepareAllBatches(legacyReactions)

for (let i = 0; i < legacyPosts.length; i++) {
console.log(`Loading data batch ${i}`)
const tx = await deployedContract.migrateLegacyData(
legacyPostsBatches[i] as OBSSStorage.LegacyPostStruct[],
legacyReactionsBatches[i] as OBSSStorage.LegacyReactionStruct[]
)
const receipt = await tx.wait()
console.log(
`Batch ${i} minted `,
`https://mumbai.polygonscan.com/tx/${receipt.transactionHash}`
)
}
console.log('Data migration done!')

console.log('Locking data migration...')

await deployedContract.lockDataMigration()
const isDataLoadingLocked = await deployedContract.isDataMigrationLocked()
if (isDataLoadingLocked) {
console.log('Data migration locked!')
}

console.log('Wait for 1 minute to make sure blockchain is updated')
await new Promise((resolve) => setTimeout(resolve, 15 * 1000))

Expand Down

0 comments on commit b7f78a2

Please sign in to comment.