diff --git a/script/RaidGeld.s.sol b/script/RaidGeld.s.sol index 1cce4ee..cacd86d 100644 --- a/script/RaidGeld.s.sol +++ b/script/RaidGeld.s.sol @@ -12,7 +12,7 @@ contract RaidGeldScript is Script, Constants { function run() public { vm.startBroadcast(); - raidgeld = new RaidGeld(DAO_TOKEN, POOL); + raidgeld = new RaidGeld(DAO_TOKEN, POOL, BAAL); vm.stopBroadcast(); } } diff --git a/src/Constants.sol b/src/Constants.sol index 58237ff..e1ea2bb 100644 --- a/src/Constants.sol +++ b/src/Constants.sol @@ -5,6 +5,7 @@ contract Constants { //base addresses address public constant DAO_TOKEN = 0x11dC980faf34A1D082Ae8A6a883db3A950a3c6E8; address public constant POOL = 0x27004f6d0c1bB7979367D32Ba9d6DF6d61A18926; + address public constant BAAL = 0x4d5A5B4a679b10038e1677C84Cb675d10d29fFFD; address public constant WETH = 0x4200000000000000000000000000000000000006; address public constant SWAP_ROUTER = 0x2626664c2603336E57B271c5C0b26F421741e481; } diff --git a/src/RaidGeld.sol b/src/RaidGeld.sol index 1da2f84..bb50c5e 100644 --- a/src/RaidGeld.sol +++ b/src/RaidGeld.sol @@ -3,6 +3,7 @@ pragma solidity ^0.8.13; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; +import {IBaal} from "lib/Baal/contracts/interfaces/IBaal.sol"; import {RaidGeldUtils} from "../src/RaidGeldUtils.sol"; import {Army, Player, Raider, Boss} from "../src/RaidGeldStructs.sol"; @@ -13,6 +14,7 @@ contract RaidGeld is ERC20, Ownable, Constants { uint256 public constant BUY_IN_AMOUNT = 0.00005 ether; uint256 public BUY_IN_DAO_TOKEN_AMOUNT; uint256 public constant INITIAL_GELD = 50 * MANTISSA; + uint256 public constant SACRIFICE_SHARE = 1e3; // 10% mapping(address => Player) private players; mapping(address => Army) private armies; mapping(address => Boss) private bosses; @@ -21,6 +23,7 @@ contract RaidGeld is ERC20, Ownable, Constants { IWETH public immutable weth = IWETH(WETH); // RGCVII token ERC20 public daoToken; + IBaal public baal; // RGCVII pool address public pool; // Uniswap @@ -62,9 +65,10 @@ contract RaidGeld is ERC20, Ownable, Constants { _; } - constructor(address _daoToken, address _pool) ERC20("Raid Geld", "GELD") Ownable(msg.sender) { + constructor(address _daoToken, address _pool, address _baal) ERC20("Raid Geld", "GELD") Ownable(msg.sender) { daoToken = ERC20(_daoToken); pool = _pool; + baal = IBaal(_baal); BUY_IN_DAO_TOKEN_AMOUNT = 500 * 10 ** daoToken.decimals(); } @@ -134,6 +138,11 @@ contract RaidGeld is ERC20, Ownable, Constants { ); start_game(msg.sender); } + function sacrificeToDao(uint256 _baseAmount) private { + uint256 amount = _baseAmount * SACRIFICE_SHARE / MANTIASSA; + address[] memory tokens = new address[](0); + baal.ragequite(address(this), amount, 0, tokens); + } // Override for default number of decimals function decimals() public view virtual override returns (uint8) { diff --git a/test/RaidGeld.t.sol b/test/RaidGeld.t.sol index 1d32a09..44b2e4b 100644 --- a/test/RaidGeld.t.sol +++ b/test/RaidGeld.t.sol @@ -36,7 +36,7 @@ contract raid_geldTest is Test, Constants { vm.deal(owner, 10 ether); fundAccount(player1); vm.prank(owner); - raid_geld = new RaidGeld(DAO_TOKEN, POOL); + raid_geld = new RaidGeld(DAO_TOKEN, POOL, BAAL); raid_geld.weth().deposit{value: 5 ether}(); }