Skip to content

Commit

Permalink
Builds. Need to implement convertTxBodyToUnsignedTx
Browse files Browse the repository at this point in the history
Need to look at the entire diff to see what direction we are going in.
I think we should deprecate Pre babbage in the existing api which means
propagating the new api without breaking the old api's interface.
We should probably copy the existing functions with the same names in
parallel. Expose ledger function where necessary.
  • Loading branch information
Jimbo4350 committed Jul 30, 2024
1 parent 85b50e7 commit 54d460c
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 41 deletions.
40 changes: 23 additions & 17 deletions cardano-api/internal/Cardano/Api/Convenience/Construction.hs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ where

import Cardano.Api.Address
import Cardano.Api.Certificate
import Cardano.Api.Experimental.Tx
import Data.Maybe
import Cardano.Api.Eon.ShelleyBasedEra
import Cardano.Api.Fees
Expand All @@ -38,6 +39,7 @@ import Data.Set (Set)
import qualified Data.Set as Set
import Data.Text (Text)
import qualified Data.Text as Text
import Cardano.Api.Eras

-- | Construct a balanced transaction.
-- See Cardano.Api.Convenience.Query.queryStateForBalancedTx for a
Expand Down Expand Up @@ -75,26 +77,30 @@ constructBalancedTx
stakeDelegDeposits
drepDelegDeposits
shelleyWitSigningKeys = do
let --availableEra :: Exp.Era (Exp.SbeToAvailableEras era)
availableEra = fromMaybe (error "TODO") $ sbeToEra sbe
let availableEra = fromMaybe (error "TODO") $ sbeToEra sbe

--BalancedTxBody _ txbody _txBalanceOutput _fee <- -- obtainCommonConstraints availableEra $
-- makeTransactionBodyAutoBalance
-- sbe
-- systemStart
-- ledgerEpochInfo
-- lpp
-- stakePools
-- stakeDelegDeposits
-- drepDelegDeposits
-- utxo
-- txbodcontent
-- changeAddr
-- mOverrideWits
BalancedTxBody _ unsignedTx _txBalanceOutput _fee <- -- obtainCommonConstraints availableEra $
makeTransactionBodyAutoBalance
sbe
systemStart
ledgerEpochInfo
lpp
stakePools
stakeDelegDeposits
drepDelegDeposits
utxo
txbodcontent
changeAddr
mOverrideWits

let keyWits = undefined -- map (makeShelleyKeyWitness sbe txbody) shelleyWitSigningKeys
return $ makeSignedTransaction keyWits undefined --txbody
let alternateKeyWits = map (makeKeyWitness availableEra unsignedTx) shelleyWitSigningKeys
signedTx = signTx availableEra [] alternateKeyWits unsignedTx

caseShelleyToAlonzoOrBabbageEraOnwards
(const $ error "constructBalancedTx: TODO Fail")
(\w -> return $ ShelleyTx sbe $ obtainShimConstraints w signedTx)
sbe

data TxInsExistError
= TxInsDoNotExist [TxIn]
| EmptyUTxO
Expand Down
50 changes: 41 additions & 9 deletions cardano-api/internal/Cardano/Api/Experimental/Tx.hs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@ module Cardano.Api.Experimental.Tx where
import Cardano.Api.Eon.BabbageEraOnwards
import Cardano.Api.Eon.ShelleyBasedEra
import Cardano.Api.Experimental.Eras
import qualified Cardano.Ledger.SafeHash as L
import qualified Cardano.Ledger.UTxO as L
import qualified Cardano.Ledger.Keys as L
import Cardano.Ledger.Hashes

import Cardano.Api.Feature
import Cardano.Api.ReexposeLedger (StrictMaybe (..), maybeToStrictMaybe)
import qualified Cardano.Api.ReexposeLedger as L
Expand Down Expand Up @@ -142,19 +146,40 @@ eraSpecificLedgerTxBody ConwayEra ledgerbody bc =
& L.treasuryDonationTxBodyL .~ maybe (L.Coin 0) unFeatured treasuryDonation
& L.currentTreasuryValueTxBodyL .~ L.maybeToStrictMaybe (unFeatured <$> currentTresuryValue)


hashTxBody
:: L.HashAnnotated (Ledger.TxBody era) EraIndependentTxBody L.StandardCrypto
=> L.TxBody era -> L.Hash L.StandardCrypto EraIndependentTxBody
hashTxBody = L.extractHash @L.StandardCrypto . L.hashAnnotated

makeKeyWitness
:: Era era
-> UnsignedTx era --L.TxBody (ToConstrainedEra era)
-> ShelleyWitnessSigningKey
-> L.WitVKey L.Witness L.StandardCrypto
makeKeyWitness era (UnsignedTx unsignedTx) wsk = obtainCommonConstraints era $
let txbody = unsignedTx ^. L.bodyTxL
txhash :: L.Hash L.StandardCrypto EraIndependentTxBody
txhash = obtainCommonConstraints era $ hashTxBody txbody
sk = toShelleySigningKey wsk
vk = getShelleyKeyWitnessVerificationKey sk
signature = makeShelleySignature txhash sk
in L.WitVKey vk signature


signTx
:: L.EraTx (ToConstrainedEra era)
=> Ledger.EraCrypto (ToConstrainedEra era) ~ L.StandardCrypto
=> [KeyWitness (AvailableErasToSbe era)]
:: Era era
-> [L.BootstrapWitness L.StandardCrypto]
-> [L.WitVKey L.Witness L.StandardCrypto]
-> UnsignedTx era
-> Ledger.Tx (ToConstrainedEra era)
signTx apiKeyWits (UnsignedTx unsigned) =
signTx era bootstrapWits shelleyKeyWits (UnsignedTx unsigned) = obtainCommonConstraints era $
let currentScriptWitnesses = unsigned ^. L.witsTxL
keyWits = L.mkBasicTxWits
keyWits = obtainCommonConstraints era $ L.mkBasicTxWits
& L.addrTxWitsL
.~ Set.fromList [w | ShelleyKeyWitness _ w <- apiKeyWits]
.~ Set.fromList shelleyKeyWits
& L.bootAddrTxWitsL
.~ Set.fromList [w | ShelleyBootstrapWitness _ w <- apiKeyWits]
.~ Set.fromList bootstrapWits
signedTx = unsigned & L.witsTxL .~ (keyWits <> currentScriptWitnesses)
in signedTx

Expand All @@ -170,18 +195,25 @@ obtainCommonConstraints ConwayEra x = x
type EraCommonConstraints era
= ( L.AlonzoEraTx (ToConstrainedEra era)
, L.BabbageEraTxBody (ToConstrainedEra era)
, L.EraTx (ToConstrainedEra era)
, L.EraUTxO (ToConstrainedEra era)
, Ledger.EraCrypto (ToConstrainedEra era) ~ L.StandardCrypto
, ShelleyLedgerEra (AvailableErasToSbe era) ~ ToConstrainedEra era
-- , Ledger.EraCrypto (ToConstrainedEra era) ~ L.StandardCrypto
, L.HashAnnotated (Ledger.TxBody (ToConstrainedEra era)) EraIndependentTxBody L.StandardCrypto
)

-- Compatibility related. Will be removed once the old api has been deprecated and deleted.

-- TODO: Left off here
convertTxBodyToUnsignedTx :: TxBody era -> UnsignedTx (SbeToAvailableEras era)
convertTxBodyToUnsignedTx = error "TODO"

-- We need these constraints in order to propagate the new
-- experimental api without changing the existing api
type EraShimConstraints era =
( ToConstrainedEra (SbeToAvailableEras era) ~ ShelleyLedgerEra era
, AvailableErasToSbe (SbeToAvailableEras era) ~ era

, L.EraTx (ToConstrainedEra (SbeToAvailableEras era))
)

obtainShimConstraints
Expand Down
30 changes: 15 additions & 15 deletions cardano-api/internal/Cardano/Api/Fees.hs
Original file line number Diff line number Diff line change
Expand Up @@ -131,20 +131,20 @@ estimateOrCalculateBalancedTxBody
-> Either (AutoBalanceError era) (BalancedTxBody era)
estimateOrCalculateBalancedTxBody era feeEstMode pparams txBodyContent poolids stakeDelegDeposits drepDelegDeposits changeAddr =
case feeEstMode of
CalculateWithSpendableUTxO utxo systemstart ledgerEpochInfo mOverride -> undefined
--first AutoBalanceCalculationError $
-- makeTransactionBodyAutoBalance
-- era
-- systemstart
-- ledgerEpochInfo
-- (LedgerProtocolParameters pparams)
-- poolids
-- stakeDelegDeposits
-- drepDelegDeposits
-- utxo
-- txBodyContent
-- changeAddr
-- mOverride
CalculateWithSpendableUTxO utxo systemstart ledgerEpochInfo mOverride ->
first AutoBalanceCalculationError $
makeTransactionBodyAutoBalance
era
systemstart
ledgerEpochInfo
(LedgerProtocolParameters pparams)
poolids
stakeDelegDeposits
drepDelegDeposits
utxo
txBodyContent
changeAddr
mOverride
EstimateWithoutSpendableUTxO
totalPotentialCollateral
totalUTxOValue
Expand Down Expand Up @@ -381,7 +381,7 @@ estimateBalancedTxBody
return
( BalancedTxBody
finalTxBodyContent
undefined -- txbody3
(convertTxBodyToUnsignedTx txbody3)
(TxOut changeaddr balance TxOutDatumNone ReferenceScriptNone)
fee
)
Expand Down

0 comments on commit 54d460c

Please sign in to comment.