kopia lustrzana https://github.com/bugout-dev/dao
Add batchMint.
rodzic
dfa1cc5bcb
commit
2ccf55247a
|
@ -24,4 +24,9 @@ contract ERC20Facet is ERC20WithCommonStorage {
|
||||||
LibERC20.enforceIsController();
|
LibERC20.enforceIsController();
|
||||||
_mint(account, amount);
|
_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);
|
_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
|
* @dev Destroys `amount` tokens from `account`, reducing the
|
||||||
* total supply.
|
* total supply.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# Code generated by moonworm : https://github.com/bugout-dev/moonworm
|
# Code generated by moonworm : https://github.com/bugout-dev/moonworm
|
||||||
# Moonworm version : 0.1.14
|
# Moonworm version : 0.1.16
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
|
@ -107,6 +107,10 @@ class ERC20Facet:
|
||||||
self.assert_contract_is_instantiated()
|
self.assert_contract_is_instantiated()
|
||||||
return self.contract.balanceOf.call(account)
|
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:
|
def decimals(self) -> Any:
|
||||||
self.assert_contract_is_instantiated()
|
self.assert_contract_is_instantiated()
|
||||||
return self.contract.decimals.call()
|
return self.contract.decimals.call()
|
||||||
|
@ -221,6 +225,9 @@ def add_default_arguments(parser: argparse.ArgumentParser, transact: bool) -> No
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--nonce", type=int, default=None, help="Nonce for the transaction (optional)"
|
"--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:
|
def handle_deploy(args: argparse.Namespace) -> None:
|
||||||
|
@ -262,6 +269,18 @@ def handle_balance_of(args: argparse.Namespace) -> None:
|
||||||
print(result)
|
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:
|
def handle_decimals(args: argparse.Namespace) -> None:
|
||||||
network.connect(args.network)
|
network.connect(args.network)
|
||||||
contract = ERC20Facet(args.address)
|
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.add_argument("--account", required=True, help="Type: address")
|
||||||
balance_of_parser.set_defaults(func=handle_balance_of)
|
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")
|
decimals_parser = subcommands.add_parser("decimals")
|
||||||
add_default_arguments(decimals_parser, False)
|
add_default_arguments(decimals_parser, False)
|
||||||
decimals_parser.set_defaults(func=handle_decimals)
|
decimals_parser.set_defaults(func=handle_decimals)
|
||||||
|
|
|
@ -133,6 +133,21 @@ class TestERC20(MoonstreamTokenTestCase):
|
||||||
final_balance = diamond.balance_of(accounts[1].address)
|
final_balance = diamond.balance_of(accounts[1].address)
|
||||||
self.assertEqual(final_balance, initial_balance + 1000)
|
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):
|
def test_transfer(self):
|
||||||
diamond_address = self.contracts["Diamond"]
|
diamond_address = self.contracts["Diamond"]
|
||||||
diamond = ERC20Facet.ERC20Facet(diamond_address)
|
diamond = ERC20Facet.ERC20Facet(diamond_address)
|
||||||
|
@ -227,10 +242,7 @@ class TestERC20(MoonstreamTokenTestCase):
|
||||||
|
|
||||||
with self.assertRaises(Exception):
|
with self.assertRaises(Exception):
|
||||||
diamond.transfer_from(
|
diamond.transfer_from(
|
||||||
accounts[1].address,
|
accounts[1].address, accounts[2].address, 501, {"from": accounts[2]},
|
||||||
accounts[2].address,
|
|
||||||
501,
|
|
||||||
{"from": accounts[2]},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
final_sender_balance = diamond.balance_of(accounts[1].address)
|
final_sender_balance = diamond.balance_of(accounts[1].address)
|
||||||
|
|
Ładowanie…
Reference in New Issue