Skip to content

Commit

Permalink
refactoring of signTransaction - part 1
Browse files Browse the repository at this point in the history
clean and remove duplication
  • Loading branch information
paweljakubas committed Jan 26, 2022
1 parent 3200463 commit 2ed6aa8
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 5 deletions.
Expand Up @@ -1110,7 +1110,7 @@ spec = describe "NEW_SHELLEY_TRANSACTIONS" $ do
[ expectResponseCode HTTP.status202
, expectField #certificates (`shouldBe` [registerStakeKeyCert, delegatingCert])
]

{--
-- Submit tx
submittedTx1 <- submitTxWithWid ctx src signedTx1
verify submittedTx1
Expand Down Expand Up @@ -1307,7 +1307,7 @@ spec = describe "NEW_SHELLEY_TRANSACTIONS" $ do
>>= flip verify
[ expectField #delegation (`shouldBe` notDelegating [])
]

--}
it "TRANS_NEW_JOIN_01b - Invalid pool id" $ \ctx -> runResourceT $ do

wa <- fixtureWallet ctx
Expand Down
20 changes: 20 additions & 0 deletions lib/shelley/src/Cardano/Wallet/Shelley/Compatibility.hs
Expand Up @@ -65,6 +65,7 @@ module Cardano.Wallet.Shelley.Compatibility
, fromCardanoTxIn
, fromCardanoTxOut
, fromCardanoWdrls
, fromCardanoCerts
, toCardanoTxOut
, toCardanoLovelace
, toStakeKeyRegCert
Expand Down Expand Up @@ -1277,6 +1278,25 @@ fromCardanoWdrls = \case
, fromCardanoLovelace coin
)

fromCardanoCerts
:: Cardano.TxCertificates build era
-> [W.RewardAccount]
fromCardanoCerts = \case
Cardano.TxCertificatesNone -> []
Cardano.TxCertificates _era certs _witsMap ->
mapMaybe f certs
where
toRewardAccount = Just . fromStakeCredential . Cardano.toShelleyStakeCredential
f = \case
Cardano.StakeAddressRegistrationCertificate cred ->
toRewardAccount cred
Cardano.StakeAddressDeregistrationCertificate cred ->
toRewardAccount cred
Cardano.StakeAddressDelegationCertificate cred _ ->
toRewardAccount cred
_ ->
Nothing

fromShelleyTxOut
:: ( Era era
, SL.Core.Value era ~ SL.Coin
Expand Down
10 changes: 7 additions & 3 deletions lib/shelley/src/Cardano/Wallet/Shelley/Transaction.hs
Expand Up @@ -137,6 +137,7 @@ import Cardano.Wallet.Primitive.Types.Tx
)
import Cardano.Wallet.Shelley.Compatibility
( fromCardanoAddress
, fromCardanoCerts
, fromCardanoLovelace
, fromCardanoTx
, fromCardanoTxIn
Expand Down Expand Up @@ -249,6 +250,7 @@ import qualified Data.Sequence.Strict as StrictSeq
import qualified Data.Set as Set
import qualified Data.Text as T


-- | Type encapsulating what we need to know to add things -- payloads,
-- certificates -- to a transaction.
--
Expand Down Expand Up @@ -408,7 +410,7 @@ signTransaction networkId resolveRewardAcct resolveAddress resolveInput (body, w
[ wits
, mapMaybe mkTxInWitness inputs
, mapMaybe mkTxInWitness collaterals
, mapMaybe mkWdrlWitness wdrls
, mapMaybe mkWdrlCertWitness wdrls
, mapMaybe mkExtraWitness extraKeys
-- TODO: delegation certificates & key-deregistrations
]
Expand Down Expand Up @@ -438,6 +440,8 @@ signTransaction networkId resolveRewardAcct resolveAddress resolveInput (body, w
| (addr, _) <- fromCardanoWdrls $ Cardano.txWithdrawals bodyContent
]

certs = take 1 $ fromCardanoCerts $ Cardano.txCertificates bodyContent

mkTxInWitness :: TxIn -> Maybe (Cardano.KeyWitness era)
mkTxInWitness i = do
addr <- resolveInput i
Expand All @@ -448,8 +452,8 @@ signTransaction networkId resolveRewardAcct resolveAddress resolveInput (body, w
TxWitnessByronUTxO{} ->
mkByronWitness body networkId addr (getRawKey k, pwd)

mkWdrlWitness :: RewardAccount -> Maybe (Cardano.KeyWitness era)
mkWdrlWitness a = do
mkWdrlCertWitness :: RewardAccount -> Maybe (Cardano.KeyWitness era)
mkWdrlCertWitness a = do
mkShelleyWitness body <$> resolveRewardAcct a

mkExtraWitness :: Cardano.Hash Cardano.PaymentKey -> Maybe (Cardano.KeyWitness era)
Expand Down

0 comments on commit 2ed6aa8

Please sign in to comment.