Implement handling new transactions announced on network in SyncManager
This commit is contained in:
parent
025bb9a6d1
commit
8445baafdb
@ -8,6 +8,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
"github.com/Secured-Finance/dione/pubsub"
|
||||||
|
|
||||||
"github.com/Secured-Finance/dione/consensus/policy"
|
"github.com/Secured-Finance/dione/consensus/policy"
|
||||||
|
|
||||||
"github.com/wealdtech/go-merkletree/keccak256"
|
"github.com/wealdtech/go-merkletree/keccak256"
|
||||||
@ -28,7 +30,6 @@ import (
|
|||||||
|
|
||||||
type SyncManager interface {
|
type SyncManager interface {
|
||||||
Start()
|
Start()
|
||||||
|
|
||||||
Stop()
|
Stop()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,11 +42,12 @@ type syncManager struct {
|
|||||||
initialSyncCompleted bool
|
initialSyncCompleted bool
|
||||||
bootstrapPeer peer.ID
|
bootstrapPeer peer.ID
|
||||||
rpcClient *gorpc.Client
|
rpcClient *gorpc.Client
|
||||||
|
psb *pubsub.PubSubRouter
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewSyncManager(bp *pool.BlockPool, mp *pool.Mempool, p2pRPCClient *gorpc.Client, bootstrapPeer peer.ID) SyncManager {
|
func NewSyncManager(bp *pool.BlockPool, mp *pool.Mempool, p2pRPCClient *gorpc.Client, bootstrapPeer peer.ID, psb *pubsub.PubSubRouter) SyncManager {
|
||||||
ctx, cancelFunc := context.WithCancel(context.Background())
|
ctx, cancelFunc := context.WithCancel(context.Background())
|
||||||
return &syncManager{
|
sm := &syncManager{
|
||||||
blockpool: bp,
|
blockpool: bp,
|
||||||
mempool: mp,
|
mempool: mp,
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
@ -53,7 +55,12 @@ func NewSyncManager(bp *pool.BlockPool, mp *pool.Mempool, p2pRPCClient *gorpc.Cl
|
|||||||
initialSyncCompleted: false,
|
initialSyncCompleted: false,
|
||||||
bootstrapPeer: bootstrapPeer,
|
bootstrapPeer: bootstrapPeer,
|
||||||
rpcClient: p2pRPCClient,
|
rpcClient: p2pRPCClient,
|
||||||
|
psb: psb,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
psb.Hook(pubsub.NewTxMessageType, sm.onNewTransaction, types2.Transaction{})
|
||||||
|
|
||||||
|
return sm
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sm *syncManager) Start() {
|
func (sm *syncManager) Start() {
|
||||||
@ -179,6 +186,9 @@ func (sm *syncManager) doInitialMempoolSync() error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if getMempoolTxReply.Error != nil {
|
||||||
|
return getMempoolTxReply.Error
|
||||||
|
}
|
||||||
for _, v := range getMempoolTxReply.Transactions {
|
for _, v := range getMempoolTxReply.Transactions {
|
||||||
err := sm.mempool.StoreTx(&v)
|
err := sm.mempool.StoreTx(&v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -235,3 +245,21 @@ func (sm *syncManager) processReceivedBlock(block types2.Block) error {
|
|||||||
|
|
||||||
func (sm *syncManager) syncLoop() {
|
func (sm *syncManager) syncLoop() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (sm *syncManager) onNewTransaction(message *pubsub.GenericMessage) {
|
||||||
|
tx, ok := message.Payload.(types2.Transaction)
|
||||||
|
if !ok {
|
||||||
|
logrus.Warn("failed to convert payload to Transaction")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if !tx.ValidateHash() {
|
||||||
|
logrus.Warn("failed to validate tx hash, rejecting it")
|
||||||
|
return
|
||||||
|
} // TODO add more checks on tx
|
||||||
|
|
||||||
|
err := sm.mempool.StoreTx(&tx)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Warnf("failed to store incoming transaction in mempool: %s", err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user