Removed from as a requirement and changed

Removed the from as a requiremet from the RPC eth_call. Xeth#Call now
also default values to:

1. Supplied account
2. First account if any
3. No managed account => 000000..00
pull/667/head
obscuren 10 years ago
parent 204ac81188
commit a9959805e5
  1. 5
      rpc/args.go
  2. 15
      rpc/args_test.go
  3. 14
      xeth/xeth.go

@ -279,11 +279,6 @@ func (args *CallArgs) UnmarshalJSON(b []byte) (err error) {
return NewDecodeParamError(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 { if len(ext.To) == 0 {
return NewValidationError("to", "is required") return NewValidationError("to", "is required")
} }

@ -671,10 +671,6 @@ func TestCallArgs(t *testing.T) {
t.Error(err) 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 { if expected.To != args.To {
t.Errorf("To shoud be %#v but is %#v", 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) { func TestCallArgsToEmpty(t *testing.T) {
input := `[{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155"}]` input := `[{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155"}]`
args := new(CallArgs) args := new(CallArgs)
str := ExpectValidationError(json.Unmarshal([]byte(input), &args)) str := ExpectValidationError(json.Unmarshal([]byte(input), &args))
if len(str) > 0 { if len(str) > 0 {

@ -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) { func (self *XEth) Call(fromStr, toStr, valueStr, gasStr, gasPriceStr, dataStr string) (string, error) {
statedb := self.State().State() //self.eth.ChainManager().TransState() 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{ msg := callmsg{
from: statedb.GetOrNewStateObject(common.HexToAddress(fromStr)), from: from,
to: common.HexToAddress(toStr), to: common.HexToAddress(toStr),
gas: common.Big(gasStr), gas: common.Big(gasStr),
gasPrice: common.Big(gasPriceStr), gasPrice: common.Big(gasPriceStr),

Loading…
Cancel
Save