-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
12 changed files
with
742 additions
and
44 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,12 @@ | ||
[submodule "lib/forge-std"] | ||
path = lib/forge-std | ||
url = https://github.com/foundry-rs/forge-std | ||
[submodule "lib/chainlink-brownie-contracts"] | ||
path = lib/chainlink-brownie-contracts | ||
url = https://github.com/smartcontractkit/chainlink-brownie-contracts | ||
[submodule "lib/solmate"] | ||
path = lib/solmate | ||
url = https://github.com/transmissions11/solmate | ||
[submodule "lib/foundry-devops"] | ||
path = lib/foundry-devops | ||
url = https://github.com/Cyfrin/foundry-devops |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
// SPDX-License-Identifier: MIT | ||
|
||
pragma solidity 0.8.19; | ||
|
||
import {Script} from "forge-std/Script.sol"; | ||
import {Raffle} from "../src/Raffle.sol"; | ||
import {HelperConfig} from "./HelperConfig.s.sol"; | ||
import {CreateSubscription, FundSubscription, AddConsumer} from "./Interaction.s.sol"; | ||
|
||
contract DeployRaffle is Script{ | ||
function run() external returns(Raffle, HelperConfig) { | ||
HelperConfig helperConfig = new HelperConfig(); | ||
( | ||
uint256 entranceFee, | ||
uint256 interval, | ||
address vrfCoordinator, | ||
bytes32 gasLane, | ||
uint64 subscriptionId, | ||
uint32 callbackGasLimit, | ||
address link, | ||
uint256 deployKey | ||
) = helperConfig.activeNetworkConfig(); // 末尾要加上(),不然只是一个变量 | ||
|
||
if (subscriptionId == 0){ | ||
CreateSubscription createSubscription = new CreateSubscription(); | ||
subscriptionId = createSubscription.createSubscription(vrfCoordinator); | ||
|
||
// FUND | ||
FundSubscription fundSubscription = new FundSubscription(); | ||
fundSubscription.fundSubscription( | ||
vrfCoordinator, | ||
subscriptionId, | ||
link | ||
); | ||
} | ||
|
||
vm.startBroadcast(); | ||
Raffle raffle = new Raffle( | ||
entranceFee, | ||
interval, | ||
vrfCoordinator, | ||
gasLane, | ||
subscriptionId, | ||
callbackGasLimit | ||
); | ||
vm.stopBroadcast(); | ||
|
||
AddConsumer addConsumer = new AddConsumer(); | ||
addConsumer.addConsumer(address(raffle), vrfCoordinator, subscriptionId, deployKey); | ||
|
||
return (raffle, helperConfig); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
// SPDX-License-Identifier: MIT | ||
|
||
pragma solidity 0.8.19; | ||
|
||
import {Script} from "forge-std/Script.sol"; | ||
import {VRFCoordinatorV2Mock} from "@chainlink/contracts/src/v0.8/mocks/VRFCoordinatorV2Mock.sol"; | ||
import {LinkToken} from "test/mocks/LinkToken.sol"; | ||
|
||
contract HelperConfig is Script { | ||
|
||
struct NetworkConfig { | ||
uint256 entranceFee; | ||
uint256 interval; | ||
address vrfCoordinator; | ||
bytes32 gasLane; | ||
uint64 subscriptionId; | ||
uint32 callbackGasLimit; | ||
address link; | ||
uint256 deployKey; | ||
} | ||
|
||
address public FOUNDRY_DEFAULT_SENDER = 0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38; | ||
uint256 public FOUNDRY_DEFAULT_SENDER_KEY = 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80; | ||
NetworkConfig public activeNetworkConfig; | ||
|
||
constructor(){ | ||
if (block.chainid == 11155111){ | ||
activeNetworkConfig = getSepoliaEthConfig(); | ||
} else { | ||
activeNetworkConfig = getOrCreatAnvilEthConfig(); | ||
} | ||
} | ||
|
||
function getSepoliaEthConfig() public view returns(NetworkConfig memory){ | ||
return NetworkConfig({ | ||
entranceFee: 0.01 ether, | ||
interval: 30, | ||
vrfCoordinator: 0x8103B0A8A00be2DDC778e6e7eaa21791Cd364625, | ||
gasLane: 0x474e34a077df58807dbe9c96d3c009b23b3c6d0cce433e59bbf5b34f823bc56c, | ||
subscriptionId: 0, | ||
callbackGasLimit: 500000, | ||
link: 0x779877A7B0D9E8603169DdbD7836e478b4624789, | ||
deployKey: vm.envUint("PRIVATE_KEY") // 放置自己钱包的私钥 | ||
}); | ||
} | ||
|
||
function getOrCreatAnvilEthConfig() public returns(NetworkConfig memory){ | ||
|
||
if (activeNetworkConfig.vrfCoordinator != address(0)) { | ||
return activeNetworkConfig; | ||
} | ||
|
||
uint96 baseFee = 0.25 ether; // 0.25 LINK | ||
uint96 gaspriceLink = 1e9; // 1 gwei LINK | ||
vm.startBroadcast(); | ||
VRFCoordinatorV2Mock vrfCoordinatorV2Mock = new VRFCoordinatorV2Mock( | ||
baseFee, | ||
gaspriceLink | ||
); | ||
LinkToken link = new LinkToken(); | ||
|
||
vm.stopBroadcast(); | ||
|
||
return NetworkConfig({ | ||
entranceFee: 0.01 ether, | ||
interval: 30, | ||
vrfCoordinator: address(vrfCoordinatorV2Mock), | ||
gasLane: 0x474e34a077df58807dbe9c96d3c009b23b3c6d0cce433e59bbf5b34f823bc56c, | ||
subscriptionId: 0, | ||
callbackGasLimit: 500000, | ||
link: address(link), | ||
deployKey: FOUNDRY_DEFAULT_SENDER_KEY | ||
}); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
// SPDX-License-Identifier: MIT | ||
|
||
pragma solidity 0.8.19; | ||
|
||
import {Script,console} from "forge-std/Script.sol"; | ||
import {HelperConfig} from "./HelperConfig.s.sol"; | ||
import {VRFCoordinatorV2Mock} from "lib/chainlink-brownie-contracts/contracts/src/v0.8/mocks/VRFCoordinatorV2Mock.sol"; | ||
import {LinkToken} from "test/mocks/LinkToken.sol"; | ||
import {DevOpsTools} from "lib/foundry-devops/src/DevOpsTools.sol"; | ||
|
||
contract CreateSubscription is Script { | ||
|
||
function createSubscriptionUsingConfig() public returns(uint64) { | ||
HelperConfig helperConfig = new HelperConfig(); | ||
(, , address vrfCoordinator, , , , ,) = helperConfig.activeNetworkConfig(); | ||
return createSubscription(vrfCoordinator); | ||
} | ||
|
||
function createSubscription(address vrfCoordinator) public returns(uint64){ | ||
console.log("ChainId is:", block.chainid); | ||
|
||
vm.startBroadcast(); | ||
uint64 subId = VRFCoordinatorV2Mock(vrfCoordinator).createSubscription(); | ||
vm.stopBroadcast(); | ||
console.log("Your sub Id is:", subId); | ||
console.log("Please update subscriptionId in HelperConfig.s.sol"); | ||
|
||
return subId; | ||
} | ||
|
||
function run() external returns (uint64) { | ||
return createSubscriptionUsingConfig(); | ||
} | ||
} | ||
|
||
contract FundSubscription is Script { | ||
uint96 public constant FUND_AMOUNT = 3 ether; | ||
|
||
function fundSubscriptionUsingConfig() public { | ||
HelperConfig helperConfig = new HelperConfig(); | ||
( | ||
, | ||
, | ||
address vrfCoordinator, | ||
, | ||
uint64 subId, | ||
, | ||
address link, | ||
uint256 deployKey) = helperConfig.activeNetworkConfig(); | ||
fundSubscription(vrfCoordinator,subId,link); | ||
} | ||
|
||
function fundSubscription( | ||
address vrfCoordinator, | ||
uint64 subId, | ||
address link | ||
) public { | ||
console.log("Funding subscription:", subId); | ||
console.log("Using vrfCoordinator:", vrfCoordinator); | ||
console.log("On ChainID:", block.chainid); | ||
|
||
if (block.chainid == 31337){ | ||
vm.startBroadcast(); | ||
|
||
VRFCoordinatorV2Mock(vrfCoordinator).fundSubscription( | ||
subId, | ||
FUND_AMOUNT | ||
); | ||
|
||
vm.stopBroadcast(); | ||
} else { | ||
vm.startBroadcast(); | ||
|
||
LinkToken(link).transferAndCall( | ||
vrfCoordinator, | ||
FUND_AMOUNT, | ||
abi.encode(subId) | ||
); | ||
|
||
vm.stopBroadcast(); | ||
} | ||
} | ||
|
||
function run() external { | ||
fundSubscriptionUsingConfig(); | ||
} | ||
|
||
} | ||
|
||
contract AddConsumer is Script { | ||
|
||
function addConsumerUsingConfig(address raffle) public { | ||
HelperConfig helperConfig = new HelperConfig(); | ||
( | ||
, | ||
, | ||
address vrfCoordinator, | ||
, | ||
uint64 subId, | ||
, | ||
, | ||
uint256 deployKey | ||
) = helperConfig.activeNetworkConfig(); | ||
addConsumer(raffle,vrfCoordinator,subId,deployKey); | ||
} | ||
|
||
function addConsumer( | ||
address raffle, | ||
address vrfCoordinator, | ||
uint64 subId, | ||
uint256 deployKey | ||
) public { | ||
console.log("Adding consumer contract:", raffle); | ||
console.log("Using vrfCoordinator:", vrfCoordinator); | ||
console.log("On ChainID:", block.chainid); | ||
|
||
vm.startBroadcast(0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38); | ||
// vm.startBroadcast(deployKey) | ||
VRFCoordinatorV2Mock(vrfCoordinator).addConsumer(subId, raffle); | ||
vm.stopBroadcast(); | ||
} | ||
|
||
function run() external { | ||
address raffle = DevOpsTools.get_most_recent_deployment("MyContract", block.chainid); | ||
addConsumerUsingConfig(raffle); | ||
} | ||
|
||
} |
Oops, something went wrong.