/
factory.go
81 lines (72 loc) · 1.86 KB
/
factory.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
package evm
import (
"math/big"
"strings"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/common"
"github.com/palomachain/pigeon/chain"
"github.com/palomachain/pigeon/config"
"github.com/palomachain/pigeon/errors"
"github.com/palomachain/pigeon/internal/libchain"
"github.com/palomachain/pigeon/internal/mev"
)
type Factory struct {
palomaClienter PalomaClienter
}
func NewFactory(pc PalomaClienter) *Factory {
return &Factory{
palomaClienter: pc,
}
}
func (f *Factory) Build(
cfg config.EVM,
chainReferenceID,
smartContractID,
smartContractABIJson,
smartContractAddress string,
chainID *big.Int,
blockHeight int64,
blockHeightHash common.Hash,
minOnChainBalance *big.Int,
mevClient mev.Client,
) (chain.Processor, error) {
var smartContractABI *abi.ABI
if len(smartContractABIJson) > 0 {
aabi, err := abi.JSON(strings.NewReader(smartContractABIJson))
if err != nil {
return Processor{}, errors.Unrecoverable(err)
}
smartContractABI = &aabi
}
client := &Client{
config: cfg,
paloma: f.palomaClienter,
mevClient: mevClient,
}
if err := client.init(); err != nil {
return Processor{}, err
}
if libchain.IsArbitrum(chainID) {
if err := client.injectArbClient(); err != nil {
return Processor{}, err
}
}
return Processor{
compass: &compass{
CompassID: smartContractID,
ChainReferenceID: chainReferenceID,
smartContractAddr: common.HexToAddress(smartContractAddress),
chainID: chainID,
compassAbi: smartContractABI,
paloma: f.palomaClienter,
evm: client,
startingBlockHeight: blockHeight,
},
evmClient: client,
chainType: "evm",
chainReferenceID: chainReferenceID,
blockHeight: blockHeight,
blockHeightHash: blockHeightHash,
minOnChainBalance: minOnChainBalance,
}, nil
}