mirror of
https://github.com/alexgo-io/gaze-indexer.git
synced 2026-01-12 22:43:22 +08:00
fix: add different genesis runes config for each network (#54)
* fix: add different genesis runes config for each network * fix: use slogx.Stringer * refactor: remove unused value
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user