kopia lustrzana https://github.com/bugout-dev/dao
Merge branch 'terminus-batch-get-pool-controller' into terminus-frontend
commit
7a03d8d526
|
@ -639,7 +639,7 @@ contract ERC1155WithTerminusStorage is
|
|||
{
|
||||
LibTerminus.TerminusStorage storage ts = LibTerminus.terminusStorage();
|
||||
require(index < ts.controllerPoolsNumber[owner], "ERC1155Enumerable: owner index out of bounds");
|
||||
return ts.controlledPools[owner][index];
|
||||
return ts.controlledPools[owner][index + 1];
|
||||
}
|
||||
|
||||
function totalPools() external view returns (uint256)
|
||||
|
|
|
@ -40,7 +40,7 @@ library LibTerminus {
|
|||
// Pool controller enumeration
|
||||
mapping(address => uint256) controllerPoolsNumber;
|
||||
mapping(address => mapping(uint256 => uint256)) controlledPools;
|
||||
mapping(uint256 => uint256) controlledPoolsIndexForID; // controlledPoolsIndexForID[poolID] => index of controlledPools[poolController[poolID]]
|
||||
mapping(uint256 => uint256) fromPoolIdToControllersPoolId;
|
||||
|
||||
}
|
||||
|
||||
|
@ -93,12 +93,12 @@ library LibTerminus {
|
|||
{
|
||||
uint256 length = ts.controllerPoolsNumber[previousController];
|
||||
uint256 lastElement = ts.controlledPools[previousController][length];
|
||||
ts.controlledPools[previousController][ts.controlledPoolsIndexForID[poolID]] = lastElement;
|
||||
ts.controlledPools[previousController][ts.fromPoolIdToControllersPoolId[poolID]] = lastElement;
|
||||
ts.controllerPoolsNumber[previousController]--;
|
||||
}
|
||||
ts.controlledPools[newController][ts.controllerPoolsNumber[newController]] = poolID;
|
||||
ts.controllerPoolsNumber[newController]++;
|
||||
ts.controlledPoolsIndexForID[poolID] = ts.controllerPoolsNumber[newController];
|
||||
ts.controlledPools[newController][ts.controllerPoolsNumber[newController]] = poolID;
|
||||
ts.fromPoolIdToControllersPoolId[poolID] = ts.controllerPoolsNumber[newController];
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -115,8 +115,25 @@ class TestPoolCreation(TerminusTestCase):
|
|||
|
||||
initial_total_pools = diamond_terminus.total_pools()
|
||||
|
||||
total_owners_pools_before = diamond_terminus.total_pools_by_owner(
|
||||
accounts[1]
|
||||
)
|
||||
|
||||
diamond_terminus.create_simple_pool(10, {"from": accounts[1]})
|
||||
|
||||
total_owners_pools_after = diamond_terminus.total_pools_by_owner(
|
||||
accounts[1]
|
||||
)
|
||||
|
||||
pool_id = diamond_terminus.total_pools()
|
||||
self.assertEqual(total_owners_pools_after, total_owners_pools_before + 1)
|
||||
|
||||
last_enumerated_pool_id = diamond_terminus.pool_of_owner_by_index(
|
||||
accounts[1], total_owners_pools_after-1
|
||||
)
|
||||
self.assertEqual(pool_id, last_enumerated_pool_id)
|
||||
|
||||
|
||||
final_total_pools = diamond_terminus.total_pools()
|
||||
self.assertEqual(final_total_pools, initial_total_pools + 1)
|
||||
|
||||
|
@ -172,16 +189,7 @@ class TestPoolCreation(TerminusTestCase):
|
|||
pool_capacity = diamond_terminus.terminus_pool_capacity(final_total_pools)
|
||||
self.assertEqual(pool_capacity, 10)
|
||||
|
||||
def new_pool_is_enumerated(self):
|
||||
|
||||
total_owners_pools_before = self.diamond_terminus.total_pools_by_owner(accounts[1])
|
||||
self.diamond_terminus.create_pool_v1(10, True, True, {"from": accounts[1]})
|
||||
pool_id = self.diamond_terminus.total_pools()
|
||||
total_owners_pools_after = self.diamond_terminus.total_pools_by_owner(accounts[1])
|
||||
self.assertEqual(total_owners_pools_after, total_owners_pools_before+1)
|
||||
|
||||
last_enumerated_pool_id = self.diamond_terminus.pool_of_owner_by_index(accounts[1], total_owners_pools_after)
|
||||
self.assertEqual(pool_id, last_enumerated_pool_id)
|
||||
|
||||
|
||||
|
||||
|
@ -640,31 +648,86 @@ class TestPoolOperations(TerminusTestCase):
|
|||
self.assertEqual(final_pool_supply, initial_pool_supply)
|
||||
self.assertEqual(final_owner_balance, initial_owner_balance)
|
||||
|
||||
def pool_transfer_is_enumerated(self):
|
||||
def test_pool_transfer_is_enumerated(self):
|
||||
sender = accounts[1]
|
||||
receiver = accounts[2]
|
||||
self.diamond_terminus.create_pool_v1(10, True, True, {"from": sender})
|
||||
self.diamond_terminus.create_pool_v1(10, True, True, {"from": sender})
|
||||
|
||||
first_created_in_this_test = (self.diamond_terminus.total_pools() - 1 )
|
||||
sender_total_pools_before_transfer = self.diamond_terminus.total_pools_by_owner(
|
||||
sender
|
||||
)
|
||||
reciever_total_pools_before_transfer = (
|
||||
self.diamond_terminus.total_pools_by_owner(receiver)
|
||||
)
|
||||
|
||||
self.diamond_terminus.set_pool_controller(first_created_in_this_test, receiver, {"from": sender})
|
||||
self.assertEqual(
|
||||
self.diamond_terminus.terminus_pool_controller(first_created_in_this_test), receiver
|
||||
)
|
||||
self.assertEqual(
|
||||
self.diamond_terminus.total_pools_by_owner(receiver),
|
||||
reciever_total_pools_before_transfer + 1,
|
||||
)
|
||||
self.assertEqual(
|
||||
self.diamond_terminus.total_pools_by_owner(sender),
|
||||
sender_total_pools_before_transfer - 1,
|
||||
)
|
||||
|
||||
for i in range(sender_total_pools_before_transfer - 1):
|
||||
enumerated_pool_id = self.diamond_terminus.pool_of_owner_by_index(sender, i)
|
||||
self.assertNotEqual(enumerated_pool_id, first_created_in_this_test)
|
||||
|
||||
rx_enumerated_pools = []
|
||||
for i in range(reciever_total_pools_before_transfer + 1):
|
||||
enumerated_pool_id = self.diamond_terminus.pool_of_owner_by_index(receiver, i)
|
||||
rx_enumerated_pools.append(enumerated_pool_id)
|
||||
self.assertIn(first_created_in_this_test,rx_enumerated_pools)
|
||||
|
||||
def test_pool_transfer_failure_is_not_enumerated(self):
|
||||
self.diamond_terminus.create_pool_v1(10, True, True, {"from": accounts[1]})
|
||||
pool_id = self.diamond_terminus.total_pools()
|
||||
|
||||
self.diamond_terminus.set_pool_controller(pool_id, accounts[0])
|
||||
reciever_total_pools_before_transfer = self.diamond_terminus.total_pools_by_owner(accounts[0])
|
||||
self.assertEqual(self.diamond_terminus.terminus_pool_controller(pool_id), accounts[0])
|
||||
self.assertEqual(self.diamond_terminus.total_pools_by_owner(accounts[0], reciever_total_pools_before_transfer+1))
|
||||
self.assertEqual(self.diamond_terminus.pool_of_owner_by_index(reciever_total_pools_before_transfer, pool_id))
|
||||
reciever_total_pools_before_transfer = (
|
||||
self.diamond_terminus.total_pools_by_owner(accounts[0])
|
||||
)
|
||||
sender_total_pools_before_transfer = self.diamond_terminus.total_pools_by_owner(
|
||||
accounts[1]
|
||||
)
|
||||
|
||||
def pool_transfer_failure_is_not_enumerated(self):
|
||||
self.diamond_terminus.create_pool_v1(10, True, True, {"from": accounts[1]})
|
||||
pool_id = self.diamond_terminus.total_pools()
|
||||
|
||||
self.diamond_terminus.set_pool_controller(pool_id, accounts[0], {"from": accounts[2]})
|
||||
reciever_total_pools_before_transfer = self.diamond_terminus.total_pools_by_owner(accounts[0])
|
||||
sender_total_pools_before_transfer = self.diamond_terminus.total_pools_by_owner(accounts[1])
|
||||
self.assertNotEqual(self.diamond_terminus.terminus_pool_controller(pool_id), accounts[0])
|
||||
self.assertEqual(self.diamond_terminus.terminus_pool_controller(pool_id), accounts[1])
|
||||
self.assertNotEqual(self.diamond_terminus.total_pools_by_owner(accounts[0], reciever_total_pools_before_transfer+1))
|
||||
self.assertEqual(self.diamond_terminus.total_pools_by_owner(accounts[1], sender_total_pools_before_transfer))
|
||||
self.assertNotEqual(self.diamond_terminus.pool_of_owner_by_index(reciever_total_pools_before_transfer, pool_id))
|
||||
self.assertEqual(self.diamond_terminus.pool_of_owner_by_index(sender_total_pools_before_transfer, pool_id))
|
||||
with self.assertRaises(Exception):
|
||||
self.diamond_terminus.set_pool_controller(
|
||||
pool_id, accounts[0], {"from": accounts[2]}
|
||||
)
|
||||
|
||||
|
||||
self.assertNotEqual(
|
||||
self.diamond_terminus.terminus_pool_controller(pool_id), accounts[2]
|
||||
)
|
||||
self.assertEqual(
|
||||
self.diamond_terminus.terminus_pool_controller(pool_id), accounts[1]
|
||||
)
|
||||
self.assertNotEqual(
|
||||
self.diamond_terminus.total_pools_by_owner(
|
||||
accounts[0]
|
||||
), reciever_total_pools_before_transfer + 1
|
||||
)
|
||||
self.assertEqual(
|
||||
self.diamond_terminus.total_pools_by_owner(
|
||||
accounts[1]
|
||||
), sender_total_pools_before_transfer
|
||||
)
|
||||
with self.assertRaises(Exception):
|
||||
self.diamond_terminus.pool_of_owner_by_index(
|
||||
accounts[2], reciever_total_pools_before_transfer
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
self.diamond_terminus.pool_of_owner_by_index(
|
||||
accounts[1], sender_total_pools_before_transfer-1
|
||||
), pool_id
|
||||
)
|
||||
|
||||
|
||||
class TestCreatePoolV1(TestPoolOperations):
|
||||
|
@ -787,19 +850,24 @@ class TestCreatePoolV1(TestPoolOperations):
|
|||
self.assertEqual(final_pool_supply, initial_pool_supply)
|
||||
self.assertEqual(final_owner_balance, initial_owner_balance)
|
||||
|
||||
def new_pool_is_enumerated(self):
|
||||
def test_new_pool_is_enumerated(self):
|
||||
|
||||
total_owners_pools_before = self.diamond_terminus.total_pools_by_owner(accounts[1])
|
||||
total_owners_pools_before = self.diamond_terminus.total_pools_by_owner(
|
||||
accounts[1]
|
||||
)
|
||||
self.diamond_terminus.create_pool_v1(10, True, True, {"from": accounts[1]})
|
||||
pool_id = self.diamond_terminus.total_pools()
|
||||
total_owners_pools_after = self.diamond_terminus.total_pools_by_owner(accounts[1])
|
||||
self.assertEqual(total_owners_pools_after, total_owners_pools_before+1)
|
||||
total_owners_pools_after = self.diamond_terminus.total_pools_by_owner(
|
||||
accounts[1]
|
||||
)
|
||||
self.assertEqual(total_owners_pools_after, total_owners_pools_before + 1)
|
||||
|
||||
last_enumerated_pool_id = self.diamond_terminus.pool_of_owner_by_index(accounts[1], total_owners_pools_after)
|
||||
last_enumerated_pool_id = self.diamond_terminus.pool_of_owner_by_index(
|
||||
accounts[1], total_owners_pools_after-1
|
||||
)
|
||||
self.assertEqual(pool_id, last_enumerated_pool_id)
|
||||
|
||||
|
||||
|
||||
class TestPoolControllerEnumerationMigration(TerminusFixtureTestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls) -> None:
|
||||
|
@ -856,7 +924,6 @@ class TestPoolControllerEnumerationMigration(TerminusFixtureTestCase):
|
|||
migration_initializer.address,
|
||||
)
|
||||
|
||||
|
||||
@classmethod
|
||||
def increment_pools_created(cls, value):
|
||||
cls.pools_created += value
|
||||
|
@ -866,21 +933,29 @@ class TestPoolControllerEnumerationMigration(TerminusFixtureTestCase):
|
|||
diamond_fixture_address = self.terminus_fixture_contracts["Diamond"]
|
||||
terminus_facet = TerminusFacet.TerminusFacet(diamond_fixture_address)
|
||||
total_pools = terminus_facet.total_pools()
|
||||
self.assertEqual(total_pools,self.pools_created)
|
||||
number_pools_owned_by_account0 = terminus_facet.total_pools_by_owner(accounts[0])
|
||||
self.assertEqual(number_pools_owned_by_account0,0)
|
||||
self.assertEqual(total_pools, self.pools_created)
|
||||
number_pools_owned_by_account0 = terminus_facet.total_pools_by_owner(
|
||||
accounts[0]
|
||||
)
|
||||
self.assertEqual(number_pools_owned_by_account0, 0)
|
||||
|
||||
number_pools_owned_by_account1 = terminus_facet.total_pools_by_owner(accounts[1])
|
||||
self.assertEqual(number_pools_owned_by_account1,self.pools_created)
|
||||
number_pools_owned_by_account1 = terminus_facet.total_pools_by_owner(
|
||||
accounts[1]
|
||||
)
|
||||
self.assertEqual(number_pools_owned_by_account1, self.pools_created)
|
||||
|
||||
for pool_id in range(total_pools):
|
||||
owner = terminus_facet.terminus_pool_controller(pool_id)
|
||||
all_owner_pools = {}
|
||||
for index, owner_pool_internal_id, in enumerate(range(terminus_facet.total_pools_by_owner(owner))):
|
||||
all_owner_pools[index] = terminus_facet.pool_of_owner_by_index(owner,owner_pool_internal_id)
|
||||
for (
|
||||
index,
|
||||
owner_pool_internal_id,
|
||||
) in enumerate(range(terminus_facet.total_pools_by_owner(owner))):
|
||||
all_owner_pools[index] = terminus_facet.pool_of_owner_by_index(
|
||||
owner, owner_pool_internal_id
|
||||
)
|
||||
self.assertTrue(pool_id in all_owner_pools)
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
Ładowanie…
Reference in New Issue