kopia lustrzana https://github.com/bugout-dev/dao
Add batchMint.
rodzic
dfa1cc5bcb
commit
2ccf55247a
|
@ -24,4 +24,9 @@ contract ERC20Facet is ERC20WithCommonStorage {
|
|||
LibERC20.enforceIsController();
|
||||
_mint(account, amount);
|
||||
}
|
||||
|
||||
function batchMint(address[] calldata accounts, uint256 amount) external {
|
||||
LibERC20.enforceIsController();
|
||||
_batchMint(accounts, amount);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -304,6 +304,15 @@ contract ERC20WithCommonStorage is Context, IERC20, IERC20Metadata {
|
|||
_afterTokenTransfer(address(0), account, amount);
|
||||
}
|
||||
|
||||
function _batchMint(address[] calldata accounts, uint256 amount)
|
||||
internal
|
||||
virtual
|
||||
{
|
||||
for (uint256 i = 0; i < accounts.length; i++) {
|
||||
_mint(accounts[i], amount);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Destroys `amount` tokens from `account`, reducing the
|
||||
* total supply.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Code generated by moonworm : https://github.com/bugout-dev/moonworm
|
||||
# Moonworm version : 0.1.14
|
||||
# Moonworm version : 0.1.16
|
||||
|
||||
import argparse
|
||||
import json
|
||||
|
@ -107,6 +107,10 @@ class ERC20Facet:
|
|||
self.assert_contract_is_instantiated()
|
||||
return self.contract.balanceOf.call(account)
|
||||
|
||||
def batch_mint(self, accounts: List, amount: int, transaction_config) -> Any:
|
||||
self.assert_contract_is_instantiated()
|
||||
return self.contract.batchMint(accounts, amount, transaction_config)
|
||||
|
||||
def decimals(self) -> Any:
|
||||
self.assert_contract_is_instantiated()
|
||||
return self.contract.decimals.call()
|
||||
|
@ -221,6 +225,9 @@ def add_default_arguments(parser: argparse.ArgumentParser, transact: bool) -> No
|
|||
parser.add_argument(
|
||||
"--nonce", type=int, default=None, help="Nonce for the transaction (optional)"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--value", default=None, help="Value of the transaction in wei(optional)"
|
||||
)
|
||||
|
||||
|
||||
def handle_deploy(args: argparse.Namespace) -> None:
|
||||
|
@ -262,6 +269,18 @@ def handle_balance_of(args: argparse.Namespace) -> None:
|
|||
print(result)
|
||||
|
||||
|
||||
def handle_batch_mint(args: argparse.Namespace) -> None:
|
||||
network.connect(args.network)
|
||||
contract = ERC20Facet(args.address)
|
||||
transaction_config = get_transaction_config(args)
|
||||
result = contract.batch_mint(
|
||||
accounts=args.accounts,
|
||||
amount=args.amount,
|
||||
transaction_config=transaction_config,
|
||||
)
|
||||
print(result)
|
||||
|
||||
|
||||
def handle_decimals(args: argparse.Namespace) -> None:
|
||||
network.connect(args.network)
|
||||
contract = ERC20Facet(args.address)
|
||||
|
@ -400,6 +419,16 @@ def generate_cli() -> argparse.ArgumentParser:
|
|||
balance_of_parser.add_argument("--account", required=True, help="Type: address")
|
||||
balance_of_parser.set_defaults(func=handle_balance_of)
|
||||
|
||||
batch_mint_parser = subcommands.add_parser("batch-mint")
|
||||
add_default_arguments(batch_mint_parser, True)
|
||||
batch_mint_parser.add_argument(
|
||||
"--accounts", required=True, help="Type: address[]", nargs="+"
|
||||
)
|
||||
batch_mint_parser.add_argument(
|
||||
"--amount", required=True, help="Type: uint256", type=int
|
||||
)
|
||||
batch_mint_parser.set_defaults(func=handle_batch_mint)
|
||||
|
||||
decimals_parser = subcommands.add_parser("decimals")
|
||||
add_default_arguments(decimals_parser, False)
|
||||
decimals_parser.set_defaults(func=handle_decimals)
|
||||
|
|
|
@ -133,6 +133,21 @@ class TestERC20(MoonstreamTokenTestCase):
|
|||
final_balance = diamond.balance_of(accounts[1].address)
|
||||
self.assertEqual(final_balance, initial_balance + 1000)
|
||||
|
||||
def test_mint_batch_to_another_addresses(self):
|
||||
diamond_address = self.contracts["Diamond"]
|
||||
diamond = ERC20Facet.ERC20Facet(diamond_address)
|
||||
initials = []
|
||||
for account in accounts[1:]:
|
||||
initials.append(diamond.balance_of(account.address))
|
||||
|
||||
diamond.batch_mint(accounts[1:], 1000, {"from": accounts[0]})
|
||||
for index, account in enumerate(accounts[1:]):
|
||||
initial_balance = initials[index]
|
||||
final_balance = diamond.balance_of(account.address)
|
||||
self.assertEqual(
|
||||
final_balance, initial_balance + accounts[1:].count(account) * 1000
|
||||
)
|
||||
|
||||
def test_transfer(self):
|
||||
diamond_address = self.contracts["Diamond"]
|
||||
diamond = ERC20Facet.ERC20Facet(diamond_address)
|
||||
|
@ -227,10 +242,7 @@ class TestERC20(MoonstreamTokenTestCase):
|
|||
|
||||
with self.assertRaises(Exception):
|
||||
diamond.transfer_from(
|
||||
accounts[1].address,
|
||||
accounts[2].address,
|
||||
501,
|
||||
{"from": accounts[2]},
|
||||
accounts[1].address, accounts[2].address, 501, {"from": accounts[2]},
|
||||
)
|
||||
|
||||
final_sender_balance = diamond.balance_of(accounts[1].address)
|
||||
|
|
Ładowanie…
Reference in New Issue