Skip to content

Commit

Permalink
Use newer purescript-aeson and json-bigint
Browse files Browse the repository at this point in the history
klntsky committed Nov 8, 2023
1 parent 0ccc85d commit c677f5f
Showing 8 changed files with 46 additions and 48 deletions.
20 changes: 7 additions & 13 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -39,7 +39,7 @@
"@mlabs-haskell/cardano-serialization-lib-gc-browser": "^1.0.6",
"@mlabs-haskell/cardano-serialization-lib-gc-nodejs": "^1.0.6",
"@mlabs-haskell/csl-gc-wrapper": "^1.0.1",
"@mlabs-haskell/json-bigint": " 1.0.0",
"@mlabs-haskell/json-bigint": "2.0.0",
"@noble/secp256k1": "^1.7.0",
"apply-args-browser": "0.0.1",
"apply-args-nodejs": "0.0.1",
8 changes: 2 additions & 6 deletions packages.dhall
Original file line number Diff line number Diff line change
@@ -145,7 +145,7 @@ let additions =
, "untagged-union"
]
, repo = "https://github.com/mlabs-haskell/purescript-aeson.git"
, version = "1da04ea8ff3656a4954b3ae2414da2d6a73ade82"
, version = "e885fa483ba374f34416049b96be0bb0cd591c0b"
}
, bignumber =
{ dependencies =
@@ -250,11 +250,7 @@ let additions =
, version = "a3c0f67e9fdb0086016d7aebfad35d09a08b4ecd"
}
, js-bigints =
{ dependencies =
[ "integers"
, "maybe"
, "prelude"
]
{ dependencies = [ "integers", "maybe", "prelude" ]
, repo = "https://github.com/purescript-contrib/purescript-js-bigints"
, version = "36a7d8ac75a7230043ae511f3145f9ed130954a9"
}
6 changes: 3 additions & 3 deletions src/Internal/Cardano/Types/Transaction.purs
Original file line number Diff line number Diff line change
@@ -95,7 +95,7 @@ import Aeson
, caseAesonString
, decodeAeson
, encodeAeson
, partialFiniteNumber
, finiteNumber
)
import Control.Alternative ((<|>))
import Control.Apply (lift2)
@@ -605,10 +605,10 @@ instance EncodeAeson MoveInstantaneousReward where
encodeAeson = case _ of
ToOtherPot r -> encodeTagged' "ToOtherPot" r
-- We assume the numbers are finite
{ pot = unsafePartial partialFiniteNumber r.pot }
{ pot = unsafePartial $ fromJust $ finiteNumber r.pot }
ToStakeCreds r -> encodeTagged' "ToStakeCreds" r
-- We assume the numbers are finite
{ pot = unsafePartial partialFiniteNumber r.pot }
{ pot = unsafePartial $ fromJust $ finiteNumber r.pot }

type PoolRegistrationParams =
{ operator :: PoolPubKeyHash -- cwitness (cert)
6 changes: 3 additions & 3 deletions src/Internal/Plutip/Types.purs
Original file line number Diff line number Diff line change
@@ -26,7 +26,7 @@ import Aeson
, JsonDecodeError(TypeMismatch, UnexpectedValue)
, decodeAeson
, encodeAeson
, partialFiniteNumber
, finiteNumber
, toStringifiedNumbersJson
, (.:)
)
@@ -41,7 +41,7 @@ import Data.Either (Either(Left), note)
import Data.Generic.Rep (class Generic)
import Data.Log.Level (LogLevel)
import Data.Log.Message (Message)
import Data.Maybe (Maybe)
import Data.Maybe (Maybe, fromJust)
import Data.Newtype (class Newtype)
import Data.Show.Generic (genericShow)
import Data.Time.Duration (Seconds(Seconds))
@@ -94,7 +94,7 @@ instance EncodeAeson ClusterStartupRequest where
) = encodeAeson
{ keysToGenerate
, epochSize
, slotLength: unsafePartial partialFiniteNumber slotLength
, slotLength: unsafePartial $ fromJust $ finiteNumber slotLength
, maxTxSize
, raiseExUnitsToMax
}
39 changes: 24 additions & 15 deletions src/Internal/Service/Blockfrost.purs
Original file line number Diff line number Diff line change
@@ -63,7 +63,6 @@ import Prelude
import Aeson
( class DecodeAeson
, Aeson
, Finite
, JsonDecodeError(TypeMismatch, MissingValue, AtKey)
, decodeAeson
, decodeJsonString
@@ -74,7 +73,6 @@ import Aeson
, isNull
, parseJsonStringToAeson
, stringifyAeson
, unpackFinite
, (.:)
, (.:!)
)
@@ -214,7 +212,7 @@ import Data.Bifunctor (lmap)
import Data.BigNumber (BigNumber, toFraction)
import Data.BigNumber as BigNumber
import Data.DateTime.Instant (instant, toDateTime)
import Data.Either (Either(Left, Right), either, note)
import Data.Either (Either(Left, Right), either, hush, note)
import Data.Foldable (fold)
import Data.Generic.Rep (class Generic)
import Data.HTTP.Method (Method(GET, POST))
@@ -1237,14 +1235,25 @@ blockfrostStakeCredentialToBech32 = case _ of
-- BlockfrostProtocolParameters
--------------------------------------------------------------------------------

-- | `Stringed a` decodes an `a` who was encoded as a `String`
-- | `Stringed a` decodes an `a` that was encoded as a `String`
newtype Stringed a = Stringed a

derive instance Newtype (Stringed a) _

instance DecodeAeson a => DecodeAeson (Stringed a) where
decodeAeson = decodeAeson >=> decodeJsonString >=> Stringed >>> pure

newtype FiniteBigNumber = FiniteBigNumber BigNumber

derive instance Newtype FiniteBigNumber _

instance DecodeAeson FiniteBigNumber where
decodeAeson aeson = do
number <- decodeAeson aeson
map FiniteBigNumber $ note (TypeMismatch "BigNumber") $ hush
$ BigNumber.parseBigNumber
$ show (number :: Number)

type BlockfrostProtocolParametersRaw =
{ "min_fee_a" :: UInt
, "min_fee_b" :: UInt
@@ -1255,18 +1264,18 @@ type BlockfrostProtocolParametersRaw =
, "pool_deposit" :: Stringed BigInt
, "e_max" :: BigInt
, "n_opt" :: UInt
, "a0" :: Finite BigNumber
, "rho" :: Finite BigNumber
, "tau" :: Finite BigNumber
, "a0" :: FiniteBigNumber
, "rho" :: FiniteBigNumber
, "tau" :: FiniteBigNumber
, "protocol_major_ver" :: UInt
, "protocol_minor_ver" :: UInt
, "min_pool_cost" :: Stringed BigInt
, "cost_models" ::
{ "PlutusV1" :: { | CostModelV1 }
, "PlutusV2" :: { | CostModelV2 }
}
, "price_mem" :: Finite BigNumber
, "price_step" :: Finite BigNumber
, "price_mem" :: FiniteBigNumber
, "price_step" :: FiniteBigNumber
, "max_tx_ex_mem" :: Stringed BigInt
, "max_tx_ex_steps" :: Stringed BigInt
, "max_block_ex_mem" :: Stringed BigInt
@@ -1278,25 +1287,25 @@ type BlockfrostProtocolParametersRaw =
, "coins_per_utxo_word" :: Maybe (Stringed BigInt)
}

toFraction' :: Finite BigNumber -> String /\ String
toFraction' :: BigNumber -> String /\ String
toFraction' bn =
(BigNumber.toString numerator /\ BigNumber.toString denominator)
where
(numerator /\ denominator) = toFraction (unpackFinite bn)
(numerator /\ denominator) = toFraction bn
(BigNumber.fromNumber infinity)

bigNumberToRational :: Finite BigNumber -> Either JsonDecodeError Rational
bigNumberToRational bn = note (TypeMismatch "Rational") do
bigNumberToRational :: FiniteBigNumber -> Either JsonDecodeError Rational
bigNumberToRational (FiniteBigNumber bn) = note (TypeMismatch "Rational") do
numerator <- BigInt.fromString numerator'
denominator <- BigInt.fromString denominator'
reduce numerator denominator
where
(numerator' /\ denominator') = toFraction' bn

bigNumberToPrice
:: Finite BigNumber
:: FiniteBigNumber
-> Either JsonDecodeError { numerator :: BigNum, denominator :: BigNum }
bigNumberToPrice bn = note (TypeMismatch "Rational") do
bigNumberToPrice (FiniteBigNumber bn) = note (TypeMismatch "Rational") do
numerator <- BigNum.fromString numerator'
denominator <- BigNum.fromString denominator'
pure { numerator, denominator }
9 changes: 4 additions & 5 deletions src/Internal/Types/EraSummaries.purs
Original file line number Diff line number Diff line change
@@ -15,15 +15,15 @@ import Aeson
( class DecodeAeson
, class EncodeAeson
, encodeAeson
, finiteNumber
, getField
, partialFiniteNumber
)
import Ctl.Internal.Helpers (showWithParens)
import Ctl.Internal.Serialization.Address (Slot)
import Ctl.Internal.Service.Helpers (aesonObject)
import Ctl.Internal.Types.Epoch (Epoch)
import Data.Generic.Rep (class Generic)
import Data.Maybe (Maybe)
import Data.Maybe (Maybe, fromJust)
import Data.Newtype (class Newtype, wrap)
import Data.Show.Generic (genericShow)
import JS.BigInt (BigInt)
@@ -143,7 +143,7 @@ derive newtype instance DecodeAeson RelativeTime
instance EncodeAeson RelativeTime where
encodeAeson (RelativeTime rt) =
-- We assume the numbers are finite.
encodeAeson $ unsafePartial partialFiniteNumber rt
encodeAeson $ unsafePartial $ fromJust $ finiteNumber rt

instance Show RelativeTime where
show (RelativeTime rt) = showWithParens "RelativeTime" rt
@@ -170,7 +170,7 @@ derive newtype instance DecodeAeson SlotLength
instance EncodeAeson SlotLength where
encodeAeson (SlotLength sl) =
-- We assume the numbers are finite.
encodeAeson $ unsafePartial partialFiniteNumber sl
encodeAeson $ unsafePartial $ fromJust $ finiteNumber sl

instance Show SlotLength where
show (SlotLength slotLength) = showWithParens "SlotLength" slotLength
@@ -189,4 +189,3 @@ derive newtype instance EncodeAeson SafeZone

instance Show SafeZone where
show (SafeZone sz) = showWithParens "SafeZone" sz

4 changes: 2 additions & 2 deletions src/Internal/Types/Interval.purs
Original file line number Diff line number Diff line change
@@ -73,9 +73,9 @@ import Aeson
, aesonNull
, decodeAeson
, encodeAeson
, finiteNumber
, getField
, isNull
, partialFiniteNumber
, (.:)
)
import Control.Monad.Error.Class (throwError)
@@ -652,7 +652,7 @@ instance EncodeAeson SlotToPosixTimeError where
slotToPosixTimeErrorStr
"endTimeLessThanTime"
-- We assume the numbers are finite
[ unsafePartial partialFiniteNumber absTime ]
[ unsafePartial $ fromJust $ finiteNumber absTime ]
encodeAeson CannotGetBigIntFromNumber = do
encodeAeson $ mkErrorRecord
slotToPosixTimeErrorStr

0 comments on commit c677f5f

Please sign in to comment.