Skip to content

Commit af7972e

Browse files
authored
Merge pull request #163 from bugout-dev/dropper-v2
2 parents 348f8ee + da1712c commit af7972e

File tree

13 files changed

+4557
-493
lines changed

13 files changed

+4557
-493
lines changed

abi/Dropper/v0.1.0/Dropper.json

Lines changed: 779 additions & 0 deletions
Large diffs are not rendered by default.

abi/Dropper/v0.2.0/DropperFacet.json

Lines changed: 809 additions & 0 deletions
Large diffs are not rendered by default.

cli/enginecli/DropperV2Facet.py renamed to cli/enginecli/DropperFacet.py

Lines changed: 232 additions & 109 deletions
Large diffs are not rendered by default.

cli/enginecli/cli.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from . import (
55
core,
66
drop,
7+
DropperFacet,
78
Dropper,
89
Lootbox,
910
MockErc20,
@@ -27,14 +28,17 @@ def main() -> None:
2728
parser.set_defaults(func=lambda _: parser.print_help())
2829
subparsers = parser.add_subparsers()
2930

30-
lootbox_parser = Lootbox.generate_cli()
31-
subparsers.add_parser("lootbox", parents=[lootbox_parser], add_help=False)
31+
core_parser = core.generate_cli()
32+
subparsers.add_parser("core", parents=[core_parser], add_help=False)
3233

3334
dropper_parser = Dropper.generate_cli()
34-
subparsers.add_parser("dropper", parents=[dropper_parser], add_help=False)
35+
subparsers.add_parser("dropper-v1", parents=[dropper_parser], add_help=False)
3536

36-
core_parser = core.generate_cli()
37-
subparsers.add_parser("core", parents=[core_parser], add_help=False)
37+
dropper_facet_parser = DropperFacet.generate_cli()
38+
subparsers.add_parser("dropper", parents=[dropper_facet_parser], add_help=False)
39+
40+
lootbox_parser = Lootbox.generate_cli()
41+
subparsers.add_parser("lootbox", parents=[lootbox_parser], add_help=False)
3842

3943
erc20_parser = MockErc20.generate_cli()
4044
subparsers.add_parser("erc20", parents=[erc20_parser], add_help=False)

cli/enginecli/core.py

Lines changed: 81 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
Diamond,
1919
DiamondCutFacet,
2020
DiamondLoupeFacet,
21+
DropperFacet,
2122
OwnershipFacet,
2223
ReentrancyExploitable,
2324
CraftingFacet,
@@ -27,16 +28,20 @@
2728
FACETS: Dict[str, Any] = {
2829
"DiamondCutFacet": DiamondCutFacet,
2930
"DiamondLoupeFacet": DiamondLoupeFacet,
31+
"DropperFacet": DropperFacet,
3032
"OwnershipFacet": OwnershipFacet,
3133
"ReentrancyExploitable": ReentrancyExploitable,
3234
"CraftingFacet": CraftingFacet,
3335
"GOFPFacet": GOFPFacet,
3436
}
3537

3638
FACET_INIT_CALLDATA: Dict[str, str] = {
39+
"DropperFacet": lambda address, *args: DropperFacet.DropperFacet(
40+
address
41+
).contract.init.encode_input(*args),
3742
"GOFPFacet": lambda address, *args: GOFPFacet.GOFPFacet(
3843
address
39-
).contract.init.encode_input(*args)
44+
).contract.init.encode_input(*args),
4045
}
4146

4247
DIAMOND_FACET_PRECEDENCE: List[str] = [
@@ -53,6 +58,7 @@
5358

5459

5560
class EngineFeatures(Enum):
61+
DROPPER = "dropper"
5662
GOFP = "GardenOfForkingPaths"
5763

5864

@@ -63,10 +69,14 @@ def feature_from_facet_name(facet_name: str) -> Optional[EngineFeatures]:
6369
return None
6470

6571

66-
FEATURE_FACETS: Dict[EngineFeatures, List[str]] = {EngineFeatures.GOFP: ["GOFPFacet"]}
72+
FEATURE_FACETS: Dict[EngineFeatures, List[str]] = {
73+
EngineFeatures.DROPPER: ["DropperFacet"],
74+
EngineFeatures.GOFP: ["GOFPFacet"],
75+
}
6776

6877
FEATURE_IGNORES: Dict[EngineFeatures, List[str]] = {
69-
EngineFeatures.GOFP: {"methods": ["init"], "selectors": []}
78+
EngineFeatures.DROPPER: {"methods": ["init"], "selectors": []},
79+
EngineFeatures.GOFP: {"methods": ["init"], "selectors": []},
7080
}
7181

7282
FACET_ACTIONS: Dict[str, int] = {"add": 0, "replace": 1, "remove": 2}
@@ -518,6 +528,36 @@ def lootbox_gogogo(
518528
return contracts
519529

520530

531+
def dropper_gogogo(
532+
admin_terminus_address: str,
533+
admin_terminus_pool_id: int,
534+
transaction_config: Dict[str, Any],
535+
) -> Dict[str, Any]:
536+
deployment_info = diamond_gogogo(
537+
owner_address=transaction_config["from"].address,
538+
transaction_config=transaction_config,
539+
)
540+
541+
dropper_facet = DropperFacet.DropperFacet(None)
542+
dropper_facet.deploy(transaction_config=transaction_config)
543+
deployment_info["contracts"]["DropperFacet"] = dropper_facet.address
544+
545+
diamond_address = deployment_info["contracts"]["Diamond"]
546+
facet_cut(
547+
diamond_address,
548+
"DropperFacet",
549+
dropper_facet.address,
550+
"add",
551+
transaction_config,
552+
initializer_address=dropper_facet.address,
553+
feature=EngineFeatures.DROPPER,
554+
initializer_args=[admin_terminus_address, admin_terminus_pool_id],
555+
)
556+
deployment_info["attached"].append("DropperFacet")
557+
558+
return deployment_info
559+
560+
521561
def gofp_gogogo(
522562
admin_terminus_address: str,
523563
admin_terminus_pool_id: int,
@@ -588,6 +628,18 @@ def handle_lootbox_gogogo(args: argparse.Namespace) -> None:
588628
json.dump(result, sys.stdout, indent=4)
589629

590630

631+
def handle_dropper_gogogo(args: argparse.Namespace) -> None:
632+
network.connect(args.network)
633+
transaction_config = MockTerminus.get_transaction_config(args)
634+
result = dropper_gogogo(
635+
args.terminus_address, args.terminus_pool_id, transaction_config
636+
)
637+
if args.outfile is not None:
638+
with args.outfile:
639+
json.dump(result, args.outfile)
640+
json.dump(result, sys.stdout, indent=4)
641+
642+
591643
def handle_gofp_gogogo(args: argparse.Namespace) -> None:
592644
network.connect(args.network)
593645
transaction_config = MockTerminus.get_transaction_config(args)
@@ -687,6 +739,32 @@ def generate_cli():
687739
)
688740
facet_cut_parser.set_defaults(func=handle_facet_cut)
689741

742+
dropper_gogogo_parser = subcommands.add_parser(
743+
"dropper-gogogo",
744+
help="Deploy Dropper diamond contract",
745+
description="Deploy Dropper diamond contract",
746+
)
747+
Diamond.add_default_arguments(dropper_gogogo_parser, transact=True)
748+
dropper_gogogo_parser.add_argument(
749+
"--terminus-address",
750+
required=True,
751+
help="Address of Terminus contract defining access control for this Dropper contract",
752+
)
753+
dropper_gogogo_parser.add_argument(
754+
"--terminus-pool-id",
755+
required=True,
756+
type=int,
757+
help="Pool ID of Terminus pool for administrators of this dropper contract",
758+
)
759+
dropper_gogogo_parser.add_argument(
760+
"-o",
761+
"--outfile",
762+
type=argparse.FileType("w"),
763+
default=None,
764+
help="(Optional) file to write deployed addresses to",
765+
)
766+
dropper_gogogo_parser.set_defaults(func=handle_dropper_gogogo)
767+
690768
gofp_gogogo_parser = subcommands.add_parser(
691769
"gofp-gogogo",
692770
help="Deploy gofp diamond contract",

0 commit comments

Comments
 (0)