feat: skip non-brc20 transfers

This commit is contained in:
Gaze
2024-06-09 17:00:01 +07:00
parent b45dfd066a
commit e4d41cc7a4
10 changed files with 31 additions and 23 deletions

View File

@@ -55,10 +55,10 @@ WITH "latest_deploy_id" AS (
SELECT "id" FROM "brc20_event_transfer_transfers" ORDER BY "id" DESC LIMIT 1
)
SELECT
(SELECT "id" FROM "latest_deploy_id") AS "event_deploy_id",
(SELECT "id" FROM "latest_mint_id") AS "event_mint_id",
(SELECT "id" FROM "latest_inscribe_transfer_id") AS "event_inscribe_transfer_id",
(SELECT "id" FROM "latest_transfer_transfer_id") AS "event_transfer_transfer_id";
COALESCE((SELECT "id" FROM "latest_deploy_id"), -1) AS "event_deploy_id",
COALESCE((SELECT "id" FROM "latest_mint_id"), -1) AS "event_mint_id",
COALESCE((SELECT "id" FROM "latest_inscribe_transfer_id"), -1) AS "event_inscribe_transfer_id",
COALESCE((SELECT "id" FROM "latest_transfer_transfer_id"), -1) AS "event_transfer_transfer_id";
-- name: GetBalancesBatchAtHeight :many
SELECT DISTINCT ON ("brc20_balances"."pkscript", "brc20_balances"."tick") "brc20_balances".* FROM "brc20_balances"

View File

@@ -33,7 +33,7 @@ type BRC20ReaderDataGateway interface {
GetBalancesBatchAtHeight(ctx context.Context, blockHeight uint64, queries []GetBalancesBatchAtHeightQuery) (map[string]map[string]*entity.Balance, error)
GetTickEntriesByTicks(ctx context.Context, ticks []string) (map[string]*entity.TickEntry, error)
GetEventInscribeTransfersByInscriptionIds(ctx context.Context, ids []ordinals.InscriptionId) (map[ordinals.InscriptionId]*entity.EventInscribeTransfer, error)
GetLatestEventId(ctx context.Context) (uint64, error)
GetLatestEventId(ctx context.Context) (int64, error)
}
type BRC20WriterDataGateway interface {

View File

@@ -9,7 +9,7 @@ import (
)
type EventDeploy struct {
Id uint64
Id int64
InscriptionId ordinals.InscriptionId
InscriptionNumber int64
Tick string

View File

@@ -9,7 +9,7 @@ import (
)
type EventInscribeTransfer struct {
Id uint64
Id int64
InscriptionId ordinals.InscriptionId
InscriptionNumber int64
Tick string

View File

@@ -9,7 +9,7 @@ import (
)
type EventMint struct {
Id uint64
Id int64
InscriptionId ordinals.InscriptionId
InscriptionNumber int64
Tick string

View File

@@ -9,7 +9,7 @@ import (
)
type EventTransferTransfer struct {
Id uint64
Id int64
InscriptionId ordinals.InscriptionId
InscriptionNumber int64
Tick string

View File

@@ -158,12 +158,12 @@ func (r *Repository) GetInscriptionParentsByIds(ctx context.Context, ids []ordin
return result, nil
}
func (r *Repository) GetLatestEventId(ctx context.Context) (uint64, error) {
func (r *Repository) GetLatestEventId(ctx context.Context) (int64, error) {
row, err := r.queries.GetLatestEventIds(ctx)
if err != nil {
return 0, errors.WithStack(err)
}
return uint64(max(row.EventDeployID, row.EventMintID, row.EventInscribeTransferID, row.EventTransferTransferID)), nil
return max(row.EventDeployID.(int64), row.EventMintID.(int64), row.EventInscribeTransferID.(int64), row.EventTransferTransferID.(int64)), nil
}
func (r *Repository) GetBalancesBatchAtHeight(ctx context.Context, blockHeight uint64, queries []datagateway.GetBalancesBatchAtHeightQuery) (map[string]map[string]*entity.Balance, error) {

View File

@@ -471,17 +471,17 @@ WITH "latest_deploy_id" AS (
SELECT "id" FROM "brc20_event_transfer_transfers" ORDER BY "id" DESC LIMIT 1
)
SELECT
(SELECT "id" FROM "latest_deploy_id") AS "event_deploy_id",
(SELECT "id" FROM "latest_mint_id") AS "event_mint_id",
(SELECT "id" FROM "latest_inscribe_transfer_id") AS "event_inscribe_transfer_id",
(SELECT "id" FROM "latest_transfer_transfer_id") AS "event_transfer_transfer_id"
COALESCE((SELECT "id" FROM "latest_deploy_id"), -1) AS "event_deploy_id",
COALESCE((SELECT "id" FROM "latest_mint_id"), -1) AS "event_mint_id",
COALESCE((SELECT "id" FROM "latest_inscribe_transfer_id"), -1) AS "event_inscribe_transfer_id",
COALESCE((SELECT "id" FROM "latest_transfer_transfer_id"), -1) AS "event_transfer_transfer_id"
`
type GetLatestEventIdsRow struct {
EventDeployID int64
EventMintID int64
EventInscribeTransferID int64
EventTransferTransferID int64
EventDeployID interface{}
EventMintID interface{}
EventInscribeTransferID interface{}
EventTransferTransferID interface{}
}
func (q *Queries) GetLatestEventIds(ctx context.Context) (GetLatestEventIdsRow, error) {

View File

@@ -353,7 +353,7 @@ func mapEventDeployModelToType(src gen.Brc20EventDeploy) (entity.EventDeploy, er
return entity.EventDeploy{}, errors.Wrap(err, "cannot parse satpoint")
}
return entity.EventDeploy{
Id: uint64(src.Id),
Id: src.Id,
InscriptionId: inscriptionId,
InscriptionNumber: src.InscriptionNumber,
Tick: src.Tick,
@@ -420,7 +420,7 @@ func mapEventMintModelToType(src gen.Brc20EventMint) (entity.EventMint, error) {
parentId = &parentIdValue
}
return entity.EventMint{
Id: uint64(src.Id),
Id: src.Id,
InscriptionId: inscriptionId,
InscriptionNumber: src.InscriptionNumber,
Tick: src.Tick,
@@ -479,7 +479,7 @@ func mapEventInscribeTransferModelToType(src gen.Brc20EventInscribeTransfer) (en
return entity.EventInscribeTransfer{}, errors.Wrap(err, "cannot parse satPoint")
}
return entity.EventInscribeTransfer{
Id: uint64(src.Id),
Id: src.Id,
InscriptionId: inscriptionId,
InscriptionNumber: src.InscriptionNumber,
Tick: src.Tick,
@@ -544,7 +544,7 @@ func mapEventTransferTransferModelToType(src gen.Brc20EventTransferTransfer) (en
return entity.EventTransferTransfer{}, errors.Wrap(err, "cannot parse toSatPoint")
}
return entity.EventTransferTransfer{
Id: uint64(src.Id),
Id: src.Id,
InscriptionId: inscriptionId,
InscriptionNumber: src.InscriptionNumber,
Tick: src.Tick,

View File

@@ -20,6 +20,10 @@ func (p *Processor) processBRC20States(ctx context.Context, transfers []*entity.
payloads := make([]*brc20.Payload, 0)
ticks := make(map[string]struct{})
for _, transfer := range transfers {
if transfer.Content == nil {
// skip empty content
continue
}
payload, err := brc20.ParsePayload(transfer)
if err != nil {
return errors.Wrap(err, "failed to parse payload")
@@ -27,6 +31,10 @@ func (p *Processor) processBRC20States(ctx context.Context, transfers []*entity.
payloads = append(payloads, payload)
ticks[payload.Tick] = struct{}{}
}
if len(payloads) == 0 {
// skip if no valid payloads
return nil
}
// TODO: concurrently fetch from db to optimize speed
tickEntries, err := p.brc20Dg.GetTickEntriesByTicks(ctx, lo.Keys(ticks))
if err != nil {