Skip to content

Commit

Permalink
Merge remote-tracking branch 'FourierLabs/fix-sanchonet'
Browse files Browse the repository at this point in the history
  • Loading branch information
KtorZ committed Jun 11, 2024
2 parents b63f498 + 2768a70 commit 44efa82
Show file tree
Hide file tree
Showing 8 changed files with 94 additions and 69 deletions.
23 changes: 14 additions & 9 deletions cabal.project
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ repository cardano-haskell-packages
d4a35cd3121aa00d18544bb0ac01c3e1691d618f462c46129271bccf39f7e8ee

index-state:
, hackage.haskell.org 2023-12-06T23:59:59Z
, cardano-haskell-packages 2023-12-06T23:59:59Z
, hackage.haskell.org 2024-03-26T06:28:59Z
, cardano-haskell-packages 2024-04-11T09:29:53Z

packages:
./
Expand Down Expand Up @@ -47,12 +47,17 @@ package direct-sqlite

constraints:
, any.base == 4.18.1.0
, any.cardano-node == 8.7.2
, any.cardano-ledger-conway == 1.11.0.0
, any.ouroboros-consensus == 0.14.0.0
, any.ouroboros-consensus-cardano == 0.12.1.0
, any.cardano-node == 8.10.1

-- following cardano-node
, any.ouroboros-consensus ^>= 0.17.0.0
, any.ouroboros-consensus-cardano ^>= 0.15

-- bump to allow ouroboros-consensus
, quickcheck-state-machine ^>= 0.9

, any.cardano-ledger-conway >= 1.11.0.0
, any.formatting == 7.2.0
, quickcheck-state-machine ^>= 0.7
, any.text source
, direct-sqlite == 2.3.29.1
, sqlite-simple == 0.4.19.0.1
Expand All @@ -63,8 +68,8 @@ allow-newer:
source-repository-package
type: git
location: https://github.com/CardanoSolutions/ogmios
tag: 01f7787216e7ceb8e39c8c6807f7ae53fc14ab9e
--sha256: 16mdvv3qws92fins673jb2qiw7b9vd0pwzwvq9zvi6zkhhhkfdfm
tag: 83065af5d370389c09e901c64628781ac0898a03
--sha256: OJiU/qLCslSrRbIGARUCbFNUNNWGHC8/0S5gWWSE2PA=
subdir:
server/modules/fast-bech32

Expand Down
2 changes: 1 addition & 1 deletion src/Kupo/App/ChainSync/Node.hs
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ mkChainSyncClient var0 mailbox pts =
clientStIdle var d n = do
atomically (tryTakeTMVar var) >>= \case
Nothing -> do
pure $ SendMsgRequestNextPipelined $ CollectResponse
pure $ SendMsgRequestNextPipelined (pure ()) $ CollectResponse
(guard (succ (natToInteger n) < maxInFlight d) $> clientStIdle var d (Succ n))
(clientStNext var n)
Just (pt, handler) -> do
Expand Down
6 changes: 2 additions & 4 deletions src/Kupo/App/FetchBlock/Node.hs
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,7 @@ newFetchBlockClient = do
clientStIntersect reply =
ClientPipelinedStIntersect
{ recvMsgIntersectFound = \_point _tip ->
let st = clientStNextRollback reply
in pure $ SendMsgRequestNext st (pure st)
pure $ SendMsgRequestNext (pure ()) $ clientStNextRollback reply
, recvMsgIntersectNotFound = \_tip ->
reply Nothing
}
Expand All @@ -93,8 +92,7 @@ newFetchBlockClient = do
error "clientStNextRollback.recvMsgRollForward: absurd; \
\After a successful intersection, the node always sends a 'RollBackward' message."
, recvMsgRollBackward = \_point _tip ->
let st = clientStNextRollForward reply
in pure $ SendMsgRequestNext st (pure st)
pure $ SendMsgRequestNext (pure ()) $ clientStNextRollForward reply
}

clientStNextRollForward
Expand Down
20 changes: 10 additions & 10 deletions src/Kupo/Data/Cardano.hs
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ module Kupo.Data.Cardano

import Kupo.Prelude

import Cardano.Ledger.Val
( Val (inject)
import Cardano.Ledger.BaseTypes
( inject
)
import Data.Maybe.Strict
( StrictMaybe (..)
Expand Down Expand Up @@ -238,31 +238,31 @@ instance IsBlock Block where
TransactionShelley tx ->
let
body = tx ^. Ledger.bodyTxL
txId = Ledger.txid @(ShelleyEra StandardCrypto) body
txId = Ledger.txIdTxBody @(ShelleyEra StandardCrypto) body
outs = body ^. Ledger.outputsTxBodyL
meta = tx ^. Ledger.auxDataTxL & strictMaybe emptyMetadata fromShelleyMetadata
in
traverseAndTransform (fromShelleyOutput inject) txId meta 0 outs
TransactionAllegra tx ->
let
body = tx ^. Ledger.bodyTxL
txId = Ledger.txid @(AllegraEra StandardCrypto) body
txId = Ledger.txIdTxBody @(AllegraEra StandardCrypto) body
outs = body ^. Ledger.outputsTxBodyL
meta = tx ^. Ledger.auxDataTxL & strictMaybe emptyMetadata fromAllegraMetadata
in
traverseAndTransform (fromShelleyOutput inject) txId meta 0 outs
TransactionMary tx ->
let
body = tx ^. Ledger.bodyTxL
txId = Ledger.txid @(MaryEra StandardCrypto) body
txId = Ledger.txIdTxBody @(MaryEra StandardCrypto) body
outs = body ^. Ledger.outputsTxBodyL
meta = tx ^. Ledger.auxDataTxL & strictMaybe emptyMetadata fromMaryMetadata
in
traverseAndTransform (fromShelleyOutput @MaryEra identity) txId meta 0 outs
TransactionAlonzo tx ->
let
body = tx ^. Ledger.bodyTxL
txId = Ledger.txid @(AlonzoEra StandardCrypto) body
txId = Ledger.txIdTxBody @(AlonzoEra StandardCrypto) body
outs = body ^. Ledger.outputsTxBodyL
meta = tx ^. Ledger.auxDataTxL & strictMaybe emptyMetadata fromAlonzoMetadata
in
Expand All @@ -274,7 +274,7 @@ instance IsBlock Block where
TransactionBabbage tx ->
let
body = tx ^. Ledger.bodyTxL
txId = Ledger.txid @(BabbageEra StandardCrypto) body
txId = Ledger.txIdTxBody @(BabbageEra StandardCrypto) body
outs = body ^. Ledger.outputsTxBodyL
meta = tx ^. Ledger.auxDataTxL & strictMaybe emptyMetadata fromBabbageMetadata
in
Expand All @@ -295,7 +295,7 @@ instance IsBlock Block where
TransactionConway tx ->
let
body = tx ^. Ledger.bodyTxL
txId = Ledger.txid @(ConwayEra StandardCrypto) body
txId = Ledger.txIdTxBody @(ConwayEra StandardCrypto) body
outs = body ^. Ledger.outputsTxBodyL
meta = tx ^. Ledger.auxDataTxL & strictMaybe emptyMetadata fromConwayMetadata
in
Expand Down Expand Up @@ -393,9 +393,9 @@ instance IsBlock Block where
(scriptFromAllegraAuxiliaryData fromMaryScript)
(tx ^. Ledger.auxDataTxL)
TransactionAlonzo tx ->
( fromAlonzoScript <$> (tx ^. Ledger.witsTxL . Ledger.scriptTxWitsL)
( unsafeFromAlonzoScript <$> (tx ^. Ledger.witsTxL . Ledger.scriptTxWitsL)
) & strictMaybe identity
(scriptFromAlonzoAuxiliaryData @(AlonzoEra StandardCrypto) fromAlonzoScript)
(scriptFromAlonzoAuxiliaryData @(AlonzoEra StandardCrypto) unsafeFromAlonzoScript)
(tx ^. Ledger.auxDataTxL)
TransactionBabbage tx ->
( fromBabbageScript <$> (tx ^. Ledger.witsTxL . Ledger.scriptTxWitsL)
Expand Down
4 changes: 3 additions & 1 deletion src/Kupo/Data/Cardano/Address.hs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import Data.ByteString.Bech32
import qualified Cardano.Ledger.Address as Ledger
import qualified Cardano.Ledger.BaseTypes as Ledger
import qualified Cardano.Ledger.Credential as Ledger
import qualified Cardano.Ledger.Api as Ledger.Api
import qualified Data.Aeson as Json
import qualified Data.Aeson.Encoding as Json

Expand Down Expand Up @@ -47,8 +48,9 @@ unsafeAddressFromBytes =

addressFromBytes :: ByteString -> Maybe Address
addressFromBytes bytes =
Ledger.deserialiseAddr bytes
Ledger.Api.decodeAddr bytes
<|>
-- TODO: This is probably redundant (now with decodeAddr and/or decodeAddrLenient
-- NOTE: Since around Babbage / Conway, the ledger team decided to drop support for pointer
-- addresses from new decoders. Yet, those addresses still exist on-chain (and forever will).
--
Expand Down
15 changes: 9 additions & 6 deletions src/Kupo/Data/Cardano/Output.hs
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,14 @@ import qualified Cardano.Chain.Common as Ledger.Byron
import qualified Cardano.Chain.UTxO as Ledger.Byron
import qualified Cardano.Ledger.Address as Ledger
import qualified Cardano.Ledger.Alonzo.TxBody as Ledger.Alonzo
import qualified Cardano.Ledger.BaseTypes as Ledger
import qualified Cardano.Ledger.Babbage as Ledger.Babbage
import qualified Cardano.Ledger.Babbage.TxBody as Ledger.Babbage
import qualified Cardano.Ledger.Coin as Ledger
import qualified Cardano.Ledger.Core as Ledger.Core
import qualified Cardano.Ledger.Mary.Value as Ledger
import qualified Cardano.Ledger.Shelley.Tx as Ledger.Shelley
import qualified Cardano.Ledger.Shelley.API as Ledger.Shelley
import qualified Cardano.Ledger.Plutus.Data as Ledger

import qualified Data.Map as Map

Expand Down Expand Up @@ -78,8 +81,8 @@ fromByronOutput
fromByronOutput (Ledger.Byron.TxOut address value) =
Ledger.Babbage.BabbageTxOut
(Ledger.AddrBootstrap (Ledger.BootstrapAddress address))
(inject $ Ledger.Coin $ toInteger $ Ledger.Byron.unsafeGetLovelace value)
Ledger.Babbage.NoDatum
(Ledger.inject $ Ledger.Coin $ toInteger $ Ledger.Byron.unsafeGetLovelace value)
Ledger.NoDatum
SNothing
{-# INLINABLE fromByronOutput #-}

Expand All @@ -94,7 +97,7 @@ fromShelleyOutput
-> Ledger.Core.TxOut (era crypto)
-> Output' crypto
fromShelleyOutput liftValue (Ledger.Shelley.ShelleyTxOut addr value) =
Ledger.Babbage.BabbageTxOut addr (liftValue value) Ledger.Babbage.NoDatum SNothing
Ledger.Babbage.BabbageTxOut addr (liftValue value) Ledger.NoDatum SNothing
{-# INLINABLE fromShelleyOutput #-}

fromAlonzoOutput
Expand All @@ -109,14 +112,14 @@ fromAlonzoOutput (Ledger.Alonzo.AlonzoTxOut addr value datum) =
Ledger.Babbage.BabbageTxOut
addr
value
Ledger.Babbage.NoDatum
Ledger.NoDatum
SNothing

SJust datumHash ->
Ledger.Babbage.BabbageTxOut
addr
value
(Ledger.Babbage.DatumHash datumHash)
(Ledger.DatumHash datumHash)
SNothing

fromBabbageOutput
Expand Down
79 changes: 48 additions & 31 deletions src/Kupo/Data/Cardano/Script.hs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import qualified Cardano.Ledger.Alonzo.TxAuxData as Ledger.Alonzo
import qualified Cardano.Ledger.Core as Ledger.Core
import qualified Cardano.Ledger.Era as Ledger
import qualified Cardano.Ledger.SafeHash as Ledger
import qualified Cardano.Ledger.Binary.Plain as Ledger

import qualified Codec.CBOR.Decoding as Cbor
import qualified Codec.CBOR.Read as Cbor
Expand Down Expand Up @@ -59,8 +60,8 @@ scriptFromAllegraAuxiliaryData liftScript (Ledger.Allegra.AllegraTxAuxData _ scr

scriptFromAlonzoAuxiliaryData
:: forall era.
( Ledger.Era era
, Ledger.Core.Script era ~ Ledger.Alonzo.AlonzoScript era
( Ledger.Core.Script era ~ Ledger.Alonzo.AlonzoScript era
, Ledger.Alonzo.AlonzoEraScript era
)
=> (Ledger.Core.Script era -> Script)
-> Ledger.Alonzo.AlonzoTxAuxData era
Expand All @@ -87,14 +88,30 @@ fromMaryScript =
Ledger.Alonzo.TimelockScript . Ledger.Allegra.translateTimelock
{-# INLINABLE fromMaryScript #-}

fromAlonzoScript
:: Ledger.Alonzo.Script (AlonzoEra StandardCrypto)
-- TODO Remove unneeded unsafe upgrade from AlonzoEra to ConwayEra
-- I could not find any evidence that we should upgrade
-- from AlonzoEra to ConwayEra but to avoid introducing
-- breaking changes I'm keeping current design through
-- this unsafe function
unsafeFromAlonzoScript
:: HasCallStack
=> Ledger.Alonzo.Script (AlonzoEra StandardCrypto)
-> Script
fromAlonzoScript = \case
Ledger.Alonzo.TimelockScript script ->
Ledger.Alonzo.TimelockScript (Ledger.Allegra.translateTimelock script)
Ledger.Alonzo.PlutusScript plutus ->
Ledger.Alonzo.PlutusScript plutus
unsafeFromAlonzoScript script =
fromMaybe (error "unsafeFromAlonzoScript") $ case script of
Ledger.Alonzo.TimelockScript tl
-> Just
$ Ledger.Alonzo.TimelockScript
$ Ledger.Allegra.translateTimelock
@(AlonzoEra StandardCrypto)
@(ConwayEra StandardCrypto)
tl
Ledger.Alonzo.PlutusScript ps
-> Ledger.Alonzo.withPlutusScript
ps
(\pl -> Ledger.Alonzo.PlutusScript
<$> Ledger.Alonzo.mkPlutusScript pl
)

fromBabbageScript
:: Ledger.Alonzo.Script (BabbageEra StandardCrypto)
Expand All @@ -116,29 +133,25 @@ scriptToJson
scriptToJson script = encodeObject
[ ("script", encodeBytes (Ledger.originalBytes script))
, ("language", case script of
Ledger.Alonzo.TimelockScript{} ->
Json.text "native"
Ledger.Alonzo.PlutusScript (Ledger.Plutus Ledger.PlutusV1 _) ->
Json.text "plutus:v1"
Ledger.Alonzo.PlutusScript (Ledger.Plutus Ledger.PlutusV2 _) ->
Json.text "plutus:v2"
Ledger.Alonzo.PlutusScript (Ledger.Plutus Ledger.PlutusV3 _) ->
Json.text "plutus:v3"
Ledger.Alonzo.TimelockScript _ -> Json.text "native"
Ledger.Alonzo.PlutusScript ps -> case Ledger.Alonzo.plutusScriptLanguage ps of
Ledger.PlutusV1 -> Json.text "plutus:v1"
Ledger.PlutusV2 -> Json.text "plutus:v2"
Ledger.PlutusV3 -> Json.text "plutus:v3"
)
]

scriptToBytes
:: Script
-> ByteString
scriptToBytes = \case
script@Ledger.Alonzo.TimelockScript{} ->
BS.singleton 0 <> Ledger.originalBytes script
script@(Ledger.Alonzo.PlutusScript (Ledger.Plutus Ledger.PlutusV1 _)) ->
BS.singleton 1 <> Ledger.originalBytes script
script@(Ledger.Alonzo.PlutusScript (Ledger.Plutus Ledger.PlutusV2 _)) ->
BS.singleton 2 <> Ledger.originalBytes script
script@(Ledger.Alonzo.PlutusScript (Ledger.Plutus Ledger.PlutusV3 _)) ->
BS.singleton 3 <> Ledger.originalBytes script
scriptToBytes =
let withTag n s = BS.singleton n <> Ledger.originalBytes s
in \case
Ledger.Alonzo.TimelockScript script -> withTag 0 script
Ledger.Alonzo.PlutusScript script -> case Ledger.Alonzo.plutusScriptLanguage script of
Ledger.PlutusV1 -> withTag 1 script
Ledger.PlutusV2 -> withTag 2 script
Ledger.PlutusV3 -> withTag 3 script

unsafeScriptFromBytes
:: HasCallStack
Expand All @@ -157,13 +170,17 @@ scriptFromBytes (toLazy -> bytes) =
Cbor.deserialiseFromBytes Cbor.decodeWord8 bytes
case tag of
0 -> Ledger.Alonzo.TimelockScript <$> decodeCborAnn @BabbageEra "Timelock" decCBOR script
1 -> pure $ plutusScript Ledger.PlutusV1 script
2 -> pure $ plutusScript Ledger.PlutusV2 script
3 -> pure $ plutusScript Ledger.PlutusV3 script
1 -> plutusScript Ledger.PlutusV1 script
2 -> plutusScript Ledger.PlutusV2 script
3 -> plutusScript Ledger.PlutusV3 script
t -> Left (DecoderErrorUnknownTag "Script" t)
where
plutusScript lang =
Ledger.Alonzo.PlutusScript . Ledger.Plutus lang . Ledger.BinaryPlutus . toShort . toStrict
plutusScript lang s =
let bytes_ = Ledger.PlutusBinary $ toShort $ toStrict s
script = maybeToRight
(Ledger.DecoderErrorCustom "Incompatible language and script" $ "(" <> show lang <> ", " <> show bytes_ <> ")")
(Ledger.Alonzo.mkBinaryPlutusScript @(ConwayEra StandardCrypto) lang bytes_)
in Ledger.Alonzo.PlutusScript <$> script

fromNativeScript
:: NativeScript
Expand Down
14 changes: 7 additions & 7 deletions src/Kupo/Data/Cardano/Transaction.hs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import Kupo.Data.Cardano.TransactionId

import qualified Cardano.Chain.UTxO as Ledger.Byron
import qualified Cardano.Ledger.Alonzo.Tx as Ledger.Alonzo
import qualified Cardano.Ledger.Block as Ledger
import qualified Cardano.Ledger.Core as Ledger
import qualified Cardano.Ledger.Shelley.Tx as Ledger.Shelley


Expand Down Expand Up @@ -40,19 +40,19 @@ instance HasTransactionId Transaction StandardCrypto where
transactionIdFromByron i
TransactionShelley tx ->
let body = Ledger.Shelley.body tx
in Ledger.txid @(ShelleyEra StandardCrypto) body
in Ledger.txIdTxBody @(ShelleyEra StandardCrypto) body
TransactionAllegra tx ->
let body = Ledger.Shelley.body tx
in Ledger.txid @(AllegraEra StandardCrypto) body
in Ledger.txIdTxBody @(AllegraEra StandardCrypto) body
TransactionMary tx ->
let body = Ledger.Shelley.body tx
in Ledger.txid @(MaryEra StandardCrypto) body
in Ledger.txIdTxBody @(MaryEra StandardCrypto) body
TransactionAlonzo tx ->
let body = Ledger.Alonzo.body tx
in Ledger.txid @(AlonzoEra StandardCrypto) body
in Ledger.txIdTxBody @(AlonzoEra StandardCrypto) body
TransactionBabbage tx ->
let body = Ledger.Alonzo.body tx
in Ledger.txid @(BabbageEra StandardCrypto) body
in Ledger.txIdTxBody @(BabbageEra StandardCrypto) body
TransactionConway tx ->
let body = Ledger.Alonzo.body tx
in Ledger.txid @(ConwayEra StandardCrypto) body
in Ledger.txIdTxBody @(ConwayEra StandardCrypto) body

0 comments on commit 44efa82

Please sign in to comment.