forked from cerc-io/plugeth
Merge pull request #1077 from obscuren/disasm
core/vm, rpc: added disasm to `ext_` RPC
This commit is contained in:
commit
b2b9b3b567
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"
|
"math/big"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
|
"github.com/ethereum/go-ethereum/core/vm"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/logger"
|
"github.com/ethereum/go-ethereum/logger"
|
||||||
"github.com/ethereum/go-ethereum/logger/glog"
|
"github.com/ethereum/go-ethereum/logger/glog"
|
||||||
@ -344,7 +345,6 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
|
|||||||
return NewNotImplementedError(req.Method)
|
return NewNotImplementedError(req.Method)
|
||||||
|
|
||||||
case "eth_compileSolidity":
|
case "eth_compileSolidity":
|
||||||
|
|
||||||
solc, _ := api.xeth().Solc()
|
solc, _ := api.xeth().Solc()
|
||||||
if solc == nil {
|
if solc == nil {
|
||||||
return NewNotAvailableError(req.Method, "solc (solidity compiler) not found")
|
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":
|
case "eth_hashrate":
|
||||||
*reply = newHexNum(api.xeth().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":
|
// case "eth_register":
|
||||||
// // Placeholder for actual type
|
// // Placeholder for actual type
|
||||||
|
Loading…
Reference in New Issue
Block a user