initial commit
This commit is contained in:
17
script/DeployTokenDivider.s.sol
Normal file
17
script/DeployTokenDivider.s.sol
Normal file
@@ -0,0 +1,17 @@
|
||||
// SPDX-License-Identifier: SEE LICENSE IN LICENSE
|
||||
pragma solidity ^0.8.18;
|
||||
|
||||
|
||||
import {Script} from 'forge-std/Script.sol';
|
||||
import {TokenDivider} from 'src/TokenDivider.sol';
|
||||
|
||||
contract DeployTokenDivider is Script {
|
||||
function run() external returns(TokenDivider){
|
||||
vm.startBroadcast();
|
||||
TokenDivider tokenDivider = new TokenDivider();
|
||||
vm.stopBroadcast();
|
||||
|
||||
return tokenDivider;
|
||||
}
|
||||
|
||||
}
|
||||
110
script/Interactions.s.sol
Normal file
110
script/Interactions.s.sol
Normal file
@@ -0,0 +1,110 @@
|
||||
//SPDX-License-Identifier: MIT
|
||||
pragma solidity ^0.8.18;
|
||||
|
||||
|
||||
import {Script, console} from "forge-std/Script.sol";
|
||||
import {DevOpsTools} from "lib/foundry-devops/src/DevOpsTools.sol";
|
||||
import {TokenDivider} from "src/TokenDivider.sol";
|
||||
import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
|
||||
import {IERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
|
||||
|
||||
|
||||
|
||||
|
||||
contract DivideNft is Script {
|
||||
|
||||
function run(address nftAddress, uint256 tokenId, uint256 amount) public {
|
||||
address mostRecentDelployment = DevOpsTools.get_most_recent_deployment("TokenDivider", block.chainid);
|
||||
divideNft(mostRecentDelployment, nftAddress, tokenId, amount);
|
||||
|
||||
}
|
||||
|
||||
|
||||
function divideNft(address mostRecentDeployment, address nftAddress, uint256 tokenId, uint256 amount) public {
|
||||
vm.startBroadcast(msg.sender);
|
||||
IERC721(nftAddress).approve(mostRecentDeployment, tokenId);
|
||||
vm.stopBroadcast();
|
||||
TokenDivider(mostRecentDeployment).divideNft(nftAddress, tokenId, amount);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
contract ClaimNft is Script {
|
||||
|
||||
function run(address nftAddress) public {
|
||||
address mostRecentDelployment = DevOpsTools.get_most_recent_deployment("TokenDivider", block.chainid);
|
||||
claimNft(mostRecentDelployment, nftAddress);
|
||||
}
|
||||
|
||||
|
||||
function claimNft(address mostRecentDeployment, address nftAddress) public {
|
||||
address erc20 = TokenDivider(mostRecentDeployment).getErc20InfoFromNft(nftAddress).erc20Address;
|
||||
uint256 totalErc20MintedAmount = TokenDivider(mostRecentDeployment).getErc20TotalMintedAmount(erc20);
|
||||
vm.startBroadcast(msg.sender);
|
||||
IERC20(erc20).approve(mostRecentDeployment, totalErc20MintedAmount);
|
||||
TokenDivider(mostRecentDeployment).claimNft(nftAddress);
|
||||
vm.stopBroadcast();
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
contract TransferErc20 is Script {
|
||||
function run(address nftAddress, address to, uint256 amount) public {
|
||||
address mostRecentDelployment = DevOpsTools.get_most_recent_deployment("TokenDivider", block.chainid);
|
||||
transferErc20(mostRecentDelployment, nftAddress, to, amount);
|
||||
}
|
||||
|
||||
|
||||
function transferErc20(address mostRecentDeployment, address nftAddress, address to, uint256 amount) public {
|
||||
address erc20 = TokenDivider(mostRecentDeployment).getErc20InfoFromNft(nftAddress).erc20Address;
|
||||
|
||||
vm.startBroadcast(msg.sender);
|
||||
IERC20(erc20).approve(mostRecentDeployment, amount);
|
||||
TokenDivider(mostRecentDeployment).transferErcTokens(nftAddress, to, amount);
|
||||
vm.stopBroadcast();
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
contract SellErc20 is Script {
|
||||
function run(address nftAddress, uint256 price, uint256 amount) public {
|
||||
address mostRecentDelployment = DevOpsTools.get_most_recent_deployment("TokenDivider", block.chainid);
|
||||
sellErc20(mostRecentDelployment, nftAddress, price, amount);
|
||||
}
|
||||
|
||||
|
||||
function sellErc20(address mostRecentDeployment, address nftAddress, uint256 price, uint256 amount) public {
|
||||
address erc20 = TokenDivider(mostRecentDeployment).getErc20InfoFromNft(nftAddress).erc20Address;
|
||||
|
||||
vm.startBroadcast(msg.sender);
|
||||
IERC20(erc20).approve(mostRecentDeployment, amount);
|
||||
TokenDivider(mostRecentDeployment).sellErc20(nftAddress, price, amount);
|
||||
vm.stopBroadcast();
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
contract BuyErc20 is Script {
|
||||
function run(uint256 orderIndex, address seller) public {
|
||||
address mostRecentDelployment = DevOpsTools.get_most_recent_deployment("TokenDivider", block.chainid);
|
||||
buyErc20(mostRecentDelployment, orderIndex, seller);
|
||||
}
|
||||
|
||||
|
||||
function buyErc20(address mostRecentDeployment, uint256 orderIndex ,address seller) public {
|
||||
vm.startBroadcast(msg.sender);
|
||||
TokenDivider(mostRecentDeployment).buyOrder{value: TokenDivider(mostRecentDeployment).getOrderPrice(seller, orderIndex) + ((TokenDivider(mostRecentDeployment).getOrderPrice(seller, orderIndex) / 100) / 2)}(orderIndex, seller);
|
||||
vm.stopBroadcast();
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user