@@ -10,60 +10,151 @@ import {BatchAuction} from "../src/BatchAuction.sol";
1010import {MarketFactory} from "../src/MarketFactory.sol " ;
1111import {PythResolver} from "../src/PythResolver.sol " ;
1212import {Redemption} from "../src/Redemption.sol " ;
13+ import {AIResolver} from "../src/AIResolver.sol " ;
1314
1415contract DeployMainnetScript is Script {
16+ address internal constant USDT_BSC_MAINNET = 0x55d398326f99059fF775485246999027B3197955 ;
17+ address internal constant PYTH_BSC_MAINNET = 0x4D7E825f80bDf85e913E0DD2A2D54927e9dE1594 ;
18+
19+ // BTC/USD Pyth price feed ID
20+ bytes32 internal constant BTC_USD_PRICE_ID = 0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43 ;
21+
22+ struct Deployed {
23+ address feeModel;
24+ address outcomeToken;
25+ address vault;
26+ address orderBook;
27+ address batchAuction;
28+ address factory;
29+ address pythResolver;
30+ address aiResolver;
31+ address redemption;
32+ address pyth;
33+ address usdt;
34+ }
35+
1536 function run () external {
1637 uint256 pk = vm.envUint ("DEPLOYER_PRIVATE_KEY " );
1738 address deployer = vm.addr (pk);
18-
19- // BSC Mainnet addresses
20- address usdt = 0x55d398326f99059fF775485246999027B3197955 ;
21- address pyth = 0x4D7E825f80bDf85e913E0DD2A2D54927e9dE1594 ;
39+ address keeper = vm.envOr ("KEEPER_ADDRESS " , deployer);
40+ address resolutionKeeper = vm.envOr ("RESOLUTION_KEEPER_ADDRESS " , address (0 ));
41+ if (resolutionKeeper == address (0 )) {
42+ resolutionKeeper = vm.envOr ("RESOLUTION_ADDRESS " , keeper);
43+ }
44+
45+ require (block .chainid == 56 , "DeployMainnet: not BSC mainnet " );
2246
23- console.log ("Deploying Strike to BSC Mainnet... " );
47+ console.log ("Deploying Strike protocol to BSC Mainnet... " );
48+ console.log (" Chain ID: " , block .chainid );
2449 console.log (" Deployer: " , deployer);
50+ console.log (" Keeper: " , keeper);
51+ console.log (" Resolution keeper: " , resolutionKeeper);
52+ console.log (" Pyth: " , PYTH_BSC_MAINNET);
53+ console.log (" USDT: " , USDT_BSC_MAINNET);
54+
55+ Deployed memory d;
56+ d.pyth = PYTH_BSC_MAINNET;
57+ d.usdt = USDT_BSC_MAINNET;
2558
2659 vm.startBroadcast (pk);
2760
2861 FeeModel feeModel = new FeeModel (deployer, 20 , deployer);
29- console. log ( " FeeModel: " , address (feeModel) );
62+ d.feeModel = address (feeModel);
3063
3164 OutcomeToken outcomeToken = new OutcomeToken (deployer);
32- console. log ( " OutcomeToken: " , address (outcomeToken) );
65+ d.outcomeToken = address (outcomeToken);
3366
34- Vault vault = new Vault (deployer, usdt );
35- console. log ( " Vault: " , address (vault) );
67+ Vault vault = new Vault (deployer, USDT_BSC_MAINNET );
68+ d.vault = address (vault);
3669
3770 OrderBook orderBook = new OrderBook (deployer, address (vault), address (feeModel), address (outcomeToken));
38- console. log ( " OrderBook: " , address (orderBook) );
71+ d.orderBook = address (orderBook);
3972
40- BatchAuction batchAuction = new BatchAuction (deployer, address (orderBook), address (vault), address (outcomeToken));
41- console.log ("BatchAuction: " , address (batchAuction));
73+ BatchAuction batchAuction =
74+ new BatchAuction (deployer, address (orderBook), address (vault), address (outcomeToken));
75+ d.batchAuction = address (batchAuction);
4276
4377 MarketFactory factory = new MarketFactory (deployer, address (orderBook), address (outcomeToken));
44- console.log ("MarketFactory: " , address (factory));
78+ d.factory = address (factory);
79+
80+ PythResolver pythResolver = new PythResolver (PYTH_BSC_MAINNET, address (factory));
81+ d.pythResolver = address (pythResolver);
4582
46- PythResolver pythResolver = new PythResolver (pyth, address (factory));
47- console. log ( " PythResolver: " , address (pythResolver) );
83+ AIResolver aiResolver = new AIResolver ( address (factory), deployer );
84+ d.aiResolver = address (aiResolver );
4885
4986 Redemption redemption = new Redemption (address (factory), address (outcomeToken), address (vault));
50- console. log ( " Redemption: " , address (redemption) );
87+ d.redemption = address (redemption);
5188
52- // Wire roles
53- orderBook.grantRole (orderBook.OPERATOR_ROLE (), address (batchAuction));
54- orderBook.grantRole (orderBook.OPERATOR_ROLE (), address (factory));
89+ _wireRoles (d, deployer, keeper, resolutionKeeper);
5590
56- vault.grantRole (vault.PROTOCOL_ROLE (), address (orderBook));
57- vault.grantRole (vault.PROTOCOL_ROLE (), address (batchAuction));
58- vault.grantRole (vault.PROTOCOL_ROLE (), address (redemption));
91+ vm.stopBroadcast ();
5992
60- outcomeToken.grantRole (outcomeToken.MINTER_ROLE (), address (batchAuction));
61- outcomeToken.grantRole (outcomeToken.MINTER_ROLE (), address (redemption));
62- outcomeToken.grantRole (outcomeToken.ESCROW_ROLE (), address (batchAuction));
93+ _printJson (d);
94+ }
6395
64- factory.grantRole (factory.ADMIN_ROLE (), address (pythResolver));
96+ function _wireRoles (Deployed memory d , address deployer , address keeper , address resolutionKeeper ) internal {
97+ OrderBook orderBook = OrderBook (d.orderBook);
98+ Vault vault = Vault (d.vault);
99+ OutcomeToken outcomeToken = OutcomeToken (d.outcomeToken);
100+ MarketFactory factory = MarketFactory (d.factory);
101+ AIResolver aiResolver = AIResolver (payable (d.aiResolver));
102+
103+ orderBook.grantRole (orderBook.OPERATOR_ROLE (), d.batchAuction);
104+ orderBook.grantRole (orderBook.OPERATOR_ROLE (), d.factory);
105+ orderBook.grantRole (orderBook.OPERATOR_ROLE (), keeper);
106+
107+ vault.grantRole (vault.PROTOCOL_ROLE (), d.orderBook);
108+ vault.grantRole (vault.PROTOCOL_ROLE (), d.batchAuction);
109+ vault.grantRole (vault.PROTOCOL_ROLE (), d.redemption);
110+
111+ outcomeToken.grantRole (outcomeToken.MINTER_ROLE (), d.batchAuction);
112+ outcomeToken.grantRole (outcomeToken.MINTER_ROLE (), d.redemption);
113+ outcomeToken.grantRole (outcomeToken.ESCROW_ROLE (), d.batchAuction);
114+
115+ factory.grantRole (factory.ADMIN_ROLE (), d.pythResolver);
116+ factory.grantRole (factory.ADMIN_ROLE (), d.aiResolver);
117+ factory.grantRole (factory.ADMIN_ROLE (), keeper);
118+ factory.grantRole (factory.ADMIN_ROLE (), resolutionKeeper);
65119 factory.grantRole (factory.MARKET_CREATOR_ROLE (), deployer);
120+ factory.grantRole (factory.MARKET_CREATOR_ROLE (), keeper);
121+ factory.setAIResolver (d.aiResolver);
66122
67- vm.stopBroadcast ();
123+ aiResolver.grantRole (aiResolver.KEEPER_ROLE (), keeper);
124+ aiResolver.grantRole (aiResolver.KEEPER_ROLE (), resolutionKeeper);
125+ }
126+
127+ function _printJson (Deployed memory d ) internal view {
128+ string memory json = string .concat (
129+ '{"feeModel":" ' ,
130+ vm.toString (d.feeModel),
131+ '","outcomeToken":" ' ,
132+ vm.toString (d.outcomeToken),
133+ '","vault":" ' ,
134+ vm.toString (d.vault),
135+ '","orderBook":" ' ,
136+ vm.toString (d.orderBook),
137+ '","batchAuction":" ' ,
138+ vm.toString (d.batchAuction),
139+ '","pyth":" ' ,
140+ vm.toString (d.pyth)
141+ );
142+ json = string .concat (
143+ json,
144+ '","usdt":" ' ,
145+ vm.toString (d.usdt),
146+ '","marketFactory":" ' ,
147+ vm.toString (d.factory),
148+ '","pythResolver":" ' ,
149+ vm.toString (d.pythResolver),
150+ '","aiResolver":" ' ,
151+ vm.toString (d.aiResolver),
152+ '","redemption":" ' ,
153+ vm.toString (d.redemption),
154+ '","btcUsdPriceId":" ' ,
155+ vm.toString (BTC_USD_PRICE_ID),
156+ '"} '
157+ );
158+ console.log (json);
68159 }
69160}
0 commit comments