mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-25 22:26:42 +00:00
accounts/abi: added ability for abi to keep note of the payable field
Signed-off-by: VoR0220 <rj@erisindustries.com>
This commit is contained in:
parent
0fe35b907a
commit
2b811b4a18
3 changed files with 19 additions and 9 deletions
|
|
@ -348,6 +348,7 @@ func (abi *ABI) UnmarshalJSON(data []byte) error {
|
|||
Type string
|
||||
Name string
|
||||
Constant bool
|
||||
Payable bool
|
||||
Indexed bool
|
||||
Inputs []Argument
|
||||
Outputs []Argument
|
||||
|
|
@ -363,13 +364,15 @@ func (abi *ABI) UnmarshalJSON(data []byte) error {
|
|||
switch field.Type {
|
||||
case "constructor":
|
||||
abi.Constructor = Method{
|
||||
Inputs: field.Inputs,
|
||||
Inputs: field.Inputs,
|
||||
Payable: field.Payable,
|
||||
}
|
||||
// empty defaults to function according to the abi spec
|
||||
case "function", "":
|
||||
abi.Methods[field.Name] = Method{
|
||||
Name: field.Name,
|
||||
Const: field.Constant,
|
||||
Payable: field.Payable,
|
||||
Inputs: field.Inputs,
|
||||
Outputs: field.Outputs,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -425,8 +425,8 @@ const jsondata = `
|
|||
|
||||
const jsondata2 = `
|
||||
[
|
||||
{ "type" : "function", "name" : "balance", "constant" : true },
|
||||
{ "type" : "function", "name" : "send", "constant" : false, "inputs" : [ { "name" : "amount", "type" : "uint256" } ] },
|
||||
{ "type" : "function", "name" : "balance", "constant" : true, "payable" : false},
|
||||
{ "type" : "function", "name" : "send", "constant" : false, "payable": true, "inputs" : [ { "name" : "amount", "type" : "uint256" } ] },
|
||||
{ "type" : "function", "name" : "test", "constant" : false, "inputs" : [ { "name" : "number", "type" : "uint32" } ] },
|
||||
{ "type" : "function", "name" : "string", "constant" : false, "inputs" : [ { "name" : "inputs", "type" : "string" } ] },
|
||||
{ "type" : "function", "name" : "bool", "constant" : false, "inputs" : [ { "name" : "inputs", "type" : "bool" } ] },
|
||||
|
|
@ -446,10 +446,10 @@ func TestReader(t *testing.T) {
|
|||
exp := ABI{
|
||||
Methods: map[string]Method{
|
||||
"balance": Method{
|
||||
"balance", true, nil, nil,
|
||||
"balance", true, false, nil, nil,
|
||||
},
|
||||
"send": Method{
|
||||
"send", false, []Argument{
|
||||
"send", false, true, []Argument{
|
||||
Argument{"amount", Uint256, false},
|
||||
}, nil,
|
||||
},
|
||||
|
|
@ -549,7 +549,7 @@ func TestTestSlice(t *testing.T) {
|
|||
|
||||
func TestMethodSignature(t *testing.T) {
|
||||
String, _ := NewType("string")
|
||||
m := Method{"foo", false, []Argument{Argument{"bar", String, false}, Argument{"baz", String, false}}, nil}
|
||||
m := Method{"foo", false, false, []Argument{Argument{"bar", String, false}, Argument{"baz", String, false}}, nil}
|
||||
exp := "foo(string,string)"
|
||||
if m.Sig() != exp {
|
||||
t.Error("signature mismatch", exp, "!=", m.Sig())
|
||||
|
|
@ -561,7 +561,7 @@ func TestMethodSignature(t *testing.T) {
|
|||
}
|
||||
|
||||
uintt, _ := NewType("uint")
|
||||
m = Method{"foo", false, []Argument{Argument{"bar", uintt, false}}, nil}
|
||||
m = Method{"foo", false, false, []Argument{Argument{"bar", uintt, false}}, nil}
|
||||
exp = "foo(uint256)"
|
||||
if m.Sig() != exp {
|
||||
t.Error("signature mismatch", exp, "!=", m.Sig())
|
||||
|
|
|
|||
|
|
@ -31,10 +31,14 @@ import (
|
|||
// from the storage and therefor requires no Tx to be send to the
|
||||
// network. A method such as `Transact` does require a Tx and thus will
|
||||
// be flagged `true`.
|
||||
// If the method is `Payable` then ether can be sent along to the contract
|
||||
// with the method call. In the event that it is not `Payable` and ether
|
||||
// is sent along with the call, the method will throw and not execute the call.
|
||||
// Input specifies the required input parameters for this gives method.
|
||||
type Method struct {
|
||||
Name string
|
||||
Const bool
|
||||
Payable bool
|
||||
Inputs []Argument
|
||||
Outputs []Argument
|
||||
}
|
||||
|
|
@ -106,11 +110,14 @@ func (m Method) String() string {
|
|||
}
|
||||
outputs[i] += output.Type.String()
|
||||
}
|
||||
constant := ""
|
||||
constant, payable := "", ""
|
||||
if m.Const {
|
||||
constant = "constant "
|
||||
}
|
||||
return fmt.Sprintf("function %v(%v) %sreturns(%v)", m.Name, strings.Join(inputs, ", "), constant, strings.Join(outputs, ", "))
|
||||
if m.Payable {
|
||||
payable = "payable "
|
||||
}
|
||||
return fmt.Sprintf("function %v(%v) %sreturns(%v)", m.Name, strings.Join(inputs, ", "), constant, payable, strings.Join(outputs, ", "))
|
||||
}
|
||||
|
||||
func (m Method) Id() []byte {
|
||||
|
|
|
|||
Loading…
Reference in a new issue