From 13eb46ea94e48003608e32795a3070657dcb0d0c Mon Sep 17 00:00:00 2001
From: obscuren <geffobscura@gmail.com>
Date: Tue, 14 Apr 2015 12:49:30 +0200
Subject: [PATCH] geth: added print block to admin

---
 cmd/geth/admin.go | 33 ++++++++++++++++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)

diff --git a/cmd/geth/admin.go b/cmd/geth/admin.go
index 5f1cb8c96..f8c717187 100644
--- a/cmd/geth/admin.go
+++ b/cmd/geth/admin.go
@@ -32,7 +32,6 @@ func (js *jsre) adminBindings() {
 	admin.Set("unlock", js.unlock)
 	admin.Set("import", js.importChain)
 	admin.Set("export", js.exportChain)
-	admin.Set("dumpBlock", js.dumpBlock)
 	admin.Set("verbosity", js.verbosity)
 	admin.Set("backtrace", js.backtrace)
 
@@ -43,6 +42,12 @@ func (js *jsre) adminBindings() {
 	miner.Set("stop", js.stopMining)
 	miner.Set("hashrate", js.hashrate)
 	miner.Set("setExtra", js.setExtra)
+
+	admin.Set("debug", struct{}{})
+	t, _ = admin.Get("debug")
+	debug := t.Object()
+	debug.Set("printBlock", js.printBlock)
+	debug.Set("dumpBlock", js.dumpBlock)
 }
 
 func (js *jsre) setExtra(call otto.FunctionCall) otto.Value {
@@ -284,6 +289,32 @@ func (js *jsre) exportChain(call otto.FunctionCall) otto.Value {
 	return otto.TrueValue()
 }
 
+func (js *jsre) printBlock(call otto.FunctionCall) otto.Value {
+	var block *types.Block
+	if len(call.ArgumentList) > 0 {
+		if call.Argument(0).IsNumber() {
+			num, _ := call.Argument(0).ToInteger()
+			block = js.ethereum.ChainManager().GetBlockByNumber(uint64(num))
+		} else if call.Argument(0).IsString() {
+			hash, _ := call.Argument(0).ToString()
+			block = js.ethereum.ChainManager().GetBlock(common.HexToHash(hash))
+		} else {
+			fmt.Println("invalid argument for dump. Either hex string or number")
+		}
+
+	} else {
+		block = js.ethereum.ChainManager().CurrentBlock()
+	}
+	if block == nil {
+		fmt.Println("block not found")
+		return otto.UndefinedValue()
+	}
+
+	fmt.Println(block)
+
+	return otto.UndefinedValue()
+}
+
 func (js *jsre) dumpBlock(call otto.FunctionCall) otto.Value {
 	var block *types.Block
 	if len(call.ArgumentList) > 0 {
-- 
GitLab