migration_research_migration.gno
2.51 Kb · 91 lines
1package block
2
3import (
4 "gno.land/p/g1nqnrt3aldzhu6zzeg75yw97wvavqy7wr77g56q/deploy-test/v0/v0/accesscontrol"
5 oldblock "gno.land/r/g1nqnrt3aldzhu6zzeg75yw97wvavqy7wr77g56q/deploy-test/v0/v0/block"
6 "gno.land/r/g1nqnrt3aldzhu6zzeg75yw97wvavqy7wr77g56q/deploy-test/v1/admin"
7)
8
9const (
10 migrationPhaseBlocks = iota
11 migrationPhaseSupply
12 migrationPhaseUserInventory
13 migrationPhaseMintAllowlist
14 migrationPhasePersonalInstalled
15 migrationPhaseSystemInstalled
16 migrationPhaseUseLogs
17 migrationPhaseUserLogIndex
18 migrationPhaseFinalized
19)
20
21var (
22 migrationInitialized bool
23 migrationFinalized 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 := oldblock.GetMigrationConfig()
36 resetMigrationDestination(cur, config)
37
38 migrationInitialized = true
39 migrationFinalized = true
40 migrationPhase = migrationPhaseFinalized
41 migrationOffset = config.BlockCount
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// IsGRC1155MigrationInitialized reports whether the token store pointer is attached.
79func IsGRC1155MigrationInitialized() bool {
80 return mintedBlockStore != nil && mintedBlockStore.Token() != nil
81}
82
83func resetMigrationDestination(cur realm, config oldblock.MigrationConfig) {
84 creatorBPS = config.CreatorBPS
85 listLimit = config.ListLimit
86 frozen = config.Frozen
87
88 blockStore = oldblock.GetMigrationBlockStore(cross(cur))
89 installedBlockStore = oldblock.GetMigrationInstalledBlockStore(cross(cur))
90 mintedBlockStore = oldblock.GetMigrationMintedBlockStore(cross(cur))
91}