/
util.go
112 lines (84 loc) · 2.93 KB
/
util.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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package contract
import (
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/openweb3/web3go/types"
"github.com/pkg/errors"
)
type PaymentType = uint8
const (
// operation codes for resource pending configurations
OpCodeResourceConfigAdd = iota
OpCodeResourceConfigUpdate
OpCodeResourceConfigDelete
OpCodeResourceConfigNoPending
OpCodeResourceConfigPendingInitDefault
// token id
TokenIdCoin = 0
TokenIdAirdrop = 1
// payment type
PaymentTypeBilling = PaymentType(1)
PaymentTypeSubscribe = PaymentType(2)
)
var (
errEventSigMismatch = errors.New("event signature mismatch")
// events
EventAppRegistryCreated = "Created"
EventAppDeposit = "Deposit"
EventAppWithdraw = "Withdraw"
EventAppFrozen = "Frozen"
EventApiTokenWeightResourceChanged = "ResourceChanged"
EventVipCoinTransferSingle = "TransferSingle"
// methods
MethodAppChargeBatch = "chargeBatch"
MethodApiWeightTokenFlushPendingConfig = "flushPendingConfig"
)
func UnpackAppRegistryCreated(abi *abi.ABI, log *types.Log) (*AppRegistryCreated, error) {
eventObj := new(AppRegistryCreated)
err := unpackLogEventData(eventObj, abi, EventAppRegistryCreated, log)
return eventObj, err
}
func UnpackAppDeposit(appAbi *abi.ABI, log *types.Log) (*AppDeposit, error) {
eventObj := new(AppDeposit)
err := unpackLogEventData(eventObj, appAbi, EventAppDeposit, log)
return eventObj, err
}
func UnpackAppFrozen(appAbi *abi.ABI, log *types.Log) (*AppFrozen, error) {
eventObj := new(AppFrozen)
err := unpackLogEventData(eventObj, appAbi, EventAppWithdraw, log)
return eventObj, err
}
func UnpackAppWithdraw(appAbi *abi.ABI, log *types.Log) (*AppWithdraw, error) {
eventObj := new(AppWithdraw)
err := unpackLogEventData(eventObj, appAbi, EventAppWithdraw, log)
return eventObj, err
}
func UnpackApiWeightTokenResourceChanged(awtAbi *abi.ABI, log *types.Log) (*ApiWeightTokenResourceChanged, error) {
eventObj := new(ApiWeightTokenResourceChanged)
err := unpackLogEventData(eventObj, awtAbi, EventApiTokenWeightResourceChanged, log)
return eventObj, err
}
func UnpackVipCoinTransferSingle(vcAbi *abi.ABI, log *types.Log) (*VipCoinTransferSingle, error) {
eventObj := new(VipCoinTransferSingle)
err := unpackLogEventData(eventObj, vcAbi, EventVipCoinTransferSingle, log)
return eventObj, err
}
func unpackLogEventData(outPtr interface{}, contractAbi *abi.ABI, event string, log *types.Log) error {
if log.Topics[0] != contractAbi.Events[event].ID {
return errEventSigMismatch
}
if len(log.Data) > 0 {
if err := contractAbi.UnpackIntoInterface(outPtr, event, log.Data); err != nil {
return errors.WithMessage(err, "failed to unpack log data")
}
}
var indexed abi.Arguments
for _, arg := range contractAbi.Events[event].Inputs {
if arg.Indexed {
indexed = append(indexed, arg)
}
}
if err := abi.ParseTopics(outPtr, indexed, log.Topics[1:]); err != nil {
return errors.WithMessage(err, "failed to parse log topics")
}
return nil
}