-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsetup.go
155 lines (126 loc) · 4.77 KB
/
setup.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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
package main
import (
"encoding/json"
"log"
"os"
"github.com/FastLane-Labs/atlas-examples/contracts/Atlas"
"github.com/FastLane-Labs/atlas-examples/contracts/AtlasFactory"
"github.com/FastLane-Labs/atlas-examples/contracts/AtlasVerification"
"github.com/FastLane-Labs/atlas-examples/contracts/ERC20"
"github.com/FastLane-Labs/atlas-examples/contracts/Permit2"
"github.com/FastLane-Labs/atlas-examples/contracts/SwapIntentController"
"github.com/FastLane-Labs/atlas-examples/contracts/TxBuilder"
"github.com/FastLane-Labs/atlas-examples/contracts/UniswapUniversalRouter"
"github.com/FastLane-Labs/atlas-examples/contracts/WETH9"
"github.com/FastLane-Labs/atlas-examples/entities"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/joho/godotenv"
)
type Config struct {
ChainId int64 `json:"chainId"`
AtlasAddress common.Address `json:"atlas"`
AtlasFactoryAddress common.Address `json:"atlasFactory"`
AtlasVerification common.Address `json:"atlasVerification"`
SimulatorAddress common.Address `json:"simulator"`
DAppControllerAddress common.Address `json:"dAppController"`
SolverContractAddress common.Address `json:"solverContract"`
TxBuilderAddress common.Address `json:"txBuilder"`
}
type App struct {
ChainId int64
Atlas *Atlas.Atlas
AtlasFactory *AtlasFactory.AtlasFactory
AtlasVerification *AtlasVerification.AtlasVerification
DAppController *SwapIntentController.SwapIntentController
TxBuilder *TxBuilder.TxBuilder
Weth *WETH9.WETH9
Uni *ERC20.ERC20
Permit2 *Permit2.Permit2
UniswapUniversalRouter *UniswapUniversalRouter.UniswapUniversalRouter
EthClient *ethclient.Client
PrivateKeys map[string]string
Addresses map[string]common.Address
}
func setup() *App {
log.SetFlags(log.LstdFlags | log.Lmicroseconds)
app := &App{
PrivateKeys: make(map[string]string),
Addresses: make(map[string]common.Address),
}
// Load config
var config Config
file, err := os.Open("config.json")
if err != nil {
log.Fatalf("could not load config file: %s", err)
}
defer file.Close()
decoder := json.NewDecoder(file)
err = decoder.Decode(&config)
if err != nil {
log.Fatalf("could not decode config file: %s", err)
}
app.ChainId = config.ChainId
app.Addresses["atlas"] = config.AtlasAddress
app.Addresses["atlasFactory"] = config.AtlasFactoryAddress
app.Addresses["atlasVerification"] = config.AtlasVerification
app.Addresses["simulator"] = config.SimulatorAddress
app.Addresses["dAppController"] = config.DAppControllerAddress
app.Addresses["solverContract"] = config.SolverContractAddress
// Load .env file
env, err := godotenv.Read(".env")
if err != nil {
log.Fatalf("could not load .env file: %s", err)
}
// Init eth client
app.EthClient, err = ethclient.Dial(env["RPC_URL"])
if err != nil {
log.Fatalf("could not initialize eth client: %s", err)
}
// Load Atlas related contracts
app.Atlas, err = Atlas.NewAtlas(config.AtlasAddress, app.EthClient)
if err != nil {
log.Fatal("could not initialize Atlas contract")
}
app.AtlasFactory, err = AtlasFactory.NewAtlasFactory(config.AtlasFactoryAddress, app.EthClient)
if err != nil {
log.Fatal("could not initialize AtlasFactory contract")
}
app.AtlasVerification, err = AtlasVerification.NewAtlasVerification(config.AtlasVerification, app.EthClient)
if err != nil {
log.Fatal("could not initialize AtlasVerification contract")
}
app.DAppController, err = SwapIntentController.NewSwapIntentController(config.DAppControllerAddress, app.EthClient)
if err != nil {
log.Fatal("could not initialize DAppController contract")
}
app.TxBuilder, err = TxBuilder.NewTxBuilder(config.TxBuilderAddress, app.EthClient)
if err != nil {
log.Fatal("could not initialize Tx builder contract")
}
// Load tokens contracts
app.Weth, err = WETH9.NewWETH9(entities.WETH_ADDRESS, app.EthClient)
if err != nil {
log.Fatal("could not initialize WETH9 contract")
}
app.Uni, err = ERC20.NewERC20(entities.UNI_ADDRESS, app.EthClient)
if err != nil {
log.Fatal("could not initialize UNI contract")
}
// Load Permit2 contract
app.Permit2, err = Permit2.NewPermit2(entities.Permit2_ADDRESS, app.EthClient)
if err != nil {
log.Fatal("could not initialize Permit2 contract")
}
// Load Uniswap universal router contract
app.UniswapUniversalRouter, err = UniswapUniversalRouter.NewUniswapUniversalRouter(entities.UniswapUniversalRouter_ADDRESS, app.EthClient)
if err != nil {
log.Fatal("could not initialize Uniswap V3 router contract")
}
// Private keys
app.PrivateKeys["bundler"] = env["BUNDLER_PK"]
app.PrivateKeys["governance"] = env["GOVERNANCE_PK"]
app.PrivateKeys["user"] = env["USER_PK"]
app.PrivateKeys["solver"] = env["SOLVER_PK"]
return app
}