Skip to content

Commit c7fe4d9

Browse files
committed
refactor(SDK): move deterministic deployment use to SDK Factory class
1 parent 67948ce commit c7fe4d9

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

sdk/py/caravan/factory.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,24 @@ def __init__(self, address: AddressType | None = None):
1818
self.address = address
1919

2020
elif len((factory_type := PackageType.FACTORY()).deployments) == 0:
21-
raise RuntimeError("No CaravanFactory deployment on this chain")
21+
# NOTE: This is the deterministic deployment address via CreateX
22+
self.address = "0x04579FFC45fE10A7901B88EaEc8F4850b847D37c"
23+
24+
if not len(self.provider.get_code(self.address)) > 0:
25+
raise RuntimeError("No CaravanFactory deployment on this chain")
2226

2327
else:
2428
# NOTE: Override cached value of `contract`
2529
self.contract = factory_type.deployments[0]
2630
self.address = self.contract.address
2731

2832
# NOTE: also lets us override for testing
29-
self._cached_releases: dict[Version, "ContractInstance"] = dict()
30-
31-
# TODO: classmethod `.inject`?
33+
self._cached_releases: dict[Version, "ContractInstance"] = {
34+
# NOTE: This is the deterministic deployment address for v1 via CreateX
35+
Version("1"): PackageType.SINGLETON("1").at(
36+
"0xf7AC37e8A31Da4D2Fbe7687118c142dd46e63517"
37+
),
38+
}
3239

3340
@cached_property
3441
def contract(self) -> "ContractInstance":
@@ -39,13 +46,13 @@ def contract(self) -> "ContractInstance":
3946
)
4047

4148
def get_release(self, version: Version) -> "ContractInstance | None":
42-
if release := self._cached_releases.get(version):
49+
if (release := self._cached_releases.get(version)) and len(release.code) > 0:
4350
return release
4451

4552
elif not (singleton_type := PackageType.SINGLETON(version)).deployments:
4653
return None
4754

48-
elif not (release := singleton_type.deployments[-1]).code:
55+
elif not len((release := singleton_type.deployments[-1]).code) > 0:
4956
return None
5057

5158
self._cached_releases[version] = release
@@ -65,7 +72,8 @@ def new(
6572
if isinstance(version, str):
6673
version = Version(version.lstrip("v"))
6774

68-
release = self.get_release(version)
75+
if not (release := self.get_release(version)):
76+
raise RuntimeError("No Caravan Singleton deployment on this chain")
6977

7078
args = [release, signers, threshold]
7179
if tag is not None:

0 commit comments

Comments
 (0)