Skip to content

Commit c996e89

Browse files
committed
deploy: add deploy scripts
1 parent f4cb717 commit c996e89

File tree

6 files changed

+121
-19
lines changed

6 files changed

+121
-19
lines changed

.env.example

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
BSC_MAINNET_RPC_URL=
2+
BSC_TESTNET_RPC_URL=
3+
ETHERSCAN_API_KEY=

README.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,3 +75,33 @@ $ forge coverage
7575
```shell
7676
$ forge fmt
7777
```
78+
79+
### Deploy all
80+
81+
Deploy `VestingParams.sol`, `MetaToken.sol`, `MetaTokenDistributor.sol`. Project realize deploy to BNB Smart Chain testnet and mainnet.
82+
83+
1. Create `.env` and edit args according to [.env.example](./.env.example).
84+
2. Open [DeployAll](./script/DeployAll.s.sol) script and edit params to deploy
85+
3. Run script
86+
87+
```shell
88+
forge script script/DeployAll.s.sol:DeployAllScript --rpc-url bnb-testnet --broadcast --slow --verify -vvvv --interactives 1
89+
```
90+
91+
3. Enter deployer private key. You need to hold native currency for pay gas.
92+
93+
_Important!_ Change `--rpc-url` on `bnb-mainnet` for deploy to mainnet.
94+
95+
96+
## Start vestings
97+
98+
You need MetaTokenDistributor address for start vestings. Use [DeployAll](./script/DeployAll.s.sol) for first deploy.
99+
100+
1. Run script
101+
```shell
102+
forge script script/StartVestings.s.sol:StartVestingsScript --rpc-url bnb-testnet --broadcast --sig "run(address)" "<MetaTokenDistributor address>" --slow -vvvv --interactives 1
103+
```
104+
105+
2. Enter deployer private key. You need to hold native currency for pay gas.
106+
107+
_Important!_ Change `--rpc-url` on `bnb-mainnet` for deploy to mainnet.

foundry.toml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,12 @@ src = "src"
33
out = "out"
44
libs = ["lib"]
55

6+
[rpc_endpoints]
7+
bnb-testnet = "${BNB_SMART_CHAIN_TESTNET_RPC_URL}"
8+
bnb-mainnet = "${BNB_SMART_CHAIN_MAINNET_RPC_URL}"
9+
10+
[etherscan]
11+
bnb-testnet = { key = "${ETHERSCAN_API_KEY}" }
12+
bnb-mainnet = { key = "${ETHERSCAN_API_KEY}" }
13+
614
# See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options

script/DeployAll.s.sol

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// SPDX-License-Identifier: UNLICENSED
2+
pragma solidity 0.8.28;
3+
4+
import {Script, console} from "forge-std/Script.sol";
5+
6+
import {MetaTokenDistributor} from "src/tokenDistribution/MetaTokenDistributor.sol";
7+
import {VestingParams} from "src/tokenDistribution/vesting/VestingParams.sol";
8+
import {Beneficiary, VestingType} from "src/tokenDistribution/utils/Common.sol";
9+
10+
/**
11+
* @title First deploy
12+
* @author Pavel Naydanov
13+
* @notice Deploy VestingParams, MetaTokenDistributor, MetaLamp token.
14+
*/
15+
contract DeployAllScript is Script {
16+
address constant TEAM_BENEFICIARY_ADDRESS = 0x9b5DCAA3002d77fB9dEDfc1006838d08977a3432;
17+
uint256 constant TEAM_BENEFICIARY_AMOUNT = 100_000_000e18;
18+
19+
address constant LIQUIDITY_BENEFICIARY_ADDRESS = 0x9b5DCAA3002d77fB9dEDfc1006838d08977a3432;
20+
uint256 constant LIQUIDITY_BENEFICIARY_AMOUNT = 287_500_000e18;
21+
22+
VestingParams public vestingParams;
23+
MetaTokenDistributor public distributor;
24+
25+
function run() public {
26+
// Adding 5 minutes to block.timestamp to account for potential transaction confirmation delays in BNB Smart Chain,
27+
// ensuring startTime is set in the future relative to the block in which the transaction is included.
28+
uint64 startTime = uint64(block.timestamp + 5 minutes);
29+
30+
Beneficiary[] memory teamBeneficiaries = new Beneficiary[](1);
31+
teamBeneficiaries[0] = Beneficiary({account: TEAM_BENEFICIARY_ADDRESS, amount: TEAM_BENEFICIARY_AMOUNT });
32+
33+
Beneficiary[] memory liquidityBeneficiaries = new Beneficiary[](1);
34+
liquidityBeneficiaries[0] = Beneficiary({account: LIQUIDITY_BENEFICIARY_ADDRESS, amount: LIQUIDITY_BENEFICIARY_AMOUNT});
35+
36+
vm.startBroadcast();
37+
38+
vestingParams = new VestingParams(startTime, teamBeneficiaries, liquidityBeneficiaries);
39+
distributor = new MetaTokenDistributor(address(vestingParams));
40+
41+
vm.stopBroadcast();
42+
43+
console.log("------------------ Deployed contracts --------------------");
44+
console.log("MetaLamp token: ", address(distributor.getMETAAddress()));
45+
console.log("VestingParams address", address(vestingParams));
46+
console.log("MetaToken distributor: ", address(distributor));
47+
48+
console.log("------------------ Deployment info -----------------------");
49+
console.log("Chain ID: ", block.chainid);
50+
}
51+
}

script/MetaToken.s.sol

Lines changed: 0 additions & 19 deletions
This file was deleted.

script/StartVestings.s.sol

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// SPDX-License-Identifier: UNLICENSED
2+
pragma solidity 0.8.28;
3+
4+
import {Script, console} from "forge-std/Script.sol";
5+
6+
import {IMetaTokenDistributor} from "src/tokenDistribution/MetaTokenDistributor.sol";
7+
import {VestingType} from "src/tokenDistribution/utils/Common.sol";
8+
9+
/**
10+
* @title Start vestings
11+
* @author Pavel Naydanov
12+
*/
13+
contract StartVestingsScript is Script {
14+
function run(address distributor) public {
15+
vm.startBroadcast();
16+
17+
address teamVesting = IMetaTokenDistributor(distributor).startVesting(VestingType.TEAM);
18+
address liquidityVesting = IMetaTokenDistributor(distributor).startVesting(VestingType.LIQUIDITY);
19+
20+
vm.stopBroadcast();
21+
22+
console.log("------------------ Deployed contracts --------------------");
23+
console.log("Team vesting:", teamVesting);
24+
console.log("Liquidity vesting:", liquidityVesting);
25+
26+
console.log("------------------ Deployment info -----------------------");
27+
console.log("Chain ID: ", block.chainid);
28+
}
29+
}

0 commit comments

Comments
 (0)