@@ -16,9 +16,10 @@ module Network.Ethereum.Web3.Solidity.AbiEncoding
16
16
17
17
import Prelude
18
18
19
+ import Node.Encoding (Encoding (UTF8))
19
20
import Data.Array (foldMap , foldl , length , sortBy , (:))
20
- import Data.ByteString ( ByteString )
21
- import Data.ByteString ( toUTF8 , fromUTF8 , length ) as BS
21
+ import Node.Buffer.Immutable ( ImmutableBuffer )
22
+ import Node.Buffer.Immutable as B
22
23
import Data.Either (Either )
23
24
import Data.Functor.Tagged (Tagged , tagged , untagged )
24
25
import Data.Generic.Rep (class Generic , Argument (..), Constructor (..), NoArguments (..), Product (..), from , repOf , to )
@@ -32,7 +33,7 @@ import Data.Traversable (foldMapDefaultR)
32
33
import Data.Tuple (Tuple (..))
33
34
import Data.Unfoldable (replicateA )
34
35
import Network.Ethereum.Core.BigNumber (fromString , fromTwosComplement , toString , toTwosComplement , unsafeToInt )
35
- import Network.Ethereum.Core.HexString (HexString , PadByte (..), fromByteString , mkHexString , numberOfBytes , padLeft , padRight , splitAtByteOffset , toByteString , unHex )
36
+ import Network.Ethereum.Core.HexString (HexString , PadByte (..), fromBuffer , mkHexString , numberOfBytes , padLeft , padRight , splitAtByteOffset , toBuffer , unHex )
36
37
import Network.Ethereum.Types (Address , BigNumber , fromInt , mkAddress , unAddress )
37
38
import Network.Ethereum.Web3.Solidity.Bytes (BytesN , unBytesN , update , proxyBytesN )
38
39
import Network.Ethereum.Web3.Solidity.Int (IntN , unIntN , intNFromBigNumber )
@@ -67,7 +68,7 @@ else instance EncodingType (BytesN n) where
67
68
isDynamic = const false
68
69
else instance EncodingType a => EncodingType (Vector n a ) where
69
70
isDynamic _ = isDynamic (Proxy :: Proxy a )
70
- else instance EncodingType ByteString where
71
+ else instance EncodingType ImmutableBuffer where
71
72
isDynamic = const true
72
73
else instance EncodingType a => EncodingType (Tagged s a ) where
73
74
isDynamic _ = isDynamic (Proxy :: Proxy a )
@@ -114,11 +115,11 @@ else instance Reflectable n Int => ABIEncode (BytesN n) where
114
115
else instance Reflectable n Int => ABIEncode (IntN n ) where
115
116
abiEncode a = int256HexBuilder <<< unIntN $ a
116
117
117
- else instance ABIEncode ByteString where
118
- abiEncode bytes = uInt256HexBuilder (fromInt $ BS .length bytes) <> bytesBuilder bytes
118
+ else instance ABIEncode ImmutableBuffer where
119
+ abiEncode bytes = uInt256HexBuilder (fromInt $ B .size bytes) <> bytesBuilder bytes
119
120
120
121
else instance ABIEncode String where
121
- abiEncode = abiEncode <<< BS .toUTF8
122
+ abiEncode = abiEncode <<< \a -> B .fromString a UTF8
122
123
123
124
else instance ABIEncode a => ABIEncode (Array a ) where
124
125
abiEncode l =
@@ -221,8 +222,8 @@ factorBuilder a = Endo \encoded ->
221
222
} : map (\x -> x { order = x.order + 1 }) encoded
222
223
223
224
-- | base16 encode, then utf8 encode, then pad
224
- bytesBuilder :: ByteString -> HexString
225
- bytesBuilder = padRight Zero <<< fromByteString
225
+ bytesBuilder :: ImmutableBuffer -> HexString
226
+ bytesBuilder = padRight Zero <<< fromBuffer
226
227
227
228
-- | Encode something that is essentaially a signed integer.
228
229
int256HexBuilder :: BigNumber -> HexString
@@ -267,13 +268,13 @@ else instance ABIDecode Address where
267
268
maddr <- mkAddress <$> parseBytes 20
268
269
maybe (fail " Address is 20 bytes, receieved more" ) pure maddr
269
270
270
- else instance ABIDecode ByteString where
271
+ else instance ABIDecode ImmutableBuffer where
271
272
_abiDecode = do
272
273
len <- _abiDecode
273
- toByteString <$> parseBytes len
274
+ toBuffer <$> parseBytes len
274
275
275
276
else instance ABIDecode String where
276
- _abiDecode = BS .fromUTF8 <$> _abiDecode
277
+ _abiDecode = B .toString UTF8 <$> _abiDecode
277
278
278
279
else instance Reflectable n Int => ABIDecode (BytesN n ) where
279
280
_abiDecode = do
@@ -282,7 +283,7 @@ else instance Reflectable n Int => ABIDecode (BytesN n) where
282
283
zeroBytes = 32 - len
283
284
raw <- parseBytes len
284
285
_ <- parseBytes zeroBytes
285
- pure <<< update proxyBytesN <<< toByteString $ raw
286
+ pure <<< update proxyBytesN <<< toBuffer $ raw
286
287
287
288
else instance (Reflectable n Int , ABIDecode a ) => ABIDecode (Vector n a ) where
288
289
_abiDecode =
0 commit comments