batchMint
Andrey Dolgolev 2022-02-09 18:35:35 +02:00
rodzic dfa1cc5bcb
commit 2ccf55247a
4 zmienionych plików z 60 dodań i 5 usunięć

Wyświetl plik

@ -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);
}
}

Wyświetl plik

@ -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.

Wyświetl plik

@ -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)

Wyświetl plik

@ -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)