diff options
author | zelig <viktor.tron@gmail.com> | 2015-04-23 06:11:11 +0800 |
---|---|---|
committer | zelig <viktor.tron@gmail.com> | 2015-05-07 18:58:21 +0800 |
commit | 009b2216921b15962f2612687c1460a8342d49d6 (patch) | |
tree | 4adbbaccdb83a3ea55034f1681d01132452ff48d /rpc/api.go | |
parent | 97c37356fdcfac8b704c3d75b33e322a737c4e55 (diff) | |
download | go-tangerine-009b2216921b15962f2612687c1460a8342d49d6.tar.gz go-tangerine-009b2216921b15962f2612687c1460a8342d49d6.tar.zst go-tangerine-009b2216921b15962f2612687c1460a8342d49d6.zip |
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
Diffstat (limited to 'rpc/api.go')
-rw-r--r-- | rpc/api.go | 46 |
1 files changed, 31 insertions, 15 deletions
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 { |