/
llo_verifier_decoder.go
67 lines (56 loc) · 1.9 KB
/
llo_verifier_decoder.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
package evm
import (
"fmt"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/common"
"github.com/pkg/errors"
ocrtypes "github.com/smartcontractkit/libocr/offchainreporting2plus/types"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/llo-feeds/generated/channel_verifier"
)
var _ LogDecoder = &channelVerifierLogDecoder{}
type channelVerifierLogDecoder struct {
eventName string
eventSig common.Hash
abi *abi.ABI
}
func newChannelVerifierLogDecoder() (*channelVerifierLogDecoder, error) {
const eventName = "ConfigSet"
abi, err := channel_verifier.ChannelVerifierMetaData.GetAbi()
if err != nil {
return nil, err
}
return &channelVerifierLogDecoder{
eventName: eventName,
eventSig: abi.Events[eventName].ID,
abi: abi,
}, nil
}
func (d *channelVerifierLogDecoder) Decode(rawLog []byte) (ocrtypes.ContractConfig, error) {
unpacked := new(channel_verifier.ChannelVerifierConfigSet)
err := d.abi.UnpackIntoInterface(unpacked, d.eventName, rawLog)
if err != nil {
return ocrtypes.ContractConfig{}, errors.Wrap(err, "failed to unpack log data")
}
var transmitAccounts []ocrtypes.Account
for _, addr := range unpacked.OffchainTransmitters {
transmitAccounts = append(transmitAccounts, ocrtypes.Account(fmt.Sprintf("%x", addr)))
}
var signers []ocrtypes.OnchainPublicKey
for _, addr := range unpacked.Signers {
addr := addr
signers = append(signers, addr[:])
}
return ocrtypes.ContractConfig{
ConfigDigest: unpacked.ConfigDigest,
ConfigCount: unpacked.ConfigCount,
Signers: signers,
Transmitters: transmitAccounts,
F: unpacked.F,
OnchainConfig: unpacked.OnchainConfig,
OffchainConfigVersion: unpacked.OffchainConfigVersion,
OffchainConfig: unpacked.OffchainConfig,
}, nil
}
func (d *channelVerifierLogDecoder) EventSig() common.Hash {
return d.eventSig
}