forked from seeleteam/go-seele
/
api_abi.go
40 lines (32 loc) · 966 Bytes
/
api_abi.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**
* @file
* @copyright defined in go-seele/LICENSE
*/
package seele
import (
"fmt"
"strings"
"github.com/seeleteam/go-seele/accounts/abi"
"github.com/seeleteam/go-seele/accounts/abi/bind"
"github.com/seeleteam/go-seele/common/hexutil"
)
// GeneratePayload according to abi json string and methodName and args to generate payload hex string
func (api *PublicSeeleAPI) GeneratePayload(abiJSON string, methodName string, args []string) (string, error) {
parsed, err := abi.JSON(strings.NewReader(abiJSON))
if err != nil {
return "", fmt.Errorf("invalid abiJSON '%s', err: %s", abiJSON, err)
}
method, exist := parsed.Methods[methodName]
if !exist {
return "", fmt.Errorf("method '%s' not found", methodName)
}
seeleTypeArgs, err := bind.ParseArgs(method.Inputs, args)
if err != nil {
return "", err
}
bytes, err := parsed.Pack(methodName, seeleTypeArgs...)
if err != nil {
return "", err
}
return hexutil.BytesToHex(bytes), nil
}