-
Notifications
You must be signed in to change notification settings - Fork 45
/
Copy pathmint_tokens.py
46 lines (39 loc) · 1.88 KB
/
mint_tokens.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/env python
from pathlib import Path
import click
from eth_typing import URI, ChecksumAddress
from eth_utils import encode_hex
from hexbytes import HexBytes
from web3 import HTTPProvider, Web3
from web3.middleware import construct_sign_and_send_raw_middleware
from raiden_contracts.constants import CONTRACT_CUSTOM_TOKEN
from raiden_contracts.contract_manager import ContractManager, contracts_precompiled_path
from raiden_contracts.utils.private_key import get_private_key
from raiden_contracts.utils.signature import private_key_to_address
WEI_TO_ETH = 10**18
@click.command()
@click.option(
"--rpc-url", help="Ethereum client rpc url", default="http://127.0.0.1:8545", required=True
)
@click.option("--private-key", required=True, type=click.Path(exists=True, dir_okay=False))
@click.option("--token-address", help="address of the token contract", required=True)
@click.option("--amount", help="Amount of tokens to mint", required=True, type=click.INT)
def main(rpc_url: URI, private_key: Path, token_address: ChecksumAddress, amount: int) -> None:
web3 = Web3(HTTPProvider(rpc_url))
privkey = get_private_key(private_key)
assert privkey is not None
owner = private_key_to_address(privkey)
web3.middleware_onion.add(construct_sign_and_send_raw_middleware(privkey))
token_code = web3.eth.get_code(token_address, "latest")
assert token_code != HexBytes("")
token_contract = ContractManager(contracts_precompiled_path()).get_contract(
CONTRACT_CUSTOM_TOKEN
)
token_proxy = web3.eth.contract(address=token_address, abi=token_contract["abi"])
tx_hash = token_proxy.functions.mint(amount).transact({"from": owner})
print(f"Minting tokens for address {owner}")
print(f"Transaction hash {encode_hex(tx_hash)}")
balance = token_proxy.functions.balanceOf(owner).call()
print(f"Balance of {owner}: {balance}")
if __name__ == "__main__":
main()