core/vm, rpc: added disasm to ext_ RPC
This commit is contained in:
@@ -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
|
||||
}
|
||||
+8
-1
@@ -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