Added payment token functionality to TerminusFacet

pull/9/head
Neeraj Kashyap 2021-12-19 04:47:24 -08:00
rodzic 44aa774e5c
commit 96829f26bd
4 zmienionych plików z 92 dodań i 12 usunięć

Wyświetl plik

@ -23,6 +23,8 @@ library LibTerminus {
address controller;
bool isTerminusActive;
uint256 currentPoolID;
address paymentToken;
uint256 poolBasePrice;
// Terminus pools
mapping(uint256 => address) poolController;
mapping(uint256 => bool) poolActive;
@ -79,7 +81,7 @@ library LibTerminus {
emit PoolControlTransferred(poolID, previousController, newController);
}
function createPool() internal returns (uint256) {
function createSimplePool() internal returns (uint256) {
TerminusStorage storage ts = terminusStorage();
uint256 poolID = ts.currentPoolID + 1;
setPoolController(poolID, msg.sender);

Wyświetl plik

@ -9,6 +9,7 @@
pragma solidity ^0.8.0;
import "@openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";
import "./ERC1155WithTerminusStorage.sol";
import "./LibTerminus.sol";
import "../diamond/libraries/LibDiamond.sol";
@ -20,6 +21,27 @@ contract TerminusFacet is ERC1155WithTerminusStorage {
return LibTerminus.terminusStorage().controller;
}
function paymentToken() external view returns (address) {
return LibTerminus.terminusStorage().paymentToken;
}
function setPaymentToken(address newPaymentToken) external {
LibTerminus.enforceIsController();
LibTerminus.TerminusStorage storage ts = LibTerminus.terminusStorage();
ts.paymentToken = newPaymentToken;
}
function _paymentTokenContract() internal view returns (IERC20) {
address paymentTokenAddress = LibTerminus
.terminusStorage()
.paymentToken;
require(
paymentTokenAddress != address(0),
"TerminusFacet: Payment token has not been set"
);
return IERC20(paymentTokenAddress);
}
function setURI(uint256 poolID, string memory poolURI) external {
LibTerminus.enforcePoolIsController(poolID, _msgSender());
LibTerminus.TerminusStorage storage ts = LibTerminus.terminusStorage();
@ -30,8 +52,21 @@ contract TerminusFacet is ERC1155WithTerminusStorage {
return LibTerminus.terminusStorage().currentPoolID;
}
function createPool() external returns (uint256) {
return LibTerminus.createPool();
function createSimplePool() external returns (uint256) {
LibTerminus.TerminusStorage storage ts = LibTerminus.terminusStorage();
uint256 requiredPayment = ts.poolBasePrice;
IERC20 paymentTokenContract = _paymentTokenContract();
require(
paymentTokenContract.allowance(_msgSender(), address(this)) >=
requiredPayment,
"TerminusFacet: createSimplePool -- Insufficient allowance on payment token"
);
paymentTokenContract.transferFrom(
msg.sender,
address(this),
requiredPayment
);
return LibTerminus.createSimplePool();
}
function terminusPoolController(uint256 poolID)

Wyświetl plik

@ -1,5 +1,5 @@
# Code generated by moonworm : https://github.com/bugout-dev/moonworm
# Moonworm version : 0.1.8
# Moonworm version : 0.1.9
import argparse
import json
@ -98,9 +98,9 @@ class TerminusFacet:
self.assert_contract_is_instantiated()
return self.contract.balanceOfBatch.call(accounts, ids)
def create_pool(self, transaction_config) -> Any:
def create_simple_pool(self, transaction_config) -> Any:
self.assert_contract_is_instantiated()
return self.contract.createPool(transaction_config)
return self.contract.createSimplePool(transaction_config)
def is_approved_for_all(
self, account: ChecksumAddress, operator: ChecksumAddress
@ -130,6 +130,10 @@ class TerminusFacet:
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 safe_batch_transfer_from(
self,
from_: ChecksumAddress,
@ -164,6 +168,12 @@ class TerminusFacet:
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_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)
@ -196,6 +206,8 @@ def get_transaction_config(args: argparse.Namespace) -> Dict[str, Any]:
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
@ -225,6 +237,9 @@ def add_default_arguments(parser: argparse.ArgumentParser, transact: bool) -> No
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:
@ -249,11 +264,11 @@ def handle_balance_of_batch(args: argparse.Namespace) -> None:
print(result)
def handle_create_pool(args: argparse.Namespace) -> None:
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_pool(transaction_config=transaction_config)
result = contract.create_simple_pool(transaction_config=transaction_config)
print(result)
@ -292,6 +307,13 @@ def handle_mint_batch(args: argparse.Namespace) -> None:
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_safe_batch_transfer_from(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
@ -334,6 +356,16 @@ def handle_set_approval_for_all(args: argparse.Namespace) -> None:
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_uri(args: argparse.Namespace) -> None:
network.connect(args.network)
contract = TerminusFacet(args.address)
@ -408,9 +440,9 @@ def generate_cli() -> argparse.ArgumentParser:
)
balance_of_batch_parser.set_defaults(func=handle_balance_of_batch)
create_pool_parser = subcommands.add_parser("create-pool")
add_default_arguments(create_pool_parser, True)
create_pool_parser.set_defaults(func=handle_create_pool)
create_simple_pool_parser = subcommands.add_parser("create-simple-pool")
add_default_arguments(create_simple_pool_parser, True)
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)
@ -446,6 +478,10 @@ def generate_cli() -> argparse.ArgumentParser:
)
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)
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(
@ -492,6 +528,13 @@ def generate_cli() -> argparse.ArgumentParser:
)
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_uri_parser = subcommands.add_parser("set-uri")
add_default_arguments(set_uri_parser, True)
set_uri_parser.add_argument(

Wyświetl plik

@ -12,7 +12,7 @@ setup(
extras_require={
"dev": [
"black",
"moonworm",
"moonworm >= 0.1.9",
],
"distribute": ["setuptools", "twine", "wheel"],
},