dao/dao/TerminusFacet.py

673 wiersze
24 KiB
Python

# Code generated by moonworm : https://github.com/bugout-dev/moonworm
# Moonworm version : 0.1.9
import argparse
import json
import os
from pathlib import Path
from typing import Any, Dict, List, Optional, Union
from brownie import Contract, network, project
from brownie.network.contract import ContractContainer
from eth_typing.evm import ChecksumAddress
PROJECT_DIRECTORY = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
BUILD_DIRECTORY = os.path.join(PROJECT_DIRECTORY, "build", "contracts")
def boolean_argument_type(raw_value: str) -> bool:
TRUE_VALUES = ["1", "t", "y", "true", "yes"]
FALSE_VALUES = ["0", "f", "n", "false", "no"]
if raw_value.lower() in TRUE_VALUES:
return True
elif raw_value.lower() in FALSE_VALUES:
return False
raise ValueError(
f"Invalid boolean argument: {raw_value}. Value must be one of: {','.join(TRUE_VALUES + FALSE_VALUES)}"
)
def bytes_argument_type(raw_value: str) -> bytes:
return raw_value.encode()
def get_abi_json(abi_name: str) -> List[Dict[str, Any]]:
abi_full_path = os.path.join(BUILD_DIRECTORY, f"{abi_name}.json")
if not os.path.isfile(abi_full_path):
raise IOError(
f"File does not exist: {abi_full_path}. Maybe you have to compile the smart contracts?"
)
with open(abi_full_path, "r") as ifp:
build = json.load(ifp)
abi_json = build.get("abi")
if abi_json is None:
raise ValueError(f"Could not find ABI definition in: {abi_full_path}")
return abi_json
def contract_from_build(abi_name: str) -> ContractContainer:
# This is workaround because brownie currently doesn't support loading the same project multiple
# times. This causes problems when using multiple contracts from the same project in the same
# python project.
PROJECT = project.main.Project("moonworm", Path(PROJECT_DIRECTORY))
abi_full_path = os.path.join(BUILD_DIRECTORY, f"{abi_name}.json")
if not os.path.isfile(abi_full_path):
raise IOError(
f"File does not exist: {abi_full_path}. Maybe you have to compile the smart contracts?"
)
with open(abi_full_path, "r") as ifp:
build = json.load(ifp)
return ContractContainer(PROJECT, build)
class TerminusFacet:
def __init__(self, contract_address: Optional[ChecksumAddress]):
self.contract_name = "TerminusFacet"
self.address = contract_address
self.contract = None
self.abi = get_abi_json("TerminusFacet")
if self.address is not None:
self.contract: Optional[Contract] = Contract.from_abi(
self.contract_name, self.address, self.abi
)
def deploy(self, transaction_config):
contract_class = contract_from_build(self.contract_name)
deployed_contract = contract_class.deploy(transaction_config)
self.address = deployed_contract.address
self.contract = deployed_contract
def assert_contract_is_instantiated(self) -> None:
if self.contract is None:
raise Exception("contract has not been instantiated")
def balance_of(self, account: ChecksumAddress, id: int) -> Any:
self.assert_contract_is_instantiated()
return self.contract.balanceOf.call(account, id)
def balance_of_batch(self, accounts: List, ids: List) -> Any:
self.assert_contract_is_instantiated()
return self.contract.balanceOfBatch.call(accounts, ids)
def create_simple_pool(self, _capacity: int, transaction_config) -> Any:
self.assert_contract_is_instantiated()
return self.contract.createSimplePool(_capacity, transaction_config)
def is_approved_for_all(
self, account: ChecksumAddress, operator: ChecksumAddress
) -> Any:
self.assert_contract_is_instantiated()
return self.contract.isApprovedForAll.call(account, operator)
def mint(
self,
to: ChecksumAddress,
pool_id: int,
amount: int,
data: bytes,
transaction_config,
) -> Any:
self.assert_contract_is_instantiated()
return self.contract.mint(to, pool_id, amount, data, transaction_config)
def mint_batch(
self,
to: ChecksumAddress,
pool_i_ds: List,
amounts: List,
data: bytes,
transaction_config,
) -> Any:
self.assert_contract_is_instantiated()
return self.contract.mintBatch(to, pool_i_ds, amounts, data, transaction_config)
def payment_token(self) -> Any:
self.assert_contract_is_instantiated()
return self.contract.paymentToken.call()
def pool_base_price(self) -> Any:
self.assert_contract_is_instantiated()
return self.contract.poolBasePrice.call()
def safe_batch_transfer_from(
self,
from_: ChecksumAddress,
to: ChecksumAddress,
ids: List,
amounts: List,
data: bytes,
transaction_config,
) -> Any:
self.assert_contract_is_instantiated()
return self.contract.safeBatchTransferFrom(
from_, to, ids, amounts, data, transaction_config
)
def safe_transfer_from(
self,
from_: ChecksumAddress,
to: ChecksumAddress,
id: int,
amount: int,
data: bytes,
transaction_config,
) -> Any:
self.assert_contract_is_instantiated()
return self.contract.safeTransferFrom(
from_, to, id, amount, data, transaction_config
)
def set_approval_for_all(
self, operator: ChecksumAddress, approved: bool, transaction_config
) -> Any:
self.assert_contract_is_instantiated()
return self.contract.setApprovalForAll(operator, approved, transaction_config)
def set_payment_token(
self, new_payment_token: ChecksumAddress, transaction_config
) -> Any:
self.assert_contract_is_instantiated()
return self.contract.setPaymentToken(new_payment_token, transaction_config)
def set_pool_base_price(self, new_base_price: int, transaction_config) -> Any:
self.assert_contract_is_instantiated()
return self.contract.setPoolBasePrice(new_base_price, transaction_config)
def set_uri(self, pool_id: int, pool_uri: str, transaction_config) -> Any:
self.assert_contract_is_instantiated()
return self.contract.setURI(pool_id, pool_uri, transaction_config)
def supports_interface(self, interface_id: bytes) -> Any:
self.assert_contract_is_instantiated()
return self.contract.supportsInterface.call(interface_id)
def terminus_controller(self) -> Any:
self.assert_contract_is_instantiated()
return self.contract.terminusController.call()
def terminus_pool_capacity(self, pool_id: int) -> Any:
self.assert_contract_is_instantiated()
return self.contract.terminusPoolCapacity.call(pool_id)
def terminus_pool_controller(self, pool_id: int) -> Any:
self.assert_contract_is_instantiated()
return self.contract.terminusPoolController.call(pool_id)
def total_pools(self) -> Any:
self.assert_contract_is_instantiated()
return self.contract.totalPools.call()
def uri(self, pool_id: int) -> Any:
self.assert_contract_is_instantiated()
return self.contract.uri.call(pool_id)
def withdraw_payments(
self, to_address: ChecksumAddress, amount: int, transaction_config
) -> Any:
self.assert_contract_is_instantiated()
return self.contract.withdrawPayments(to_address, amount, transaction_config)
def get_transaction_config(args: argparse.Namespace) -> Dict[str, Any]:
signer = network.accounts.load(args.sender, args.password)
transaction_config: Dict[str, Any] = {"from": signer}
if args.gas_price is not None:
transaction_config["gas_price"] = args.gas_price
if args.confirmations is not None:
transaction_config["required_confs"] = args.confirmations
if args.nonce is not None:
transaction_config["nonce"] = args.nonce
return transaction_config
def add_default_arguments(parser: argparse.ArgumentParser, transact: bool) -> None:
parser.add_argument(
"--network", required=True, help="Name of brownie network to connect to"
)
parser.add_argument(
"--address", required=False, help="Address of deployed contract to connect to"
)
if not transact:
return
parser.add_argument(
"--sender", required=True, help="Path to keystore file for transaction sender"
)
parser.add_argument(
"--password",
required=False,
help="Password to keystore file (if you do not provide it, you will be prompted for it)",
)
parser.add_argument(
"--gas-price", default=None, help="Gas price at which to submit transaction"
)
parser.add_argument(
"--confirmations",
type=int,
default=None,
help="Number of confirmations to await before considering a transaction completed",
)
parser.add_argument(
"--nonce", type=int, default=None, help="Nonce for the transaction (optional)"
)
def handle_deploy(args: argparse.Namespace) -> None:
network.connect(args.network)
transaction_config = get_transaction_config(args)
contract = TerminusFacet(None)
result = contract.deploy(transaction_config=transaction_config)
print(result)
def handle_balance_of(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
result = contract.balance_of(account=args.account, id=args.id)
print(result)
def handle_balance_of_batch(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
result = contract.balance_of_batch(accounts=args.accounts, ids=args.ids)
print(result)
def handle_create_simple_pool(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
transaction_config = get_transaction_config(args)
result = contract.create_simple_pool(
_capacity=args.capacity_arg, transaction_config=transaction_config
)
print(result)
def handle_is_approved_for_all(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
result = contract.is_approved_for_all(account=args.account, operator=args.operator)
print(result)
def handle_mint(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
transaction_config = get_transaction_config(args)
result = contract.mint(
to=args.to,
pool_id=args.pool_id,
amount=args.amount,
data=args.data,
transaction_config=transaction_config,
)
print(result)
def handle_mint_batch(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
transaction_config = get_transaction_config(args)
result = contract.mint_batch(
to=args.to,
pool_i_ds=args.pool_i_ds,
amounts=args.amounts,
data=args.data,
transaction_config=transaction_config,
)
print(result)
def handle_payment_token(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
result = contract.payment_token()
print(result)
def handle_pool_base_price(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
result = contract.pool_base_price()
print(result)
def handle_safe_batch_transfer_from(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
transaction_config = get_transaction_config(args)
result = contract.safe_batch_transfer_from(
from_=args.from_arg,
to=args.to,
ids=args.ids,
amounts=args.amounts,
data=args.data,
transaction_config=transaction_config,
)
print(result)
def handle_safe_transfer_from(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
transaction_config = get_transaction_config(args)
result = contract.safe_transfer_from(
from_=args.from_arg,
to=args.to,
id=args.id,
amount=args.amount,
data=args.data,
transaction_config=transaction_config,
)
print(result)
def handle_set_approval_for_all(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
transaction_config = get_transaction_config(args)
result = contract.set_approval_for_all(
operator=args.operator,
approved=args.approved,
transaction_config=transaction_config,
)
print(result)
def handle_set_payment_token(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
transaction_config = get_transaction_config(args)
result = contract.set_payment_token(
new_payment_token=args.new_payment_token, transaction_config=transaction_config
)
print(result)
def handle_set_pool_base_price(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
transaction_config = get_transaction_config(args)
result = contract.set_pool_base_price(
new_base_price=args.new_base_price, transaction_config=transaction_config
)
print(result)
def handle_set_uri(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
transaction_config = get_transaction_config(args)
result = contract.set_uri(
pool_id=args.pool_id,
pool_uri=args.pool_uri,
transaction_config=transaction_config,
)
print(result)
def handle_supports_interface(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
result = contract.supports_interface(interface_id=args.interface_id)
print(result)
def handle_terminus_controller(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
result = contract.terminus_controller()
print(result)
def handle_terminus_pool_capacity(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
result = contract.terminus_pool_capacity(pool_id=args.pool_id)
print(result)
def handle_terminus_pool_controller(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
result = contract.terminus_pool_controller(pool_id=args.pool_id)
print(result)
def handle_total_pools(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
result = contract.total_pools()
print(result)
def handle_uri(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
result = contract.uri(pool_id=args.pool_id)
print(result)
def handle_withdraw_payments(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
transaction_config = get_transaction_config(args)
result = contract.withdraw_payments(
to_address=args.to_address,
amount=args.amount,
transaction_config=transaction_config,
)
print(result)
def generate_cli() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(description="CLI for TerminusFacet")
parser.set_defaults(func=lambda _: parser.print_help())
subcommands = parser.add_subparsers()
deploy_parser = subcommands.add_parser("deploy")
add_default_arguments(deploy_parser, True)
deploy_parser.set_defaults(func=handle_deploy)
balance_of_parser = subcommands.add_parser("balance-of")
add_default_arguments(balance_of_parser, False)
balance_of_parser.add_argument("--account", required=True, help="Type: address")
balance_of_parser.add_argument(
"--id", required=True, help="Type: uint256", type=int
)
balance_of_parser.set_defaults(func=handle_balance_of)
balance_of_batch_parser = subcommands.add_parser("balance-of-batch")
add_default_arguments(balance_of_batch_parser, False)
balance_of_batch_parser.add_argument(
"--accounts", required=True, help="Type: address[]", nargs="+"
)
balance_of_batch_parser.add_argument(
"--ids", required=True, help="Type: uint256[]", nargs="+"
)
balance_of_batch_parser.set_defaults(func=handle_balance_of_batch)
create_simple_pool_parser = subcommands.add_parser("create-simple-pool")
add_default_arguments(create_simple_pool_parser, True)
create_simple_pool_parser.add_argument(
"--capacity-arg", required=True, help="Type: uint256", type=int
)
create_simple_pool_parser.set_defaults(func=handle_create_simple_pool)
is_approved_for_all_parser = subcommands.add_parser("is-approved-for-all")
add_default_arguments(is_approved_for_all_parser, False)
is_approved_for_all_parser.add_argument(
"--account", required=True, help="Type: address"
)
is_approved_for_all_parser.add_argument(
"--operator", required=True, help="Type: address"
)
is_approved_for_all_parser.set_defaults(func=handle_is_approved_for_all)
mint_parser = subcommands.add_parser("mint")
add_default_arguments(mint_parser, True)
mint_parser.add_argument("--to", required=True, help="Type: address")
mint_parser.add_argument("--pool-id", required=True, help="Type: uint256", type=int)
mint_parser.add_argument("--amount", required=True, help="Type: uint256", type=int)
mint_parser.add_argument(
"--data", required=True, help="Type: bytes", type=bytes_argument_type
)
mint_parser.set_defaults(func=handle_mint)
mint_batch_parser = subcommands.add_parser("mint-batch")
add_default_arguments(mint_batch_parser, True)
mint_batch_parser.add_argument("--to", required=True, help="Type: address")
mint_batch_parser.add_argument(
"--pool-i-ds", required=True, help="Type: uint256[]", nargs="+"
)
mint_batch_parser.add_argument(
"--amounts", required=True, help="Type: uint256[]", nargs="+"
)
mint_batch_parser.add_argument(
"--data", required=True, help="Type: bytes", type=bytes_argument_type
)
mint_batch_parser.set_defaults(func=handle_mint_batch)
payment_token_parser = subcommands.add_parser("payment-token")
add_default_arguments(payment_token_parser, False)
payment_token_parser.set_defaults(func=handle_payment_token)
pool_base_price_parser = subcommands.add_parser("pool-base-price")
add_default_arguments(pool_base_price_parser, False)
pool_base_price_parser.set_defaults(func=handle_pool_base_price)
safe_batch_transfer_from_parser = subcommands.add_parser("safe-batch-transfer-from")
add_default_arguments(safe_batch_transfer_from_parser, True)
safe_batch_transfer_from_parser.add_argument(
"--from-arg", required=True, help="Type: address"
)
safe_batch_transfer_from_parser.add_argument(
"--to", required=True, help="Type: address"
)
safe_batch_transfer_from_parser.add_argument(
"--ids", required=True, help="Type: uint256[]", nargs="+"
)
safe_batch_transfer_from_parser.add_argument(
"--amounts", required=True, help="Type: uint256[]", nargs="+"
)
safe_batch_transfer_from_parser.add_argument(
"--data", required=True, help="Type: bytes", type=bytes_argument_type
)
safe_batch_transfer_from_parser.set_defaults(func=handle_safe_batch_transfer_from)
safe_transfer_from_parser = subcommands.add_parser("safe-transfer-from")
add_default_arguments(safe_transfer_from_parser, True)
safe_transfer_from_parser.add_argument(
"--from-arg", required=True, help="Type: address"
)
safe_transfer_from_parser.add_argument("--to", required=True, help="Type: address")
safe_transfer_from_parser.add_argument(
"--id", required=True, help="Type: uint256", type=int
)
safe_transfer_from_parser.add_argument(
"--amount", required=True, help="Type: uint256", type=int
)
safe_transfer_from_parser.add_argument(
"--data", required=True, help="Type: bytes", type=bytes_argument_type
)
safe_transfer_from_parser.set_defaults(func=handle_safe_transfer_from)
set_approval_for_all_parser = subcommands.add_parser("set-approval-for-all")
add_default_arguments(set_approval_for_all_parser, True)
set_approval_for_all_parser.add_argument(
"--operator", required=True, help="Type: address"
)
set_approval_for_all_parser.add_argument(
"--approved", required=True, help="Type: bool", type=boolean_argument_type
)
set_approval_for_all_parser.set_defaults(func=handle_set_approval_for_all)
set_payment_token_parser = subcommands.add_parser("set-payment-token")
add_default_arguments(set_payment_token_parser, True)
set_payment_token_parser.add_argument(
"--new-payment-token", required=True, help="Type: address"
)
set_payment_token_parser.set_defaults(func=handle_set_payment_token)
set_pool_base_price_parser = subcommands.add_parser("set-pool-base-price")
add_default_arguments(set_pool_base_price_parser, True)
set_pool_base_price_parser.add_argument(
"--new-base-price", required=True, help="Type: uint256", type=int
)
set_pool_base_price_parser.set_defaults(func=handle_set_pool_base_price)
set_uri_parser = subcommands.add_parser("set-uri")
add_default_arguments(set_uri_parser, True)
set_uri_parser.add_argument(
"--pool-id", required=True, help="Type: uint256", type=int
)
set_uri_parser.add_argument(
"--pool-uri", required=True, help="Type: string", type=str
)
set_uri_parser.set_defaults(func=handle_set_uri)
supports_interface_parser = subcommands.add_parser("supports-interface")
add_default_arguments(supports_interface_parser, False)
supports_interface_parser.add_argument(
"--interface-id", required=True, help="Type: bytes4", type=bytes_argument_type
)
supports_interface_parser.set_defaults(func=handle_supports_interface)
terminus_controller_parser = subcommands.add_parser("terminus-controller")
add_default_arguments(terminus_controller_parser, False)
terminus_controller_parser.set_defaults(func=handle_terminus_controller)
terminus_pool_capacity_parser = subcommands.add_parser("terminus-pool-capacity")
add_default_arguments(terminus_pool_capacity_parser, False)
terminus_pool_capacity_parser.add_argument(
"--pool-id", required=True, help="Type: uint256", type=int
)
terminus_pool_capacity_parser.set_defaults(func=handle_terminus_pool_capacity)
terminus_pool_controller_parser = subcommands.add_parser("terminus-pool-controller")
add_default_arguments(terminus_pool_controller_parser, False)
terminus_pool_controller_parser.add_argument(
"--pool-id", required=True, help="Type: uint256", type=int
)
terminus_pool_controller_parser.set_defaults(func=handle_terminus_pool_controller)
total_pools_parser = subcommands.add_parser("total-pools")
add_default_arguments(total_pools_parser, False)
total_pools_parser.set_defaults(func=handle_total_pools)
uri_parser = subcommands.add_parser("uri")
add_default_arguments(uri_parser, False)
uri_parser.add_argument("--pool-id", required=True, help="Type: uint256", type=int)
uri_parser.set_defaults(func=handle_uri)
withdraw_payments_parser = subcommands.add_parser("withdraw-payments")
add_default_arguments(withdraw_payments_parser, True)
withdraw_payments_parser.add_argument(
"--to-address", required=True, help="Type: address"
)
withdraw_payments_parser.add_argument(
"--amount", required=True, help="Type: uint256", type=int
)
withdraw_payments_parser.set_defaults(func=handle_withdraw_payments)
return parser
def main() -> None:
parser = generate_cli()
args = parser.parse_args()
args.func(args)
if __name__ == "__main__":
main()