diff --git a/packages/dao/foundry.toml b/packages/dao/foundry.toml index c6af396..66b9190 100644 --- a/packages/dao/foundry.toml +++ b/packages/dao/foundry.toml @@ -1,12 +1,8 @@ [profile.default] src = "src" +script = "script" +test = "test" out = "out" libs = ["lib"] -remappings = [ - "custom-supertokens/=lib/custom-supertokens/", - "forge-std/=lib/forge-std/src/", - "@openzeppelin/=lib/@openzeppelin/", - "@superfluid-finance/=lib/@superfluid-finance/packages/", -] -auto_detect_remappings = true + # See more config options https://github.com/foundry-rs/foundry/tree/master/config diff --git a/packages/dao/lib/custom-supertokens/base/SuperTokenBase.sol b/packages/dao/lib/custom-supertokens/base/SuperTokenBase.sol index b5436fd..972829d 100644 --- a/packages/dao/lib/custom-supertokens/base/SuperTokenBase.sol +++ b/packages/dao/lib/custom-supertokens/base/SuperTokenBase.sol @@ -37,13 +37,6 @@ abstract contract SuperTokenBase is SuperTokenStorage, UUPSProxy { return ISuperToken(address(this)).totalSupply(); } - /// @dev Gets balanceOf - /// @param account Address to get balance of - /// @return b balance of account - function _balanceOf(address account) internal view returns (uint256 b) { - return ISuperToken(address(this)).balanceOf(account); - } - /// @dev Internal mint, calling functions should perform important checks! /// @param account Address receiving minted tokens /// @param amount Amount of tokens minted diff --git a/packages/dao/script/DeploySuperfluidDao.s.sol b/packages/dao/script/DeploySuperfluidDao.s.sol new file mode 100644 index 0000000..2ae0942 --- /dev/null +++ b/packages/dao/script/DeploySuperfluidDao.s.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +import "forge-std/Script.sol"; +import {SuperfluidDaoToken} from "../src/SuperfluidDaoToken.sol"; +import {ISuperToken} from "@superfluid-finance/ethereum-contracts/contracts/interfaces/superfluid/ISuperToken.sol"; + +address constant SUPER_TOKEN_FACTORY = 0x94f26B4c8AD12B18c12f38E878618f7664bdcCE2; + +contract DeploySuperfluidDao is Script { + SuperfluidDaoToken public token; + + function run() public { + token = new SuperfluidDaoToken(); + + token.initialize(SUPER_TOKEN_FACTORY, "SuperfluidDaoToken", "SDT"); + + token.mint(address(this), 2000000); + + console.log(ISuperToken(address(token)).balanceOf(address(this))); + } +} diff --git a/packages/dao/src/SuperfluidDao.sol b/packages/dao/src/SuperfluidDao.sol index d35fd8b..5507cfc 100644 --- a/packages/dao/src/SuperfluidDao.sol +++ b/packages/dao/src/SuperfluidDao.sol @@ -1,7 +1,8 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; +pragma solidity ^0.8.0; import {SuperfluidDaoToken} from "./SuperfluidDaoToken.sol"; +import {ISuperToken} from "@superfluid-finance/ethereum-contracts/contracts/interfaces/superfluid/ISuperToken.sol"; interface ISuperfluidDao { struct Proposal { @@ -103,7 +104,9 @@ contract SuperfluidDao is ISuperfluidDao { revert ProposalDueDatePassed(); } - uint256 voteWeight = _superfluidToken.balanceOf(msg.sender); + uint256 voteWeight = ISuperToken(address(_superfluidToken)).balanceOf( + msg.sender + ); if (voteWeight == 0) { revert ZeroSuperfluidDaoToken(); diff --git a/packages/dao/src/SuperfluidDaoToken.sol b/packages/dao/src/SuperfluidDaoToken.sol index a373968..0126e6c 100644 --- a/packages/dao/src/SuperfluidDaoToken.sol +++ b/packages/dao/src/SuperfluidDaoToken.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: AGPLv3 +// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; import {SuperTokenBase} from "custom-supertokens/base/SuperTokenBase.sol"; @@ -23,12 +23,18 @@ contract SuperfluidAdmin { } contract SuperfluidDaoToken is SuperTokenBase, SuperfluidAdmin { - constructor() { - // _initialize(SUPER_TOKEN_FACTORY, "SuperfluidDaoToken", "SDT"); - } - - function balanceOf(address account) public view returns (uint256) { - return _balanceOf(account); + constructor() {} + + /// @dev Upgrades the super token with the factory, then initializes. + /// @param factory super token factory for initialization + /// @param name super token name + /// @param symbol super token symbol + function initialize( + address factory, + string memory name, + string memory symbol + ) external onlyAdmin { + _initialize(factory, name, symbol); } function mint(address to, uint256 amount) public onlyAdmin { diff --git a/packages/dao/test/SuperfluidDao.t.sol b/packages/dao/test/SuperfluidDao.t.sol index 9930b78..095a0c6 100644 --- a/packages/dao/test/SuperfluidDao.t.sol +++ b/packages/dao/test/SuperfluidDao.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; +pragma solidity ^0.8.0; import "forge-std/Test.sol"; import "../src/SuperfluidDao.sol";