diff --git a/consensus/ethash/consensus.go b/consensus/ethash/consensus.go index a30641ad82fa..5b004a29b829 100644 --- a/consensus/ethash/consensus.go +++ b/consensus/ethash/consensus.go @@ -700,13 +700,20 @@ func accumulateRewards(config *params.ChainConfig, state *state.StateDB, header func(addr common.Address, amt *big.Int) { state.AddBalance(addr, amt) }) - if err != nil { + if err == nil { + header.Rewards = rewards + if coinbase != nil { + header.Coinbase = *coinbase + } + } else { + if err == metaminer.ErrNotInitialized { + reward := new(big.Int) + reward.Add(blockReward, header.Fees) + state.AddBalance(header.Coinbase, reward) + return nil + } return err } - header.Rewards = rewards - if coinbase != nil { - header.Coinbase = *coinbase - } } return nil } diff --git a/core/metadium_genesis.go b/core/metadium_genesis.go index d55392fd70a6..e105e1d53b92 100644 --- a/core/metadium_genesis.go +++ b/core/metadium_genesis.go @@ -12333,7 +12333,7 @@ var ( }, "coinbase": "0x378360d4f25E6377f3da53F8cF09e9a258118528", "config": { - "berlinBlock": 25570000, + "berlinBlock": 80000000, "chainId": 12, "homesteadBlock": 0, "eip150Block": 5623000, @@ -12342,7 +12342,7 @@ var ( "byzantiumBlock": 0, "constantinopleBlock": 5623000, "istanbulBlock": 5623000, - "londonBlock": 25570000, + "londonBlock": 80000000, "muirGlacierBlock": 5623000 }, "difficulty": "0x1", diff --git a/core/rawdb/database.go b/core/rawdb/database.go index fc615a6daeef..458c723026ec 100644 --- a/core/rawdb/database.go +++ b/core/rawdb/database.go @@ -17,10 +17,13 @@ package rawdb import ( + "bufio" "bytes" "errors" "fmt" "os" + "path" + "strings" "sync/atomic" "time" @@ -293,7 +296,24 @@ func NewRocksDBDatabaseWithFreezer(file string, cache int, handles int, freezer return frdb, nil } +func detectDb(file string) int { + if f, err := os.Open(path.Join(file, "LOG")); err != nil { + return 0 + } else if s, err := bufio.NewReader(f).ReadString('\n'); err != nil { + return 0 + } else if strings.Contains(s, "RocksDB version") { + return 2 + } + return 1 +} + func NewDB(file string, cache int, handles int, namespace string, readonly bool) (ethdb.Database, error) { + switch detectDb(file) { + case 1: + return NewLevelDBDatabase(file, cache, handles, namespace, readonly) + case 2: + return NewRocksDBDatabase(file, cache, handles, namespace, readonly) + } if params.UseRocksDb != 0 { return NewRocksDBDatabase(file, cache, handles, namespace, readonly) } else { @@ -302,6 +322,12 @@ func NewDB(file string, cache int, handles int, namespace string, readonly bool) } func NewDBWithFreezer(file string, cache int, handles int, freezer string, namespace string, readonly bool) (ethdb.Database, error) { + switch detectDb(file) { + case 1: + return NewLevelDBDatabaseWithFreezer(file, cache, handles, freezer, namespace, readonly) + case 2: + return NewRocksDBDatabaseWithFreezer(file, cache, handles, freezer, namespace, readonly) + } if params.UseRocksDb != 0 { return NewRocksDBDatabaseWithFreezer(file, cache, handles, freezer, namespace, readonly) } else { diff --git a/eth/protocols/eth/handlers.go b/eth/protocols/eth/handlers.go index 117fb8e9dafd..044e4f1a6290 100644 --- a/eth/protocols/eth/handlers.go +++ b/eth/protocols/eth/handlers.go @@ -36,11 +36,8 @@ func handleGetBlockHeaders(backend Backend, msg Decoder, peer *Peer) error { if err := msg.Decode(&query); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } - go func() error { - response := answerGetBlockHeadersQuery(backend, &query, peer) - return peer.SendBlockHeaders(response) - }() - return nil + response := answerGetBlockHeadersQuery(backend, &query, peer) + return peer.SendBlockHeaders(response) } func answerGetBlockHeadersQuery(backend Backend, query *GetBlockHeadersPacket, peer *Peer) []*types.Header { @@ -136,11 +133,19 @@ func handleGetBlockHeaders66(backend Backend, msg Decoder, peer *Peer) error { if err := msg.Decode(&query); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } - go func() error { - response := ServiceGetBlockHeadersQuery(backend.Chain(), query.GetBlockHeadersPacket, peer) + response := ServiceGetBlockHeadersQuery(backend.Chain(), query.GetBlockHeadersPacket, peer) + // if len(response) > 1 || query.GetBlockHeadersPacket.Amount == 1 { + if len(response) == int(query.GetBlockHeadersPacket.Amount) { return peer.ReplyBlockHeadersRLP(query.RequestId, response) - }() - return nil + } else { + // Metadium: fall back to old behavior + response2 := answerGetBlockHeadersQuery(backend, query.GetBlockHeadersPacket, peer) + if len(response2) > len(response) { + return peer.ReplyBlockHeaders(query.RequestId, response2) + } else { + return peer.ReplyBlockHeadersRLP(query.RequestId, response) + } + } } // ServiceGetBlockHeadersQuery assembles the response to a header query. It is @@ -312,11 +317,8 @@ func handleGetBlockBodies(backend Backend, msg Decoder, peer *Peer) error { if err := msg.Decode(&query); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } - go func() error { - response := ServiceGetBlockBodiesQuery(backend.Chain(), query) - return peer.SendBlockBodiesRLP(response) - }() - return nil + response := ServiceGetBlockBodiesQuery(backend.Chain(), query) + return peer.SendBlockBodiesRLP(response) } func handleGetBlockBodies66(backend Backend, msg Decoder, peer *Peer) error { @@ -325,11 +327,8 @@ func handleGetBlockBodies66(backend Backend, msg Decoder, peer *Peer) error { if err := msg.Decode(&query); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } - go func() error { - response := ServiceGetBlockBodiesQuery(backend.Chain(), query.GetBlockBodiesPacket) - return peer.ReplyBlockBodiesRLP(query.RequestId, response) - }() - return nil + response := ServiceGetBlockBodiesQuery(backend.Chain(), query.GetBlockBodiesPacket) + return peer.ReplyBlockBodiesRLP(query.RequestId, response) } // ServiceGetBlockBodiesQuery assembles the response to a body query. It is @@ -359,11 +358,8 @@ func handleGetNodeData(backend Backend, msg Decoder, peer *Peer) error { if err := msg.Decode(&query); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } - go func() error { - response := ServiceGetNodeDataQuery(backend.Chain(), query) - return peer.SendNodeData(response) - }() - return nil + response := ServiceGetNodeDataQuery(backend.Chain(), query) + return peer.SendNodeData(response) } func handleGetNodeData66(backend Backend, msg Decoder, peer *Peer) error { @@ -372,11 +368,8 @@ func handleGetNodeData66(backend Backend, msg Decoder, peer *Peer) error { if err := msg.Decode(&query); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } - go func() error { - response := ServiceGetNodeDataQuery(backend.Chain(), query.GetNodeDataPacket) - return peer.ReplyNodeData(query.RequestId, response) - }() - return nil + response := ServiceGetNodeDataQuery(backend.Chain(), query.GetNodeDataPacket) + return peer.ReplyNodeData(query.RequestId, response) } // ServiceGetNodeDataQuery assembles the response to a node data query. It is @@ -412,11 +405,8 @@ func handleGetReceipts(backend Backend, msg Decoder, peer *Peer) error { if err := msg.Decode(&query); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } - go func() error { - response := ServiceGetReceiptsQuery(backend.Chain(), query) - return peer.SendReceiptsRLP(response) - }() - return nil + response := ServiceGetReceiptsQuery(backend.Chain(), query) + return peer.SendReceiptsRLP(response) } func handleGetReceipts66(backend Backend, msg Decoder, peer *Peer) error { @@ -425,11 +415,8 @@ func handleGetReceipts66(backend Backend, msg Decoder, peer *Peer) error { if err := msg.Decode(&query); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } - go func() error { - response := ServiceGetReceiptsQuery(backend.Chain(), query.GetReceiptsPacket) - return peer.ReplyReceiptsRLP(query.RequestId, response) - }() - return nil + response := ServiceGetReceiptsQuery(backend.Chain(), query.GetReceiptsPacket) + return peer.ReplyReceiptsRLP(query.RequestId, response) } // ServiceGetReceiptsQuery assembles the response to a receipt query. It is @@ -469,15 +456,12 @@ func handleNewBlockhashes(backend Backend, msg Decoder, peer *Peer) error { if err := msg.Decode(ann); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } - go func() error { - // Mark the hashes as present at the remote node - for _, block := range *ann { - peer.markBlock(block.Hash) - } - // Deliver them all to the backend for queuing - return backend.Handle(peer, ann) - }() - return nil + // Mark the hashes as present at the remote node + for _, block := range *ann { + peer.markBlock(block.Hash) + } + // Deliver them all to the backend for queuing + return backend.Handle(peer, ann) } func handleNewBlock(backend Backend, msg Decoder, peer *Peer) error { @@ -497,16 +481,13 @@ func handleNewBlock(backend Backend, msg Decoder, peer *Peer) error { log.Warn("Propagated block has invalid body", "have", hash, "exp", ann.Block.TxHash()) return nil // TODO(karalabe): return error eventually, but wait a few releases } - go func() error { - ann.Block.ReceivedAt = msg.Time() - ann.Block.ReceivedFrom = peer + ann.Block.ReceivedAt = msg.Time() + ann.Block.ReceivedFrom = peer - // Mark the peer as owning the block - peer.markBlock(ann.Block.Hash()) + // Mark the peer as owning the block + peer.markBlock(ann.Block.Hash()) - return backend.Handle(peer, ann) - }() - return nil + return backend.Handle(peer, ann) } func handleBlockHeaders(backend Backend, msg Decoder, peer *Peer) error { @@ -522,14 +503,11 @@ func handleBlockHeaders(backend Backend, msg Decoder, peer *Peer) error { } return hashes } - go func() error { - return peer.dispatchResponse(&Response{ - id: peer.genRequestId(BlockHeadersMsg), - code: BlockHeadersMsg, - Res: res, - }, metadata) - }() - return nil + return peer.dispatchResponse(&Response{ + id: peer.genRequestId(BlockHeadersMsg), + code: BlockHeadersMsg, + Res: res, + }, metadata) } func handleBlockHeaders66(backend Backend, msg Decoder, peer *Peer) error { @@ -545,14 +523,11 @@ func handleBlockHeaders66(backend Backend, msg Decoder, peer *Peer) error { } return hashes } - go func() error { - return peer.dispatchResponse(&Response{ - id: res.RequestId, - code: BlockHeadersMsg, - Res: &res.BlockHeadersPacket, - }, metadata) - }() - return nil + return peer.dispatchResponse(&Response{ + id: res.RequestId, + code: BlockHeadersMsg, + Res: &res.BlockHeadersPacket, + }, metadata) } func handleBlockBodies(backend Backend, msg Decoder, peer *Peer) error { @@ -573,14 +548,11 @@ func handleBlockBodies(backend Backend, msg Decoder, peer *Peer) error { } return [][]common.Hash{txsHashes, uncleHashes} } - go func() error { - return peer.dispatchResponse(&Response{ - id: peer.genRequestId(BlockBodiesMsg), - code: BlockBodiesMsg, - Res: res, - }, metadata) - }() - return nil + return peer.dispatchResponse(&Response{ + id: peer.genRequestId(BlockBodiesMsg), + code: BlockBodiesMsg, + Res: res, + }, metadata) } func handleBlockBodies66(backend Backend, msg Decoder, peer *Peer) error { @@ -601,14 +573,11 @@ func handleBlockBodies66(backend Backend, msg Decoder, peer *Peer) error { } return [][]common.Hash{txsHashes, uncleHashes} } - go func() error { - return peer.dispatchResponse(&Response{ - id: res.RequestId, - code: BlockBodiesMsg, - Res: &res.BlockBodiesPacket, - }, metadata) - }() - return nil + return peer.dispatchResponse(&Response{ + id: res.RequestId, + code: BlockBodiesMsg, + Res: &res.BlockBodiesPacket, + }, metadata) } func handleNodeData(backend Backend, msg Decoder, peer *Peer) error { @@ -617,14 +586,11 @@ func handleNodeData(backend Backend, msg Decoder, peer *Peer) error { if err := msg.Decode(res); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } - go func() error { - return peer.dispatchResponse(&Response{ - id: peer.genRequestId(NodeDataMsg), - code: NodeDataMsg, - Res: res, - }, nil) // No post-processing, we're not using this packet anymore - }() - return nil + return peer.dispatchResponse(&Response{ + id: peer.genRequestId(NodeDataMsg), + code: NodeDataMsg, + Res: res, + }, nil) // No post-processing, we're not using this packet anymore } func handleNodeData66(backend Backend, msg Decoder, peer *Peer) error { @@ -633,14 +599,11 @@ func handleNodeData66(backend Backend, msg Decoder, peer *Peer) error { if err := msg.Decode(res); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } - go func() error { - return peer.dispatchResponse(&Response{ - id: res.RequestId, - code: NodeDataMsg, - Res: &res.NodeDataPacket, - }, nil) // No post-processing, we're not using this packet anymore - }() - return nil + return peer.dispatchResponse(&Response{ + id: res.RequestId, + code: NodeDataMsg, + Res: &res.NodeDataPacket, + }, nil) // No post-processing, we're not using this packet anymore } func handleReceipts(backend Backend, msg Decoder, peer *Peer) error { @@ -657,14 +620,11 @@ func handleReceipts(backend Backend, msg Decoder, peer *Peer) error { } return hashes } - go func() error { - return peer.dispatchResponse(&Response{ - id: peer.genRequestId(ReceiptsMsg), - code: ReceiptsMsg, - Res: res, - }, metadata) - }() - return nil + return peer.dispatchResponse(&Response{ + id: peer.genRequestId(ReceiptsMsg), + code: ReceiptsMsg, + Res: res, + }, metadata) } func handleReceipts66(backend Backend, msg Decoder, peer *Peer) error { @@ -681,14 +641,11 @@ func handleReceipts66(backend Backend, msg Decoder, peer *Peer) error { } return hashes } - go func() error { - return peer.dispatchResponse(&Response{ - id: res.RequestId, - code: ReceiptsMsg, - Res: &res.ReceiptsPacket, - }, metadata) - }() - return nil + return peer.dispatchResponse(&Response{ + id: res.RequestId, + code: ReceiptsMsg, + Res: &res.ReceiptsPacket, + }, metadata) } func handleNewPooledTransactionHashes(backend Backend, msg Decoder, peer *Peer) error { @@ -701,14 +658,11 @@ func handleNewPooledTransactionHashes(backend Backend, msg Decoder, peer *Peer) if err := msg.Decode(ann); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } - go func() error { - // Schedule all the unknown hashes for retrieval - for _, hash := range *ann { - peer.markTransaction(hash) - } - return backend.Handle(peer, ann) - }() - return nil + // Schedule all the unknown hashes for retrieval + for _, hash := range *ann { + peer.markTransaction(hash) + } + return backend.Handle(peer, ann) } func handleGetPooledTransactions(backend Backend, msg Decoder, peer *Peer) error { @@ -717,11 +671,8 @@ func handleGetPooledTransactions(backend Backend, msg Decoder, peer *Peer) error if err := msg.Decode(&query); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } - go func() error { - hashes, txs := answerGetPooledTransactions(backend, query, peer) - return peer.SendPooledTransactionsRLP(hashes, txs) - }() - return nil + hashes, txs := answerGetPooledTransactions(backend, query, peer) + return peer.SendPooledTransactionsRLP(hashes, txs) } func handleGetPooledTransactions66(backend Backend, msg Decoder, peer *Peer) error { @@ -730,11 +681,8 @@ func handleGetPooledTransactions66(backend Backend, msg Decoder, peer *Peer) err if err := msg.Decode(&query); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } - go func() error { - hashes, txs := answerGetPooledTransactions(backend, query.GetPooledTransactionsPacket, peer) - return peer.ReplyPooledTransactionsRLP(query.RequestId, hashes, txs) - }() - return nil + hashes, txs := answerGetPooledTransactions(backend, query.GetPooledTransactionsPacket, peer) + return peer.ReplyPooledTransactionsRLP(query.RequestId, hashes, txs) } func answerGetPooledTransactions(backend Backend, query GetPooledTransactionsPacket, peer *Peer) ([]common.Hash, []rlp.RawValue) { @@ -775,17 +723,14 @@ func handleTransactions(backend Backend, msg Decoder, peer *Peer) error { if err := msg.Decode(&txs); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } - go func() error { - for i, tx := range txs { - // Validate and mark the remote transaction - if tx == nil { - return fmt.Errorf("%w: transaction %d is nil", errDecode, i) - } - peer.markTransaction(tx.Hash()) + for i, tx := range txs { + // Validate and mark the remote transaction + if tx == nil { + return fmt.Errorf("%w: transaction %d is nil", errDecode, i) } - return backend.Handle(peer, &txs) - }() - return nil + peer.markTransaction(tx.Hash()) + } + return backend.Handle(peer, &txs) } func handleTransactionsEx(backend Backend, msg Decoder, peer *Peer) error { @@ -799,20 +744,17 @@ func handleTransactionsEx(backend Backend, msg Decoder, peer *Peer) error { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } - go func() error { - signer := types.MakeSigner(backend.Chain().Config(), backend.Chain().CurrentBlock().Number()) - txs := types.TxExs2Txs(signer, txexs, metaminer.IsPartner(peer.ID())) - for i, tx := range txs { - // Validate and mark the remote transaction - if tx == nil { - return fmt.Errorf("%w: transaction %d is nil", errDecode, i) - } - peer.markTransaction(tx.Hash()) + signer := types.MakeSigner(backend.Chain().Config(), backend.Chain().CurrentBlock().Number()) + txs := types.TxExs2Txs(signer, txexs, metaminer.IsPartner(peer.ID())) + for i, tx := range txs { + // Validate and mark the remote transaction + if tx == nil { + return fmt.Errorf("%w: transaction %d is nil", errDecode, i) } - txsp := TransactionsPacket(txs) - return backend.Handle(peer, &txsp) - }() - return nil + peer.markTransaction(tx.Hash()) + } + txsp := TransactionsPacket(txs) + return backend.Handle(peer, &txsp) } func handlePooledTransactions(backend Backend, msg Decoder, peer *Peer) error { @@ -826,17 +768,14 @@ func handlePooledTransactions(backend Backend, msg Decoder, peer *Peer) error { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } - go func() error { - for i, tx := range txs { - // Validate and mark the remote transaction - if tx == nil { - return fmt.Errorf("%w: transaction %d is nil", errDecode, i) - } - peer.markTransaction(tx.Hash()) + for i, tx := range txs { + // Validate and mark the remote transaction + if tx == nil { + return fmt.Errorf("%w: transaction %d is nil", errDecode, i) } - return backend.Handle(peer, &txs) - }() - return nil + peer.markTransaction(tx.Hash()) + } + return backend.Handle(peer, &txs) } func handlePooledTransactions66(backend Backend, msg Decoder, peer *Peer) error { @@ -849,17 +788,14 @@ func handlePooledTransactions66(backend Backend, msg Decoder, peer *Peer) error if err := msg.Decode(&txs); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } - go func() error { - for i, tx := range txs.PooledTransactionsPacket { - // Validate and mark the remote transaction - if tx == nil { - return fmt.Errorf("%w: transaction %d is nil", errDecode, i) - } - peer.markTransaction(tx.Hash()) + for i, tx := range txs.PooledTransactionsPacket { + // Validate and mark the remote transaction + if tx == nil { + return fmt.Errorf("%w: transaction %d is nil", errDecode, i) } - requestTracker.Fulfil(peer.id, peer.version, PooledTransactionsMsg, txs.RequestId) + peer.markTransaction(tx.Hash()) + } + requestTracker.Fulfil(peer.id, peer.version, PooledTransactionsMsg, txs.RequestId) - return backend.Handle(peer, &txs.PooledTransactionsPacket) - }() - return nil + return backend.Handle(peer, &txs.PooledTransactionsPacket) } diff --git a/eth/protocols/eth/peer.go b/eth/protocols/eth/peer.go index 45b76a493a4d..2b75835781ab 100644 --- a/eth/protocols/eth/peer.go +++ b/eth/protocols/eth/peer.go @@ -319,6 +319,14 @@ func (p *Peer) SendBlockHeaders(headers []*types.Header) error { return p2p.Send(p.rw, BlockHeadersMsg, BlockHeadersPacket(headers)) } +// ReplyBlockHeaders is the eth/66 version of SendBlockHeaders. +func (p *Peer) ReplyBlockHeaders(id uint64, headers []*types.Header) error { + return p2p.Send(p.rw, BlockHeadersMsg, BlockHeadersPacket66{ + RequestId: id, + BlockHeadersPacket: headers, + }) +} + // ReplyBlockHeaders is the eth/66 version of SendBlockHeaders. func (p *Peer) ReplyBlockHeadersRLP(id uint64, headers []rlp.RawValue) error { return p2p.Send(p.rw, BlockHeadersMsg, BlockHeadersRLPPacket66{ diff --git a/ethdb/rocksdb/rocksdb.go b/ethdb/rocksdb/rocksdb.go index 6eb8dc0c1c9a..58086abd74ca 100644 --- a/ethdb/rocksdb/rocksdb.go +++ b/ethdb/rocksdb/rocksdb.go @@ -62,6 +62,9 @@ func b2c(b []byte) *C.char { func New(file string, cache int, handles int, namespace string, readonly bool) (*RDBDatabase, error) { var cerr *C.char + // null terminated c string + file0 := file + string(rune(0)) + opts := C.rocksdb_options_create() C.rocksdb_options_set_create_if_missing(opts, 1) C.rocksdb_options_set_max_open_files(opts, C.int(handles)) @@ -69,7 +72,12 @@ func New(file string, cache int, handles int, namespace string, readonly bool) ( wopts := C.rocksdb_writeoptions_create() ropts := C.rocksdb_readoptions_create() - db := C.rocksdb_open(opts, b2c([]byte(file)), &cerr) + var db *C.rocksdb_t + if readonly { + db = C.rocksdb_open_for_read_only(opts, b2c([]byte(file0)), 0, &cerr) + } else { + db = C.rocksdb_open(opts, b2c([]byte(file0)), &cerr) + } if cerr != nil { C.rocksdb_options_destroy(opts) return nil, cerror(cerr) diff --git a/metadium/admin.go b/metadium/admin.go index 0e617e35385a..ad3c57e28827 100644 --- a/metadium/admin.go +++ b/metadium/admin.go @@ -99,8 +99,9 @@ var ( nilAddress = common.Address{} admin *metaAdmin - ErrNotRunning = errors.New("Not Running") - ErrAlreadyRunning = errors.New("Already Running") + ErrNotRunning = errors.New("not running") + ErrAlreadyRunning = errors.New("already running") + ErrInvalidEnode = errors.New("invalid enode") ) func (n *metaNode) eq(m *metaNode) bool { @@ -319,7 +320,7 @@ func (ma *metaAdmin) getMetaNodes(ctx context.Context, block *big.Int) ([]*metaN sid := hex.EncodeToString(enode) if len(sid) != 128 { - return nil, errors.New("Invalid enode") + return nil, ErrInvalidEnode } idv4, _ := toIdv4(sid) nodes = append(nodes, &metaNode{ @@ -346,7 +347,7 @@ func (ma *metaAdmin) getRewardAccounts(ctx context.Context, block *big.Int) (rew ) if ma.registry == nil || ma.registry.To == nil { - err = fmt.Errorf("Not initialized") + err = metaminer.ErrNotInitialized return } @@ -877,7 +878,7 @@ func (ma *metaAdmin) calculateRewards(num, blockReward, fees *big.Int, addBalanc } if rewardPoolAccount == nil && maintenanceAccount == nil && len(members) == 0 { - err = fmt.Errorf("Not initialized") + err = metaminer.ErrNotInitialized return } @@ -951,7 +952,7 @@ func verifyRewards(num *big.Int, rewards string) error { func signBlock(hash common.Hash) (nodeId, sig []byte, err error) { if admin == nil { - err = errors.New("Not initialized") + err = metaminer.ErrNotInitialized return } diff --git a/metadium/miner/miner.go b/metadium/miner/miner.go index ce8828542e03..214f80989720 100644 --- a/metadium/miner/miner.go +++ b/metadium/miner/miner.go @@ -11,6 +11,8 @@ import ( ) var ( + ErrNotInitialized = errors.New("not initialized") + IsMinerFunc func() bool AmPartnerFunc func() bool IsPartnerFunc func(string) bool @@ -69,7 +71,7 @@ func IsPoW() bool { func CalculateRewards(num, blockReward, fees *big.Int, addBalance func(common.Address, *big.Int)) (*common.Address, []byte, error) { if CalculateRewardsFunc == nil { - return nil, nil, errors.New("Not initialized") + return nil, nil, ErrNotInitialized } else { return CalculateRewardsFunc(num, blockReward, fees, addBalance) } @@ -77,7 +79,7 @@ func CalculateRewards(num, blockReward, fees *big.Int, addBalance func(common.Ad func VerifyRewards(num *big.Int, rewards string) error { if VerifyRewardsFunc == nil { - return errors.New("Not initialized") + return ErrNotInitialized } else { return VerifyRewardsFunc(num, rewards) } @@ -85,7 +87,7 @@ func VerifyRewards(num *big.Int, rewards string) error { func SignBlock(hash common.Hash) (nodeId, sig []byte, err error) { if SignBlockFunc == nil { - err = errors.New("Not initialized") + err = ErrNotInitialized } else { nodeId, sig, err = SignBlockFunc(hash) } diff --git a/metadium/scripts/gmet.sh b/metadium/scripts/gmet.sh index a6d836d0bb23..c69c99c99ba1 100755 --- a/metadium/scripts/gmet.sh +++ b/metadium/scripts/gmet.sh @@ -115,7 +115,7 @@ function wipe () cd $d /bin/rm -rf geth/LOCK geth/chaindata geth/ethash geth/lightchaindata \ - geth/transactions.rlp geth/nodes geth.ipc logs/* etcd + geth/transactions.rlp geth/nodes geth/triecache geth.ipc logs/* etcd } function wipe_all () @@ -308,6 +308,14 @@ case "$1" in if [ ! "$PIDS" = "" ]; then echo $PIDS | xargs -L1 kill -9 fi + # wait until geth/chaindata is free + if [ ! "$NODE" = "" ]; then + d=$(get_data_dir "$1") + for i in {1..200}; do + lsof ${d}/geth/chaindata/LOG 2>&1 | grep -q gmet > /dev/null 2>&1 || break + sleep 1 + done + fi echo "done." ;; diff --git a/miner/worker.go b/miner/worker.go index d7382aca1ded..7b7ac06fbb2e 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -1437,7 +1437,7 @@ func (w *worker) refreshPending(locked bool) { log.Error("Failed to prepare header for mining", "err", err) return } - if env, err := w.makeEnv(parent, header, header.Coinbase); err != nil { + if env, err := w.makeEnv(parent, header, header.Coinbase); err == nil { w.updateSnapshot(env) } } diff --git a/params/config.go b/params/config.go index 58048e3deba7..bbb33602ad24 100644 --- a/params/config.go +++ b/params/config.go @@ -172,8 +172,8 @@ var ( PetersburgBlock: big.NewInt(5623000), IstanbulBlock: big.NewInt(5623000), MuirGlacierBlock: big.NewInt(5623000), - BerlinBlock: big.NewInt(25570000), - LondonBlock: big.NewInt(25570000), + BerlinBlock: big.NewInt(80000000), + LondonBlock: big.NewInt(80000000), Ethash: new(EthashConfig), }