mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-03-02 01:23:45 +00:00
core/vm, rpc: added disasm to ext_ RPC
This commit is contained in:
parent
f7415c0bbc
commit
7381be8edb
2 changed files with 29 additions and 1 deletions
21
core/vm/disasm.go
Normal file
21
core/vm/disasm.go
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
package vm
|
||||
|
||||
import "fmt"
|
||||
|
||||
func Disasm(code []byte) []string {
|
||||
var out []string
|
||||
for pc := uint64(0); pc < uint64(len(code)); pc++ {
|
||||
op := OpCode(code[pc])
|
||||
out = append(out, op.String())
|
||||
|
||||
switch op {
|
||||
case PUSH1, PUSH2, PUSH3, PUSH4, PUSH5, PUSH6, PUSH7, PUSH8, PUSH9, PUSH10, PUSH11, PUSH12, PUSH13, PUSH14, PUSH15, PUSH16, PUSH17, PUSH18, PUSH19, PUSH20, PUSH21, PUSH22, PUSH23, PUSH24, PUSH25, PUSH26, PUSH27, PUSH28, PUSH29, PUSH30, PUSH31, PUSH32:
|
||||
a := uint64(op) - uint64(PUSH1) + 1
|
||||
out = append(out, fmt.Sprintf("0x%x", code[pc+1:pc+1+a]))
|
||||
|
||||
pc += a
|
||||
}
|
||||
}
|
||||
|
||||
return out
|
||||
}
|
||||
|
|
@ -6,6 +6,7 @@ import (
|
|||
"math/big"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/core/vm"
|
||||
"github.com/ethereum/go-ethereum/crypto"
|
||||
"github.com/ethereum/go-ethereum/logger"
|
||||
"github.com/ethereum/go-ethereum/logger/glog"
|
||||
|
|
@ -344,7 +345,6 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
|
|||
return NewNotImplementedError(req.Method)
|
||||
|
||||
case "eth_compileSolidity":
|
||||
|
||||
solc, _ := api.xeth().Solc()
|
||||
if solc == nil {
|
||||
return NewNotAvailableError(req.Method, "solc (solidity compiler) not found")
|
||||
|
|
@ -562,6 +562,13 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
|
|||
|
||||
case "eth_hashrate":
|
||||
*reply = newHexNum(api.xeth().HashRate())
|
||||
case "ext_disasm":
|
||||
args := new(SourceArgs)
|
||||
if err := json.Unmarshal(req.Params, &args); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
*reply = vm.Disasm(common.FromHex(args.Source))
|
||||
|
||||
// case "eth_register":
|
||||
// // Placeholder for actual type
|
||||
|
|
|
|||
Loading…
Reference in a new issue