1212
1313class Factory (ManagerAccessMixin ):
1414 def __init__ (self , address : AddressType | None = None ):
15- # TODO: Refactor to use deterministic deployment address
16- self .address = address or self .local_project .RuffsackFactory .deployments [0 ]
15+ if address :
16+ self .address = address
17+
18+ else :
19+ # TODO: Refactor to use deterministic deployment address
20+ self .address = self .local_project .RuffsackFactory .deployments [0 ].address
21+
1722 self ._cached_releases : dict [Version , "ContractInstance" ] = dict ()
1823 self ._last_cached : int = 0
1924
@@ -29,7 +34,9 @@ def contract(self) -> "ContractInstance":
2934 @property
3035 def releases (self ) -> dict [Version , "ContractInstance" ]:
3136 if (latest_block := self .chain_manager .blocks .head .number ) > self ._last_cached :
32- for log in self .contract .NewRelease .range (self ._last_cached , latest_block ):
37+ for log in self .contract .NewRelease .range (
38+ self ._last_cached , latest_block + 1
39+ ):
3340 self ._cached_releases [Version (log .version )] = (
3441 self .chain_manager .contracts .instance_at (
3542 log .implementation ,
@@ -45,7 +52,7 @@ def new(
4552 signers : list [AddressType ],
4653 threshold : int | None = None ,
4754 version : Version | str | None = None ,
48- salt : str | bytes | None = None ,
55+ tag : str | None = None ,
4956 ** txn_args ,
5057 ) -> "ContractInstance" :
5158 if threshold is None :
@@ -54,35 +61,20 @@ def new(
5461 if isinstance (version , str ):
5562 version = Version (version )
5663
57- if salt is not None :
58- if version is None :
59- version = Version (self .contract .last_version ())
60-
61- receipt = self .contract .new (
62- signers ,
63- threshold ,
64- str (version ),
65- salt ,
66- ** txn_args ,
67- )
64+ args = [signers , threshold ]
65+ if tag is not None :
66+ args .extend ([str (version ) if version else "stable" , tag ])
6867
6968 elif version is not None :
70- receipt = self .contract .new (
71- signers ,
72- threshold ,
73- str (version ),
74- ** txn_args ,
75- )
69+ args .append (str (version ))
7670
77- else :
78- receipt = self .contract .new (
79- signers ,
80- threshold ,
81- ** txn_args ,
82- )
83- version = Version (self .contract .last_version ())
71+ if version is None :
72+ version = Version (self .contract .last_release ())
73+
74+ receipt = self .contract .new (* args , ** txn_args )
8475
8576 new_ruffsack_address = receipt .events [0 ].new_sack
77+ # TODO: Refactor to use SDK internal type? (subclassing `AccountAPI`)
8678 return self .chain_manager .contracts .instance_at (
8779 new_ruffsack_address ,
8880 contract_type = PackageType .SINGLETON (version ),
0 commit comments