aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--rpc/args.go5
-rw-r--r--rpc/args_test.go15
-rw-r--r--xeth/xeth.go14
3 files changed, 13 insertions, 21 deletions
diff --git a/rpc/args.go b/rpc/args.go
index 5b1c271cc..4bc36f5d9 100644
--- a/rpc/args.go
+++ b/rpc/args.go
@@ -279,11 +279,6 @@ func (args *CallArgs) UnmarshalJSON(b []byte) (err error) {
return NewDecodeParamError(err.Error())
}
- if len(ext.From) == 0 {
- return NewValidationError("from", "is required")
- }
- args.From = ext.From
-
if len(ext.To) == 0 {
return NewValidationError("to", "is required")
}
diff --git a/rpc/args_test.go b/rpc/args_test.go
index 050f8e472..cfe6c0c45 100644
--- a/rpc/args_test.go
+++ b/rpc/args_test.go
@@ -671,10 +671,6 @@ func TestCallArgs(t *testing.T) {
t.Error(err)
}
- if expected.From != args.From {
- t.Errorf("From shoud be %#v but is %#v", expected.From, args.From)
- }
-
if expected.To != args.To {
t.Errorf("To shoud be %#v but is %#v", expected.To, args.To)
}
@@ -895,19 +891,8 @@ func TestCallArgsNotStrings(t *testing.T) {
}
}
-func TestCallArgsFromEmpty(t *testing.T) {
- input := `[{"to": "0xb60e8dd61c5d32be8058bb8eb970870f07233155"}]`
-
- args := new(CallArgs)
- str := ExpectValidationError(json.Unmarshal([]byte(input), &args))
- if len(str) > 0 {
- t.Error(str)
- }
-}
-
func TestCallArgsToEmpty(t *testing.T) {
input := `[{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155"}]`
-
args := new(CallArgs)
str := ExpectValidationError(json.Unmarshal([]byte(input), &args))
if len(str) > 0 {
diff --git a/xeth/xeth.go b/xeth/xeth.go
index 94014763a..407fe69d5 100644
--- a/xeth/xeth.go
+++ b/xeth/xeth.go
@@ -572,8 +572,20 @@ func (self *XEth) PushTx(encodedTx string) (string, error) {
func (self *XEth) Call(fromStr, toStr, valueStr, gasStr, gasPriceStr, dataStr string) (string, error) {
statedb := self.State().State() //self.eth.ChainManager().TransState()
+ var from *state.StateObject
+ if len(fromStr) == 0 {
+ accounts, err := self.backend.AccountManager().Accounts()
+ if err != nil || len(accounts) == 0 {
+ from = statedb.GetOrNewStateObject(common.Address{})
+ } else {
+ from = statedb.GetOrNewStateObject(common.BytesToAddress(accounts[0].Address))
+ }
+ } else {
+ from = statedb.GetOrNewStateObject(common.HexToAddress(fromStr))
+ }
+
msg := callmsg{
- from: statedb.GetOrNewStateObject(common.HexToAddress(fromStr)),
+ from: from,
to: common.HexToAddress(toStr),
gas: common.Big(gasStr),
gasPrice: common.Big(gasPriceStr),