Skip to content
This repository was archived by the owner on Aug 21, 2023. It is now read-only.

Commit c374c2d

Browse files
committed
fixed mint_batch
1 parent 8721eb8 commit c374c2d

2 files changed

Lines changed: 95 additions & 2 deletions

File tree

contracts/terminus/TerminusFacet.sol

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,15 @@ contract TerminusFacet is ERC1155WithTerminusStorage {
4949
address[] memory toAddresses,
5050
uint256[] memory amounts
5151
) public {
52-
address operator = _msgSender();
53-
LibTerminus.enforcePoolIsController(id, operator);
5452
require(
5553
toAddresses.length == amounts.length,
5654
"TerminusFacet: _poolMintBatch -- toAddresses and amounts length mismatch"
5755
);
56+
address operator = _msgSender();
57+
require(
58+
isApprovedForPool(id, operator),
59+
"TerminusFacet: poolMintBatch -- caller is neither owner nor approved"
60+
);
5861

5962
LibTerminus.TerminusStorage storage ts = LibTerminus.terminusStorage();
6063

dao/test_terminus.py

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,64 @@ def test_mint_batch(self):
273273
supply = self.diamond_terminus.terminus_pool_supply(pool_id)
274274
self.assertEqual(supply, 1)
275275

276+
def test_mint_batch_with_approval(self):
277+
pool_id = self.diamond_terminus.total_pools()
278+
279+
self.assertFalse(
280+
self.diamond_terminus.is_approved_for_pool(pool_id, accounts[3])
281+
)
282+
self.assertFalse(
283+
self.diamond_terminus.is_approved_for_pool(pool_id - 1, accounts[3])
284+
)
285+
balances_before = [
286+
self.diamond_terminus.balance_of(accounts[2].address, pool_id),
287+
self.diamond_terminus.balance_of(accounts[2].address, pool_id - 1),
288+
]
289+
supply_before = [
290+
self.diamond_terminus.terminus_pool_supply(pool_id),
291+
self.diamond_terminus.terminus_pool_supply(pool_id - 1),
292+
]
293+
self.diamond_terminus.approve_for_pool(
294+
pool_id, accounts[3], {"from": accounts[1]}
295+
)
296+
with self.assertRaises(Exception):
297+
self.diamond_terminus.mint_batch(
298+
accounts[2].address,
299+
pool_i_ds=[pool_id, pool_id - 1],
300+
amounts=[1, 1],
301+
data=b"",
302+
transaction_config={"from": accounts[3]},
303+
)
304+
305+
self.diamond_terminus.approve_for_pool(
306+
pool_id - 1, accounts[3], {"from": accounts[1]}
307+
)
308+
309+
self.diamond_terminus.mint_batch(
310+
accounts[2].address,
311+
pool_i_ds=[pool_id, pool_id - 1],
312+
amounts=[1, 1],
313+
data=b"",
314+
transaction_config={"from": accounts[3]},
315+
)
316+
317+
self.assertEqual(
318+
self.diamond_terminus.balance_of(accounts[2].address, pool_id),
319+
balances_before[0] + 1,
320+
)
321+
self.assertEqual(
322+
self.diamond_terminus.balance_of(accounts[2].address, pool_id - 1),
323+
balances_before[1] + 1,
324+
)
325+
326+
self.assertEqual(
327+
self.diamond_terminus.terminus_pool_supply(pool_id), supply_before[0] + 1
328+
)
329+
self.assertEqual(
330+
self.diamond_terminus.terminus_pool_supply(pool_id - 1),
331+
supply_before[1] + 1,
332+
)
333+
276334
def test_mint_batch_fails_if_it_exceeds_capacity(self):
277335
pool_id = self.diamond_terminus.total_pools()
278336
with self.assertRaises(Exception):
@@ -376,6 +434,38 @@ def test_pool_mint_with_pool_approval(self):
376434
self.assertEqual(balance_1, balance_0 + 1)
377435
self.assertEqual(supply_0 + 1, supply_1)
378436

437+
def test_pool_mint_batch_with_approval(self):
438+
pool_id = self.diamond_terminus.total_pools()
439+
target_accounts = [account.address for account in accounts[:5]]
440+
target_amounts = [1 for _ in accounts[:5]]
441+
num_accounts = len(accounts[:5])
442+
initial_pool_supply = self.diamond_terminus.terminus_pool_supply(pool_id)
443+
initial_balances: List[int] = []
444+
for account in accounts[:5]:
445+
initial_balances.append(
446+
self.diamond_terminus.balance_of(account.address, pool_id)
447+
)
448+
449+
self.assertFalse(
450+
self.diamond_terminus.is_approved_for_pool(pool_id, accounts[2].address)
451+
)
452+
with self.assertRaises(Exception):
453+
self.diamond_terminus.pool_mint_batch(
454+
pool_id, target_accounts, target_amounts, {"from": accounts[2]}
455+
)
456+
self.diamond_terminus.approve_for_pool(
457+
pool_id, accounts[2].address, {"from": accounts[1]}
458+
)
459+
self.diamond_terminus.pool_mint_batch(
460+
pool_id, target_accounts, target_amounts, {"from": accounts[2]}
461+
)
462+
463+
final_pool_supply = self.diamond_terminus.terminus_pool_supply(pool_id)
464+
self.assertEqual(final_pool_supply, initial_pool_supply + num_accounts)
465+
for i, account in enumerate(accounts[:5]):
466+
final_balance = self.diamond_terminus.balance_of(account.address, pool_id)
467+
self.assertEqual(final_balance, initial_balances[i] + 1)
468+
379469
def test_transfer(self):
380470
pool_id = self.diamond_terminus.total_pools()
381471
self.diamond_terminus.mint(accounts[2], pool_id, 1, b"", {"from": accounts[1]})

0 commit comments

Comments
 (0)