1010
1111if TYPE_CHECKING :
1212 from ape .api import ReceiptAPI
13+ from ape .api .address import BaseAddress
1314 from ape .types import AddressType
1415 from packaging .version import Version
1516
2021class Call (BaseModel ):
2122 target : abi .address
2223 value : abi .uint256
24+ success_required : bool
2325 data : HexBytes
2426
2527 def render (self ) -> str :
26- return f"{ self .target } ({ self .data } , value={ self .value } )"
28+ return f"{ self .target } ({ self .data } , value={ self .value } , required= { self . success_required } )"
2729
2830
2931class Execute (EIP712Message , ManagerAccessMixin ):
@@ -72,7 +74,11 @@ def new(
7274 return self
7375
7476 def add_raw (
75- self , target : "AddressType" , value : int = 0 , data : HexBytes = b""
77+ self ,
78+ target : "BaseAddress | AddressType | str" ,
79+ value : str | int = 0 ,
80+ success_required : bool = True ,
81+ data : HexBytes = b"" ,
7682 ) -> Self :
7783 if len (self .calls ) >= self .MAX_CALLS :
7884 raise RuntimeError (
@@ -85,20 +91,48 @@ def add_raw(
8591 f" { self .MAX_CALLDATA_SIZE } bytes."
8692 )
8793
88- self .calls .append (Call (target = target , value = value , data = data ))
94+ # NOTE: Avoid imports otherwise just for typing
95+ from ape .types import AddressType
96+
97+ self .calls .append (
98+ Call (
99+ target = self .conversion_manager .convert (target , AddressType ),
100+ value = self .conversion_manager .convert (value , int ),
101+ success_required = success_required ,
102+ data = data ,
103+ )
104+ )
89105 return self
90106
91- def add (self , call , * args , value : int = 0 ) -> Self :
107+ def add (self , call , * args , value : int = 0 , success_required : bool = True ) -> Self :
92108 return self .add_raw (
93- target = call .contract . address ,
109+ target = call .contract ,
94110 value = value ,
111+ success_required = success_required ,
95112 data = call .encode_input (* args ),
96113 )
97114
98- def add_from_receipt (self , receipt : "ReceiptAPI" ) -> Self :
115+ def add_transfer (
116+ self ,
117+ target : "BaseAddress | AddressType | str" ,
118+ value : int | str ,
119+ data : bytes = b"" ,
120+ success_required : bool = True ,
121+ ):
122+ return self .add_raw (
123+ target = target ,
124+ value = value ,
125+ success_required = success_required ,
126+ data = data , # In case you want to add a message or something
127+ )
128+
129+ def add_from_receipt (
130+ self , receipt : "ReceiptAPI" , success_required : bool = True
131+ ) -> Self :
99132 return self .add_raw (
100133 target = receipt .receiver ,
101134 value = receipt .value ,
135+ success_required = success_required ,
102136 data = receipt .data ,
103137 )
104138
0 commit comments