From 009b2216921b15962f2612687c1460a8342d49d6 Mon Sep 17 00:00:00 2001 From: zelig Date: Wed, 22 Apr 2015 23:11:11 +0100 Subject: solidity compiler and contract metadocs integration * common/compiler: solidity compiler + tests * rpc: eth_compilers, eth_compileSolidity + tests * fix natspec test using keystore API, notice exp dynamically changes addr, cleanup * resolver implements registrars and needs to create reg contract (temp) * xeth: solidity compiler. expose getter Solc() and paths setter SetSolc(solcPath) * ethereumApi: implement compiler related RPC calls using XEth - json struct tests * admin: make use of XEth.SetSolc to allow runtime setting of compiler paths * cli: command line flags solc to set custom solc bin path * js admin api with new features debug and contractInfo modules * wiki is the doc https://github.com/ethereum/go-ethereum/wiki/Contracts-and-Transactions --- rpc/api.go | 46 +++++++++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 15 deletions(-) (limited to 'rpc/api.go') diff --git a/rpc/api.go b/rpc/api.go index b79a1306e..452116fb4 100644 --- a/rpc/api.go +++ b/rpc/api.go @@ -2,9 +2,8 @@ package rpc import ( "encoding/json" - "fmt" "math/big" - "sync" + // "sync" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" @@ -14,8 +13,7 @@ import ( ) type EthereumApi struct { - eth *xeth.XEth - xethMu sync.RWMutex + eth *xeth.XEth } func NewEthereumApi(xeth *xeth.XEth) *EthereumApi { @@ -27,9 +25,6 @@ func NewEthereumApi(xeth *xeth.XEth) *EthereumApi { } func (api *EthereumApi) xeth() *xeth.XEth { - api.xethMu.RLock() - defer api.xethMu.RUnlock() - return api.eth } @@ -154,6 +149,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err } *reply = newHexNum(big.NewInt(int64(len(br.Uncles))).Bytes()) + case "eth_getData", "eth_getCode": args := new(GetDataArgs) if err := json.Unmarshal(req.Params, &args); err != nil { @@ -161,18 +157,13 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err } v := api.xethAtStateNum(args.BlockNumber).CodeAtBytes(args.Address) *reply = newHexData(v) + case "eth_sendTransaction", "eth_transact": args := new(NewTxArgs) if err := json.Unmarshal(req.Params, &args); err != nil { return err } - // call ConfirmTransaction first - tx, _ := json.Marshal(req) - if !api.xeth().ConfirmTransaction(string(tx)) { - return fmt.Errorf("Transaction not confirmed") - } - // nonce may be nil ("guess" mode) var nonce string if args.Nonce != nil { @@ -311,11 +302,36 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err } else { *reply = v.Uncles[args.Index] } + case "eth_getCompilers": - c := []string{""} + var lang string + if solc, _ := api.xeth().Solc(); solc != nil { + lang = "Solidity" + } + c := []string{lang} *reply = c - case "eth_compileSolidity", "eth_compileLLL", "eth_compileSerpent": + + case "eth_compileLLL", "eth_compileSerpent": return NewNotImplementedError(req.Method) + + case "eth_compileSolidity": + + solc, _ := api.xeth().Solc() + if solc == nil { + return NewNotImplementedError(req.Method) + } + + args := new(SourceArgs) + if err := json.Unmarshal(req.Params, &args); err != nil { + return err + } + + contract, err := solc.Compile(args.Source) + if err != nil { + return err + } + *reply = contract + case "eth_newFilter": args := new(BlockFilterArgs) if err := json.Unmarshal(req.Params, &args); err != nil { -- cgit v1.2.3