feat: add network support for fractal

This commit is contained in:
Gaze
2024-08-28 23:23:28 +07:00
parent fa810b0aed
commit 0131de6717
9 changed files with 43 additions and 42 deletions

View File

@@ -7,13 +7,13 @@ import (
"github.com/gaze-network/indexer-network/common/errs" "github.com/gaze-network/indexer-network/common/errs"
"github.com/gaze-network/indexer-network/core/constants" "github.com/gaze-network/indexer-network/core/constants"
"github.com/gaze-network/indexer-network/modules/nodesale" "github.com/gaze-network/indexer-network/modules/nodesale"
"github.com/gaze-network/indexer-network/modules/runes" runesconstants "github.com/gaze-network/indexer-network/modules/runes/constants"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
var versions = map[string]string{ var versions = map[string]string{
"": constants.Version, "": constants.Version,
"runes": runes.Version, "runes": runesconstants.Version,
"nodesale": nodesale.Version, "nodesale": nodesale.Version,
} }

View File

@@ -5,18 +5,24 @@ import "github.com/btcsuite/btcd/chaincfg"
type Network string type Network string
const ( const (
NetworkMainnet Network = "mainnet" NetworkMainnet Network = "mainnet"
NetworkTestnet Network = "testnet" NetworkTestnet Network = "testnet"
NetworkFractalMainnet Network = "fractal-mainnet"
NetworkFractalTestnet Network = "fractal-testnet"
) )
var supportedNetworks = map[Network]struct{}{ var supportedNetworks = map[Network]struct{}{
NetworkMainnet: {}, NetworkMainnet: {},
NetworkTestnet: {}, NetworkTestnet: {},
NetworkFractalMainnet: {},
NetworkFractalTestnet: {},
} }
var chainParams = map[Network]*chaincfg.Params{ var chainParams = map[Network]*chaincfg.Params{
NetworkMainnet: &chaincfg.MainNetParams, NetworkMainnet: &chaincfg.MainNetParams,
NetworkTestnet: &chaincfg.TestNet3Params, NetworkTestnet: &chaincfg.TestNet3Params,
NetworkFractalMainnet: &chaincfg.MainNetParams,
NetworkFractalTestnet: &chaincfg.MainNetParams,
} }
func (n Network) IsSupported() bool { func (n Network) IsSupported() bool {

View File

@@ -1,28 +1,12 @@
package httphandler package httphandler
import ( import (
"github.com/Cleverse/go-utilities/utils"
"github.com/btcsuite/btcd/chaincfg/chainhash"
"github.com/cockroachdb/errors" "github.com/cockroachdb/errors"
"github.com/gaze-network/indexer-network/common"
"github.com/gaze-network/indexer-network/common/errs" "github.com/gaze-network/indexer-network/common/errs"
"github.com/gaze-network/indexer-network/core/types" "github.com/gaze-network/indexer-network/modules/runes/constants"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
) )
var startingBlockHeader = map[common.Network]types.BlockHeader{
common.NetworkMainnet: {
Height: 839999,
Hash: *utils.Must(chainhash.NewHashFromStr("0000000000000000000172014ba58d66455762add0512355ad651207918494ab")),
PrevBlock: *utils.Must(chainhash.NewHashFromStr("00000000000000000001dcce6ce7c8a45872cafd1fb04732b447a14a91832591")),
},
common.NetworkTestnet: {
Height: 2583200,
Hash: *utils.Must(chainhash.NewHashFromStr("000000000006c5f0dfcd9e0e81f27f97a87aef82087ffe69cd3c390325bb6541")),
PrevBlock: *utils.Must(chainhash.NewHashFromStr("00000000000668f3bafac992f53424774515440cb47e1cb9e73af3f496139e28")),
},
}
type getCurrentBlockResult struct { type getCurrentBlockResult struct {
Hash string `json:"hash"` Hash string `json:"hash"`
Height int64 `json:"height"` Height int64 `json:"height"`
@@ -36,7 +20,7 @@ func (h *HttpHandler) GetCurrentBlock(ctx *fiber.Ctx) (err error) {
if !errors.Is(err, errs.NotFound) { if !errors.Is(err, errs.NotFound) {
return errors.Wrap(err, "error during GetLatestBlock") return errors.Wrap(err, "error during GetLatestBlock")
} }
blockHeader = startingBlockHeader[h.network] blockHeader = constants.StartingBlockHeader[h.network]
} }
resp := getCurrentBlockResponse{ resp := getCurrentBlockResponse{

View File

@@ -41,6 +41,10 @@ func resolvePkScript(network common.Network, wallet string) ([]byte, bool) {
return &chaincfg.MainNetParams return &chaincfg.MainNetParams
case common.NetworkTestnet: case common.NetworkTestnet:
return &chaincfg.TestNet3Params return &chaincfg.TestNet3Params
case common.NetworkFractalMainnet:
return &chaincfg.MainNetParams
case common.NetworkFractalTestnet:
return &chaincfg.MainNetParams
} }
panic("invalid network") panic("invalid network")
}() }()

View File

@@ -1,4 +1,4 @@
package runes package constants
import ( import (
"github.com/Cleverse/go-utilities/utils" "github.com/Cleverse/go-utilities/utils"
@@ -13,7 +13,7 @@ const (
EventHashVersion = 1 EventHashVersion = 1
) )
var startingBlockHeader = map[common.Network]types.BlockHeader{ var StartingBlockHeader = map[common.Network]types.BlockHeader{
common.NetworkMainnet: { common.NetworkMainnet: {
Height: 839999, Height: 839999,
Hash: *utils.Must(chainhash.NewHashFromStr("0000000000000000000172014ba58d66455762add0512355ad651207918494ab")), Hash: *utils.Must(chainhash.NewHashFromStr("0000000000000000000172014ba58d66455762add0512355ad651207918494ab")),

View File

@@ -11,6 +11,7 @@ import (
"github.com/btcsuite/btcd/wire" "github.com/btcsuite/btcd/wire"
"github.com/cockroachdb/errors" "github.com/cockroachdb/errors"
"github.com/gaze-network/indexer-network/core/types" "github.com/gaze-network/indexer-network/core/types"
"github.com/gaze-network/indexer-network/modules/runes/constants"
"github.com/gaze-network/indexer-network/modules/runes/internal/entity" "github.com/gaze-network/indexer-network/modules/runes/internal/entity"
"github.com/gaze-network/indexer-network/modules/runes/runes" "github.com/gaze-network/indexer-network/modules/runes/runes"
"github.com/gaze-network/uint128" "github.com/gaze-network/uint128"
@@ -28,7 +29,7 @@ func (p *Processor) calculateEventHash(header types.BlockHeader) (chainhash.Hash
func (p *Processor) getHashPayload(header types.BlockHeader) ([]byte, error) { func (p *Processor) getHashPayload(header types.BlockHeader) ([]byte, error) {
var sb strings.Builder var sb strings.Builder
sb.WriteString("payload:v" + strconv.Itoa(EventHashVersion) + ":") sb.WriteString("payload:v" + strconv.Itoa(constants.EventHashVersion) + ":")
sb.WriteString("blockHash:") sb.WriteString("blockHash:")
sb.Write(header.Hash[:]) sb.Write(header.Hash[:])

View File

@@ -11,6 +11,7 @@ import (
"github.com/gaze-network/indexer-network/common/errs" "github.com/gaze-network/indexer-network/common/errs"
"github.com/gaze-network/indexer-network/core/indexer" "github.com/gaze-network/indexer-network/core/indexer"
"github.com/gaze-network/indexer-network/core/types" "github.com/gaze-network/indexer-network/core/types"
"github.com/gaze-network/indexer-network/modules/runes/constants"
"github.com/gaze-network/indexer-network/modules/runes/datagateway" "github.com/gaze-network/indexer-network/modules/runes/datagateway"
"github.com/gaze-network/indexer-network/modules/runes/internal/entity" "github.com/gaze-network/indexer-network/modules/runes/internal/entity"
"github.com/gaze-network/indexer-network/modules/runes/runes" "github.com/gaze-network/indexer-network/modules/runes/runes"
@@ -89,17 +90,17 @@ func (p *Processor) ensureValidState(ctx context.Context) error {
// if not found, set indexer state // if not found, set indexer state
if errors.Is(err, errs.NotFound) { if errors.Is(err, errs.NotFound) {
if err := p.indexerInfoDg.SetIndexerState(ctx, entity.IndexerState{ if err := p.indexerInfoDg.SetIndexerState(ctx, entity.IndexerState{
DBVersion: DBVersion, DBVersion: constants.DBVersion,
EventHashVersion: EventHashVersion, EventHashVersion: constants.EventHashVersion,
}); err != nil { }); err != nil {
return errors.Wrap(err, "failed to set indexer state") return errors.Wrap(err, "failed to set indexer state")
} }
} else { } else {
if indexerState.DBVersion != DBVersion { if indexerState.DBVersion != constants.DBVersion {
return errors.Wrapf(errs.ConflictSetting, "db version mismatch: current version is %d. Please upgrade to version %d", indexerState.DBVersion, DBVersion) return errors.Wrapf(errs.ConflictSetting, "db version mismatch: current version is %d. Please upgrade to version %d", indexerState.DBVersion, constants.DBVersion)
} }
if indexerState.EventHashVersion != EventHashVersion { if indexerState.EventHashVersion != constants.EventHashVersion {
return errors.Wrapf(errs.ConflictSetting, "event version mismatch: current version is %d. Please reset rune's db first.", indexerState.EventHashVersion, EventHashVersion) return errors.Wrapf(errs.ConflictSetting, "event version mismatch: current version is %d. Please reset rune's db first.", indexerState.EventHashVersion, constants.EventHashVersion)
} }
} }
@@ -166,7 +167,7 @@ func (p *Processor) CurrentBlock(ctx context.Context) (types.BlockHeader, error)
blockHeader, err := p.runesDg.GetLatestBlock(ctx) blockHeader, err := p.runesDg.GetLatestBlock(ctx)
if err != nil { if err != nil {
if errors.Is(err, errs.NotFound) { if errors.Is(err, errs.NotFound) {
return startingBlockHeader[p.network], nil return constants.StartingBlockHeader[p.network], nil
} }
return types.BlockHeader{}, errors.Wrap(err, "failed to get latest block") return types.BlockHeader{}, errors.Wrap(err, "failed to get latest block")
} }

View File

@@ -13,6 +13,7 @@ import (
"github.com/cockroachdb/errors" "github.com/cockroachdb/errors"
"github.com/gaze-network/indexer-network/common/errs" "github.com/gaze-network/indexer-network/common/errs"
"github.com/gaze-network/indexer-network/core/types" "github.com/gaze-network/indexer-network/core/types"
"github.com/gaze-network/indexer-network/modules/runes/constants"
"github.com/gaze-network/indexer-network/modules/runes/datagateway" "github.com/gaze-network/indexer-network/modules/runes/datagateway"
"github.com/gaze-network/indexer-network/modules/runes/internal/entity" "github.com/gaze-network/indexer-network/modules/runes/internal/entity"
"github.com/gaze-network/indexer-network/modules/runes/runes" "github.com/gaze-network/indexer-network/modules/runes/runes"
@@ -687,10 +688,10 @@ func (p *Processor) flushBlock(ctx context.Context, blockHeader types.BlockHeade
return errors.Wrap(err, "failed to calculate event hash") return errors.Wrap(err, "failed to calculate event hash")
} }
prevIndexedBlock, err := runesDgTx.GetIndexedBlockByHeight(ctx, blockHeader.Height-1) prevIndexedBlock, err := runesDgTx.GetIndexedBlockByHeight(ctx, blockHeader.Height-1)
if err != nil && errors.Is(err, errs.NotFound) && blockHeader.Height-1 == startingBlockHeader[p.network].Height { if err != nil && errors.Is(err, errs.NotFound) && blockHeader.Height-1 == constants.StartingBlockHeader[p.network].Height {
prevIndexedBlock = &entity.IndexedBlock{ prevIndexedBlock = &entity.IndexedBlock{
Height: startingBlockHeader[p.network].Height, Height: constants.StartingBlockHeader[p.network].Height,
Hash: startingBlockHeader[p.network].Hash, Hash: constants.StartingBlockHeader[p.network].Hash,
EventHash: chainhash.Hash{}, EventHash: chainhash.Hash{},
CumulativeEventHash: chainhash.Hash{}, CumulativeEventHash: chainhash.Hash{},
} }
@@ -791,9 +792,9 @@ func (p *Processor) flushBlock(ctx context.Context, blockHeader types.BlockHeade
if p.reportingClient != nil { if p.reportingClient != nil {
if err := p.reportingClient.SubmitBlockReport(ctx, reportingclient.SubmitBlockReportPayload{ if err := p.reportingClient.SubmitBlockReport(ctx, reportingclient.SubmitBlockReportPayload{
Type: "runes", Type: "runes",
ClientVersion: Version, ClientVersion: constants.Version,
DBVersion: DBVersion, DBVersion: constants.DBVersion,
EventHashVersion: EventHashVersion, EventHashVersion: constants.EventHashVersion,
Network: p.network, Network: p.network,
BlockHeight: uint64(blockHeader.Height), BlockHeight: uint64(blockHeader.Height),
BlockHash: blockHeader.Hash, BlockHash: blockHeader.Hash,

View File

@@ -122,6 +122,10 @@ func FirstRuneHeight(network common.Network) uint64 {
return common.HalvingInterval * 4 return common.HalvingInterval * 4
case common.NetworkTestnet: case common.NetworkTestnet:
return common.HalvingInterval * 12 return common.HalvingInterval * 12
case common.NetworkFractalMainnet:
return 84000
case common.NetworkFractalTestnet:
return 84000
} }
panic("invalid network") panic("invalid network")
} }