aboutsummaryrefslogtreecommitdiffstats
path: root/rpc/api.go
diff options
context:
space:
mode:
authorzelig <viktor.tron@gmail.com>2015-04-23 06:11:11 +0800
committerzelig <viktor.tron@gmail.com>2015-05-07 18:58:21 +0800
commit009b2216921b15962f2612687c1460a8342d49d6 (patch)
tree4adbbaccdb83a3ea55034f1681d01132452ff48d /rpc/api.go
parent97c37356fdcfac8b704c3d75b33e322a737c4e55 (diff)
downloadgo-tangerine-009b2216921b15962f2612687c1460a8342d49d6.tar
go-tangerine-009b2216921b15962f2612687c1460a8342d49d6.tar.gz
go-tangerine-009b2216921b15962f2612687c1460a8342d49d6.tar.bz2
go-tangerine-009b2216921b15962f2612687c1460a8342d49d6.tar.lz
go-tangerine-009b2216921b15962f2612687c1460a8342d49d6.tar.xz
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.go46
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 {