diff options
author | Wei-Ning Huang <w@byzantine-lab.io> | 2019-10-07 18:08:38 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-07 18:08:38 +0800 |
commit | 5244bb6d79fc118bfdabeb367b645608ea05003a (patch) | |
tree | 8ebca1a767c92c680ef3339334961ba607b5c903 | |
parent | d3e0eca00b8bf09b491b7404004dbc67e3eb904d (diff) | |
download | go-tangerine-5244bb6d79fc118bfdabeb367b645608ea05003a.tar.gz go-tangerine-5244bb6d79fc118bfdabeb367b645608ea05003a.tar.zst go-tangerine-5244bb6d79fc118bfdabeb367b645608ea05003a.zip |
dex: add missing eth public API (#8)
-rw-r--r-- | dex/api.go | 31 | ||||
-rw-r--r-- | dex/backend.go | 12 |
2 files changed, 43 insertions, 0 deletions
diff --git a/dex/api.go b/dex/api.go index 1209e6583..7ca1a4622 100644 --- a/dex/api.go +++ b/dex/api.go @@ -22,6 +22,7 @@ import ( "errors" "fmt" "io" + "math/big" "os" "strings" @@ -38,6 +39,36 @@ import ( "github.com/tangerine-network/go-tangerine/trie" ) +// PublicEthereumAPI provides an API to access Ethereum full node-related +// information. +type PublicEthereumAPI struct { + dex *Tangerine +} + +// NewPublicEthereumAPI creates a new Ethereum protocol API for full nodes. +func NewPublicEthereumAPI(e *Tangerine) *PublicEthereumAPI { + return &PublicEthereumAPI{e} +} + +// Etherbase is the address that mining rewards will be send to +func (api *PublicEthereumAPI) Etherbase() (common.Address, error) { + return api.dex.Etherbase(), nil +} + +// Coinbase is the address that mining rewards will be send to (alias for Etherbase) +func (api *PublicEthereumAPI) Coinbase() (common.Address, error) { + return api.dex.Etherbase(), nil +} + +// ChainId is the EIP-155 replay-protection chain id for the current ethereum chain config. +func (api *PublicEthereumAPI) ChainId() hexutil.Uint64 { + chainID := new(big.Int) + if config := api.dex.chainConfig; config.IsEIP155(api.dex.blockchain.CurrentBlock().Number()) { + chainID = config.ChainID + } + return (hexutil.Uint64)(chainID.Uint64()) +} + // PrivateAdminAPI is the collection of Ethereum full node-related APIs // exposed over the private admin endpoint. type PrivateAdminAPI struct { diff --git a/dex/backend.go b/dex/backend.go index 24115b116..86db59c5f 100644 --- a/dex/backend.go +++ b/dex/backend.go @@ -22,12 +22,14 @@ import ( "time" "github.com/tangerine-network/go-tangerine/accounts" + "github.com/tangerine-network/go-tangerine/common" "github.com/tangerine-network/go-tangerine/consensus" "github.com/tangerine-network/go-tangerine/consensus/dexcon" "github.com/tangerine-network/go-tangerine/core" "github.com/tangerine-network/go-tangerine/core/bloombits" "github.com/tangerine-network/go-tangerine/core/rawdb" "github.com/tangerine-network/go-tangerine/core/vm" + "github.com/tangerine-network/go-tangerine/crypto" "github.com/tangerine-network/go-tangerine/dex/downloader" "github.com/tangerine-network/go-tangerine/eth/filters" "github.com/tangerine-network/go-tangerine/eth/gasprice" @@ -78,6 +80,8 @@ type Tangerine struct { networkID uint64 netRPCService *ethapi.PublicNetAPI + etherbase common.Address + indexer indexer.Indexer } @@ -187,6 +191,8 @@ func New(ctx *node.ServiceContext, config *Config) (*Tangerine, error) { time.Duration(chainConfig.Recovery.Timeout)*time.Second, log.Root()) dex.bp = NewBlockProposer(dex, watchCat, dMoment) + + dex.etherbase = crypto.PubkeyToAddress(config.PrivateKey.PublicKey) return dex, nil } @@ -205,6 +211,11 @@ func (s *Tangerine) APIs() []rpc.API { { Namespace: "eth", Version: "1.0", + Service: NewPublicEthereumAPI(s), + Public: true, + }, { + Namespace: "eth", + Version: "1.0", Service: downloader.NewPublicDownloaderAPI(s.protocolManager.downloader, s.eventMux), Public: true, }, { @@ -317,3 +328,4 @@ func (d *Tangerine) Engine() consensus.Engine { return d.engine } func (d *Tangerine) ChainDb() ethdb.Database { return d.chainDb } func (d *Tangerine) Downloader() ethapi.Downloader { return d.protocolManager.downloader } func (d *Tangerine) NetVersion() uint64 { return d.networkID } +func (d *Tangerine) Etherbase() common.Address { return d.etherbase } |