From 27cb93c08c5ac360a6c3427628a7a6f8259dfa9e Mon Sep 17 00:00:00 2001 From: Wei-Ning Huang Date: Fri, 21 Sep 2018 15:06:38 +0800 Subject: dex: make geth buildable and update interface skeleton --- dex/backend.go | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) (limited to 'dex/backend.go') diff --git a/dex/backend.go b/dex/backend.go index 73a84c139..e374bb70f 100644 --- a/dex/backend.go +++ b/dex/backend.go @@ -17,6 +17,113 @@ package dex +import ( + "math/big" + "sync" + + dexCore "github.com/dexon-foundation/dexon-consensus-core/core" + "github.com/dexon-foundation/dexon-consensus-core/core/blockdb" + ethCrypto "github.com/dexon-foundation/dexon-consensus-core/crypto/eth" + + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/bloombits" + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/internal/ethapi" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rpc" +) + // Dexon implementes the DEXON fullnode service. type Dexon struct { + config *eth.Config + chainConfig *params.ChainConfig + + // Channel for shutting down the service + shutdownChan chan bool // Channel for shutting down the Ethereum + txPool *core.TxPool + blockchain *core.BlockChain + + // DB interfaces + chainDb ethdb.Database // Block chain database + + eventMux *event.TypeMux + engine consensus.Engine + accountManager *accounts.Manager + + bloomRequests chan chan *bloombits.Retrieval // Channel receiving bloom data retrieval requests + bloomIndexer *core.ChainIndexer // Bloom indexer operating during block imports + + gasPrice *big.Int + etherbase common.Address + + // Dexon consensus. + app *DexconApp + governance *DexconGovernance + network *DexconNetwork + blockdb blockdb.BlockDatabase + consensus *dexCore.Consensus + + networkID uint64 + netRPCService *ethapi.PublicNetAPI + + lock sync.RWMutex // Protects the variadic fields (e.g. gas price and etherbase) +} + +func New(ctx *node.ServiceContext, config *eth.Config) (*Dexon, error) { + // Consensus. + db, err := blockdb.NewLevelDBBackedBlockDB("main.blockdb") + if err != nil { + panic(err) + } + app := NewDexconApp(nil) + gov := NewDexconGovernance() + network := NewDexconNetwork() + + // TODO(w): replace this with node key. + privKey, err := ethCrypto.NewPrivateKey() + if err != nil { + panic(err) + } + consensus := dexCore.NewConsensus( + app, gov, db, network, privKey, ethCrypto.SigToPub) + + dex := &Dexon{ + config: config, + eventMux: ctx.EventMux, + accountManager: ctx.AccountManager, + shutdownChan: make(chan bool), + networkID: config.NetworkId, + gasPrice: config.MinerGasPrice, + etherbase: config.Etherbase, + bloomRequests: make(chan chan *bloombits.Retrieval), + app: app, + governance: gov, + network: network, + blockdb: db, + consensus: consensus, + } + return dex, nil +} + +func (s *Dexon) Protocols() []p2p.Protocol { + return nil +} + +func (s *Dexon) APIs() []rpc.API { + return nil +} + +func (s *Dexon) Start(server *p2p.Server) error { + return nil +} + +func (s *Dexon) Stop() error { + return nil } -- cgit