core/vm, rpc: added disasm to ext_
RPC
This commit is contained in:
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
|
||||
|
Reference in New Issue
Block a user