mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-16 17:03:46 +00:00
feat: add gossip rpc and do some refactor
1. add gossip rpc method 2. use uint256.Ummarshal method to unmarshal uint256 bytes
This commit is contained in:
parent
5e657f8423
commit
bcb5d28724
7 changed files with 34 additions and 49 deletions
|
|
@ -483,8 +483,17 @@ func (p *PortalAPI) HistoryStore(contentKeyHex string, contextHex string) (bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
func (p *PortalAPI) HistoryGossip() {
|
func (p *PortalAPI) HistoryGossip(contentKeyHex, contentHex string) (int, error) {
|
||||||
|
contentKey, err := hexutil.Decode(contentKeyHex)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
content, err := hexutil.Decode(contentHex)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
id := p.portalProtocol.Self().ID()
|
||||||
|
return p.portalProtocol.NeighborhoodGossip(&id, [][]byte{contentKey}, [][]byte{content})
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
|
|
|
||||||
|
|
@ -271,7 +271,7 @@ func (p *PortalProtocol) RoutingTableInfo() [][]string {
|
||||||
}
|
}
|
||||||
nodes = append(nodes, bucketNodes)
|
nodes = append(nodes, bucketNodes)
|
||||||
}
|
}
|
||||||
p.log.Trace("rouingTableInfo nodes:", nodes)
|
p.log.Trace("rouingTableInfo res:", "nodes", nodes)
|
||||||
return nodes
|
return nodes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ import (
|
||||||
ssz "github.com/ferranbt/fastssz"
|
ssz "github.com/ferranbt/fastssz"
|
||||||
"github.com/holiman/uint256"
|
"github.com/holiman/uint256"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
var maxUint256 = uint256.MustFromHex("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")
|
var maxUint256 = uint256.MustFromHex("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")
|
||||||
|
|
@ -18,8 +19,8 @@ var maxUint256 = uint256.MustFromHex("0xffffffffffffffffffffffffffffffffffffffff
|
||||||
// we remove the message type here
|
// we remove the message type here
|
||||||
func TestPingMessage(t *testing.T) {
|
func TestPingMessage(t *testing.T) {
|
||||||
dataRadius := maxUint256.Sub(maxUint256, uint256.NewInt(1))
|
dataRadius := maxUint256.Sub(maxUint256, uint256.NewInt(1))
|
||||||
|
reverseBytes, err := dataRadius.MarshalSSZ()
|
||||||
reverseBytes := ReverseBytes(dataRadius.Bytes())
|
require.NoError(t, err)
|
||||||
customData := &PingPongCustomData{
|
customData := &PingPongCustomData{
|
||||||
Radius: reverseBytes,
|
Radius: reverseBytes,
|
||||||
}
|
}
|
||||||
|
|
@ -39,7 +40,8 @@ func TestPingMessage(t *testing.T) {
|
||||||
|
|
||||||
func TestPongMessage(t *testing.T) {
|
func TestPongMessage(t *testing.T) {
|
||||||
dataRadius := maxUint256.Div(maxUint256, uint256.NewInt(2))
|
dataRadius := maxUint256.Div(maxUint256, uint256.NewInt(2))
|
||||||
reverseBytes := ReverseBytes(dataRadius.Bytes())
|
reverseBytes, err := dataRadius.MarshalSSZ()
|
||||||
|
require.NoError(t, err)
|
||||||
customData := &PingPongCustomData{
|
customData := &PingPongCustomData{
|
||||||
Radius: reverseBytes,
|
Radius: reverseBytes,
|
||||||
}
|
}
|
||||||
|
|
@ -177,12 +179,3 @@ func TestOfferAndAcceptMessage(t *testing.T) {
|
||||||
// assert.NoError(t, err)
|
// assert.NoError(t, err)
|
||||||
// assert.Equal(t, expected, fmt.Sprintf("0x%x", data))
|
// assert.Equal(t, expected, fmt.Sprintf("0x%x", data))
|
||||||
}
|
}
|
||||||
|
|
||||||
func ReverseBytes(src []byte) []byte {
|
|
||||||
lenth := len(src)
|
|
||||||
dst := make([]byte, lenth)
|
|
||||||
for i := 0; i < len(src); i++ {
|
|
||||||
dst[lenth-1-i] = src[i]
|
|
||||||
}
|
|
||||||
return dst
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ import (
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||||
"github.com/ethereum/go-ethereum/core/types"
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
"github.com/ethereum/go-ethereum/portalnetwork/utils"
|
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
ssz "github.com/ferranbt/fastssz"
|
ssz "github.com/ferranbt/fastssz"
|
||||||
"github.com/holiman/uint256"
|
"github.com/holiman/uint256"
|
||||||
|
|
@ -48,13 +47,14 @@ func (e *epoch) add(header types.Header) error {
|
||||||
blockHash := header.Hash().Bytes()
|
blockHash := header.Hash().Bytes()
|
||||||
difficulty := uint256.MustFromBig(header.Difficulty)
|
difficulty := uint256.MustFromBig(header.Difficulty)
|
||||||
e.difficulty = uint256.NewInt(0).Add(e.difficulty, difficulty)
|
e.difficulty = uint256.NewInt(0).Add(e.difficulty, difficulty)
|
||||||
// big-endian
|
|
||||||
difficultyBytes := e.difficulty.Bytes32()
|
|
||||||
utils.ReverseBytesInPlace(difficultyBytes[:])
|
|
||||||
|
|
||||||
|
difficultyBytes, err := e.difficulty.MarshalSSZ()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
record := HeaderRecord{
|
record := HeaderRecord{
|
||||||
BlockHash: blockHash,
|
BlockHash: blockHash,
|
||||||
TotalDifficulty: difficultyBytes[:],
|
TotalDifficulty: difficultyBytes,
|
||||||
}
|
}
|
||||||
sszBytes, err := record.MarshalSSZ()
|
sszBytes, err := record.MarshalSSZ()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -4,17 +4,16 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"math/big"
|
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||||
"github.com/ethereum/go-ethereum/core/types"
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
"github.com/ethereum/go-ethereum/portalnetwork/utils"
|
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
"github.com/holiman/uint256"
|
"github.com/holiman/uint256"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestVerifyHeaderWithProofs(t *testing.T) {
|
func TestVerifyHeaderWithProofs(t *testing.T) {
|
||||||
|
|
@ -68,8 +67,10 @@ func TestUpdate(t *testing.T) {
|
||||||
copy(tmp, epochAcc.HeaderRecords[i])
|
copy(tmp, epochAcc.HeaderRecords[i])
|
||||||
newEpochAcc.currentEpoch.records = append(newEpochAcc.currentEpoch.records, tmp)
|
newEpochAcc.currentEpoch.records = append(newEpochAcc.currentEpoch.records, tmp)
|
||||||
}
|
}
|
||||||
|
startDifficulty := uint256.NewInt(0)
|
||||||
|
err = startDifficulty.UnmarshalSSZ(epochAcc.HeaderRecords[epochRecordIndex][32:])
|
||||||
|
|
||||||
startDifficulty := bytesToUint256(epochAcc.HeaderRecords[epochRecordIndex][32:])
|
require.NoError(t, err)
|
||||||
|
|
||||||
newEpochAcc.currentEpoch.difficulty = startDifficulty
|
newEpochAcc.currentEpoch.difficulty = startDifficulty
|
||||||
|
|
||||||
|
|
@ -144,8 +145,3 @@ func getHeader(number uint64) (*types.Header, error) {
|
||||||
err = rlp.Decode(reader, head)
|
err = rlp.Decode(reader, head)
|
||||||
return head, err
|
return head, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func bytesToUint256(input []byte) *uint256.Int {
|
|
||||||
res := utils.ReverseBytes(input)
|
|
||||||
return uint256.MustFromBig(big.NewInt(0).SetBytes(res))
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/log"
|
"github.com/ethereum/go-ethereum/log"
|
||||||
"github.com/ethereum/go-ethereum/p2p/enode"
|
"github.com/ethereum/go-ethereum/p2p/enode"
|
||||||
"github.com/ethereum/go-ethereum/portalnetwork/storage"
|
"github.com/ethereum/go-ethereum/portalnetwork/storage"
|
||||||
"github.com/ethereum/go-ethereum/portalnetwork/utils"
|
|
||||||
"github.com/holiman/uint256"
|
"github.com/holiman/uint256"
|
||||||
sqlite3 "github.com/mattn/go-sqlite3"
|
sqlite3 "github.com/mattn/go-sqlite3"
|
||||||
)
|
)
|
||||||
|
|
@ -312,11 +311,15 @@ func (p *ContentStorage) GetLargestDistance() (*uint256.Int, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
res := uint256.NewInt(0)
|
||||||
|
err = res.UnmarshalSSZ(distance)
|
||||||
|
|
||||||
|
return res, err
|
||||||
// reverse the distance, because big.SetBytes is big-endian
|
// reverse the distance, because big.SetBytes is big-endian
|
||||||
utils.ReverseBytesInPlace(distance)
|
// utils.ReverseBytesInPlace(distance)
|
||||||
bigNum := new(big.Int).SetBytes(distance)
|
// bigNum := new(big.Int).SetBytes(distance)
|
||||||
res := uint256.MustFromBig(bigNum)
|
// res := uint256.MustFromBig(bigNum)
|
||||||
return res, nil
|
// return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// EstimateNewRadius calculates an estimated new radius based on the current radius, used size, and storage capacity.
|
// EstimateNewRadius calculates an estimated new radius based on the current radius, used size, and storage capacity.
|
||||||
|
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
package utils
|
|
||||||
|
|
||||||
func ReverseBytesInPlace(src []byte) {
|
|
||||||
for i := 0; i < len(src)/2; i++ {
|
|
||||||
src[i], src[len(src)-i-1] = src[len(src)-i-1], src[i]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func ReverseBytes(src []byte) []byte {
|
|
||||||
lenth := len(src)
|
|
||||||
dst := make([]byte, lenth)
|
|
||||||
for i := 0; i < len(src); i++ {
|
|
||||||
dst[lenth-1-i] = src[i]
|
|
||||||
}
|
|
||||||
return dst
|
|
||||||
}
|
|
||||||
Loading…
Reference in a new issue