Skip to content
This repository was archived by the owner on Aug 21, 2023. It is now read-only.

Commit b119435

Browse files
authored
Merge pull request #29 from bugout-dev/terminus-contract-uri
Add "contractURI" and "setContractURI" to Terminus
2 parents 2e7ab67 + e9d6d4c commit b119435

6 files changed

Lines changed: 206 additions & 0 deletions

File tree

contracts/terminus/LibTerminus.sol

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ library LibTerminus {
3535
mapping(uint256 => bool) poolBurnable;
3636
mapping(address => mapping(address => bool)) globalOperatorApprovals;
3737
mapping(uint256 => mapping(address => bool)) globalPoolOperatorApprovals;
38+
// Contract metadata
39+
string contractURI;
3840
}
3941

4042
function terminusStorage()

contracts/terminus/TerminusFacet.sol

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,16 @@ contract TerminusFacet is ERC1155WithTerminusStorage {
122122
paymentTokenContract.transfer(toAddress, amount);
123123
}
124124

125+
function contractURI() public view returns (string memory) {
126+
return LibTerminus.terminusStorage().contractURI;
127+
}
128+
129+
function setContractURI(string memory _contractURI) external {
130+
LibTerminus.enforceIsController();
131+
LibTerminus.TerminusStorage storage ts = LibTerminus.terminusStorage();
132+
ts.contractURI = _contractURI;
133+
}
134+
125135
function setURI(uint256 poolID, string memory poolURI) external {
126136
LibTerminus.enforcePoolIsController(poolID, _msgSender());
127137
LibTerminus.TerminusStorage storage ts = LibTerminus.terminusStorage();

dao/TerminusFacet.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,10 @@ def burn(
115115
self.assert_contract_is_instantiated()
116116
return self.contract.burn(from_, pool_id, amount, transaction_config)
117117

118+
def contract_uri(self) -> Any:
119+
self.assert_contract_is_instantiated()
120+
return self.contract.contractURI.call()
121+
118122
def create_pool_v1(
119123
self, _capacity: int, _transferable: bool, _burnable: bool, transaction_config
120124
) -> Any:
@@ -209,6 +213,10 @@ def set_approval_for_all(
209213
self.assert_contract_is_instantiated()
210214
return self.contract.setApprovalForAll(operator, approved, transaction_config)
211215

216+
def set_contract_uri(self, _contract_uri: str, transaction_config) -> Any:
217+
self.assert_contract_is_instantiated()
218+
return self.contract.setContractURI(_contract_uri, transaction_config)
219+
212220
def set_payment_token(
213221
self, new_payment_token: ChecksumAddress, transaction_config
214222
) -> Any:
@@ -363,6 +371,13 @@ def handle_burn(args: argparse.Namespace) -> None:
363371
print(result)
364372

365373

374+
def handle_contract_uri(args: argparse.Namespace) -> None:
375+
network.connect(args.network)
376+
contract = TerminusFacet(args.address)
377+
result = contract.contract_uri()
378+
print(result)
379+
380+
366381
def handle_create_pool_v1(args: argparse.Namespace) -> None:
367382
network.connect(args.network)
368383
contract = TerminusFacet(args.address)
@@ -497,6 +512,16 @@ def handle_set_approval_for_all(args: argparse.Namespace) -> None:
497512
print(result)
498513

499514

515+
def handle_set_contract_uri(args: argparse.Namespace) -> None:
516+
network.connect(args.network)
517+
contract = TerminusFacet(args.address)
518+
transaction_config = get_transaction_config(args)
519+
result = contract.set_contract_uri(
520+
_contract_uri=args.contract_uri_arg, transaction_config=transaction_config
521+
)
522+
print(result)
523+
524+
500525
def handle_set_payment_token(args: argparse.Namespace) -> None:
501526
network.connect(args.network)
502527
contract = TerminusFacet(args.address)
@@ -650,6 +675,10 @@ def generate_cli() -> argparse.ArgumentParser:
650675
burn_parser.add_argument("--amount", required=True, help="Type: uint256", type=int)
651676
burn_parser.set_defaults(func=handle_burn)
652677

678+
contract_uri_parser = subcommands.add_parser("contract-uri")
679+
add_default_arguments(contract_uri_parser, False)
680+
contract_uri_parser.set_defaults(func=handle_contract_uri)
681+
653682
create_pool_v1_parser = subcommands.add_parser("create-pool-v1")
654683
add_default_arguments(create_pool_v1_parser, True)
655684
create_pool_v1_parser.add_argument(
@@ -784,6 +813,13 @@ def generate_cli() -> argparse.ArgumentParser:
784813
)
785814
set_approval_for_all_parser.set_defaults(func=handle_set_approval_for_all)
786815

816+
set_contract_uri_parser = subcommands.add_parser("set-contract-uri")
817+
add_default_arguments(set_contract_uri_parser, True)
818+
set_contract_uri_parser.add_argument(
819+
"--contract-uri-arg", required=True, help="Type: string", type=str
820+
)
821+
set_contract_uri_parser.set_defaults(func=handle_set_contract_uri)
822+
787823
set_payment_token_parser = subcommands.add_parser("set-payment-token")
788824
add_default_arguments(set_payment_token_parser, True)
789825
set_payment_token_parser.add_argument(

dao/test_terminus.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,20 @@ def test_add_and_replace(self):
3232
self.assertEqual(controller, accounts[0].address)
3333

3434

35+
class TestContractURI(TerminusTestCase):
36+
def test_contract_uri(self):
37+
terminus_diamond_address = self.terminus_contracts["Diamond"]
38+
diamond_terminus = TerminusFacet.TerminusFacet(terminus_diamond_address)
39+
40+
contract_uri = diamond_terminus.contract_uri()
41+
self.assertEqual(contract_uri, "")
42+
43+
diamond_terminus.set_contract_uri("https://example.com", {"from": accounts[0]})
44+
45+
contract_uri = diamond_terminus.contract_uri()
46+
self.assertEqual(contract_uri, "https://example.com")
47+
48+
3549
class TestPoolCreation(TerminusTestCase):
3650
def test_create_simple_pool(self):
3751
moonstream_diamond_address = self.contracts["Diamond"]
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# Update the Terminus contract
2+
3+
The Terminus contract is deployed as an EIP2535 Diamond proxy contract with a Terminus facet attached to it.
4+
5+
This checklist describes how to update the `TerminusFacet` on the Terminus diamond contract.
6+
7+
## Deployed addresses
8+
9+
You will modify this section as you go through the checklist
10+
11+
12+
### `TerminusFacet` address
13+
14+
```
15+
export TERMINUS_FACET_ADDRESS="0x9718FA06867D2939981151D193cF7ee2B924aec0"
16+
```
17+
18+
## Environment variables
19+
20+
- [x] `export DAO_NETWORK=matic`
21+
- [x] `export DAO_OWNER=<path to keystore>`
22+
- [x] `export DAO_OWNER_ADDRESS=$(jq -r .address $DAO_OWNER)`
23+
- [x] `export GAS_PRICE="300 gwei"`
24+
- [x] `export CONFIRMATIONS=5`
25+
- [x] `export TERMINUS_DIAMOND=0x062BEc5e84289Da2CD6147E0e4DA402B33B8f796`
26+
27+
## Detach existing `TerminusFacet`
28+
29+
- [x] Remove `TerminusFacet` from diamond. (This may require checkout of earlier commit and `brownie compile`. Checked out: `v0.0.1`.)
30+
31+
```bash
32+
dao core facet-cut \
33+
--address $TERMINUS_DIAMOND \
34+
--network $DAO_NETWORK \
35+
--sender $DAO_OWNER \
36+
--gas-price "$GAS_PRICE" \
37+
--confirmations $CONFIRMATIONS \
38+
--facet-name TerminusFacet \
39+
--action remove \
40+
--ignore-methods contractURI setContractURI
41+
```
42+
43+
44+
## Deploy `TerminusFacet`
45+
46+
- [x] Deploy `TerminusFacet` contract
47+
48+
```bash
49+
dao terminus deploy \
50+
--network $DAO_NETWORK \
51+
--sender $DAO_OWNER \
52+
--gas-price "$GAS_PRICE" \
53+
--confirmations $CONFIRMATIONS
54+
```
55+
56+
- [x] Export address of deployed contract as `export TERMINUS_FACET_ADDRESS=0x9718FA06867D2939981151D193cF7ee2B924aec0`
57+
58+
- [x] Store address of deployed contract under `Deployed addresses / TerminusFacet address` above
59+
60+
- [x] Attach `TerminusFacet` to diamond:
61+
62+
```bash
63+
dao core facet-cut \
64+
--address $TERMINUS_DIAMOND \
65+
--network $DAO_NETWORK \
66+
--sender $DAO_OWNER \
67+
--gas-price "$GAS_PRICE" \
68+
--confirmations $CONFIRMATIONS \
69+
--facet-name TerminusFacet \
70+
--facet-address $TERMINUS_FACET_ADDRESS \
71+
--action add
72+
```
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# Update the Terminus contract
2+
3+
The Terminus contract is deployed as an EIP2535 Diamond proxy contract with a Terminus facet attached to it.
4+
5+
This checklist describes how to update the `TerminusFacet` on the Terminus diamond contract.
6+
7+
## Deployed addresses
8+
9+
You will modify this section as you go through the checklist
10+
11+
12+
### `TerminusFacet` address
13+
14+
```
15+
export TERMINUS_FACET_ADDRESS="0x1Ea387841A8094018E995E112cad4B88e17862bA"
16+
```
17+
18+
## Environment variables
19+
20+
- [x] `export DAO_NETWORK=polygon-test`
21+
- [x] `export DAO_OWNER=.secrets/dao-dev.json`
22+
- [x] `export DAO_OWNER_ADDRESS=$(jq -r .address $DAO_OWNER)`
23+
- [x] `export GAS_PRICE="35 gwei"`
24+
- [x] `export CONFIRMATIONS=2`
25+
- [x] `export TERMINUS_DIAMOND=0x040Cf7Ee9752936d8d280062a447eB53808EBc08`
26+
27+
## Detach existing `TerminusFacet`
28+
29+
- [x] Remove `TerminusFacet` from diamond. (This may require checkout of earlier commit and `brownie compile`. Checked out: `v0.0.1`.)
30+
31+
```bash
32+
dao core facet-cut \
33+
--address $TERMINUS_DIAMOND \
34+
--network $DAO_NETWORK \
35+
--sender $DAO_OWNER \
36+
--gas-price "$GAS_PRICE" \
37+
--confirmations $CONFIRMATIONS \
38+
--facet-name TerminusFacet \
39+
--action remove \
40+
--ignore-methods contractURI setContractURI
41+
```
42+
43+
44+
## Deploy `TerminusFacet`
45+
46+
- [x] Deploy `TerminusFacet` contract
47+
48+
```bash
49+
dao terminus deploy \
50+
--network $DAO_NETWORK \
51+
--sender $DAO_OWNER \
52+
--gas-price "$GAS_PRICE" \
53+
--confirmations $CONFIRMATIONS
54+
```
55+
56+
- [x] Export address of deployed contract as `export TERMINUS_FACET_ADDRESS=0x1Ea387841A8094018E995E112cad4B88e17862bA`
57+
58+
- [x] Store address of deployed contract under `Deployed addresses / TerminusFacet address` above
59+
60+
- [x] Attach `TerminusFacet` to diamond:
61+
62+
```bash
63+
dao core facet-cut \
64+
--address $TERMINUS_DIAMOND \
65+
--network $DAO_NETWORK \
66+
--sender $DAO_OWNER \
67+
--gas-price "$GAS_PRICE" \
68+
--confirmations $CONFIRMATIONS \
69+
--facet-name TerminusFacet \
70+
--facet-address $TERMINUS_FACET_ADDRESS \
71+
--action add
72+
```

0 commit comments

Comments
 (0)