diff --git a/modules/runes/constants/constants.go b/modules/runes/constants/constants.go index 75b60a0..90233f3 100644 --- a/modules/runes/constants/constants.go +++ b/modules/runes/constants/constants.go @@ -2,12 +2,16 @@ package constants import ( "fmt" + "time" "github.com/Cleverse/go-utilities/utils" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/gaze-network/indexer-network/common" "github.com/gaze-network/indexer-network/core/types" + "github.com/gaze-network/indexer-network/modules/runes/runes" "github.com/gaze-network/indexer-network/pkg/logger" + "github.com/gaze-network/uint128" + "github.com/samber/lo" ) const ( @@ -35,6 +39,80 @@ var StartingBlockHeader = map[common.Network]types.BlockHeader{ }, } +type GenesisRuneConfig struct { + RuneId runes.RuneId + Name string + Number uint64 + Divisibility uint8 + Premine uint128.Uint128 + SpacedRune runes.SpacedRune + Symbol rune + Terms *runes.Terms + Turbo bool + EtchingTxHash chainhash.Hash + EtchedAt time.Time +} + +var GenesisRuneConfigMap = map[common.Network]GenesisRuneConfig{ + common.NetworkMainnet: { + RuneId: runes.RuneId{BlockHeight: 1, TxIndex: 0}, + Number: 0, + Divisibility: 0, + Premine: uint128.Zero, + SpacedRune: runes.NewSpacedRune(runes.NewRune(2055900680524219742), 0b10000000), + Symbol: '\u29c9', + Terms: &runes.Terms{ + Amount: lo.ToPtr(uint128.From64(1)), + Cap: &uint128.Max, + HeightStart: lo.ToPtr(uint64(840000)), + HeightEnd: lo.ToPtr(uint64(1050000)), + OffsetStart: nil, + OffsetEnd: nil, + }, + Turbo: true, + EtchingTxHash: chainhash.Hash{}, + EtchedAt: time.Time{}, + }, + common.NetworkFractalMainnet: { + RuneId: runes.RuneId{BlockHeight: 1, TxIndex: 0}, + Number: 0, + Divisibility: 0, + Premine: uint128.Zero, + SpacedRune: runes.NewSpacedRune(runes.NewRune(2055900680524219742), 0b10000000), + Symbol: '\u29c9', + Terms: &runes.Terms{ + Amount: lo.ToPtr(uint128.From64(1)), + Cap: &uint128.Max, + HeightStart: lo.ToPtr(uint64(84000)), + HeightEnd: lo.ToPtr(uint64(2184000)), + OffsetStart: nil, + OffsetEnd: nil, + }, + Turbo: true, + EtchingTxHash: chainhash.Hash{}, + EtchedAt: time.Time{}, + }, + common.NetworkFractalTestnet: { + RuneId: runes.RuneId{BlockHeight: 1, TxIndex: 0}, + Number: 0, + Divisibility: 0, + Premine: uint128.Zero, + SpacedRune: runes.NewSpacedRune(runes.NewRune(2055900680524219742), 0b10000000), + Symbol: '\u29c9', + Terms: &runes.Terms{ + Amount: lo.ToPtr(uint128.From64(1)), + Cap: &uint128.Max, + HeightStart: lo.ToPtr(uint64(84000)), + HeightEnd: lo.ToPtr(uint64(2184000)), + OffsetStart: nil, + OffsetEnd: nil, + }, + Turbo: true, + EtchingTxHash: chainhash.Hash{}, + EtchedAt: time.Time{}, + }, +} + func NetworkHasGenesisRune(network common.Network) bool { switch network { case common.NetworkMainnet, common.NetworkFractalMainnet, common.NetworkFractalTestnet: diff --git a/modules/runes/processor.go b/modules/runes/processor.go index c28eb40..3c80c72 100644 --- a/modules/runes/processor.go +++ b/modules/runes/processor.go @@ -4,7 +4,6 @@ import ( "context" "time" - "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" "github.com/cockroachdb/errors" "github.com/gaze-network/indexer-network/common" @@ -20,7 +19,6 @@ import ( "github.com/gaze-network/indexer-network/pkg/logger/slogx" "github.com/gaze-network/indexer-network/pkg/reportingclient" "github.com/gaze-network/uint128" - "github.com/samber/lo" ) // Make sure to implement the Bitcoin Processor interface @@ -120,39 +118,34 @@ func (p *Processor) ensureValidState(ctx context.Context) error { return nil } -var genesisRuneId = runes.RuneId{BlockHeight: 1, TxIndex: 0} - func (p *Processor) ensureGenesisRune(ctx context.Context, network common.Network) error { - _, err := p.runesDg.GetRuneEntryByRuneId(ctx, genesisRuneId) + genesisRuneConfig, ok := constants.GenesisRuneConfigMap[network] + if !ok { + logger.Panic("genesis rune config not found", slogx.Stringer("network", network)) + } + _, err := p.runesDg.GetRuneEntryByRuneId(ctx, genesisRuneConfig.RuneId) if err != nil && !errors.Is(err, errs.NotFound) { return errors.Wrap(err, "failed to get genesis rune entry") } if errors.Is(err, errs.NotFound) { runeEntry := &runes.RuneEntry{ - RuneId: genesisRuneId, - Number: 0, - Divisibility: 0, - Premine: uint128.Zero, - SpacedRune: runes.NewSpacedRune(runes.NewRune(2055900680524219742), 0b10000000), - Symbol: '\u29c9', - Terms: &runes.Terms{ - Amount: lo.ToPtr(uint128.From64(1)), - Cap: &uint128.Max, - HeightStart: lo.ToPtr(network.HalvingInterval() * 4), - HeightEnd: lo.ToPtr(network.HalvingInterval() * 5), - OffsetStart: nil, - OffsetEnd: nil, - }, - Turbo: true, + RuneId: genesisRuneConfig.RuneId, + Number: genesisRuneConfig.Number, + Divisibility: genesisRuneConfig.Divisibility, + Premine: genesisRuneConfig.Premine, + SpacedRune: genesisRuneConfig.SpacedRune, + Symbol: genesisRuneConfig.Symbol, + Terms: genesisRuneConfig.Terms, + Turbo: genesisRuneConfig.Turbo, Mints: uint128.Zero, BurnedAmount: uint128.Zero, CompletedAt: time.Time{}, CompletedAtHeight: nil, - EtchingBlock: 1, - EtchingTxHash: chainhash.Hash{}, - EtchedAt: time.Time{}, + EtchingBlock: genesisRuneConfig.RuneId.BlockHeight, + EtchingTxHash: genesisRuneConfig.EtchingTxHash, + EtchedAt: genesisRuneConfig.EtchedAt, } - if err := p.runesDg.CreateRuneEntry(ctx, runeEntry, genesisRuneId.BlockHeight); err != nil { + if err := p.runesDg.CreateRuneEntry(ctx, runeEntry, genesisRuneConfig.RuneId.BlockHeight); err != nil { return errors.Wrap(err, "failed to create genesis rune entry") } }