kopia lustrzana https://github.com/bugout-dev/dao
Fix multiple mint batch overflow capacity
rodzic
67a8e7953a
commit
6a33ade9df
18
README.md
18
README.md
|
@ -1,4 +1,5 @@
|
|||
# dao
|
||||
|
||||
Moonstream DAO
|
||||
|
||||
## Decentralizing Moonstream
|
||||
|
@ -10,11 +11,12 @@ We run our own blockchain nodes (currently Ethereum and Polygon), and perform al
|
|||
through these nodes.
|
||||
|
||||
The coming years will bring an explosion of decentralized applications with a presence on multiple
|
||||
blockchains. We aim to bring the value of Moonstream to *every* major blockchain, and to do so in a
|
||||
blockchains. We aim to bring the value of Moonstream to _every_ major blockchain, and to do so in a
|
||||
truly decentralized manner. No other approach will scale to tens and eventually hundreds of supported
|
||||
blockchains.
|
||||
|
||||
Moonstream DAO represents this decentralization. The DAO will reward participants who contribute:
|
||||
|
||||
1. Blockchain node time
|
||||
2. Crawler time
|
||||
3. Crawler code
|
||||
|
@ -111,19 +113,27 @@ moonworm generate-brownie -p . -o dao -n TerminusFacet
|
|||
|
||||
### Tests
|
||||
|
||||
Make sure you have `ganache-cli`:
|
||||
|
||||
```
|
||||
npm install -g ganache-cli
|
||||
```
|
||||
|
||||
To run unit tests, run: `./test.sh`
|
||||
|
||||
Before you do this, you must make sure that a Python environment is available in your shell and that
|
||||
you have installed the development dependencies in this environment.
|
||||
|
||||
For specific test case use commands like: `./test.sh dao.test_terminus.TestPoolOperations`
|
||||
|
||||
### VSCode setup
|
||||
|
||||
If you are using the Solidity extension in VSCode, merge the following snippet into your settings.json:
|
||||
|
||||
```json
|
||||
{
|
||||
"solidity.remappings": [
|
||||
"@openzeppelin-contracts/=<path to your home directory>/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.3.2"
|
||||
]
|
||||
"solidity.remappings": [
|
||||
"@openzeppelin-contracts/=<path to your home directory>/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.3.2"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
|
|
@ -386,11 +386,19 @@ contract ERC1155WithTerminusStorage is
|
|||
|
||||
LibTerminus.TerminusStorage storage ts = LibTerminus.terminusStorage();
|
||||
|
||||
uint256[] memory uniqueIds = new uint256[](ids.length);
|
||||
for (uint256 i = 0; i < ids.length; i++) {
|
||||
require(
|
||||
ts.poolSupply[ids[i]] + amounts[i] <= ts.poolCapacity[ids[i]],
|
||||
"ERC1155WithTerminusStorage: _mintBatch -- Minted tokens would exceed pool capacity"
|
||||
);
|
||||
for (uint256 j = 0; j < uniqueIds.length; j++) {
|
||||
require(
|
||||
ids[i] != uniqueIds[j],
|
||||
"ERC1155WithTerminusStorage: _mintBatch -- Only unique pool ids are allowed"
|
||||
);
|
||||
}
|
||||
uniqueIds[i] = ids[i];
|
||||
}
|
||||
|
||||
address operator = _msgSender();
|
||||
|
|
|
@ -349,6 +349,23 @@ class TestPoolOperations(TerminusTestCase):
|
|||
supply = self.diamond_terminus.terminus_pool_supply(pool_id)
|
||||
self.assertEqual(supply, 0)
|
||||
|
||||
def test_mint_batch_fails_if_it_exceeds_capacity_not_unique(self):
|
||||
pool_id = self.diamond_terminus.total_pools()
|
||||
with self.assertRaises(Exception):
|
||||
self.diamond_terminus.mint_batch(
|
||||
accounts[2].address,
|
||||
pool_i_ds=[pool_id for _ in range(0, 11)],
|
||||
amounts=[1 for _ in range(0, 11)],
|
||||
data=b"",
|
||||
transaction_config={"from": accounts[1]},
|
||||
)
|
||||
|
||||
balance = self.diamond_terminus.balance_of(accounts[2].address, pool_id)
|
||||
self.assertEqual(balance, 0)
|
||||
|
||||
supply = self.diamond_terminus.terminus_pool_supply(pool_id)
|
||||
self.assertEqual(supply, 0)
|
||||
|
||||
def test_pool_mint_batch(self):
|
||||
pool_id = self.diamond_terminus.total_pools()
|
||||
target_accounts = [account.address for account in accounts[:5]]
|
||||
|
|
Ładowanie…
Reference in New Issue