Search Apps Documentation Source Content File Folder Download Copy Actions Download

migration_research_migration.gno

2.82 Kb · 103 lines
  1package chunk
  2
  3import (
  4	"gno.land/p/g1nqnrt3aldzhu6zzeg75yw97wvavqy7wr77g56q/deploy-test/v0/v0/accesscontrol"
  5	oldchunk "gno.land/r/g1nqnrt3aldzhu6zzeg75yw97wvavqy7wr77g56q/deploy-test/v0/v0/chunk"
  6	"gno.land/r/g1nqnrt3aldzhu6zzeg75yw97wvavqy7wr77g56q/deploy-test/v1/admin"
  7)
  8
  9const (
 10	migrationPhaseWorlds = iota
 11	migrationPhaseMetadata
 12	migrationPhaseVerifiers
 13	migrationPhaseOwners
 14	migrationPhaseAuthzDefinitions
 15	migrationPhaseAuthzGrants
 16	migrationPhaseWorldMasters
 17	migrationPhaseFinalized
 18)
 19
 20var (
 21	migrationInitialized       bool
 22	migrationFinalized         bool
 23	migrationGRC721Initialized bool
 24	migrationPhase             int
 25	migrationOffset            int
 26)
 27
 28// MigrationInit is the first next-package call made by the research driver.
 29func MigrationInit(cur realm) {
 30	accesscontrol.AssertIsAdmin(0, cur, admin.IsAdmin)
 31	if migrationInitialized {
 32		panic("migration already initialized")
 33	}
 34
 35	config := oldchunk.GetMigrationConfig()
 36	resetMigrationDestination(cur, config)
 37
 38	migrationInitialized = true
 39	migrationFinalized = true
 40	migrationPhase = migrationPhaseFinalized
 41	migrationOffset = int(config.TokenCount)
 42}
 43
 44// MigrationNext advances the migration after MigrationInit until finalization.
 45func MigrationNext(cur realm) {
 46	accesscontrol.AssertIsAdmin(0, cur, admin.IsAdmin)
 47	if !migrationInitialized {
 48		panic("migration not initialized")
 49	}
 50	if migrationFinalized {
 51		panic("migration already finalized")
 52	}
 53
 54	migrationFinalized = true
 55	migrationPhase = migrationPhaseFinalized
 56}
 57
 58// IsMigrationInitialized reports whether MigrationInit has run.
 59func IsMigrationInitialized() bool {
 60	return migrationInitialized
 61}
 62
 63// IsMigrationFinalized reports whether migration batches are complete.
 64func IsMigrationFinalized() bool {
 65	return migrationFinalized
 66}
 67
 68// GetMigrationPhase reports the current migration phase.
 69func GetMigrationPhase() int {
 70	return migrationPhase
 71}
 72
 73// GetMigrationOffset reports the current migration offset within the phase.
 74func GetMigrationOffset() int {
 75	return migrationOffset
 76}
 77
 78// IsGRC721MigrationInitialized reports whether the NFT store pointer is attached.
 79func IsGRC721MigrationInitialized() bool {
 80	return migrationGRC721Initialized
 81}
 82
 83func resetMigrationState() {
 84	migrationInitialized = false
 85	migrationFinalized = false
 86	migrationGRC721Initialized = false
 87	migrationPhase = migrationPhaseWorlds
 88	migrationOffset = 0
 89}
 90
 91func resetMigrationDestination(cur realm, config oldchunk.MigrationConfig) {
 92	listLimit = config.ListLimit
 93	batchLimit = config.BatchLimit
 94	frozen = config.Frozen
 95
 96	worldStore = oldchunk.GetMigrationWorldStore(cross(cur))
 97	nftStore = oldchunk.GetMigrationNFTStore(cross(cur))
 98	verifierStore = oldchunk.GetMigrationVerifierStore(cross(cur))
 99	migrationGRC721Initialized = true
100
101	chunkAuthzRBAC = oldchunk.GetMigrationChunkAuthzRBAC(cross(cur))
102	worldAuthzRBAC = oldchunk.GetMigrationWorldAuthzRBAC(cross(cur))
103}