@@ -53,9 +53,13 @@ pub enum EthereumSqlTypeWrapper {
5353
5454 // 256-bit integers
5555 U256 ( U256 ) ,
56+ U256Bytes ( U256 ) ,
5657 I256 ( I256 ) ,
58+ I256Bytes ( I256 ) ,
5759 VecU256 ( Vec < U256 > ) ,
60+ VecU256Bytes ( Vec < U256 > ) ,
5861 VecI256 ( Vec < I256 > ) ,
62+ VecI256Bytes ( Vec < I256 > ) ,
5963
6064 // 512-bit integers
6165 U512 ( U512 ) ,
@@ -65,15 +69,19 @@ pub enum EthereumSqlTypeWrapper {
6569 H128 ( H128 ) ,
6670 H160 ( H160 ) ,
6771 H256 ( H256 ) ,
72+ H256Bytes ( H256 ) ,
6873 H512 ( H512 ) ,
6974 VecH128 ( Vec < H128 > ) ,
7075 VecH160 ( Vec < H160 > ) ,
7176 VecH256 ( Vec < H256 > ) ,
77+ VecH256Bytes ( Vec < H256 > ) ,
7278 VecH512 ( Vec < H512 > ) ,
7379
7480 // Address
7581 Address ( Address ) ,
82+ AddressBytes ( Address ) ,
7683 VecAddress ( Vec < Address > ) ,
84+ VecAddressBytes ( Vec < Address > ) ,
7785
7886 // Strings and Bytes
7987 String ( String ) ,
@@ -123,9 +131,13 @@ impl EthereumSqlTypeWrapper {
123131
124132 // 256-bit integers
125133 EthereumSqlTypeWrapper :: U256 ( _) => "U256" ,
134+ EthereumSqlTypeWrapper :: U256Bytes ( _) => "U256Bytes" ,
126135 EthereumSqlTypeWrapper :: I256 ( _) => "I256" ,
136+ EthereumSqlTypeWrapper :: I256Bytes ( _) => "I256Bytes" ,
127137 EthereumSqlTypeWrapper :: VecU256 ( _) => "VecU256" ,
138+ EthereumSqlTypeWrapper :: VecU256Bytes ( _) => "VecU256Bytes" ,
128139 EthereumSqlTypeWrapper :: VecI256 ( _) => "VecI256" ,
140+ EthereumSqlTypeWrapper :: VecI256Bytes ( _) => "VecI256Bytes" ,
129141
130142 // 512-bit integers
131143 EthereumSqlTypeWrapper :: U512 ( _) => "U512" ,
@@ -135,15 +147,19 @@ impl EthereumSqlTypeWrapper {
135147 EthereumSqlTypeWrapper :: H128 ( _) => "H128" ,
136148 EthereumSqlTypeWrapper :: H160 ( _) => "H160" ,
137149 EthereumSqlTypeWrapper :: H256 ( _) => "H256" ,
150+ EthereumSqlTypeWrapper :: H256Bytes ( _) => "H256Bytes" ,
138151 EthereumSqlTypeWrapper :: H512 ( _) => "H512" ,
139152 EthereumSqlTypeWrapper :: VecH128 ( _) => "VecH128" ,
140153 EthereumSqlTypeWrapper :: VecH160 ( _) => "VecH160" ,
141154 EthereumSqlTypeWrapper :: VecH256 ( _) => "VecH256" ,
155+ EthereumSqlTypeWrapper :: VecH256Bytes ( _) => "VecH256Bytes" ,
142156 EthereumSqlTypeWrapper :: VecH512 ( _) => "VecH512" ,
143157
144158 // Address
145159 EthereumSqlTypeWrapper :: Address ( _) => "Address" ,
160+ EthereumSqlTypeWrapper :: AddressBytes ( _) => "AddressBytes" ,
146161 EthereumSqlTypeWrapper :: VecAddress ( _) => "VecAddress" ,
162+ EthereumSqlTypeWrapper :: VecAddressBytes ( _) => "VecAddressBytes" ,
147163
148164 // Strings and Bytes
149165 EthereumSqlTypeWrapper :: String ( _) => "String" ,
@@ -193,9 +209,13 @@ impl EthereumSqlTypeWrapper {
193209
194210 // 256-bit integers (kept as VARCHAR for decimal string representation)
195211 EthereumSqlTypeWrapper :: U256 ( _) => PgType :: VARCHAR ,
212+ EthereumSqlTypeWrapper :: U256Bytes ( _) => PgType :: BYTEA ,
196213 EthereumSqlTypeWrapper :: I256 ( _) => PgType :: VARCHAR ,
214+ EthereumSqlTypeWrapper :: I256Bytes ( _) => PgType :: BYTEA ,
197215 EthereumSqlTypeWrapper :: VecU256 ( _) => PgType :: VARCHAR_ARRAY ,
216+ EthereumSqlTypeWrapper :: VecU256Bytes ( _) => PgType :: BYTEA_ARRAY ,
198217 EthereumSqlTypeWrapper :: VecI256 ( _) => PgType :: VARCHAR_ARRAY ,
218+ EthereumSqlTypeWrapper :: VecI256Bytes ( _) => PgType :: BYTEA_ARRAY ,
199219
200220 // 512-bit integers
201221 EthereumSqlTypeWrapper :: U512 ( _) => PgType :: TEXT ,
@@ -204,16 +224,22 @@ impl EthereumSqlTypeWrapper {
204224 // Hashes
205225 EthereumSqlTypeWrapper :: H128 ( _) => PgType :: BYTEA ,
206226 EthereumSqlTypeWrapper :: H160 ( _) => PgType :: BYTEA ,
227+ // TODO! LOOK AT THIS TYPE AS IT IS SAVED AS CHAR IN NO CODE
207228 EthereumSqlTypeWrapper :: H256 ( _) => PgType :: BYTEA ,
229+ EthereumSqlTypeWrapper :: H256Bytes ( _) => PgType :: BYTEA ,
208230 EthereumSqlTypeWrapper :: H512 ( _) => PgType :: BYTEA ,
209231 EthereumSqlTypeWrapper :: VecH128 ( _) => PgType :: BYTEA_ARRAY ,
210232 EthereumSqlTypeWrapper :: VecH160 ( _) => PgType :: BYTEA_ARRAY ,
233+ // TODO! LOOK AT THIS TYPE AS IT IS SAVED AS CHAR IN NO CODE
211234 EthereumSqlTypeWrapper :: VecH256 ( _) => PgType :: BYTEA_ARRAY ,
235+ EthereumSqlTypeWrapper :: VecH256Bytes ( _) => PgType :: BYTEA_ARRAY ,
212236 EthereumSqlTypeWrapper :: VecH512 ( _) => PgType :: BYTEA_ARRAY ,
213237
214238 // Address
215239 EthereumSqlTypeWrapper :: Address ( _) => PgType :: BPCHAR ,
240+ EthereumSqlTypeWrapper :: AddressBytes ( _) => PgType :: BYTEA ,
216241 EthereumSqlTypeWrapper :: VecAddress ( _) => PgType :: TEXT_ARRAY ,
242+ EthereumSqlTypeWrapper :: VecAddressBytes ( _) => PgType :: BYTEA_ARRAY ,
217243
218244 // Strings and Bytes
219245 EthereumSqlTypeWrapper :: String ( _) => PgType :: TEXT ,
@@ -262,6 +288,13 @@ impl ToSql for EthereumSqlTypeWrapper {
262288 let i256_value = u256_to_i256 ( * value) ;
263289 String :: to_sql ( & i256_value. to_string ( ) , ty, out)
264290 }
291+ EthereumSqlTypeWrapper :: U256Bytes ( value) => {
292+ let mut bytes = [ 0u8 ; 32 ] ;
293+ value. to_big_endian ( & mut bytes) ;
294+ let bytes = Bytes :: from ( bytes) ;
295+ out. extend_from_slice ( & bytes) ;
296+ Ok ( IsNull :: No )
297+ }
265298 EthereumSqlTypeWrapper :: VecU256 ( values) => {
266299 if values. is_empty ( ) {
267300 Ok ( IsNull :: Yes )
@@ -278,10 +311,30 @@ impl ToSql for EthereumSqlTypeWrapper {
278311 String :: to_sql ( & formatted_str, ty, out)
279312 }
280313 }
314+ EthereumSqlTypeWrapper :: VecU256Bytes ( values) => {
315+ if values. is_empty ( ) {
316+ Ok ( IsNull :: Yes )
317+ } else {
318+ for value in values {
319+ let mut bytes = [ 0u8 ; 32 ] ;
320+ value. to_big_endian ( & mut bytes) ;
321+ let bytes = Bytes :: from ( bytes) ;
322+ out. extend_from_slice ( & bytes) ;
323+ }
324+ Ok ( IsNull :: No )
325+ }
326+ }
281327 EthereumSqlTypeWrapper :: I256 ( value) => {
282328 let value = value. to_string ( ) ;
283329 String :: to_sql ( & value, ty, out)
284330 }
331+ EthereumSqlTypeWrapper :: I256Bytes ( value) => {
332+ let mut bytes = [ 0u8 ; 32 ] ;
333+ value. to_big_endian ( & mut bytes) ;
334+ let bytes = Bytes :: from ( bytes) ;
335+ out. extend_from_slice ( & bytes) ;
336+ Ok ( IsNull :: No )
337+ }
285338 EthereumSqlTypeWrapper :: VecI256 ( values) => {
286339 if values. is_empty ( ) {
287340 Ok ( IsNull :: Yes )
@@ -292,6 +345,19 @@ impl ToSql for EthereumSqlTypeWrapper {
292345 String :: to_sql ( & formatted_str, ty, out)
293346 }
294347 }
348+ EthereumSqlTypeWrapper :: VecI256Bytes ( values) => {
349+ if values. is_empty ( ) {
350+ Ok ( IsNull :: Yes )
351+ } else {
352+ for value in values {
353+ let mut bytes = [ 0u8 ; 32 ] ;
354+ value. to_big_endian ( & mut bytes) ;
355+ let bytes = Bytes :: from ( bytes) ;
356+ out. extend_from_slice ( & bytes) ;
357+ }
358+ Ok ( IsNull :: No )
359+ }
360+ }
295361 EthereumSqlTypeWrapper :: U512 ( value) => {
296362 let value = value. to_string ( ) ;
297363 String :: to_sql ( & value, ty, out)
@@ -337,6 +403,11 @@ impl ToSql for EthereumSqlTypeWrapper {
337403 out. extend_from_slice ( hex. as_bytes ( ) ) ;
338404 Ok ( IsNull :: No )
339405 }
406+ EthereumSqlTypeWrapper :: H256Bytes ( value) => {
407+ let bytes: Bytes = value. as_bytes ( ) . to_vec ( ) . into ( ) ;
408+ out. extend_from_slice ( & bytes) ;
409+ Ok ( IsNull :: No )
410+ }
340411 EthereumSqlTypeWrapper :: VecH256 ( values) => {
341412 let hexes: Vec < String > = values. iter ( ) . map ( |s| format ! ( "{:?}" , s) ) . collect ( ) ;
342413 if hexes. is_empty ( ) {
@@ -345,6 +416,17 @@ impl ToSql for EthereumSqlTypeWrapper {
345416 hexes. to_sql ( ty, out)
346417 }
347418 }
419+ EthereumSqlTypeWrapper :: VecH256Bytes ( values) => {
420+ if values. is_empty ( ) {
421+ Ok ( IsNull :: Yes )
422+ } else {
423+ for value in values {
424+ let bytes: Bytes = value. as_bytes ( ) . to_vec ( ) . into ( ) ;
425+ out. extend_from_slice ( & bytes) ;
426+ }
427+ Ok ( IsNull :: No )
428+ }
429+ }
348430 EthereumSqlTypeWrapper :: H512 ( value) => {
349431 let hex = format ! ( "{:?}" , value) ;
350432 out. extend_from_slice ( hex. as_bytes ( ) ) ;
@@ -362,6 +444,11 @@ impl ToSql for EthereumSqlTypeWrapper {
362444 let hex = format ! ( "{:?}" , value) ;
363445 String :: to_sql ( & hex, ty, out)
364446 }
447+ EthereumSqlTypeWrapper :: AddressBytes ( value) => {
448+ let bytes: Bytes = value. as_bytes ( ) . to_vec ( ) . into ( ) ;
449+ out. extend_from_slice ( & bytes) ;
450+ Ok ( IsNull :: No )
451+ }
365452 EthereumSqlTypeWrapper :: VecAddress ( values) => {
366453 let addresses: Vec < String > = values. iter ( ) . map ( |s| format ! ( "{:?}" , s) ) . collect ( ) ;
367454 if addresses. is_empty ( ) {
@@ -370,6 +457,17 @@ impl ToSql for EthereumSqlTypeWrapper {
370457 addresses. to_sql ( ty, out)
371458 }
372459 }
460+ EthereumSqlTypeWrapper :: VecAddressBytes ( values) => {
461+ if values. is_empty ( ) {
462+ Ok ( IsNull :: Yes )
463+ } else {
464+ for value in values {
465+ let bytes: Bytes = value. as_bytes ( ) . to_vec ( ) . into ( ) ;
466+ out. extend_from_slice ( & bytes) ;
467+ }
468+ Ok ( IsNull :: No )
469+ }
470+ }
373471 EthereumSqlTypeWrapper :: Bool ( value) => bool:: to_sql ( value, ty, out) ,
374472 EthereumSqlTypeWrapper :: VecBool ( values) => {
375473 if values. is_empty ( ) {
@@ -409,11 +507,13 @@ impl ToSql for EthereumSqlTypeWrapper {
409507 Ok ( IsNull :: No )
410508 }
411509 EthereumSqlTypeWrapper :: VecBytes ( values) => {
412- let hexes: Vec < String > = values. iter ( ) . map ( |s| format ! ( "{:?}" , s) ) . collect ( ) ;
413- if hexes. is_empty ( ) {
510+ if values. is_empty ( ) {
414511 Ok ( IsNull :: Yes )
415512 } else {
416- hexes. to_sql ( ty, out)
513+ for value in values {
514+ out. extend_from_slice ( value) ;
515+ }
516+ Ok ( IsNull :: No )
417517 }
418518 }
419519 EthereumSqlTypeWrapper :: U32 ( value) => {
@@ -1089,12 +1189,13 @@ pub fn map_ethereum_wrapper_to_json(
10891189 EthereumSqlTypeWrapper :: VecI128 ( i128s) => {
10901190 json ! ( i128s. iter( ) . map( |i| i. to_string( ) ) . collect:: <Vec <_>>( ) )
10911191 }
1092- EthereumSqlTypeWrapper :: U256 ( u) => {
1192+ EthereumSqlTypeWrapper :: U256 ( u) | EthereumSqlTypeWrapper :: U256Bytes ( u ) => {
10931193 // handle two's complement without adding a new type
10941194 let i256_value = u256_to_i256 ( * u) ;
10951195 json ! ( i256_value. to_string( ) )
10961196 }
1097- EthereumSqlTypeWrapper :: VecU256 ( u256s) => {
1197+ EthereumSqlTypeWrapper :: VecU256 ( u256s) |
1198+ EthereumSqlTypeWrapper :: VecU256Bytes ( u256s) => {
10981199 json ! ( u256s
10991200 . iter( )
11001201 . map( |u| {
@@ -1104,8 +1205,11 @@ pub fn map_ethereum_wrapper_to_json(
11041205 } )
11051206 . collect:: <Vec <_>>( ) )
11061207 }
1107- EthereumSqlTypeWrapper :: I256 ( i) => json ! ( i. to_string( ) ) ,
1108- EthereumSqlTypeWrapper :: VecI256 ( i256s) => {
1208+ EthereumSqlTypeWrapper :: I256 ( i) | EthereumSqlTypeWrapper :: I256Bytes ( i) => {
1209+ json ! ( i. to_string( ) )
1210+ }
1211+ EthereumSqlTypeWrapper :: VecI256 ( i256s) |
1212+ EthereumSqlTypeWrapper :: VecI256Bytes ( i256s) => {
11091213 json ! ( i256s. iter( ) . map( |i| i. to_string( ) ) . collect:: <Vec <_>>( ) )
11101214 }
11111215 EthereumSqlTypeWrapper :: U512 ( u) => json ! ( u. to_string( ) ) ,
@@ -1116,12 +1220,17 @@ pub fn map_ethereum_wrapper_to_json(
11161220 EthereumSqlTypeWrapper :: VecH128 ( h128s) => json ! ( h128s) ,
11171221 EthereumSqlTypeWrapper :: H160 ( h) => json ! ( h) ,
11181222 EthereumSqlTypeWrapper :: VecH160 ( h160s) => json ! ( h160s) ,
1119- EthereumSqlTypeWrapper :: H256 ( h) => json ! ( h) ,
1120- EthereumSqlTypeWrapper :: VecH256 ( h256s) => json ! ( h256s) ,
1223+ EthereumSqlTypeWrapper :: H256 ( h) | EthereumSqlTypeWrapper :: H256Bytes ( h) => {
1224+ json ! ( h)
1225+ }
1226+ EthereumSqlTypeWrapper :: VecH256 ( h256s) |
1227+ EthereumSqlTypeWrapper :: VecH256Bytes ( h256s) => json ! ( h256s) ,
11211228 EthereumSqlTypeWrapper :: H512 ( h) => json ! ( h) ,
11221229 EthereumSqlTypeWrapper :: VecH512 ( h512s) => json ! ( h512s) ,
1123- EthereumSqlTypeWrapper :: Address ( address) => json ! ( address) ,
1124- EthereumSqlTypeWrapper :: VecAddress ( addresses) => json ! ( addresses) ,
1230+ EthereumSqlTypeWrapper :: Address ( address) |
1231+ EthereumSqlTypeWrapper :: AddressBytes ( address) => json ! ( address) ,
1232+ EthereumSqlTypeWrapper :: VecAddress ( addresses) |
1233+ EthereumSqlTypeWrapper :: VecAddressBytes ( addresses) => json ! ( addresses) ,
11251234 EthereumSqlTypeWrapper :: Bool ( b) => json ! ( b) ,
11261235 EthereumSqlTypeWrapper :: VecBool ( bools) => json ! ( bools) ,
11271236 EthereumSqlTypeWrapper :: U32 ( u) => json ! ( u) ,
0 commit comments