kopia lustrzana https://github.com/bugout-dev/dao
Added "createSimplePoolV2" on TerminusFacet
Also made it so that if `requiredPayment` is set to 0 on a Terminus contract, we will not even initiate the ERC20 `transferFrom`. This makes it so that a Terminus contract in which the controller does not have to pay to create a pool does not require setting a payment token. Bumped dao version to `0.0.8`. Added tests for `createSimplePoolV2` functionality.pull/71/head
rodzic
2e6cbbe957
commit
4b198dd3b4
|
@ -203,17 +203,23 @@ contract TerminusFacet is ERC1155WithTerminusStorage {
|
||||||
LibTerminus.enforceIsController();
|
LibTerminus.enforceIsController();
|
||||||
LibTerminus.TerminusStorage storage ts = LibTerminus.terminusStorage();
|
LibTerminus.TerminusStorage storage ts = LibTerminus.terminusStorage();
|
||||||
uint256 requiredPayment = ts.poolBasePrice;
|
uint256 requiredPayment = ts.poolBasePrice;
|
||||||
IERC20 paymentTokenContract = _paymentTokenContract();
|
|
||||||
require(
|
if (requiredPayment > 0) {
|
||||||
paymentTokenContract.allowance(_msgSender(), address(this)) >=
|
IERC20 paymentTokenContract = _paymentTokenContract();
|
||||||
requiredPayment,
|
require(
|
||||||
"TerminusFacet: createSimplePool -- Insufficient allowance on payment token"
|
paymentTokenContract.allowance(_msgSender(), address(this)) >=
|
||||||
);
|
requiredPayment,
|
||||||
paymentTokenContract.transferFrom(
|
"TerminusFacet: createSimplePool -- Insufficient allowance on payment token"
|
||||||
msg.sender,
|
);
|
||||||
address(this),
|
require(
|
||||||
requiredPayment
|
paymentTokenContract.transferFrom(
|
||||||
);
|
msg.sender,
|
||||||
|
address(this),
|
||||||
|
requiredPayment
|
||||||
|
),
|
||||||
|
"TerminusFacet: createSimplePool -- Transfer of payment token was unsuccessful"
|
||||||
|
);
|
||||||
|
}
|
||||||
return LibTerminus.createSimplePool(_capacity);
|
return LibTerminus.createSimplePool(_capacity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -224,19 +230,23 @@ contract TerminusFacet is ERC1155WithTerminusStorage {
|
||||||
) external returns (uint256) {
|
) external returns (uint256) {
|
||||||
LibTerminus.enforceIsController();
|
LibTerminus.enforceIsController();
|
||||||
LibTerminus.TerminusStorage storage ts = LibTerminus.terminusStorage();
|
LibTerminus.TerminusStorage storage ts = LibTerminus.terminusStorage();
|
||||||
// TODO(zomglings): Implement requiredPayment update based on pool features.
|
|
||||||
uint256 requiredPayment = ts.poolBasePrice;
|
uint256 requiredPayment = ts.poolBasePrice;
|
||||||
IERC20 paymentTokenContract = _paymentTokenContract();
|
if (requiredPayment > 0) {
|
||||||
require(
|
IERC20 paymentTokenContract = _paymentTokenContract();
|
||||||
paymentTokenContract.allowance(_msgSender(), address(this)) >=
|
require(
|
||||||
requiredPayment,
|
paymentTokenContract.allowance(_msgSender(), address(this)) >=
|
||||||
"TerminusFacet: createPoolV1 -- Insufficient allowance on payment token"
|
requiredPayment,
|
||||||
);
|
"TerminusFacet: createPoolV1 -- Insufficient allowance on payment token"
|
||||||
paymentTokenContract.transferFrom(
|
);
|
||||||
msg.sender,
|
require(
|
||||||
address(this),
|
paymentTokenContract.transferFrom(
|
||||||
requiredPayment
|
msg.sender,
|
||||||
);
|
address(this),
|
||||||
|
requiredPayment
|
||||||
|
),
|
||||||
|
"TerminusFacet: createPoolV1 -- Transfer of payment token was unsuccessful"
|
||||||
|
);
|
||||||
|
}
|
||||||
uint256 poolID = LibTerminus.createSimplePool(_capacity);
|
uint256 poolID = LibTerminus.createSimplePool(_capacity);
|
||||||
if (!_transferable) {
|
if (!_transferable) {
|
||||||
ts.poolNotTransferable[poolID] = true;
|
ts.poolNotTransferable[poolID] = true;
|
||||||
|
@ -247,6 +257,42 @@ contract TerminusFacet is ERC1155WithTerminusStorage {
|
||||||
return poolID;
|
return poolID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function createPoolV2(
|
||||||
|
uint256 _capacity,
|
||||||
|
bool _transferable,
|
||||||
|
bool _burnable,
|
||||||
|
string memory poolURI
|
||||||
|
) external returns (uint256) {
|
||||||
|
LibTerminus.enforceIsController();
|
||||||
|
LibTerminus.TerminusStorage storage ts = LibTerminus.terminusStorage();
|
||||||
|
uint256 requiredPayment = ts.poolBasePrice;
|
||||||
|
if (requiredPayment > 0) {
|
||||||
|
IERC20 paymentTokenContract = _paymentTokenContract();
|
||||||
|
require(
|
||||||
|
paymentTokenContract.allowance(_msgSender(), address(this)) >=
|
||||||
|
requiredPayment,
|
||||||
|
"TerminusFacet: createPoolV2 -- Insufficient allowance on payment token"
|
||||||
|
);
|
||||||
|
require(
|
||||||
|
paymentTokenContract.transferFrom(
|
||||||
|
msg.sender,
|
||||||
|
address(this),
|
||||||
|
requiredPayment
|
||||||
|
),
|
||||||
|
"TerminusFacet: createPoolV2 -- Transfer of payment token was unsuccessful"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
uint256 poolID = LibTerminus.createSimplePool(_capacity);
|
||||||
|
if (!_transferable) {
|
||||||
|
ts.poolNotTransferable[poolID] = true;
|
||||||
|
}
|
||||||
|
if (_burnable) {
|
||||||
|
ts.poolBurnable[poolID] = true;
|
||||||
|
}
|
||||||
|
ts.poolURI[poolID] = poolURI;
|
||||||
|
return poolID;
|
||||||
|
}
|
||||||
|
|
||||||
function mint(
|
function mint(
|
||||||
address to,
|
address to,
|
||||||
uint256 poolID,
|
uint256 poolID,
|
||||||
|
|
|
@ -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.2.4
|
# Moonworm version : 0.6.0
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
|
@ -140,6 +140,19 @@ class TerminusFacet:
|
||||||
_capacity, _transferable, _burnable, transaction_config
|
_capacity, _transferable, _burnable, transaction_config
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def create_pool_v2(
|
||||||
|
self,
|
||||||
|
_capacity: int,
|
||||||
|
_transferable: bool,
|
||||||
|
_burnable: bool,
|
||||||
|
pool_uri: str,
|
||||||
|
transaction_config,
|
||||||
|
) -> Any:
|
||||||
|
self.assert_contract_is_instantiated()
|
||||||
|
return self.contract.createPoolV2(
|
||||||
|
_capacity, _transferable, _burnable, pool_uri, transaction_config
|
||||||
|
)
|
||||||
|
|
||||||
def create_simple_pool(self, _capacity: int, transaction_config) -> Any:
|
def create_simple_pool(self, _capacity: int, transaction_config) -> Any:
|
||||||
self.assert_contract_is_instantiated()
|
self.assert_contract_is_instantiated()
|
||||||
return self.contract.createSimplePool(_capacity, transaction_config)
|
return self.contract.createSimplePool(_capacity, transaction_config)
|
||||||
|
@ -514,6 +527,22 @@ def handle_create_pool_v1(args: argparse.Namespace) -> None:
|
||||||
print(result.info())
|
print(result.info())
|
||||||
|
|
||||||
|
|
||||||
|
def handle_create_pool_v2(args: argparse.Namespace) -> None:
|
||||||
|
network.connect(args.network)
|
||||||
|
contract = TerminusFacet(args.address)
|
||||||
|
transaction_config = get_transaction_config(args)
|
||||||
|
result = contract.create_pool_v2(
|
||||||
|
_capacity=args.capacity_arg,
|
||||||
|
_transferable=args.transferable_arg,
|
||||||
|
_burnable=args.burnable_arg,
|
||||||
|
pool_uri=args.pool_uri,
|
||||||
|
transaction_config=transaction_config,
|
||||||
|
)
|
||||||
|
print(result)
|
||||||
|
if args.verbose:
|
||||||
|
print(result.info())
|
||||||
|
|
||||||
|
|
||||||
def handle_create_simple_pool(args: argparse.Namespace) -> None:
|
def handle_create_simple_pool(args: argparse.Namespace) -> None:
|
||||||
network.connect(args.network)
|
network.connect(args.network)
|
||||||
contract = TerminusFacet(args.address)
|
contract = TerminusFacet(args.address)
|
||||||
|
@ -928,6 +957,25 @@ def generate_cli() -> argparse.ArgumentParser:
|
||||||
)
|
)
|
||||||
create_pool_v1_parser.set_defaults(func=handle_create_pool_v1)
|
create_pool_v1_parser.set_defaults(func=handle_create_pool_v1)
|
||||||
|
|
||||||
|
create_pool_v2_parser = subcommands.add_parser("create-pool-v2")
|
||||||
|
add_default_arguments(create_pool_v2_parser, True)
|
||||||
|
create_pool_v2_parser.add_argument(
|
||||||
|
"--capacity-arg", required=True, help="Type: uint256", type=int
|
||||||
|
)
|
||||||
|
create_pool_v2_parser.add_argument(
|
||||||
|
"--transferable-arg",
|
||||||
|
required=True,
|
||||||
|
help="Type: bool",
|
||||||
|
type=boolean_argument_type,
|
||||||
|
)
|
||||||
|
create_pool_v2_parser.add_argument(
|
||||||
|
"--burnable-arg", required=True, help="Type: bool", type=boolean_argument_type
|
||||||
|
)
|
||||||
|
create_pool_v2_parser.add_argument(
|
||||||
|
"--pool-uri", required=True, help="Type: string", type=str
|
||||||
|
)
|
||||||
|
create_pool_v2_parser.set_defaults(func=handle_create_pool_v2)
|
||||||
|
|
||||||
create_simple_pool_parser = subcommands.add_parser("create-simple-pool")
|
create_simple_pool_parser = subcommands.add_parser("create-simple-pool")
|
||||||
add_default_arguments(create_simple_pool_parser, True)
|
add_default_arguments(create_simple_pool_parser, True)
|
||||||
create_simple_pool_parser.add_argument(
|
create_simple_pool_parser.add_argument(
|
||||||
|
|
|
@ -1093,7 +1093,7 @@ class TestPoolOperations(TerminusTestCase):
|
||||||
self.assertEqual(user_balance_6, user_balance_5)
|
self.assertEqual(user_balance_6, user_balance_5)
|
||||||
|
|
||||||
|
|
||||||
class TestCreatePoolV1(TestPoolOperations):
|
class TestPoolCreation(TestPoolOperations):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.diamond_terminus.create_pool_v1(10, True, False, {"from": accounts[1]})
|
self.diamond_terminus.create_pool_v1(10, True, False, {"from": accounts[1]})
|
||||||
|
|
||||||
|
@ -1130,7 +1130,14 @@ class TestCreatePoolV1(TestPoolOperations):
|
||||||
self.assertEqual(final_receiver_balance, initial_receiver_balance)
|
self.assertEqual(final_receiver_balance, initial_receiver_balance)
|
||||||
|
|
||||||
def test_pool_state_view_methods(self):
|
def test_pool_state_view_methods(self):
|
||||||
self.diamond_terminus.create_pool_v1(10, False, False, {"from": accounts[1]})
|
nontransferable_nonburnable_pool_uri = "https://example.com/ff.json"
|
||||||
|
self.diamond_terminus.create_pool_v2(
|
||||||
|
10,
|
||||||
|
False,
|
||||||
|
False,
|
||||||
|
nontransferable_nonburnable_pool_uri,
|
||||||
|
{"from": accounts[1]},
|
||||||
|
)
|
||||||
nontransferable_nonburnable_pool_id = self.diamond_terminus.total_pools()
|
nontransferable_nonburnable_pool_id = self.diamond_terminus.total_pools()
|
||||||
self.assertFalse(
|
self.assertFalse(
|
||||||
self.diamond_terminus.pool_is_transferable(
|
self.diamond_terminus.pool_is_transferable(
|
||||||
|
@ -1140,8 +1147,15 @@ class TestCreatePoolV1(TestPoolOperations):
|
||||||
self.assertFalse(
|
self.assertFalse(
|
||||||
self.diamond_terminus.pool_is_burnable(nontransferable_nonburnable_pool_id)
|
self.diamond_terminus.pool_is_burnable(nontransferable_nonburnable_pool_id)
|
||||||
)
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
self.diamond_terminus.uri(nontransferable_nonburnable_pool_id),
|
||||||
|
nontransferable_nonburnable_pool_uri,
|
||||||
|
)
|
||||||
|
|
||||||
self.diamond_terminus.create_pool_v1(10, True, False, {"from": accounts[1]})
|
transferable_nonburnable_pool_uri = "https://example.com/tf.json"
|
||||||
|
self.diamond_terminus.create_pool_v2(
|
||||||
|
10, True, False, transferable_nonburnable_pool_uri, {"from": accounts[1]}
|
||||||
|
)
|
||||||
transferable_nonburnable_pool_id = self.diamond_terminus.total_pools()
|
transferable_nonburnable_pool_id = self.diamond_terminus.total_pools()
|
||||||
self.assertTrue(
|
self.assertTrue(
|
||||||
self.diamond_terminus.pool_is_transferable(transferable_nonburnable_pool_id)
|
self.diamond_terminus.pool_is_transferable(transferable_nonburnable_pool_id)
|
||||||
|
@ -1149,8 +1163,15 @@ class TestCreatePoolV1(TestPoolOperations):
|
||||||
self.assertFalse(
|
self.assertFalse(
|
||||||
self.diamond_terminus.pool_is_burnable(transferable_nonburnable_pool_id)
|
self.diamond_terminus.pool_is_burnable(transferable_nonburnable_pool_id)
|
||||||
)
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
self.diamond_terminus.uri(transferable_nonburnable_pool_id),
|
||||||
|
transferable_nonburnable_pool_uri,
|
||||||
|
)
|
||||||
|
|
||||||
self.diamond_terminus.create_pool_v1(10, True, True, {"from": accounts[1]})
|
transferable_burnable_pool_uri = "https://example.com/tt.json"
|
||||||
|
self.diamond_terminus.create_pool_v2(
|
||||||
|
10, True, True, transferable_burnable_pool_uri, {"from": accounts[1]}
|
||||||
|
)
|
||||||
transferable_burnable_pool_id = self.diamond_terminus.total_pools()
|
transferable_burnable_pool_id = self.diamond_terminus.total_pools()
|
||||||
self.assertTrue(
|
self.assertTrue(
|
||||||
self.diamond_terminus.pool_is_transferable(transferable_burnable_pool_id)
|
self.diamond_terminus.pool_is_transferable(transferable_burnable_pool_id)
|
||||||
|
@ -1158,8 +1179,15 @@ class TestCreatePoolV1(TestPoolOperations):
|
||||||
self.assertTrue(
|
self.assertTrue(
|
||||||
self.diamond_terminus.pool_is_burnable(transferable_burnable_pool_id)
|
self.diamond_terminus.pool_is_burnable(transferable_burnable_pool_id)
|
||||||
)
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
self.diamond_terminus.uri(transferable_burnable_pool_id),
|
||||||
|
transferable_burnable_pool_uri,
|
||||||
|
)
|
||||||
|
|
||||||
self.diamond_terminus.create_pool_v1(10, False, True, {"from": accounts[1]})
|
nontransferable_burnable_pool_uri = "https://example.com/ft.json"
|
||||||
|
self.diamond_terminus.create_pool_v2(
|
||||||
|
10, False, True, nontransferable_burnable_pool_uri, {"from": accounts[1]}
|
||||||
|
)
|
||||||
nontransferable_burnable_pool_id = self.diamond_terminus.total_pools()
|
nontransferable_burnable_pool_id = self.diamond_terminus.total_pools()
|
||||||
self.assertFalse(
|
self.assertFalse(
|
||||||
self.diamond_terminus.pool_is_transferable(nontransferable_burnable_pool_id)
|
self.diamond_terminus.pool_is_transferable(nontransferable_burnable_pool_id)
|
||||||
|
@ -1167,6 +1195,10 @@ class TestCreatePoolV1(TestPoolOperations):
|
||||||
self.assertTrue(
|
self.assertTrue(
|
||||||
self.diamond_terminus.pool_is_burnable(nontransferable_burnable_pool_id)
|
self.diamond_terminus.pool_is_burnable(nontransferable_burnable_pool_id)
|
||||||
)
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
self.diamond_terminus.uri(nontransferable_burnable_pool_id),
|
||||||
|
nontransferable_burnable_pool_uri,
|
||||||
|
)
|
||||||
|
|
||||||
def test_pool_state_setters(self):
|
def test_pool_state_setters(self):
|
||||||
self.diamond_terminus.create_pool_v1(10, False, False, {"from": accounts[1]})
|
self.diamond_terminus.create_pool_v1(10, False, False, {"from": accounts[1]})
|
||||||
|
|
4
setup.py
4
setup.py
|
@ -6,13 +6,13 @@ with open("README.md") as ifp:
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="moonstream-dao",
|
name="moonstream-dao",
|
||||||
version="0.0.7",
|
version="0.0.8",
|
||||||
packages=find_packages(),
|
packages=find_packages(),
|
||||||
install_requires=["eth-brownie", "tqdm"],
|
install_requires=["eth-brownie", "tqdm"],
|
||||||
extras_require={
|
extras_require={
|
||||||
"dev": [
|
"dev": [
|
||||||
"black",
|
"black",
|
||||||
"moonworm >= 0.1.9",
|
"moonworm >= 0.6.0",
|
||||||
],
|
],
|
||||||
"distribute": ["setuptools", "twine", "wheel"],
|
"distribute": ["setuptools", "twine", "wheel"],
|
||||||
},
|
},
|
||||||
|
|
Ładowanie…
Reference in New Issue