Skip to content

Commit 00f8954

Browse files
feat(protocol): add DeployTaikoToken script (#16771)
1 parent fb9334c commit 00f8954

File tree

3 files changed

+87
-29
lines changed

3 files changed

+87
-29
lines changed

packages/protocol/script/DeployOnL1.s.sol

+26-29
Original file line numberDiff line numberDiff line change
@@ -168,43 +168,40 @@ contract DeployOnL1 is DeployCapability {
168168
internal
169169
returns (address sharedAddressManager, address timelock, address governor)
170170
{
171-
sharedAddressManager = vm.envAddress("SHARED_ADDRESS_MANAGER");
172-
if (sharedAddressManager != address(0)) {
173-
return (
174-
sharedAddressManager,
175-
vm.envAddress("TIMELOCK_CONTROLLER"),
176-
vm.envAddress("TAIKO_GOVERNOR")
177-
);
178-
}
179-
180171
// Deploy the timelock
181172
timelock = deployProxy({
182173
name: "timelock_controller",
183174
impl: address(new TaikoTimelockController()),
184175
data: abi.encodeCall(TaikoTimelockController.init, (address(0), 7 days))
185176
});
186177

187-
sharedAddressManager = deployProxy({
188-
name: "shared_address_manager",
189-
impl: address(new AddressManager()),
190-
data: abi.encodeCall(AddressManager.init, (address(0)))
191-
});
178+
sharedAddressManager = vm.envAddress("SHARED_ADDRESS_MANAGER");
179+
if (sharedAddressManager == address(0)) {
180+
sharedAddressManager = deployProxy({
181+
name: "shared_address_manager",
182+
impl: address(new AddressManager()),
183+
data: abi.encodeCall(AddressManager.init, (address(0)))
184+
});
185+
}
192186

193-
address taikoToken = deployProxy({
194-
name: "taiko_token",
195-
impl: address(new TaikoToken()),
196-
data: abi.encodeCall(
197-
TaikoToken.init,
198-
(
199-
timelock,
200-
vm.envString("TAIKO_TOKEN_NAME"),
201-
vm.envString("TAIKO_TOKEN_SYMBOL"),
202-
vm.envAddress("TAIKO_TOKEN_PREMINT_RECIPIENT"),
203-
address(sharedAddressManager)
204-
)
205-
),
206-
registerTo: sharedAddressManager
207-
});
187+
address taikoToken = vm.envAddress("TAIKO_TOKEN");
188+
if (taikoToken == address(0)) {
189+
taikoToken = deployProxy({
190+
name: "taiko_token",
191+
impl: address(new TaikoToken()),
192+
data: abi.encodeCall(
193+
TaikoToken.init,
194+
(
195+
timelock,
196+
vm.envString("TAIKO_TOKEN_NAME"),
197+
vm.envString("TAIKO_TOKEN_SYMBOL"),
198+
vm.envAddress("TAIKO_TOKEN_PREMINT_RECIPIENT"),
199+
address(sharedAddressManager)
200+
)
201+
),
202+
registerTo: sharedAddressManager
203+
});
204+
}
208205

209206
governor = deployProxy({
210207
name: "taiko_governor",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity 0.8.24;
3+
4+
import "../test/DeployCapability.sol";
5+
import "../contracts/L1/TaikoToken.sol";
6+
7+
contract DeployTaikoToken is DeployCapability {
8+
uint256 public privateKey = vm.envUint("PRIVATE_KEY");
9+
// MAINNET_SECURITY_COUNCIL: council.taiko.eth (0x7C50d60743D3FCe5a39FdbF687AFbAe5acFF49Fd)
10+
address public securityCouncil = vm.envAddress("SECURITY_COUNCIL");
11+
string public tokenName = vm.envString("TAIKO_TOKEN_NAME");
12+
string public tokenSymbol = vm.envString("TAIKO_TOKEN_SYMBOL");
13+
address public premintRecipient = vm.envAddress("TAIKO_TOKEN_PREMINT_RECIPIENT");
14+
15+
modifier broadcast() {
16+
require(privateKey != 0, "invalid private key");
17+
vm.startBroadcast();
18+
_;
19+
vm.stopBroadcast();
20+
}
21+
22+
function run() external broadcast {
23+
// Deploy the shared address manager at first.
24+
address sharedAddressManager = deployProxy({
25+
name: "shared_address_manager",
26+
impl: address(new AddressManager()),
27+
data: abi.encodeCall(AddressManager.init, (address(0)))
28+
});
29+
30+
// Deploy the TaikoToken contract, use securityCouncil address as the owner.
31+
deployProxy({
32+
name: "taiko_token",
33+
impl: address(new TaikoToken()),
34+
data: abi.encodeCall(
35+
TaikoToken.init,
36+
(
37+
securityCouncil,
38+
tokenName,
39+
tokenSymbol,
40+
premintRecipient,
41+
address(sharedAddressManager)
42+
)
43+
),
44+
registerTo: sharedAddressManager
45+
});
46+
}
47+
}

packages/protocol/script/test_deploy_on_l1.sh

+14
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ set -e
55

66
export PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
77
PROPOSER=0x0000000000000000000000000000000000000000 \
8+
TAIKO_TOKEN=0x0000000000000000000000000000000000000000 \
89
PROPOSER_ONE=0x0000000000000000000000000000000000000000 \
910
GUARDIAN_PROVERS="0x1000777700000000000000000000000000000001,0x1000777700000000000000000000000000000002,0x1000777700000000000000000000000000000003,0x1000777700000000000000000000000000000004,0x1000777700000000000000000000000000000005" \
1011
MIN_GUARDIANS=3 \
@@ -24,3 +25,16 @@ forge script script/DeployOnL1.s.sol:DeployOnL1 \
2425
-vvvv \
2526
--private-key $PRIVATE_KEY \
2627
--block-gas-limit 100000000
28+
29+
export PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
30+
SECURITY_COUNCIL=0x60997970C51812dc3A010C7d01b50e0d17dc79C8 \
31+
TAIKO_TOKEN_PREMINT_RECIPIENT=0xa0Ee7A142d267C1f36714E4a8F75612F20a79720 \
32+
TAIKO_TOKEN_NAME="Taiko Token" \
33+
TAIKO_TOKEN_SYMBOL=TTKO \
34+
forge script script/DeployTaikoToken.s.sol:DeployTaikoToken \
35+
--fork-url http://localhost:8545 \
36+
--broadcast \
37+
--ffi \
38+
-vvvv \
39+
--private-key $PRIVATE_KEY \
40+
--block-gas-limit 100000000

0 commit comments

Comments
 (0)