mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-04-06 09:57:29 +00:00
In this PR, we add support for protocol version eth/70, defined by EIP-7975. Overall changes: - Each response is buffered in the peer’s receipt buffer when the `lastBlockIncomplete` field is true. - Continued request uses the same request id of its original request(`RequestPartialReceipts`). - Partial responses are verified in `validateLastBlockReceipt`. - Even if all receipts for partial blocks of the request are collected, those partial results are not sinked to the downloader, to avoid complexity. This assumes that partial response and buffering occur only in exceptional cases. --------- Co-authored-by: Gary Rong <garyrong0905@gmail.com> Co-authored-by: Felix Lange <fjl@twurst.com>
82 lines
1.6 KiB
Text
82 lines
1.6 KiB
Text
package test
|
|
|
|
import "github.com/ethereum/go-ethereum/common"
|
|
import "github.com/ethereum/go-ethereum/eth"
|
|
import "github.com/ethereum/go-ethereum/rlp"
|
|
import "io"
|
|
import eth1 "github.com/ethereum/go-ethereum/eth/protocols/eth"
|
|
|
|
func (obj *Test) EncodeRLP(_w io.Writer) error {
|
|
w := rlp.NewEncoderBuffer(_w)
|
|
_tmp0 := w.List()
|
|
_tmp1 := w.List()
|
|
w.ListEnd(_tmp1)
|
|
_tmp2 := w.List()
|
|
w.WriteUint64(obj.B.RequestId)
|
|
_tmp3 := w.List()
|
|
for _, _tmp4 := range obj.B.GetReceiptsRequest {
|
|
w.WriteBytes(_tmp4[:])
|
|
}
|
|
w.ListEnd(_tmp3)
|
|
w.ListEnd(_tmp2)
|
|
w.ListEnd(_tmp0)
|
|
return w.Flush()
|
|
}
|
|
|
|
func (obj *Test) DecodeRLP(dec *rlp.Stream) error {
|
|
var _tmp0 Test
|
|
{
|
|
if _, err := dec.List(); err != nil {
|
|
return err
|
|
}
|
|
// A:
|
|
var _tmp1 eth.MinerAPI
|
|
{
|
|
if _, err := dec.List(); err != nil {
|
|
return err
|
|
}
|
|
if err := dec.ListEnd(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
_tmp0.A = _tmp1
|
|
// B:
|
|
var _tmp2 eth1.GetReceiptsPacket69
|
|
{
|
|
if _, err := dec.List(); err != nil {
|
|
return err
|
|
}
|
|
// RequestId:
|
|
_tmp3, err := dec.Uint64()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_tmp2.RequestId = _tmp3
|
|
// GetReceiptsRequest:
|
|
var _tmp4 []common.Hash
|
|
if _, err := dec.List(); err != nil {
|
|
return err
|
|
}
|
|
for dec.MoreDataInList() {
|
|
var _tmp5 common.Hash
|
|
if err := dec.ReadBytes(_tmp5[:]); err != nil {
|
|
return err
|
|
}
|
|
_tmp4 = append(_tmp4, _tmp5)
|
|
}
|
|
if err := dec.ListEnd(); err != nil {
|
|
return err
|
|
}
|
|
_tmp2.GetReceiptsRequest = _tmp4
|
|
if err := dec.ListEnd(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
_tmp0.B = _tmp2
|
|
if err := dec.ListEnd(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
*obj = _tmp0
|
|
return nil
|
|
}
|