Documentation ¶
Overview ¶
Package abi implements the Ethereum ABI (Application Binary Interface).
The Ethereum ABI is strongly typed, known at compile time and static. This ABI will handle basic type casting; unsigned to signed and visa versa. It does not handle slice casting such as unsigned slice to signed slice. Bit size type casting is also handled. ints with a bit size of 32 will be properly cast to int256, etc.
Index ¶
- Constants
- Variables
- func ReadFixedBytes(t Type, word []byte) (interface{}, error)
- func ReadInteger(typ Type, b []byte) interface{}
- func ToCamelCase(input string) string
- func U256(n *big.Int) []byte
- type ABI
- func (abi *ABI) EventByID(topic common.Hash) (*Event, error)
- func (abi *ABI) HasFallback() bool
- func (abi *ABI) HasReceive() bool
- func (abi *ABI) MethodById(sigdata []byte) (*Method, error)
- func (abi ABI) Pack(name string, args ...interface{}) ([]byte, error)
- func (abi ABI) PackPrefix(name string, rand c_type.Uint128, args ...interface{}) ([]byte, error)
- func (abi *ABI) UnmarshalJSON(data []byte) error
- func (abi ABI) Unpack(v interface{}, name string, output []byte) (err error)
- func (abi ABI) UnpackIntoMap(v map[string]interface{}, name string, data []byte) (err error)
- type Argument
- type ArgumentMarshaling
- type Arguments
- func (arguments Arguments) LengthNonIndexed() int
- func (arguments Arguments) NonIndexed() Arguments
- func (arguments Arguments) Pack(args ...interface{}) ([]byte, error)
- func (arguments Arguments) PackPrefix(args ...interface{}) ([]byte, error)
- func (arguments Arguments) PackValues(args []interface{}) ([]byte, error)
- func (arguments Arguments) Unpack(v interface{}, data []byte) error
- func (arguments Arguments) UnpackIntoMap(v map[string]interface{}, data []byte) error
- func (arguments Arguments) UnpackValues(data []byte) ([]interface{}, error)
- type Event
- type FunctionType
- type Method
- type Type
Examples ¶
Constants ¶
const ( IntTy byte = iota UintTy BoolTy StringTy SliceTy ArrayTy TupleTy AddressTy FixedBytesTy BytesTy HashTy FixedPointTy FunctionTy )
Type enumerator
Variables ¶
var ( // MaxUint256 is the maximum value that can be represented by a uint256 MaxUint256 = new(big.Int).Sub(new(big.Int).Lsh(common.Big1, 256), common.Big1) // MaxInt256 is the maximum value that can be represented by a int256 MaxInt256 = new(big.Int).Sub(new(big.Int).Lsh(common.Big1, 255), common.Big1) )
Functions ¶
func ReadFixedBytes ¶
ReadFixedBytes uses reflection to create a fixed array to be read from
func ReadInteger ¶
ReadInteger reads the integer based on its kind and returns the appropriate value
func ToCamelCase ¶
ToCamelCase converts an under-score string to a camel-case string
Types ¶
type ABI ¶
type ABI struct { Constructor Method Methods map[string]Method Events map[string]Event // Additional "special" functions introduced in solidity v0.6.0. // It's separated from the original default fallback. Each contract // can only define one fallback and receive function. Fallback Method // Note it's also used to represent legacy fallback before v0.6.0 Receive Method }
The ABI holds information about a contract's context and available invokable methods. It will allow you to type check function calls and packs data accordingly.
func JSON ¶
JSON returns a parsed ABI interface and error if it failed.
Example ¶
const definition = `[{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isBar","outputs":[{"name":"","type":"bool"}],"type":"function"}]` abi, err := JSON(strings.NewReader(definition)) if err != nil { log.Fatalln(err) } out, err := abi.Pack("isBar", common.Base58ToAddress("01")) if err != nil { log.Fatalln(err) } fmt.Printf("%x\n", out)
Output: 1f2c40920000000000000000000000000000000000000000000000000000000000000001
func (*ABI) EventByID ¶
EventByID looks an event up by its topic hash in the ABI and returns nil if none found.
func (*ABI) HasFallback ¶
HasFallback returns an indicator whether a fallback function is included.
func (*ABI) HasReceive ¶
HasReceive returns an indicator whether a receive function is included.
func (*ABI) MethodById ¶
MethodById looks up a method by the 4-byte id returns nil if none found
func (ABI) PackPrefix ¶
func (*ABI) UnmarshalJSON ¶
UnmarshalJSON implements json.Unmarshaler interface
type Argument ¶
Argument holds the name of the argument and the corresponding type. Types are used when packing and testing arguments.
func (*Argument) UnmarshalJSON ¶
UnmarshalJSON implements json.Unmarshaler interface
type ArgumentMarshaling ¶
type ArgumentMarshaling struct { Name string Type string InternalType string Components []ArgumentMarshaling Indexed bool }
type Arguments ¶
type Arguments []Argument
func (Arguments) LengthNonIndexed ¶
LengthNonIndexed returns the number of arguments when not counting 'indexed' ones. Only events can ever have 'indexed' arguments, it should always be false on arguments for method input/output
func (Arguments) NonIndexed ¶
NonIndexed returns the arguments with indexed arguments filtered out
func (Arguments) PackPrefix ¶
func (Arguments) PackValues ¶
PackValues performs the operation Go format -> Hexdata It is the semantic opposite of UnpackValues
func (Arguments) UnpackIntoMap ¶
UnpackIntoMap performs the operation hexdata -> mapping of argument name to argument value
func (Arguments) UnpackValues ¶
UnpackValues can be used to unpack ABI-encoded hexdata according to the ABI-specification, without supplying a struct to unpack into. Instead, this method returns a list containing the values. An atomic argument will be a list with one element.
type Event ¶
type Event struct { // Name is the event name used for internal representation. It's derived from // the raw name and a suffix will be added in the case of a event overload. // // e.g. // There are two events have same name: // * foo(int,int) // * foo(uint,uint) // The event name of the first one wll be resolved as foo while the second one // will be resolved as foo0. Name string // RawName is the raw event name parsed from ABI. RawName string Anonymous bool Inputs Arguments // Sig contains the string signature according to the ABI spec. // e.g. event foo(uint32 a, int b) = "foo(uint32,int256)" // Please note that "int" is substitute for its canonical representation "int256" Sig string // ID returns the canonical representation of the event's signature used by the // abi definition to identify event names and types. ID common.Hash // contains filtered or unexported fields }
type FunctionType ¶
type FunctionType int
FunctionType represents different types of functions a contract might have.
const ( // Constructor represents the constructor of the contract. // The constructor function is called while deploying a contract. Constructor FunctionType = iota // Fallback represents the fallback function. // This function is executed if no other function matches the given function // signature and no receive function is specified. Fallback // Receive represents the receive function. // This function is executed on plain Ether transfers. Receive // Function represents a normal function. Function )
type Method ¶
type Method struct { // Name is the method name used for internal representation. It's derived from // the raw name and a suffix will be added in the case of a function overload. // // e.g. // There are two functions have same name: // * foo(int,int) // * foo(uint,uint) // The method name of the first one will be resolved as foo while the second one // will be resolved as foo0. Name string RawName string // RawName is the raw method name parsed from ABI // Type indicates whether the method is a // special fallback introduced in solidity v0.6.0 Type FunctionType // StateMutability indicates the mutability state of method, // the default value is nonpayable. It can be empty if the abi // is generated by legacy compiler. StateMutability string // Legacy indicators generated by compiler before v0.6.0 Constant bool Payable bool Inputs Arguments Outputs Arguments // Sig returns the methods string signature according to the ABI spec. // e.g. function foo(uint32 a, int b) = "foo(uint32,int256)" // Please note that "int" is substitute for its canonical representation "int256" Sig string // ID returns the canonical representation of the method's signature used by the // abi definition to identify method names and types. ID []byte // contains filtered or unexported fields }
Method represents a callable given a `Name` and whether the method is a constant. If the method is `Const` no transaction needs to be created for this particular Method call. It can easily be simulated using a local VM. For example a `Balance()` method only needs to retrieve something from the storage and therefore requires no Tx to be send to the network. A method such as `Transact` does require a Tx and thus will be flagged `false`. Input specifies the required input parameters for this gives method.
func NewMethod ¶
func NewMethod(name string, rawName string, funType FunctionType, mutability string, isConst, isPayable bool, inputs Arguments, outputs Arguments) Method
NewMethod creates a new Method. A method should always be created using NewMethod. It also precomputes the sig representation and the string representation of the method.
func (Method) IsConstant ¶
IsConstant returns the indicator whether the method is read-only.
type Type ¶
type Type struct { Elem *Type Size int T byte // Our own type checking // Tuple relative fields TupleRawName string // Raw struct name defined in source code, may be empty. TupleElems []*Type // Type information of all tuple fields TupleRawNames []string // Raw field name of all tuple fields TupleType reflect.Type // Underlying struct of the tuple // contains filtered or unexported fields }
Type is the reflection of the supported argument type