15
15
import warnings
16
16
17
17
from eth_abi import (
18
+ decoding ,
18
19
encoding ,
19
20
)
20
21
from eth_abi .base import (
28
29
TupleType ,
29
30
parse ,
30
31
)
32
+ from eth_abi .registry import (
33
+ BaseEquals ,
34
+ registry as default_registry
35
+ )
31
36
from eth_typing import (
32
37
TypeStr ,
33
38
)
@@ -287,16 +292,16 @@ def from_type_str(cls, abi_type, registry):
287
292
)
288
293
289
294
290
- def filter_by_encodability (abi_encoder , args , kwargs , contract_abi ):
295
+ def filter_by_encodability (abi_codec , args , kwargs , contract_abi ):
291
296
return [
292
297
function_abi
293
298
for function_abi
294
299
in contract_abi
295
- if check_if_arguments_can_be_encoded (function_abi , abi_encoder , args , kwargs )
300
+ if check_if_arguments_can_be_encoded (function_abi , abi_codec , args , kwargs )
296
301
]
297
302
298
303
299
- def check_if_arguments_can_be_encoded (function_abi , abi_encoder , args , kwargs ):
304
+ def check_if_arguments_can_be_encoded (function_abi , abi_codec , args , kwargs ):
300
305
try :
301
306
arguments = merge_args_and_kwargs (function_abi , args , kwargs )
302
307
except TypeError :
@@ -311,7 +316,7 @@ def check_if_arguments_can_be_encoded(function_abi, abi_encoder, args, kwargs):
311
316
return False
312
317
313
318
return all (
314
- abi_encoder .is_encodable (_type , arg )
319
+ abi_codec .is_encodable (_type , arg )
315
320
for _type , arg in zip (types , aligned_args )
316
321
)
317
322
@@ -782,3 +787,67 @@ def strip_abi_type(elements):
782
787
return elements .data
783
788
else :
784
789
return elements
790
+
791
+
792
+ def build_default_registry ():
793
+ # We make a copy here just to make sure that eth-abi's default registry is not
794
+ # affected by our custom encoder subclasses
795
+ registry = default_registry .copy ()
796
+
797
+ registry .unregister ('address' )
798
+ registry .unregister ('bytes<M>' )
799
+ registry .unregister ('bytes' )
800
+ registry .unregister ('string' )
801
+
802
+ registry .register (
803
+ BaseEquals ('address' ),
804
+ AddressEncoder , decoding .AddressDecoder ,
805
+ label = 'address' ,
806
+ )
807
+ registry .register (
808
+ BaseEquals ('bytes' , with_sub = True ),
809
+ BytesEncoder , decoding .BytesDecoder ,
810
+ label = 'bytes<M>' ,
811
+ )
812
+ registry .register (
813
+ BaseEquals ('bytes' , with_sub = False ),
814
+ ByteStringEncoder , decoding .ByteStringDecoder ,
815
+ label = 'bytes' ,
816
+ )
817
+ registry .register (
818
+ BaseEquals ('string' ),
819
+ TextStringEncoder , decoding .StringDecoder ,
820
+ label = 'string' ,
821
+ )
822
+ return registry
823
+
824
+
825
+ def build_strict_registry ():
826
+ registry = default_registry .copy ()
827
+
828
+ registry .unregister ('address' )
829
+ registry .unregister ('bytes<M>' )
830
+ registry .unregister ('bytes' )
831
+ registry .unregister ('string' )
832
+
833
+ registry .register (
834
+ BaseEquals ('address' ),
835
+ AddressEncoder , decoding .AddressDecoder ,
836
+ label = 'address' ,
837
+ )
838
+ registry .register (
839
+ BaseEquals ('bytes' , with_sub = True ),
840
+ ExactLengthBytesEncoder , decoding .BytesDecoder ,
841
+ label = 'bytes<M>' ,
842
+ )
843
+ registry .register (
844
+ BaseEquals ('bytes' , with_sub = False ),
845
+ StrictByteStringEncoder , decoding .ByteStringDecoder ,
846
+ label = 'bytes' ,
847
+ )
848
+ registry .register (
849
+ BaseEquals ('string' ),
850
+ TextStringEncoder , decoding .StringDecoder ,
851
+ label = 'string' ,
852
+ )
853
+ return registry
0 commit comments