|
|
|
@ -52,7 +52,7 @@ func Bind(types []string, abis []string, bytecodes []string, fsigs []map[string] |
|
|
|
|
// contracts is the map of each individual contract requested binding
|
|
|
|
|
contracts = make(map[string]*tmplContract) |
|
|
|
|
|
|
|
|
|
// structs is the map of all reclared structs shared by passed contracts.
|
|
|
|
|
// structs is the map of all redeclared structs shared by passed contracts.
|
|
|
|
|
structs = make(map[string]*tmplStruct) |
|
|
|
|
|
|
|
|
|
// isLib is the map used to flag each encountered library as such
|
|
|
|
@ -80,10 +80,10 @@ func Bind(types []string, abis []string, bytecodes []string, fsigs []map[string] |
|
|
|
|
fallback *tmplMethod |
|
|
|
|
receive *tmplMethod |
|
|
|
|
|
|
|
|
|
// identifiers are used to detect duplicated identifier of function
|
|
|
|
|
// and event. For all calls, transacts and events, abigen will generate
|
|
|
|
|
// identifiers are used to detect duplicated identifiers of functions
|
|
|
|
|
// and events. For all calls, transacts and events, abigen will generate
|
|
|
|
|
// corresponding bindings. However we have to ensure there is no
|
|
|
|
|
// identifier coliision in the bindings of these categories.
|
|
|
|
|
// identifier collisions in the bindings of these categories.
|
|
|
|
|
callIdentifiers = make(map[string]bool) |
|
|
|
|
transactIdentifiers = make(map[string]bool) |
|
|
|
|
eventIdentifiers = make(map[string]bool) |
|
|
|
@ -246,7 +246,7 @@ var bindType = map[Lang]func(kind abi.Type, structs map[string]*tmplStruct) stri |
|
|
|
|
LangJava: bindTypeJava, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// bindBasicTypeGo converts basic solidity types(except array, slice and tuple) to Go one.
|
|
|
|
|
// bindBasicTypeGo converts basic solidity types(except array, slice and tuple) to Go ones.
|
|
|
|
|
func bindBasicTypeGo(kind abi.Type) string { |
|
|
|
|
switch kind.T { |
|
|
|
|
case abi.AddressTy: |
|
|
|
@ -286,7 +286,7 @@ func bindTypeGo(kind abi.Type, structs map[string]*tmplStruct) string { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// bindBasicTypeJava converts basic solidity types(except array, slice and tuple) to Java one.
|
|
|
|
|
// bindBasicTypeJava converts basic solidity types(except array, slice and tuple) to Java ones.
|
|
|
|
|
func bindBasicTypeJava(kind abi.Type) string { |
|
|
|
|
switch kind.T { |
|
|
|
|
case abi.AddressTy: |
|
|
|
@ -330,7 +330,7 @@ func bindBasicTypeJava(kind abi.Type) string { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// pluralizeJavaType explicitly converts multidimensional types to predefined
|
|
|
|
|
// type in go side.
|
|
|
|
|
// types in go side.
|
|
|
|
|
func pluralizeJavaType(typ string) string { |
|
|
|
|
switch typ { |
|
|
|
|
case "boolean": |
|
|
|
@ -369,7 +369,7 @@ var bindTopicType = map[Lang]func(kind abi.Type, structs map[string]*tmplStruct) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// bindTopicTypeGo converts a Solidity topic type to a Go one. It is almost the same
|
|
|
|
|
// funcionality as for simple types, but dynamic types get converted to hashes.
|
|
|
|
|
// functionality as for simple types, but dynamic types get converted to hashes.
|
|
|
|
|
func bindTopicTypeGo(kind abi.Type, structs map[string]*tmplStruct) string { |
|
|
|
|
bound := bindTypeGo(kind, structs) |
|
|
|
|
|
|
|
|
@ -386,7 +386,7 @@ func bindTopicTypeGo(kind abi.Type, structs map[string]*tmplStruct) string { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// bindTopicTypeJava converts a Solidity topic type to a Java one. It is almost the same
|
|
|
|
|
// funcionality as for simple types, but dynamic types get converted to hashes.
|
|
|
|
|
// functionality as for simple types, but dynamic types get converted to hashes.
|
|
|
|
|
func bindTopicTypeJava(kind abi.Type, structs map[string]*tmplStruct) string { |
|
|
|
|
bound := bindTypeJava(kind, structs) |
|
|
|
|
|
|
|
|
@ -394,7 +394,7 @@ func bindTopicTypeJava(kind abi.Type, structs map[string]*tmplStruct) string { |
|
|
|
|
// parameters that are not value types i.e. arrays and structs are not
|
|
|
|
|
// stored directly but instead a keccak256-hash of an encoding is stored.
|
|
|
|
|
//
|
|
|
|
|
// We only convert stringS and bytes to hash, still need to deal with
|
|
|
|
|
// We only convert strings and bytes to hash, still need to deal with
|
|
|
|
|
// array(both fixed-size and dynamic-size) and struct.
|
|
|
|
|
if bound == "String" || bound == "byte[]" { |
|
|
|
|
bound = "Hash" |
|
|
|
@ -415,7 +415,7 @@ var bindStructType = map[Lang]func(kind abi.Type, structs map[string]*tmplStruct |
|
|
|
|
func bindStructTypeGo(kind abi.Type, structs map[string]*tmplStruct) string { |
|
|
|
|
switch kind.T { |
|
|
|
|
case abi.TupleTy: |
|
|
|
|
// We compose raw struct name and canonical parameter expression
|
|
|
|
|
// We compose a raw struct name and a canonical parameter expression
|
|
|
|
|
// together here. The reason is before solidity v0.5.11, kind.TupleRawName
|
|
|
|
|
// is empty, so we use canonical parameter expression to distinguish
|
|
|
|
|
// different struct definition. From the consideration of backward
|
|
|
|
@ -454,7 +454,7 @@ func bindStructTypeGo(kind abi.Type, structs map[string]*tmplStruct) string { |
|
|
|
|
func bindStructTypeJava(kind abi.Type, structs map[string]*tmplStruct) string { |
|
|
|
|
switch kind.T { |
|
|
|
|
case abi.TupleTy: |
|
|
|
|
// We compose raw struct name and canonical parameter expression
|
|
|
|
|
// We compose a raw struct name and a canonical parameter expression
|
|
|
|
|
// together here. The reason is before solidity v0.5.11, kind.TupleRawName
|
|
|
|
|
// is empty, so we use canonical parameter expression to distinguish
|
|
|
|
|
// different struct definition. From the consideration of backward
|
|
|
|
@ -486,7 +486,7 @@ func bindStructTypeJava(kind abi.Type, structs map[string]*tmplStruct) string { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// namedType is a set of functions that transform language specific types to
|
|
|
|
|
// named versions that my be used inside method names.
|
|
|
|
|
// named versions that may be used inside method names.
|
|
|
|
|
var namedType = map[Lang]func(string, abi.Type) string{ |
|
|
|
|
LangGo: func(string, abi.Type) string { panic("this shouldn't be needed") }, |
|
|
|
|
LangJava: namedTypeJava, |
|
|
|
@ -528,7 +528,7 @@ func alias(aliases map[string]string, n string) string { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// methodNormalizer is a name transformer that modifies Solidity method names to
|
|
|
|
|
// conform to target language naming concentions.
|
|
|
|
|
// conform to target language naming conventions.
|
|
|
|
|
var methodNormalizer = map[Lang]func(string) string{ |
|
|
|
|
LangGo: abi.ToCamelCase, |
|
|
|
|
LangJava: decapitalise, |
|
|
|
|