mirror of
https://github.com/alexgo-io/gaze-indexer.git
synced 2026-01-12 08:34:28 +08:00
* feat: recover nodesale module. * fix: refactored. * fix: fix table type. * fix: add entity * fix: bug UTC time. * ci: try to tidy before testing * ci: touch result file * ci: use echo to create new file * fix: try to skip test in ci * fix: remove os.Exit * fix: handle error * feat: add todo note * fix: Cannot run nodesale test because qtx is not initiated. * fix: 50% chance public key compare incorrectly. * fix: more consistent SQL * fix: sanity refactor. * fix: remove unused code. * fix: move last_block_default to config file. * fix: minor mistakes. * fix: * fix: refactor * fix: refactor * fix: delegate tx hash not record into db. * refactor: prepare for moving integration tests. * refactor: convert to unit tests. * fix: change to using input values since output values deducted fee. * feat: add extra unit test. * fix: wrong timestamp format. * fix: handle block timeout = 0 --------- Co-authored-by: Gaze <gazenw@users.noreply.github.com>
62 lines
1.9 KiB
Go
62 lines
1.9 KiB
Go
package nodesale
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/cockroachdb/errors"
|
|
"github.com/gaze-network/indexer-network/core/types"
|
|
"github.com/gaze-network/indexer-network/modules/nodesale/datagateway"
|
|
"github.com/gaze-network/indexer-network/modules/nodesale/internal/entity"
|
|
delegatevalidator "github.com/gaze-network/indexer-network/modules/nodesale/internal/validator/delegate"
|
|
)
|
|
|
|
func (p *Processor) ProcessDelegate(ctx context.Context, qtx datagateway.NodeSaleDataGatewayWithTx, block *types.Block, event NodeSaleEvent) error {
|
|
validator := delegatevalidator.New()
|
|
delegate := event.EventMessage.Delegate
|
|
|
|
_, nodes, err := validator.NodesExist(ctx, qtx, delegate.DeployID, delegate.NodeIDs)
|
|
if err != nil {
|
|
return errors.Wrap(err, "Cannot query")
|
|
}
|
|
|
|
for _, node := range nodes {
|
|
valid := validator.EqualXonlyPublicKey(node.OwnerPublicKey, event.TxPubkey)
|
|
if !valid {
|
|
break
|
|
}
|
|
}
|
|
|
|
err = qtx.CreateEvent(ctx, entity.NodeSaleEvent{
|
|
TxHash: event.Transaction.TxHash.String(),
|
|
TxIndex: int32(event.Transaction.Index),
|
|
Action: int32(event.EventMessage.Action),
|
|
RawMessage: event.RawData,
|
|
ParsedMessage: event.EventJson,
|
|
BlockTimestamp: block.Header.Timestamp,
|
|
BlockHash: event.Transaction.BlockHash.String(),
|
|
BlockHeight: event.Transaction.BlockHeight,
|
|
Valid: validator.Valid,
|
|
WalletAddress: p.PubkeyToPkHashAddress(event.TxPubkey).EncodeAddress(),
|
|
Metadata: nil,
|
|
Reason: validator.Reason,
|
|
})
|
|
if err != nil {
|
|
return errors.Wrap(err, "Failed to insert event")
|
|
}
|
|
|
|
if validator.Valid {
|
|
_, err = qtx.SetDelegates(ctx, datagateway.SetDelegatesParams{
|
|
SaleBlock: delegate.DeployID.Block,
|
|
SaleTxIndex: int32(delegate.DeployID.TxIndex),
|
|
Delegatee: delegate.DelegateePublicKey,
|
|
DelegateTxHash: event.Transaction.TxHash.String(),
|
|
NodeIds: delegate.NodeIDs,
|
|
})
|
|
if err != nil {
|
|
return errors.Wrap(err, "Failed to set delegate")
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|