From ddf17d93acf92ef18b0134f19f22220362e06bad Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 29 Jan 2015 14:46:59 +0100 Subject: [PATCH] Samples and disams cmd for evm code --- cmd/disasm/main.go | 34 ++++++++++++++++ .../assets/examples/{test.html => abi.html} | 19 +++++++-- cmd/mist/assets/examples/balance.html | 40 +++++++++++++++++++ rpc/packages.go | 15 ++++++- 4 files changed, 103 insertions(+), 5 deletions(-) create mode 100644 cmd/disasm/main.go rename cmd/mist/assets/examples/{test.html => abi.html} (67%) create mode 100644 cmd/mist/assets/examples/balance.html diff --git a/cmd/disasm/main.go b/cmd/disasm/main.go new file mode 100644 index 0000000000..c07246b004 --- /dev/null +++ b/cmd/disasm/main.go @@ -0,0 +1,34 @@ +package main + +import ( + "fmt" + "io/ioutil" + "os" + + "github.com/ethereum/go-ethereum/ethutil" + "github.com/ethereum/go-ethereum/vm" +) + +func main() { + code, err := ioutil.ReadAll(os.Stdin) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + code = ethutil.Hex2Bytes(string(code[:len(code)-1])) + fmt.Printf("%x\n", code) + + for pc := uint64(0); pc < uint64(len(code)); pc++ { + op := vm.OpCode(code[pc]) + fmt.Printf("%-5d %v", pc, op) + + switch op { + case vm.PUSH1, vm.PUSH2, vm.PUSH3, vm.PUSH4, vm.PUSH5, vm.PUSH6, vm.PUSH7, vm.PUSH8, vm.PUSH9, vm.PUSH10, vm.PUSH11, vm.PUSH12, vm.PUSH13, vm.PUSH14, vm.PUSH15, vm.PUSH16, vm.PUSH17, vm.PUSH18, vm.PUSH19, vm.PUSH20, vm.PUSH21, vm.PUSH22, vm.PUSH23, vm.PUSH24, vm.PUSH25, vm.PUSH26, vm.PUSH27, vm.PUSH28, vm.PUSH29, vm.PUSH30, vm.PUSH31, vm.PUSH32: + a := uint64(op) - uint64(vm.PUSH1) + 1 + fmt.Printf(" => %x", code[pc+1:pc+1+a]) + + pc += a + } + fmt.Println() + } +} diff --git a/cmd/mist/assets/examples/test.html b/cmd/mist/assets/examples/abi.html similarity index 67% rename from cmd/mist/assets/examples/test.html rename to cmd/mist/assets/examples/abi.html index cfc0109718..8d172482c9 100644 --- a/cmd/mist/assets/examples/test.html +++ b/cmd/mist/assets/examples/abi.html @@ -20,11 +20,10 @@ }] }]; var address = web3.eth.transact({ - data: "0x603880600c6000396000f3006001600060e060020a600035048063c6888fa114601857005b6021600435602b565b8060005260206000f35b6000816007029050", + data: "0x603880600c6000396000f3006001600060e060020a600035048063c6888fa114601857005b6021600435602b565b8060005260206000f35b600081600702905091905056", gasprice: "1000000000000000", gas: "10000", }); - console.log("created contract with addr:"+ address); var contract = web3.eth.contract(address, desc); function calculate() { @@ -36,9 +35,21 @@ +

Contract content

+ +
+603880600c6000396000f3006001600060e060020a600035048063c6888fa1140
+05b6021600435602b565b8060005260206000f35b600081600702905091905056
-
-
+
+
7 x = + diff --git a/cmd/mist/assets/examples/balance.html b/cmd/mist/assets/examples/balance.html new file mode 100644 index 0000000000..bc483a8792 --- /dev/null +++ b/cmd/mist/assets/examples/balance.html @@ -0,0 +1,40 @@ + + + + + + + + + +

coinbase balance

+ +
+
+
+
+ + + + diff --git a/rpc/packages.go b/rpc/packages.go index 4302f6018f..b25660b258 100644 --- a/rpc/packages.go +++ b/rpc/packages.go @@ -35,6 +35,19 @@ import ( "github.com/ethereum/go-ethereum/xeth" ) +func toHex(b []byte) string { + return "0x" + ethutil.Bytes2Hex(b) +} +func fromHex(s string) []byte { + if len(s) > 1 { + if s[0:2] == "0x" { + s = s[2:] + } + return ethutil.Hex2Bytes(s) + } + return nil +} + type RpcServer interface { Start() Stop() @@ -163,7 +176,7 @@ func (p *EthereumApi) GetCodeAt(args *GetCodeAtArgs, reply *interface{}) error { } func (p *EthereumApi) Sha3(args *Sha3Args, reply *interface{}) error { - *reply = ethutil.Bytes2Hex(crypto.Sha3(ethutil.Hex2Bytes(args.Data))) + *reply = toHex(crypto.Sha3(fromHex(args.Data))) return nil }