mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-24 13:46:43 +00:00
update rpc mapping
🎱
moving stuff around
fixed import
one more replace
one more
wasnt he last but close
last one
This commit is contained in:
parent
6a6cd10299
commit
135b401a06
15 changed files with 225 additions and 253 deletions
|
|
@ -22,7 +22,7 @@ import (
|
||||||
|
|
||||||
"github.com/codegangsta/cli"
|
"github.com/codegangsta/cli"
|
||||||
"github.com/expanse-project/go-expanse/cmd/utils"
|
"github.com/expanse-project/go-expanse/cmd/utils"
|
||||||
"github.com/expanse-project/go-expanse/eth"
|
"github.com/expanse-project/go-expanse/exp"
|
||||||
"github.com/expanse-project/go-expanse/ethdb"
|
"github.com/expanse-project/go-expanse/ethdb"
|
||||||
"github.com/expanse-project/go-expanse/tests"
|
"github.com/expanse-project/go-expanse/tests"
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -1,46 +0,0 @@
|
||||||
// Copyright 2015 The go-ethereum Authors
|
|
||||||
// This file is part of the go-ethereum library.
|
|
||||||
//
|
|
||||||
// The go-ethereum library is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
//
|
|
||||||
// The go-ethereum library is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU Lesser General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
|
||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
// Contains the metrics collected by the fetcher.
|
|
||||||
|
|
||||||
package fetcher
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/expanse-project/go-expanse/metrics"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
propAnnounceInMeter = metrics.NewMeter("eth/fetcher/prop/announces/in")
|
|
||||||
propAnnounceOutTimer = metrics.NewTimer("eth/fetcher/prop/announces/out")
|
|
||||||
propAnnounceDropMeter = metrics.NewMeter("eth/fetcher/prop/announces/drop")
|
|
||||||
propAnnounceDOSMeter = metrics.NewMeter("eth/fetcher/prop/announces/dos")
|
|
||||||
|
|
||||||
propBroadcastInMeter = metrics.NewMeter("eth/fetcher/prop/broadcasts/in")
|
|
||||||
propBroadcastOutTimer = metrics.NewTimer("eth/fetcher/prop/broadcasts/out")
|
|
||||||
propBroadcastDropMeter = metrics.NewMeter("eth/fetcher/prop/broadcasts/drop")
|
|
||||||
propBroadcastDOSMeter = metrics.NewMeter("eth/fetcher/prop/broadcasts/dos")
|
|
||||||
|
|
||||||
blockFetchMeter = metrics.NewMeter("eth/fetcher/fetch/blocks")
|
|
||||||
headerFetchMeter = metrics.NewMeter("eth/fetcher/fetch/headers")
|
|
||||||
bodyFetchMeter = metrics.NewMeter("eth/fetcher/fetch/bodies")
|
|
||||||
|
|
||||||
blockFilterInMeter = metrics.NewMeter("eth/fetcher/filter/blocks/in")
|
|
||||||
blockFilterOutMeter = metrics.NewMeter("eth/fetcher/filter/blocks/out")
|
|
||||||
headerFilterInMeter = metrics.NewMeter("eth/fetcher/filter/headers/in")
|
|
||||||
headerFilterOutMeter = metrics.NewMeter("eth/fetcher/filter/headers/out")
|
|
||||||
bodyFilterInMeter = metrics.NewMeter("eth/fetcher/filter/bodies/in")
|
|
||||||
bodyFilterOutMeter = metrics.NewMeter("eth/fetcher/filter/bodies/out")
|
|
||||||
)
|
|
||||||
157
eth/metrics.go
157
eth/metrics.go
|
|
@ -1,157 +0,0 @@
|
||||||
// Copyright 2015 The go-ethereum Authors
|
|
||||||
// This file is part of the go-ethereum library.
|
|
||||||
//
|
|
||||||
// The go-ethereum library is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
//
|
|
||||||
// The go-ethereum library is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU Lesser General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
|
||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
package eth
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/expanse-project/go-expanse/metrics"
|
|
||||||
"github.com/expanse-project/go-expanse/p2p"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
propTxnInPacketsMeter = metrics.NewMeter("eth/prop/txns/in/packets")
|
|
||||||
propTxnInTrafficMeter = metrics.NewMeter("eth/prop/txns/in/traffic")
|
|
||||||
propTxnOutPacketsMeter = metrics.NewMeter("eth/prop/txns/out/packets")
|
|
||||||
propTxnOutTrafficMeter = metrics.NewMeter("eth/prop/txns/out/traffic")
|
|
||||||
propHashInPacketsMeter = metrics.NewMeter("eth/prop/hashes/in/packets")
|
|
||||||
propHashInTrafficMeter = metrics.NewMeter("eth/prop/hashes/in/traffic")
|
|
||||||
propHashOutPacketsMeter = metrics.NewMeter("eth/prop/hashes/out/packets")
|
|
||||||
propHashOutTrafficMeter = metrics.NewMeter("eth/prop/hashes/out/traffic")
|
|
||||||
propBlockInPacketsMeter = metrics.NewMeter("eth/prop/blocks/in/packets")
|
|
||||||
propBlockInTrafficMeter = metrics.NewMeter("eth/prop/blocks/in/traffic")
|
|
||||||
propBlockOutPacketsMeter = metrics.NewMeter("eth/prop/blocks/out/packets")
|
|
||||||
propBlockOutTrafficMeter = metrics.NewMeter("eth/prop/blocks/out/traffic")
|
|
||||||
reqHashInPacketsMeter = metrics.NewMeter("eth/req/hashes/in/packets")
|
|
||||||
reqHashInTrafficMeter = metrics.NewMeter("eth/req/hashes/in/traffic")
|
|
||||||
reqHashOutPacketsMeter = metrics.NewMeter("eth/req/hashes/out/packets")
|
|
||||||
reqHashOutTrafficMeter = metrics.NewMeter("eth/req/hashes/out/traffic")
|
|
||||||
reqBlockInPacketsMeter = metrics.NewMeter("eth/req/blocks/in/packets")
|
|
||||||
reqBlockInTrafficMeter = metrics.NewMeter("eth/req/blocks/in/traffic")
|
|
||||||
reqBlockOutPacketsMeter = metrics.NewMeter("eth/req/blocks/out/packets")
|
|
||||||
reqBlockOutTrafficMeter = metrics.NewMeter("eth/req/blocks/out/traffic")
|
|
||||||
reqHeaderInPacketsMeter = metrics.NewMeter("eth/req/headers/in/packets")
|
|
||||||
reqHeaderInTrafficMeter = metrics.NewMeter("eth/req/headers/in/traffic")
|
|
||||||
reqHeaderOutPacketsMeter = metrics.NewMeter("eth/req/headers/out/packets")
|
|
||||||
reqHeaderOutTrafficMeter = metrics.NewMeter("eth/req/headers/out/traffic")
|
|
||||||
reqBodyInPacketsMeter = metrics.NewMeter("eth/req/bodies/in/packets")
|
|
||||||
reqBodyInTrafficMeter = metrics.NewMeter("eth/req/bodies/in/traffic")
|
|
||||||
reqBodyOutPacketsMeter = metrics.NewMeter("eth/req/bodies/out/packets")
|
|
||||||
reqBodyOutTrafficMeter = metrics.NewMeter("eth/req/bodies/out/traffic")
|
|
||||||
reqStateInPacketsMeter = metrics.NewMeter("eth/req/states/in/packets")
|
|
||||||
reqStateInTrafficMeter = metrics.NewMeter("eth/req/states/in/traffic")
|
|
||||||
reqStateOutPacketsMeter = metrics.NewMeter("eth/req/states/out/packets")
|
|
||||||
reqStateOutTrafficMeter = metrics.NewMeter("eth/req/states/out/traffic")
|
|
||||||
reqReceiptInPacketsMeter = metrics.NewMeter("eth/req/receipts/in/packets")
|
|
||||||
reqReceiptInTrafficMeter = metrics.NewMeter("eth/req/receipts/in/traffic")
|
|
||||||
reqReceiptOutPacketsMeter = metrics.NewMeter("eth/req/receipts/out/packets")
|
|
||||||
reqReceiptOutTrafficMeter = metrics.NewMeter("eth/req/receipts/out/traffic")
|
|
||||||
miscInPacketsMeter = metrics.NewMeter("eth/misc/in/packets")
|
|
||||||
miscInTrafficMeter = metrics.NewMeter("eth/misc/in/traffic")
|
|
||||||
miscOutPacketsMeter = metrics.NewMeter("eth/misc/out/packets")
|
|
||||||
miscOutTrafficMeter = metrics.NewMeter("eth/misc/out/traffic")
|
|
||||||
)
|
|
||||||
|
|
||||||
// meteredMsgReadWriter is a wrapper around a p2p.MsgReadWriter, capable of
|
|
||||||
// accumulating the above defined metrics based on the data stream contents.
|
|
||||||
type meteredMsgReadWriter struct {
|
|
||||||
p2p.MsgReadWriter // Wrapped message stream to meter
|
|
||||||
version int // Protocol version to select correct meters
|
|
||||||
}
|
|
||||||
|
|
||||||
// newMeteredMsgWriter wraps a p2p MsgReadWriter with metering support. If the
|
|
||||||
// metrics system is disabled, this fucntion returns the original object.
|
|
||||||
func newMeteredMsgWriter(rw p2p.MsgReadWriter) p2p.MsgReadWriter {
|
|
||||||
if !metrics.Enabled {
|
|
||||||
return rw
|
|
||||||
}
|
|
||||||
return &meteredMsgReadWriter{MsgReadWriter: rw}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Init sets the protocol version used by the stream to know which meters to
|
|
||||||
// increment in case of overlapping message ids between protocol versions.
|
|
||||||
func (rw *meteredMsgReadWriter) Init(version int) {
|
|
||||||
rw.version = version
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rw *meteredMsgReadWriter) ReadMsg() (p2p.Msg, error) {
|
|
||||||
// Read the message and short circuit in case of an error
|
|
||||||
msg, err := rw.MsgReadWriter.ReadMsg()
|
|
||||||
if err != nil {
|
|
||||||
return msg, err
|
|
||||||
}
|
|
||||||
// Account for the data traffic
|
|
||||||
packets, traffic := miscInPacketsMeter, miscInTrafficMeter
|
|
||||||
switch {
|
|
||||||
case rw.version < eth62 && msg.Code == BlockHashesMsg:
|
|
||||||
packets, traffic = reqHashInPacketsMeter, reqHashInTrafficMeter
|
|
||||||
case rw.version < eth62 && msg.Code == BlocksMsg:
|
|
||||||
packets, traffic = reqBlockInPacketsMeter, reqBlockInTrafficMeter
|
|
||||||
|
|
||||||
case rw.version >= eth62 && msg.Code == BlockHeadersMsg:
|
|
||||||
packets, traffic = reqBlockInPacketsMeter, reqBlockInTrafficMeter
|
|
||||||
case rw.version >= eth62 && msg.Code == BlockBodiesMsg:
|
|
||||||
packets, traffic = reqBodyInPacketsMeter, reqBodyInTrafficMeter
|
|
||||||
|
|
||||||
case rw.version >= eth63 && msg.Code == NodeDataMsg:
|
|
||||||
packets, traffic = reqStateInPacketsMeter, reqStateInTrafficMeter
|
|
||||||
case rw.version >= eth63 && msg.Code == ReceiptsMsg:
|
|
||||||
packets, traffic = reqReceiptInPacketsMeter, reqReceiptInTrafficMeter
|
|
||||||
|
|
||||||
case msg.Code == NewBlockHashesMsg:
|
|
||||||
packets, traffic = propHashInPacketsMeter, propHashInTrafficMeter
|
|
||||||
case msg.Code == NewBlockMsg:
|
|
||||||
packets, traffic = propBlockInPacketsMeter, propBlockInTrafficMeter
|
|
||||||
case msg.Code == TxMsg:
|
|
||||||
packets, traffic = propTxnInPacketsMeter, propTxnInTrafficMeter
|
|
||||||
}
|
|
||||||
packets.Mark(1)
|
|
||||||
traffic.Mark(int64(msg.Size))
|
|
||||||
|
|
||||||
return msg, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rw *meteredMsgReadWriter) WriteMsg(msg p2p.Msg) error {
|
|
||||||
// Account for the data traffic
|
|
||||||
packets, traffic := miscOutPacketsMeter, miscOutTrafficMeter
|
|
||||||
switch {
|
|
||||||
case rw.version < eth62 && msg.Code == BlockHashesMsg:
|
|
||||||
packets, traffic = reqHashOutPacketsMeter, reqHashOutTrafficMeter
|
|
||||||
case rw.version < eth62 && msg.Code == BlocksMsg:
|
|
||||||
packets, traffic = reqBlockOutPacketsMeter, reqBlockOutTrafficMeter
|
|
||||||
|
|
||||||
case rw.version >= eth62 && msg.Code == BlockHeadersMsg:
|
|
||||||
packets, traffic = reqHeaderOutPacketsMeter, reqHeaderOutTrafficMeter
|
|
||||||
case rw.version >= eth62 && msg.Code == BlockBodiesMsg:
|
|
||||||
packets, traffic = reqBodyOutPacketsMeter, reqBodyOutTrafficMeter
|
|
||||||
|
|
||||||
case rw.version >= eth63 && msg.Code == NodeDataMsg:
|
|
||||||
packets, traffic = reqStateOutPacketsMeter, reqStateOutTrafficMeter
|
|
||||||
case rw.version >= eth63 && msg.Code == ReceiptsMsg:
|
|
||||||
packets, traffic = reqReceiptOutPacketsMeter, reqReceiptOutTrafficMeter
|
|
||||||
|
|
||||||
case msg.Code == NewBlockHashesMsg:
|
|
||||||
packets, traffic = propHashOutPacketsMeter, propHashOutTrafficMeter
|
|
||||||
case msg.Code == NewBlockMsg:
|
|
||||||
packets, traffic = propBlockOutPacketsMeter, propBlockOutTrafficMeter
|
|
||||||
case msg.Code == TxMsg:
|
|
||||||
packets, traffic = propTxnOutPacketsMeter, propTxnOutTrafficMeter
|
|
||||||
}
|
|
||||||
packets.Mark(1)
|
|
||||||
traffic.Mark(int64(msg.Size))
|
|
||||||
|
|
||||||
// Send the packet to the p2p layer
|
|
||||||
return rw.MsgReadWriter.WriteMsg(msg)
|
|
||||||
}
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
// Copyright 2015 The go-expanse Authors
|
// Copyright 2015 The go-ethereum Authors
|
||||||
// This file is part of the go-expanse library.
|
// This file is part of the go-ethereum library.
|
||||||
//
|
//
|
||||||
// The go-expanse library is free software: you can redistribute it and/or modify
|
// The go-ethereum library is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU Lesser General Public License as published by
|
// it under the terms of the GNU Lesser General Public License as published by
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
// (at your option) any later version.
|
// (at your option) any later version.
|
||||||
//
|
//
|
||||||
// The go-expanse library is distributed in the hope that it will be useful,
|
// The go-ethereum library is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU Lesser General Public License for more details.
|
// GNU Lesser General Public License for more details.
|
||||||
//
|
//
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with the go-expanse library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
// Contains the metrics collected by the fetcher.
|
// Contains the metrics collected by the fetcher.
|
||||||
|
|
||||||
|
|
@ -23,10 +23,24 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
announceMeter = metrics.NewMeter("exp/sync/RemoteAnnounces")
|
propAnnounceInMeter = metrics.NewMeter("eth/fetcher/prop/announces/in")
|
||||||
announceTimer = metrics.NewTimer("exp/sync/LocalAnnounces")
|
propAnnounceOutTimer = metrics.NewTimer("eth/fetcher/prop/announces/out")
|
||||||
broadcastMeter = metrics.NewMeter("exp/sync/RemoteBroadcasts")
|
propAnnounceDropMeter = metrics.NewMeter("eth/fetcher/prop/announces/drop")
|
||||||
broadcastTimer = metrics.NewTimer("exp/sync/LocalBroadcasts")
|
propAnnounceDOSMeter = metrics.NewMeter("eth/fetcher/prop/announces/dos")
|
||||||
discardMeter = metrics.NewMeter("exp/sync/DiscardedBlocks")
|
|
||||||
futureMeter = metrics.NewMeter("exp/sync/FutureBlocks")
|
propBroadcastInMeter = metrics.NewMeter("eth/fetcher/prop/broadcasts/in")
|
||||||
|
propBroadcastOutTimer = metrics.NewTimer("eth/fetcher/prop/broadcasts/out")
|
||||||
|
propBroadcastDropMeter = metrics.NewMeter("eth/fetcher/prop/broadcasts/drop")
|
||||||
|
propBroadcastDOSMeter = metrics.NewMeter("eth/fetcher/prop/broadcasts/dos")
|
||||||
|
|
||||||
|
blockFetchMeter = metrics.NewMeter("eth/fetcher/fetch/blocks")
|
||||||
|
headerFetchMeter = metrics.NewMeter("eth/fetcher/fetch/headers")
|
||||||
|
bodyFetchMeter = metrics.NewMeter("eth/fetcher/fetch/bodies")
|
||||||
|
|
||||||
|
blockFilterInMeter = metrics.NewMeter("eth/fetcher/filter/blocks/in")
|
||||||
|
blockFilterOutMeter = metrics.NewMeter("eth/fetcher/filter/blocks/out")
|
||||||
|
headerFilterInMeter = metrics.NewMeter("eth/fetcher/filter/headers/in")
|
||||||
|
headerFilterOutMeter = metrics.NewMeter("eth/fetcher/filter/headers/out")
|
||||||
|
bodyFilterInMeter = metrics.NewMeter("eth/fetcher/filter/bodies/in")
|
||||||
|
bodyFilterOutMeter = metrics.NewMeter("eth/fetcher/filter/bodies/out")
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,8 @@ import (
|
||||||
"github.com/expanse-project/go-expanse/common"
|
"github.com/expanse-project/go-expanse/common"
|
||||||
"github.com/expanse-project/go-expanse/core"
|
"github.com/expanse-project/go-expanse/core"
|
||||||
"github.com/expanse-project/go-expanse/core/types"
|
"github.com/expanse-project/go-expanse/core/types"
|
||||||
"github.com/expanse-project/go-expanse/eth/downloader"
|
"github.com/expanse-project/go-expanse/exp/downloader"
|
||||||
"github.com/expanse-project/go-expanse/eth/fetcher"
|
"github.com/expanse-project/go-expanse/exp/fetcher"
|
||||||
"github.com/expanse-project/go-expanse/ethdb"
|
"github.com/expanse-project/go-expanse/ethdb"
|
||||||
"github.com/expanse-project/go-expanse/event"
|
"github.com/expanse-project/go-expanse/event"
|
||||||
"github.com/expanse-project/go-expanse/logger"
|
"github.com/expanse-project/go-expanse/logger"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package eth
|
package exp
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
@ -11,7 +11,7 @@ import (
|
||||||
"github.com/expanse-project/go-expanse/core/state"
|
"github.com/expanse-project/go-expanse/core/state"
|
||||||
"github.com/expanse-project/go-expanse/core/types"
|
"github.com/expanse-project/go-expanse/core/types"
|
||||||
"github.com/expanse-project/go-expanse/crypto"
|
"github.com/expanse-project/go-expanse/crypto"
|
||||||
"github.com/expanse-project/go-expanse/eth/downloader"
|
"github.com/expanse-project/go-expanse/exp/downloader"
|
||||||
"github.com/expanse-project/go-expanse/ethdb"
|
"github.com/expanse-project/go-expanse/ethdb"
|
||||||
"github.com/expanse-project/go-expanse/p2p"
|
"github.com/expanse-project/go-expanse/p2p"
|
||||||
"github.com/expanse-project/go-expanse/params"
|
"github.com/expanse-project/go-expanse/params"
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
// This file contains some shares testing functionality, common to multiple
|
// This file contains some shares testing functionality, common to multiple
|
||||||
// different files and modules being tested.
|
// different files and modules being tested.
|
||||||
|
|
||||||
package eth
|
package exp
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
163
exp/metrics.go
163
exp/metrics.go
|
|
@ -1,44 +1,157 @@
|
||||||
// Copyright 2015 The go-expanse Authors
|
// Copyright 2015 The go-ethereum Authors
|
||||||
// This file is part of the go-expanse library.
|
// This file is part of the go-ethereum library.
|
||||||
//
|
//
|
||||||
// The go-expanse library is free software: you can redistribute it and/or modify
|
// The go-ethereum library is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU Lesser General Public License as published by
|
// it under the terms of the GNU Lesser General Public License as published by
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
// (at your option) any later version.
|
// (at your option) any later version.
|
||||||
//
|
//
|
||||||
// The go-expanse library is distributed in the hope that it will be useful,
|
// The go-ethereum library is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU Lesser General Public License for more details.
|
// GNU Lesser General Public License for more details.
|
||||||
//
|
//
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with the go-expanse library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
package exp
|
package exp
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/expanse-project/go-expanse/metrics"
|
"github.com/expanse-project/go-expanse/metrics"
|
||||||
|
"github.com/expanse-project/go-expanse/p2p"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
propTxnInPacketsMeter = metrics.NewMeter("exp/prop/txns/in/packets")
|
propTxnInPacketsMeter = metrics.NewMeter("eth/prop/txns/in/packets")
|
||||||
propTxnInTrafficMeter = metrics.NewMeter("exp/prop/txns/in/traffic")
|
propTxnInTrafficMeter = metrics.NewMeter("eth/prop/txns/in/traffic")
|
||||||
propTxnOutPacketsMeter = metrics.NewMeter("exp/prop/txns/out/packets")
|
propTxnOutPacketsMeter = metrics.NewMeter("eth/prop/txns/out/packets")
|
||||||
propTxnOutTrafficMeter = metrics.NewMeter("exp/prop/txns/out/traffic")
|
propTxnOutTrafficMeter = metrics.NewMeter("eth/prop/txns/out/traffic")
|
||||||
propHashInPacketsMeter = metrics.NewMeter("exp/prop/hashes/in/packets")
|
propHashInPacketsMeter = metrics.NewMeter("eth/prop/hashes/in/packets")
|
||||||
propHashInTrafficMeter = metrics.NewMeter("exp/prop/hashes/in/traffic")
|
propHashInTrafficMeter = metrics.NewMeter("eth/prop/hashes/in/traffic")
|
||||||
propHashOutPacketsMeter = metrics.NewMeter("exp/prop/hashes/out/packets")
|
propHashOutPacketsMeter = metrics.NewMeter("eth/prop/hashes/out/packets")
|
||||||
propHashOutTrafficMeter = metrics.NewMeter("exp/prop/hashes/out/traffic")
|
propHashOutTrafficMeter = metrics.NewMeter("eth/prop/hashes/out/traffic")
|
||||||
propBlockInPacketsMeter = metrics.NewMeter("exp/prop/blocks/in/packets")
|
propBlockInPacketsMeter = metrics.NewMeter("eth/prop/blocks/in/packets")
|
||||||
propBlockInTrafficMeter = metrics.NewMeter("exp/prop/blocks/in/traffic")
|
propBlockInTrafficMeter = metrics.NewMeter("eth/prop/blocks/in/traffic")
|
||||||
propBlockOutPacketsMeter = metrics.NewMeter("exp/prop/blocks/out/packets")
|
propBlockOutPacketsMeter = metrics.NewMeter("eth/prop/blocks/out/packets")
|
||||||
propBlockOutTrafficMeter = metrics.NewMeter("exp/prop/blocks/out/traffic")
|
propBlockOutTrafficMeter = metrics.NewMeter("eth/prop/blocks/out/traffic")
|
||||||
reqHashInPacketsMeter = metrics.NewMeter("exp/req/hashes/in/packets")
|
reqHashInPacketsMeter = metrics.NewMeter("eth/req/hashes/in/packets")
|
||||||
reqHashInTrafficMeter = metrics.NewMeter("exp/req/hashes/in/traffic")
|
reqHashInTrafficMeter = metrics.NewMeter("eth/req/hashes/in/traffic")
|
||||||
reqHashOutPacketsMeter = metrics.NewMeter("exp/req/hashes/out/packets")
|
reqHashOutPacketsMeter = metrics.NewMeter("eth/req/hashes/out/packets")
|
||||||
reqHashOutTrafficMeter = metrics.NewMeter("exp/req/hashes/out/traffic")
|
reqHashOutTrafficMeter = metrics.NewMeter("eth/req/hashes/out/traffic")
|
||||||
reqBlockInPacketsMeter = metrics.NewMeter("exp/req/blocks/in/packets")
|
reqBlockInPacketsMeter = metrics.NewMeter("eth/req/blocks/in/packets")
|
||||||
reqBlockInTrafficMeter = metrics.NewMeter("exp/req/blocks/in/traffic")
|
reqBlockInTrafficMeter = metrics.NewMeter("eth/req/blocks/in/traffic")
|
||||||
reqBlockOutPacketsMeter = metrics.NewMeter("exp/req/blocks/out/packets")
|
reqBlockOutPacketsMeter = metrics.NewMeter("eth/req/blocks/out/packets")
|
||||||
reqBlockOutTrafficMeter = metrics.NewMeter("exp/req/blocks/out/traffic")
|
reqBlockOutTrafficMeter = metrics.NewMeter("eth/req/blocks/out/traffic")
|
||||||
|
reqHeaderInPacketsMeter = metrics.NewMeter("eth/req/headers/in/packets")
|
||||||
|
reqHeaderInTrafficMeter = metrics.NewMeter("eth/req/headers/in/traffic")
|
||||||
|
reqHeaderOutPacketsMeter = metrics.NewMeter("eth/req/headers/out/packets")
|
||||||
|
reqHeaderOutTrafficMeter = metrics.NewMeter("eth/req/headers/out/traffic")
|
||||||
|
reqBodyInPacketsMeter = metrics.NewMeter("eth/req/bodies/in/packets")
|
||||||
|
reqBodyInTrafficMeter = metrics.NewMeter("eth/req/bodies/in/traffic")
|
||||||
|
reqBodyOutPacketsMeter = metrics.NewMeter("eth/req/bodies/out/packets")
|
||||||
|
reqBodyOutTrafficMeter = metrics.NewMeter("eth/req/bodies/out/traffic")
|
||||||
|
reqStateInPacketsMeter = metrics.NewMeter("eth/req/states/in/packets")
|
||||||
|
reqStateInTrafficMeter = metrics.NewMeter("eth/req/states/in/traffic")
|
||||||
|
reqStateOutPacketsMeter = metrics.NewMeter("eth/req/states/out/packets")
|
||||||
|
reqStateOutTrafficMeter = metrics.NewMeter("eth/req/states/out/traffic")
|
||||||
|
reqReceiptInPacketsMeter = metrics.NewMeter("eth/req/receipts/in/packets")
|
||||||
|
reqReceiptInTrafficMeter = metrics.NewMeter("eth/req/receipts/in/traffic")
|
||||||
|
reqReceiptOutPacketsMeter = metrics.NewMeter("eth/req/receipts/out/packets")
|
||||||
|
reqReceiptOutTrafficMeter = metrics.NewMeter("eth/req/receipts/out/traffic")
|
||||||
|
miscInPacketsMeter = metrics.NewMeter("eth/misc/in/packets")
|
||||||
|
miscInTrafficMeter = metrics.NewMeter("eth/misc/in/traffic")
|
||||||
|
miscOutPacketsMeter = metrics.NewMeter("eth/misc/out/packets")
|
||||||
|
miscOutTrafficMeter = metrics.NewMeter("eth/misc/out/traffic")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// meteredMsgReadWriter is a wrapper around a p2p.MsgReadWriter, capable of
|
||||||
|
// accumulating the above defined metrics based on the data stream contents.
|
||||||
|
type meteredMsgReadWriter struct {
|
||||||
|
p2p.MsgReadWriter // Wrapped message stream to meter
|
||||||
|
version int // Protocol version to select correct meters
|
||||||
|
}
|
||||||
|
|
||||||
|
// newMeteredMsgWriter wraps a p2p MsgReadWriter with metering support. If the
|
||||||
|
// metrics system is disabled, this fucntion returns the original object.
|
||||||
|
func newMeteredMsgWriter(rw p2p.MsgReadWriter) p2p.MsgReadWriter {
|
||||||
|
if !metrics.Enabled {
|
||||||
|
return rw
|
||||||
|
}
|
||||||
|
return &meteredMsgReadWriter{MsgReadWriter: rw}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Init sets the protocol version used by the stream to know which meters to
|
||||||
|
// increment in case of overlapping message ids between protocol versions.
|
||||||
|
func (rw *meteredMsgReadWriter) Init(version int) {
|
||||||
|
rw.version = version
|
||||||
|
}
|
||||||
|
|
||||||
|
func (rw *meteredMsgReadWriter) ReadMsg() (p2p.Msg, error) {
|
||||||
|
// Read the message and short circuit in case of an error
|
||||||
|
msg, err := rw.MsgReadWriter.ReadMsg()
|
||||||
|
if err != nil {
|
||||||
|
return msg, err
|
||||||
|
}
|
||||||
|
// Account for the data traffic
|
||||||
|
packets, traffic := miscInPacketsMeter, miscInTrafficMeter
|
||||||
|
switch {
|
||||||
|
case rw.version < eth62 && msg.Code == BlockHashesMsg:
|
||||||
|
packets, traffic = reqHashInPacketsMeter, reqHashInTrafficMeter
|
||||||
|
case rw.version < eth62 && msg.Code == BlocksMsg:
|
||||||
|
packets, traffic = reqBlockInPacketsMeter, reqBlockInTrafficMeter
|
||||||
|
|
||||||
|
case rw.version >= eth62 && msg.Code == BlockHeadersMsg:
|
||||||
|
packets, traffic = reqBlockInPacketsMeter, reqBlockInTrafficMeter
|
||||||
|
case rw.version >= eth62 && msg.Code == BlockBodiesMsg:
|
||||||
|
packets, traffic = reqBodyInPacketsMeter, reqBodyInTrafficMeter
|
||||||
|
|
||||||
|
case rw.version >= eth63 && msg.Code == NodeDataMsg:
|
||||||
|
packets, traffic = reqStateInPacketsMeter, reqStateInTrafficMeter
|
||||||
|
case rw.version >= eth63 && msg.Code == ReceiptsMsg:
|
||||||
|
packets, traffic = reqReceiptInPacketsMeter, reqReceiptInTrafficMeter
|
||||||
|
|
||||||
|
case msg.Code == NewBlockHashesMsg:
|
||||||
|
packets, traffic = propHashInPacketsMeter, propHashInTrafficMeter
|
||||||
|
case msg.Code == NewBlockMsg:
|
||||||
|
packets, traffic = propBlockInPacketsMeter, propBlockInTrafficMeter
|
||||||
|
case msg.Code == TxMsg:
|
||||||
|
packets, traffic = propTxnInPacketsMeter, propTxnInTrafficMeter
|
||||||
|
}
|
||||||
|
packets.Mark(1)
|
||||||
|
traffic.Mark(int64(msg.Size))
|
||||||
|
|
||||||
|
return msg, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (rw *meteredMsgReadWriter) WriteMsg(msg p2p.Msg) error {
|
||||||
|
// Account for the data traffic
|
||||||
|
packets, traffic := miscOutPacketsMeter, miscOutTrafficMeter
|
||||||
|
switch {
|
||||||
|
case rw.version < eth62 && msg.Code == BlockHashesMsg:
|
||||||
|
packets, traffic = reqHashOutPacketsMeter, reqHashOutTrafficMeter
|
||||||
|
case rw.version < eth62 && msg.Code == BlocksMsg:
|
||||||
|
packets, traffic = reqBlockOutPacketsMeter, reqBlockOutTrafficMeter
|
||||||
|
|
||||||
|
case rw.version >= eth62 && msg.Code == BlockHeadersMsg:
|
||||||
|
packets, traffic = reqHeaderOutPacketsMeter, reqHeaderOutTrafficMeter
|
||||||
|
case rw.version >= eth62 && msg.Code == BlockBodiesMsg:
|
||||||
|
packets, traffic = reqBodyOutPacketsMeter, reqBodyOutTrafficMeter
|
||||||
|
|
||||||
|
case rw.version >= eth63 && msg.Code == NodeDataMsg:
|
||||||
|
packets, traffic = reqStateOutPacketsMeter, reqStateOutTrafficMeter
|
||||||
|
case rw.version >= eth63 && msg.Code == ReceiptsMsg:
|
||||||
|
packets, traffic = reqReceiptOutPacketsMeter, reqReceiptOutTrafficMeter
|
||||||
|
|
||||||
|
case msg.Code == NewBlockHashesMsg:
|
||||||
|
packets, traffic = propHashOutPacketsMeter, propHashOutTrafficMeter
|
||||||
|
case msg.Code == NewBlockMsg:
|
||||||
|
packets, traffic = propBlockOutPacketsMeter, propBlockOutTrafficMeter
|
||||||
|
case msg.Code == TxMsg:
|
||||||
|
packets, traffic = propTxnOutPacketsMeter, propTxnOutTrafficMeter
|
||||||
|
}
|
||||||
|
packets.Mark(1)
|
||||||
|
traffic.Mark(int64(msg.Size))
|
||||||
|
|
||||||
|
// Send the packet to the p2p layer
|
||||||
|
return rw.MsgReadWriter.WriteMsg(msg)
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ import (
|
||||||
|
|
||||||
"github.com/expanse-project/go-expanse/common"
|
"github.com/expanse-project/go-expanse/common"
|
||||||
"github.com/expanse-project/go-expanse/core/types"
|
"github.com/expanse-project/go-expanse/core/types"
|
||||||
"github.com/expanse-project/go-expanse/eth/downloader"
|
"github.com/expanse-project/go-expanse/exp/downloader"
|
||||||
"github.com/expanse-project/go-expanse/logger"
|
"github.com/expanse-project/go-expanse/logger"
|
||||||
"github.com/expanse-project/go-expanse/logger/glog"
|
"github.com/expanse-project/go-expanse/logger/glog"
|
||||||
"github.com/expanse-project/go-expanse/p2p"
|
"github.com/expanse-project/go-expanse/p2p"
|
||||||
|
|
|
||||||
|
|
@ -6081,7 +6081,7 @@ module.exports = IsSyncing;
|
||||||
|
|
||||||
},{"../utils/utils":20,"./formatters":29,"./method":35,"./requestmanager":43}],45:[function(require,module,exports){
|
},{"../utils/utils":20,"./formatters":29,"./method":35,"./requestmanager":43}],45:[function(require,module,exports){
|
||||||
/*
|
/*
|
||||||
This file is part of ethereum.js.
|
This file is part of expanse.js.
|
||||||
|
|
||||||
ethereum.js is free software: you can redistribute it and/or modify
|
ethereum.js is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
|
|
||||||
|
|
@ -97,6 +97,54 @@ var (
|
||||||
"eth_resend": (*ethApi).Resend,
|
"eth_resend": (*ethApi).Resend,
|
||||||
"eth_pendingTransactions": (*ethApi).PendingTransactions,
|
"eth_pendingTransactions": (*ethApi).PendingTransactions,
|
||||||
"eth_getTransactionReceipt": (*ethApi).GetTransactionReceipt,
|
"eth_getTransactionReceipt": (*ethApi).GetTransactionReceipt,
|
||||||
|
"exp_accounts": (*ethApi).Accounts,
|
||||||
|
"exp_blockNumber": (*ethApi).BlockNumber,
|
||||||
|
"exp_getBalance": (*ethApi).GetBalance,
|
||||||
|
"exp_protocolVersion": (*ethApi).ProtocolVersion,
|
||||||
|
"exp_coinbase": (*ethApi).Coinbase,
|
||||||
|
"exp_mining": (*ethApi).IsMining,
|
||||||
|
"exp_syncing": (*ethApi).IsSyncing,
|
||||||
|
"exp_gasPrice": (*ethApi).GasPrice,
|
||||||
|
"exp_getStorage": (*ethApi).GetStorage,
|
||||||
|
"exp_storageAt": (*ethApi).GetStorage,
|
||||||
|
"exp_getStorageAt": (*ethApi).GetStorageAt,
|
||||||
|
"exp_getTransactionCount": (*ethApi).GetTransactionCount,
|
||||||
|
"exp_getBlockTransactionCountByHash": (*ethApi).GetBlockTransactionCountByHash,
|
||||||
|
"exp_getBlockTransactionCountByNumber": (*ethApi).GetBlockTransactionCountByNumber,
|
||||||
|
"exp_getUncleCountByBlockHash": (*ethApi).GetUncleCountByBlockHash,
|
||||||
|
"exp_getUncleCountByBlockNumber": (*ethApi).GetUncleCountByBlockNumber,
|
||||||
|
"exp_getData": (*ethApi).GetData,
|
||||||
|
"exp_getCode": (*ethApi).GetData,
|
||||||
|
"exp_sign": (*ethApi).Sign,
|
||||||
|
"exp_sendRawTransaction": (*ethApi).SendRawTransaction,
|
||||||
|
"exp_sendTransaction": (*ethApi).SendTransaction,
|
||||||
|
"exp_transact": (*ethApi).SendTransaction,
|
||||||
|
"exp_estimateGas": (*ethApi).EstimateGas,
|
||||||
|
"exp_call": (*ethApi).Call,
|
||||||
|
"exp_flush": (*ethApi).Flush,
|
||||||
|
"exp_getBlockByHash": (*ethApi).GetBlockByHash,
|
||||||
|
"exp_getBlockByNumber": (*ethApi).GetBlockByNumber,
|
||||||
|
"exp_getTransactionByHash": (*ethApi).GetTransactionByHash,
|
||||||
|
"exp_getTransactionByBlockNumberAndIndex": (*ethApi).GetTransactionByBlockNumberAndIndex,
|
||||||
|
"exp_getTransactionByBlockHashAndIndex": (*ethApi).GetTransactionByBlockHashAndIndex,
|
||||||
|
"exp_getUncleByBlockHashAndIndex": (*ethApi).GetUncleByBlockHashAndIndex,
|
||||||
|
"exp_getUncleByBlockNumberAndIndex": (*ethApi).GetUncleByBlockNumberAndIndex,
|
||||||
|
"exp_getCompilers": (*ethApi).GetCompilers,
|
||||||
|
"exp_compileSolidity": (*ethApi).CompileSolidity,
|
||||||
|
"exp_newFilter": (*ethApi).NewFilter,
|
||||||
|
"exp_newBlockFilter": (*ethApi).NewBlockFilter,
|
||||||
|
"exp_newPendingTransactionFilter": (*ethApi).NewPendingTransactionFilter,
|
||||||
|
"exp_uninstallFilter": (*ethApi).UninstallFilter,
|
||||||
|
"exp_getFilterChanges": (*ethApi).GetFilterChanges,
|
||||||
|
"exp_getFilterLogs": (*ethApi).GetFilterLogs,
|
||||||
|
"exp_getLogs": (*ethApi).GetLogs,
|
||||||
|
"exp_hashrate": (*ethApi).Hashrate,
|
||||||
|
"exp_getWork": (*ethApi).GetWork,
|
||||||
|
"exp_submitWork": (*ethApi).SubmitWork,
|
||||||
|
"exp_submitHashrate": (*ethApi).SubmitHashrate,
|
||||||
|
"exp_resend": (*ethApi).Resend,
|
||||||
|
"exp_pendingTransactions": (*ethApi).PendingTransactions,
|
||||||
|
"exp_getTransactionReceipt": (*ethApi).GetTransactionReceipt,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -168,8 +216,8 @@ func (self *ethApi) IsMining(req *shared.Request) (interface{}, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *ethApi) IsSyncing(req *shared.Request) (interface{}, error) {
|
func (self *ethApi) IsSyncing(req *shared.Request) (interface{}, error) {
|
||||||
current := self.ethereum.ChainManager().CurrentBlock().NumberU64()
|
current := self.expanse.ChainManager().CurrentBlock().NumberU64()
|
||||||
origin, height := self.ethereum.Downloader().Boundaries()
|
origin, height := self.expanse.Downloader().Boundaries()
|
||||||
|
|
||||||
if current < height {
|
if current < height {
|
||||||
return map[string]interface{}{
|
return map[string]interface{}{
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ func (self *ipcClient) reconnect() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func startIpc(cfg IpcConfig, codec codec.Codec, initializer func(conn net.Conn) (shared.EthereumApi, error)) error {
|
func startIpc(cfg IpcConfig, codec codec.Codec, initializer func(conn net.Conn) (shared.ExpanseApi, error)) error {
|
||||||
// Ensure the IPC path exists and remove any previous leftover
|
// Ensure the IPC path exists and remove any previous leftover
|
||||||
if err := os.MkdirAll(filepath.Dir(cfg.Endpoint), 0751); err != nil {
|
if err := os.MkdirAll(filepath.Dir(cfg.Endpoint), 0751); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ type Jeth struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func NewJeth(ethApi shared.EthereumApi, re *jsre.JSRE, client comms.EthereumClient, fe xeth.Frontend) *Jeth {
|
func NewJeth(ethApi shared.ExpanseApi, re *jsre.JSRE, client comms.ExpanseClient, fe xeth.Frontend) *Jeth {
|
||||||
return &Jeth{ethApi, re, client, fe}
|
return &Jeth{ethApi, re, client, fe}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -177,13 +177,13 @@ func runBlockTest(test *BlockTest) error {
|
||||||
|
|
||||||
// import pre accounts
|
// import pre accounts
|
||||||
|
|
||||||
_, err = test.InsertPreState(ethereum)
|
_, err = test.InsertPreState(expanse)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("InsertPreState: %v", err)
|
return fmt.Errorf("InsertPreState: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
cm := ethereum.ChainManager()
|
cm := expanse.ChainManager()
|
||||||
validBlocks, err := test.TryBlocksInsert(cm)
|
validBlocks, err := test.TryBlocksInsert(cm)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue