diff options
author | Jeffrey Wilcke <geffobscura@gmail.com> | 2015-07-04 23:45:18 +0800 |
---|---|---|
committer | Jeffrey Wilcke <geffobscura@gmail.com> | 2015-07-05 21:14:31 +0800 |
commit | bcc1660abc1c0a5ef838dea89e4f3830d84fb51c (patch) | |
tree | 67806e8069fbfc8c192daababed71f4e158176a6 /core | |
parent | 9c3db1be1dd24c366a58a7ced22adfa0b0839efe (diff) | |
download | dexon-bcc1660abc1c0a5ef838dea89e4f3830d84fb51c.tar.gz dexon-bcc1660abc1c0a5ef838dea89e4f3830d84fb51c.tar.zst dexon-bcc1660abc1c0a5ef838dea89e4f3830d84fb51c.zip |
core, miner, tests: added test, implemented bad block reporting
Diffstat (limited to 'core')
-rw-r--r-- | core/bad_block.go | 56 | ||||
-rw-r--r-- | core/chain_manager.go | 2 |
2 files changed, 58 insertions, 0 deletions
diff --git a/core/bad_block.go b/core/bad_block.go new file mode 100644 index 000000000..e8e736a13 --- /dev/null +++ b/core/bad_block.go @@ -0,0 +1,56 @@ +package core + +import ( + "bytes" + "encoding/json" + "io/ioutil" + "net/http" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/logger/glog" + "github.com/ethereum/go-ethereum/rlp" +) + +// DisabledBadBlockReporting can be set to prevent blocks being reported. +var DisableBadBlockReporting = true + +// ReportBlock reports the block to the block reporting tool found at +// badblocks.ethdev.com +func ReportBlock(block *types.Block, err error) { + if DisableBadBlockReporting { + return + } + + const url = "https://badblocks.ethdev.com" + + blockRlp, _ := rlp.EncodeToBytes(block) + data := map[string]interface{}{ + "block": common.Bytes2Hex(blockRlp), + "errortype": err.Error(), + "hints": map[string]interface{}{ + "receipts": "NYI", + "vmtrace": "NYI", + }, + } + jsonStr, _ := json.Marshal(map[string]interface{}{"method": "eth_badBlock", "params": []interface{}{data}, "id": "1", "jsonrpc": "2.0"}) + + req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr)) + req.Header.Set("Content-Type", "application/json") + + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + glog.V(logger.Error).Infoln("POST err:", err) + return + } + defer resp.Body.Close() + + if glog.V(logger.Debug) { + glog.Infoln("response Status:", resp.Status) + glog.Infoln("response Headers:", resp.Header) + body, _ := ioutil.ReadAll(resp.Body) + glog.Infoln("response Body:", string(body)) + } +} diff --git a/core/chain_manager.go b/core/chain_manager.go index 4855162b5..682ddd2d5 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -611,6 +611,8 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { blockErr(block, err) + go ReportBlock(block, err) + return i, err } |