mirror of
https://gitlab.com/pulsechaincom/erigon-pulse.git
synced 2025-01-19 00:54:12 +00:00
parse p2p pkg
This commit is contained in:
parent
b88f70de0e
commit
3f660970ce
@ -133,6 +133,9 @@ func ParseGetPooledTransactions65(payload []byte, pos int, hashbuf []byte) (hash
|
|||||||
}
|
}
|
||||||
return hashes, pos, nil
|
return hashes, pos, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// == Pooled transactions ==
|
||||||
|
|
||||||
func EncodePooledTransactions66(txsRlp [][]byte, requestId uint64, encodeBuf []byte) []byte {
|
func EncodePooledTransactions66(txsRlp [][]byte, requestId uint64, encodeBuf []byte) []byte {
|
||||||
pos := 0
|
pos := 0
|
||||||
txsRlpLen := 0
|
txsRlpLen := 0
|
||||||
@ -171,3 +174,53 @@ func EncodePooledTransactions65(txsRlp [][]byte, encodeBuf []byte) []byte {
|
|||||||
_ = pos
|
_ = pos
|
||||||
return encodeBuf
|
return encodeBuf
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ParsePooledTransactions65(payload []byte, pos int, ctx *TxParseContext, txSlots *TxSlots) (newPos int, err error) {
|
||||||
|
pos, _, err = rlp.List(payload, pos)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := range txSlots.txs {
|
||||||
|
if txSlots.txs[i] == nil {
|
||||||
|
txSlots.txs[i] = &TxSlot{}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for i := 0; pos != len(payload); i++ {
|
||||||
|
txSlots.Growth(i)
|
||||||
|
pos, err = ctx.ParseTransaction(payload, pos, txSlots.txs[i], txSlots.senders.At(i))
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return pos, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func ParsePooledTransactions66(payload []byte, pos int, ctx *TxParseContext, txSlots *TxSlots) (requestID uint64, newPos int, err error) {
|
||||||
|
pos, _, err = rlp.List(payload, pos)
|
||||||
|
if err != nil {
|
||||||
|
return requestID, 0, err
|
||||||
|
}
|
||||||
|
pos, requestID, err = rlp.U64(payload, pos)
|
||||||
|
if err != nil {
|
||||||
|
return requestID, 0, err
|
||||||
|
}
|
||||||
|
pos, _, err = rlp.List(payload, pos)
|
||||||
|
if err != nil {
|
||||||
|
return requestID, 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := range txSlots.txs {
|
||||||
|
if txSlots.txs[i] == nil {
|
||||||
|
txSlots.txs[i] = &TxSlot{}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for i := 0; pos != len(payload); i++ {
|
||||||
|
txSlots.Growth(i)
|
||||||
|
pos, err = ctx.ParseTransaction(payload, pos, txSlots.txs[i], txSlots.senders.At(i))
|
||||||
|
if err != nil {
|
||||||
|
return requestID, 0, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return requestID, pos, nil
|
||||||
|
}
|
||||||
|
@ -106,6 +106,17 @@ func (s TxSlots) Valid() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var addressesGrowth = make([]byte, 20)
|
||||||
|
|
||||||
|
func (s *TxSlots) Growth(targetSize int) {
|
||||||
|
for len(s.txs) < targetSize {
|
||||||
|
s.txs = append(s.txs, &TxSlot{})
|
||||||
|
}
|
||||||
|
for s.senders.Len() < targetSize {
|
||||||
|
s.senders = append(s.senders, addressesGrowth...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
LegacyTxType int = 0
|
LegacyTxType int = 0
|
||||||
AccessListTxType int = 1
|
AccessListTxType int = 1
|
||||||
|
@ -21,6 +21,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -89,3 +90,22 @@ func TestParseTransactionRLP(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTxSlotsGrowth(t *testing.T) {
|
||||||
|
assert := assert.New(t)
|
||||||
|
s := &TxSlots{}
|
||||||
|
s.Growth(11)
|
||||||
|
assert.Equal(11, len(s.txs))
|
||||||
|
assert.Equal(11, s.senders.Len())
|
||||||
|
s.Growth(23)
|
||||||
|
assert.Equal(23, len(s.txs))
|
||||||
|
assert.Equal(23, s.senders.Len())
|
||||||
|
|
||||||
|
s = &TxSlots{txs: make([]*TxSlot, 20), senders: make(Addresses, 20*20)}
|
||||||
|
s.Growth(20)
|
||||||
|
assert.Equal(20, len(s.txs))
|
||||||
|
assert.Equal(20, s.senders.Len())
|
||||||
|
s.Growth(23)
|
||||||
|
assert.Equal(23, len(s.txs))
|
||||||
|
assert.Equal(23, s.senders.Len())
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user