Search Apps Documentation Source Content File Folder Download Copy Actions Download

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}