kopia lustrzana https://github.com/bugout-dev/dao
tests wip
rodzic
4c4b0cf223
commit
9d4267f1d0
|
@ -12,6 +12,7 @@ pragma solidity ^0.8.9;
|
||||||
import "@openzeppelin-contracts/contracts/token/ERC1155/IERC1155.sol";
|
import "@openzeppelin-contracts/contracts/token/ERC1155/IERC1155.sol";
|
||||||
import "@openzeppelin-contracts/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol";
|
import "@openzeppelin-contracts/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol";
|
||||||
import "../diamond/libraries/LibDiamond.sol";
|
import "../diamond/libraries/LibDiamond.sol";
|
||||||
|
import "./IERC1155Enumerable.sol";
|
||||||
import "./LibTerminus.sol";
|
import "./LibTerminus.sol";
|
||||||
|
|
||||||
contract TerminusInitializer {
|
contract TerminusInitializer {
|
||||||
|
@ -19,7 +20,7 @@ contract TerminusInitializer {
|
||||||
LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
|
LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
|
||||||
ds.supportedInterfaces[type(IERC1155).interfaceId] = true;
|
ds.supportedInterfaces[type(IERC1155).interfaceId] = true;
|
||||||
ds.supportedInterfaces[type(IERC1155MetadataURI).interfaceId] = true;
|
ds.supportedInterfaces[type(IERC1155MetadataURI).interfaceId] = true;
|
||||||
ds.supportedInterfaces[type(IERC1155MetadataURI).interfaceId] = true;
|
ds.supportedInterfaces[type(IERC1155Enumerable).interfaceId] = true;
|
||||||
|
|
||||||
LibTerminus.TerminusStorage storage ts = LibTerminus.terminusStorage();
|
LibTerminus.TerminusStorage storage ts = LibTerminus.terminusStorage();
|
||||||
ts.controller = msg.sender;
|
ts.controller = msg.sender;
|
||||||
|
|
|
@ -10,18 +10,22 @@
|
||||||
pragma solidity ^0.8.9;
|
pragma solidity ^0.8.9;
|
||||||
|
|
||||||
import "../LibTerminus.sol";
|
import "../LibTerminus.sol";
|
||||||
|
import "../../diamond/libraries/LibDiamond.sol";
|
||||||
|
import "../IERC1155Enumerable.sol";
|
||||||
|
|
||||||
contract PoolControllerEnumeration {
|
contract PoolControllerEnumeration {
|
||||||
function init() external {
|
function init() external {
|
||||||
|
LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
|
||||||
|
ds.supportedInterfaces[type(IERC1155Enumerable).interfaceId] = true;
|
||||||
|
|
||||||
LibTerminus.TerminusStorage storage ts = LibTerminus.terminusStorage();
|
LibTerminus.TerminusStorage storage ts = LibTerminus.terminusStorage();
|
||||||
|
|
||||||
for(uint256 i = 0; i < ts.currentPoolID; i++)
|
for (uint256 i = 0; i < ts.currentPoolID; i++) {
|
||||||
{
|
|
||||||
address poolController = ts.poolController[i];
|
address poolController = ts.poolController[i];
|
||||||
ts.controlledPools[poolController][ts.controllerPoolsNumber[poolController]] = i;
|
ts.controlledPools[poolController][
|
||||||
|
ts.controllerPoolsNumber[poolController]
|
||||||
|
] = i;
|
||||||
ts.controllerPoolsNumber[poolController]++;
|
ts.controllerPoolsNumber[poolController]++;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
12
dao/core.py
12
dao/core.py
|
@ -21,6 +21,10 @@ from . import (
|
||||||
TerminusFacet,
|
TerminusFacet,
|
||||||
TerminusInitializer,
|
TerminusInitializer,
|
||||||
)
|
)
|
||||||
|
from .fixtures import (
|
||||||
|
TerminusFacetFixture,
|
||||||
|
TerminusInitializerFixture,
|
||||||
|
)
|
||||||
|
|
||||||
FACETS: Dict[str, Any] = {
|
FACETS: Dict[str, Any] = {
|
||||||
"DiamondCutFacet": DiamondCutFacet,
|
"DiamondCutFacet": DiamondCutFacet,
|
||||||
|
@ -28,6 +32,7 @@ FACETS: Dict[str, Any] = {
|
||||||
"ERC20Facet": ERC20Facet,
|
"ERC20Facet": ERC20Facet,
|
||||||
"OwnershipFacet": OwnershipFacet,
|
"OwnershipFacet": OwnershipFacet,
|
||||||
"TerminusFacet": TerminusFacet,
|
"TerminusFacet": TerminusFacet,
|
||||||
|
"TerminusFacetFixture": TerminusFacetFixture,
|
||||||
}
|
}
|
||||||
|
|
||||||
FACET_PRECEDENCE: List[str] = [
|
FACET_PRECEDENCE: List[str] = [
|
||||||
|
@ -36,6 +41,7 @@ FACET_PRECEDENCE: List[str] = [
|
||||||
"DiamondLoupeFacet",
|
"DiamondLoupeFacet",
|
||||||
"ERC20Facet",
|
"ERC20Facet",
|
||||||
"TerminusFacet",
|
"TerminusFacet",
|
||||||
|
"TerminusFacetFixture",
|
||||||
]
|
]
|
||||||
|
|
||||||
FACET_ACTIONS: Dict[str, int] = {"add": 0, "replace": 1, "remove": 2}
|
FACET_ACTIONS: Dict[str, int] = {"add": 0, "replace": 1, "remove": 2}
|
||||||
|
@ -117,6 +123,12 @@ def facet_cut(
|
||||||
initializer_address
|
initializer_address
|
||||||
)
|
)
|
||||||
calldata = terminus_initializer.contract.init.encode_input()
|
calldata = terminus_initializer.contract.init.encode_input()
|
||||||
|
elif facet_name == "TerminusFacetFixture":
|
||||||
|
if initializer_address != ZERO_ADDRESS and action != "remove":
|
||||||
|
terminus_initializer = TerminusInitializerFixture.TerminusInitializerFixture(
|
||||||
|
initializer_address
|
||||||
|
)
|
||||||
|
calldata = terminus_initializer.contract.init.encode_input()
|
||||||
|
|
||||||
diamond = DiamondCutFacet.DiamondCutFacet(diamond_address)
|
diamond = DiamondCutFacet.DiamondCutFacet(diamond_address)
|
||||||
transaction = diamond.diamond_cut(
|
transaction = diamond.diamond_cut(
|
||||||
|
|
|
@ -12,7 +12,7 @@ from brownie.network.contract import ContractContainer
|
||||||
from eth_typing.evm import ChecksumAddress
|
from eth_typing.evm import ChecksumAddress
|
||||||
|
|
||||||
|
|
||||||
PROJECT_DIRECTORY = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|
PROJECT_DIRECTORY = os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))
|
||||||
BUILD_DIRECTORY = os.path.join(PROJECT_DIRECTORY, "build", "contracts")
|
BUILD_DIRECTORY = os.path.join(PROJECT_DIRECTORY, "build", "contracts")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ from brownie.network.contract import ContractContainer
|
||||||
from eth_typing.evm import ChecksumAddress
|
from eth_typing.evm import ChecksumAddress
|
||||||
|
|
||||||
|
|
||||||
PROJECT_DIRECTORY = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|
PROJECT_DIRECTORY = os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))
|
||||||
BUILD_DIRECTORY = os.path.join(PROJECT_DIRECTORY, "build", "contracts")
|
BUILD_DIRECTORY = os.path.join(PROJECT_DIRECTORY, "build", "contracts")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ from brownie.network.contract import ContractContainer
|
||||||
from eth_typing.evm import ChecksumAddress
|
from eth_typing.evm import ChecksumAddress
|
||||||
|
|
||||||
|
|
||||||
PROJECT_DIRECTORY = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|
PROJECT_DIRECTORY = os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))
|
||||||
BUILD_DIRECTORY = os.path.join(PROJECT_DIRECTORY, "build", "contracts")
|
BUILD_DIRECTORY = os.path.join(PROJECT_DIRECTORY, "build", "contracts")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ from brownie.network.contract import ContractContainer
|
||||||
from eth_typing.evm import ChecksumAddress
|
from eth_typing.evm import ChecksumAddress
|
||||||
|
|
||||||
|
|
||||||
PROJECT_DIRECTORY = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|
PROJECT_DIRECTORY = os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))
|
||||||
BUILD_DIRECTORY = os.path.join(PROJECT_DIRECTORY, "build", "contracts")
|
BUILD_DIRECTORY = os.path.join(PROJECT_DIRECTORY, "build", "contracts")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ class TestPoolControllerEnumerationMigration(MoonstreamDAOSingleContractTestCase
|
||||||
|
|
||||||
# deploy, intialize, setup and test new diamond contract
|
# deploy, intialize, setup and test new diamond contract
|
||||||
|
|
||||||
|
|
||||||
# facet_cut fixtures onto newly created diamond
|
# facet_cut fixtures onto newly created diamond
|
||||||
|
|
||||||
# test that facets are fixtures
|
# test that facets are fixtures
|
||||||
|
|
|
@ -6,7 +6,8 @@ from .core import facet_cut, gogogo
|
||||||
from .ERC20Facet import ERC20Facet
|
from .ERC20Facet import ERC20Facet
|
||||||
from .ERC20Initializer import ERC20Initializer
|
from .ERC20Initializer import ERC20Initializer
|
||||||
from . import TerminusFacet
|
from . import TerminusFacet
|
||||||
from . import TerminusInitializer
|
from . import TerminusInitializer, PoolControllerEnumeration
|
||||||
|
from .fixtures import TerminusFacetFixture, TerminusInitializerFixture
|
||||||
|
|
||||||
|
|
||||||
class MoonstreamDAOSingleContractTestCase(unittest.TestCase):
|
class MoonstreamDAOSingleContractTestCase(unittest.TestCase):
|
||||||
|
@ -73,6 +74,35 @@ class TerminusTestCase(MoonstreamTokenTestCase):
|
||||||
cls.terminus_facet = terminus_facet.address
|
cls.terminus_facet = terminus_facet.address
|
||||||
|
|
||||||
|
|
||||||
|
class TerminusFixtureTestCase(MoonstreamTokenTestCase):
|
||||||
|
@classmethod
|
||||||
|
def setUpClass(cls) -> None:
|
||||||
|
super().setUpClass()
|
||||||
|
|
||||||
|
cls.terminus_fixture_contracts = gogogo(accounts[0], {"from": accounts[0]})
|
||||||
|
|
||||||
|
# Deploy Terminus
|
||||||
|
fixture_initializer = TerminusInitializerFixture.TerminusInitializerFixture(None)
|
||||||
|
fixture_initializer.deploy({"from": accounts[0]})
|
||||||
|
|
||||||
|
terminus_fixture_facet = TerminusFacetFixture.TerminusFacetFixture(None)
|
||||||
|
terminus_fixture_facet.deploy({"from": accounts[0]})
|
||||||
|
|
||||||
|
diamond_fixture_address = cls.terminus_fixture_contracts["Diamond"]
|
||||||
|
|
||||||
|
facet_cut(
|
||||||
|
diamond_fixture_address,
|
||||||
|
"TerminusFacetFixture",
|
||||||
|
terminus_fixture_facet.address,
|
||||||
|
"add",
|
||||||
|
{"from": accounts[0]},
|
||||||
|
fixture_initializer.address,
|
||||||
|
)
|
||||||
|
|
||||||
|
cls.terminus_fixture_initializer = fixture_initializer.address
|
||||||
|
cls.terminus_fixture_facet = terminus_fixture_facet.address
|
||||||
|
|
||||||
|
|
||||||
class TestCoreDeployment(MoonstreamDAOSingleContractTestCase):
|
class TestCoreDeployment(MoonstreamDAOSingleContractTestCase):
|
||||||
def test_gogogo(self):
|
def test_gogogo(self):
|
||||||
self.assertIn("DiamondCutFacet", self.contracts)
|
self.assertIn("DiamondCutFacet", self.contracts)
|
||||||
|
|
|
@ -4,9 +4,11 @@ import unittest
|
||||||
from brownie import accounts
|
from brownie import accounts
|
||||||
from brownie.exceptions import VirtualMachineError
|
from brownie.exceptions import VirtualMachineError
|
||||||
|
|
||||||
|
|
||||||
from . import ERC20Facet, TerminusFacet, TerminusInitializer
|
from . import ERC20Facet, TerminusFacet, TerminusInitializer
|
||||||
from .core import facet_cut
|
from .core import facet_cut
|
||||||
from .test_core import MoonstreamDAOSingleContractTestCase, TerminusTestCase
|
from .test_core import MoonstreamDAOSingleContractTestCase, TerminusTestCase, TerminusFixtureTestCase, PoolControllerEnumeration
|
||||||
|
from .fixtures import TerminusFacetFixture, TerminusInitializerFixture
|
||||||
|
|
||||||
|
|
||||||
class TestDeployment(MoonstreamDAOSingleContractTestCase):
|
class TestDeployment(MoonstreamDAOSingleContractTestCase):
|
||||||
|
@ -742,6 +744,111 @@ class TestCreatePoolV1(TestPoolOperations):
|
||||||
self.assertEqual(final_pool_supply, initial_pool_supply)
|
self.assertEqual(final_pool_supply, initial_pool_supply)
|
||||||
self.assertEqual(final_owner_balance, initial_owner_balance)
|
self.assertEqual(final_owner_balance, initial_owner_balance)
|
||||||
|
|
||||||
|
class TestPoolControllerEnumerationMigration(TerminusFixtureTestCase):
|
||||||
|
@classmethod
|
||||||
|
def setUpClass(cls) -> None:
|
||||||
|
super().setUpClass()
|
||||||
|
moonstream_diamond_address = cls.contracts["Diamond"]
|
||||||
|
diamond_moonstream = ERC20Facet.ERC20Facet(moonstream_diamond_address)
|
||||||
|
terminus_diamond_fixture_address = cls.terminus_fixture_contracts["Diamond"]
|
||||||
|
diamond_terminus_fixture = TerminusFacetFixture.TerminusFacetFixture(terminus_diamond_fixture_address)
|
||||||
|
diamond_terminus_fixture.set_payment_token(
|
||||||
|
moonstream_diamond_address, {"from": accounts[0]}
|
||||||
|
)
|
||||||
|
diamond_terminus_fixture.set_pool_base_price(1000, {"from": accounts[0]})
|
||||||
|
diamond_moonstream.mint(accounts[1], 1000000, {"from": accounts[0]})
|
||||||
|
diamond_moonstream.approve(
|
||||||
|
terminus_diamond_fixture_address, 1000000, {"from": accounts[1]}
|
||||||
|
)
|
||||||
|
cls.diamond_terminus_fixture = diamond_terminus_fixture
|
||||||
|
cls.diamond_moonstream = diamond_moonstream
|
||||||
|
|
||||||
|
cls.diamond_terminus_fixture.set_controller(accounts[1].address, {"from": accounts[0]})
|
||||||
|
|
||||||
|
cls.diamond_terminus_fixture.create_simple_pool(10, {"from": accounts[1]})
|
||||||
|
|
||||||
|
def test_migration_from_old_state(self):
|
||||||
|
|
||||||
|
|
||||||
|
#test - create test pools and check that they are correctly saved
|
||||||
|
#teardown - after test
|
||||||
|
|
||||||
|
diamond_fixture_address = self.terminus_fixture_contracts["Diamond"]
|
||||||
|
terminus_fixture_facet = self.terminus_fixture_facet
|
||||||
|
|
||||||
|
terminus_facet = TerminusFacet.TerminusFacet(None)
|
||||||
|
terminus_facet.deploy({"from": accounts[0]})
|
||||||
|
|
||||||
|
migration_initializer = PoolControllerEnumeration.PoolControllerEnumeration(None)
|
||||||
|
migration_initializer.deploy({"from": accounts[0]})
|
||||||
|
|
||||||
|
facet_cut(
|
||||||
|
diamond_fixture_address,
|
||||||
|
"TerminusFacetFixture",
|
||||||
|
terminus_fixture_facet,
|
||||||
|
"remove",
|
||||||
|
{"from": accounts[0]},
|
||||||
|
)
|
||||||
|
|
||||||
|
facet_cut(
|
||||||
|
diamond_fixture_address,
|
||||||
|
"TerminusFacet",
|
||||||
|
terminus_facet.address,
|
||||||
|
"add",
|
||||||
|
{"from": accounts[0]},
|
||||||
|
migration_initializer.address,
|
||||||
|
)
|
||||||
|
|
||||||
|
# final_total_pools = self.diamond_terminus_fixture.total_pools()
|
||||||
|
# print("final_total_pools:", final_total_pools)
|
||||||
|
# self.assertEqual(final_total_pools, initial_total_pools + 1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# def test_migration_from_old_state(self):
|
||||||
|
|
||||||
|
# # old state
|
||||||
|
# fixture_initializer = TerminusInitializerFixture.TerminusInitializerFixture(None)
|
||||||
|
# fixture_initializer.deploy({"from": accounts[0]})
|
||||||
|
|
||||||
|
# fixture_terminus_facet = TerminusFacetFixture.TerminusFacetFixture(None)
|
||||||
|
# fixture_terminus_facet.deploy({"from": accounts[0]})
|
||||||
|
|
||||||
|
# # deploy, intialize, setup and test new diamond contract
|
||||||
|
|
||||||
|
|
||||||
|
# # facet_cut fixtures onto newly created diamond
|
||||||
|
|
||||||
|
# # test that facets are fixtures
|
||||||
|
|
||||||
|
# # run standard facet tests
|
||||||
|
|
||||||
|
# # replace facet with PoolControllerEnumeration update
|
||||||
|
|
||||||
|
# initializer = PoolControllerEnumeration.PoolControllerEnumeration(None)
|
||||||
|
# initializer.deploy({"from": accounts[0]})
|
||||||
|
|
||||||
|
# terminus_facet = TerminusFacet.TerminusFacet(None)
|
||||||
|
# terminus_facet.deploy({"from": accounts[0]})
|
||||||
|
|
||||||
|
# diamond_address = self.contracts["Diamond"]
|
||||||
|
# facet_cut(
|
||||||
|
# diamond_address,
|
||||||
|
# "TerminusFacet",
|
||||||
|
# terminus_facet.address,
|
||||||
|
# "add",
|
||||||
|
# {"from": accounts[0]},
|
||||||
|
# initializer.address,
|
||||||
|
# )
|
||||||
|
|
||||||
|
# # test that pool enumeration migrated successfully
|
||||||
|
# diamond_terminus = TerminusFacet.TerminusFacet(diamond_address)
|
||||||
|
# for poolId in range(diamond_terminus.total_pools()):
|
||||||
|
# controller = diamond_terminus.terminus_pool_controller(poolId)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
Ładowanie…
Reference in New Issue