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}