@@ -73,6 +73,7 @@ import Cardano.Wallet.Primitive.Types
7373import Cardano.Wallet.Shelley.Compatibility
7474 ( Shelley
7575 , TPraosStandardCrypto
76+ , fromNetworkDiscriminant
7677 , toCardanoLovelace
7778 , toCardanoTxIn
7879 , toCardanoTxOut
@@ -111,6 +112,8 @@ import Ouroboros.Consensus.Shelley.Protocol.Crypto
111112 ( Crypto (.. ) )
112113import Ouroboros.Network.Block
113114 ( SlotNo )
115+ import Type.Reflection
116+ ( Typeable )
114117
115118import qualified Cardano.Api as Cardano
116119import qualified Cardano.Byron.Codec.Cbor as CBOR
@@ -157,17 +160,19 @@ emptyTxPayload :: Crypto c => TxPayload c
157160emptyTxPayload = TxPayload mempty mempty
158161
159162mkTx
160- :: WalletKey k
161- => TxPayload TPraosStandardCrypto
163+ :: forall (n :: NetworkDiscriminant ) k . (Typeable n , WalletKey k )
164+ => Proxy n
165+ -> TxPayload TPraosStandardCrypto
162166 -> SlotNo
163167 -- ^ Time to Live
164168 -> (k 'AddressK XPrv , Passphrase " encryption" )
165169 -- ^ Reward account
166170 -> (Address -> Maybe (k 'AddressK XPrv , Passphrase " encryption" ))
167171 -> CoinSelection
168172 -> Either ErrMkTx (Tx , SealedTx )
169- mkTx (TxPayload certs mkExtraWits) timeToLive (rewardAcnt, pwdAcnt) keyFrom cs = do
173+ mkTx proxy (TxPayload certs mkExtraWits) timeToLive (rewardAcnt, pwdAcnt) keyFrom cs = do
170174 let withdrawals = mkWithdrawals
175+ proxy
171176 (toChimericAccountRaw . getRawKey . publicKey $ rewardAcnt)
172177 (withdrawal cs)
173178
@@ -193,24 +198,25 @@ newTransactionLayer
193198 :: forall (n :: NetworkDiscriminant ) k t .
194199 ( t ~ IO Shelley
195200 , WalletKey k
201+ , Typeable n
196202 )
197203 => Proxy n
198204 -> ProtocolMagic
199205 -> EpochLength
200206 -> TransactionLayer t k
201- newTransactionLayer _proxy _protocolMagic epochLength = TransactionLayer
202- { mkStdTx = \ acc ks tip -> mkTx emptyTxPayload (defaultTTL epochLength tip) acc ks
207+ newTransactionLayer proxy _protocolMagic epochLength = TransactionLayer
208+ { mkStdTx = \ acc ks tip ->
209+ mkTx proxy emptyTxPayload (defaultTTL epochLength tip) acc ks
203210 , initDelegationSelection = _initDelegationSelection
204211 , mkDelegationJoinTx = _mkDelegationJoinTx
205212 , mkDelegationQuitTx = _mkDelegationQuitTx
206213 , decodeSignedTx = _decodeSignedTx
207- , minimumFee = _minimumFee
208- , estimateMaxNumberOfInputs = _estimateMaxNumberOfInputs
214+ , minimumFee = _minimumFee proxy
215+ , estimateMaxNumberOfInputs = _estimateMaxNumberOfInputs proxy
209216 , validateSelection = const $ return ()
210217 , allowUnbalancedTx = True
211218 }
212219 where
213-
214220 _initDelegationSelection
215221 :: FeePolicy
216222 -- Current fee policy
@@ -254,7 +260,7 @@ newTransactionLayer _proxy _protocolMagic epochLength = TransactionLayer
254260
255261 let payload = TxPayload certs mkWits
256262 let ttl = defaultTTL epochLength tip
257- mkTx payload ttl acc keyFrom cs
263+ mkTx proxy payload ttl acc keyFrom cs
258264
259265 _mkDelegationQuitTx
260266 :: (k 'AddressK XPrv , Passphrase " encryption" )
@@ -277,15 +283,17 @@ newTransactionLayer _proxy _protocolMagic epochLength = TransactionLayer
277283
278284 let payload = TxPayload certs mkWits
279285 let ttl = defaultTTL epochLength tip
280- mkTx payload ttl acc keyFrom cs
286+ mkTx proxy payload ttl acc keyFrom cs
281287
282288_estimateMaxNumberOfInputs
283- :: Quantity " byte" Word16
289+ :: forall (n :: NetworkDiscriminant ). Typeable n
290+ => Proxy n
291+ -> Quantity " byte" Word16
284292 -- ^ Transaction max size in bytes
285293 -> Word8
286294 -- ^ Number of outputs in transaction
287295 -> Word8
288- _estimateMaxNumberOfInputs (Quantity maxSize) nOuts =
296+ _estimateMaxNumberOfInputs proxy (Quantity maxSize) nOuts =
289297 fromIntegral $ bisect (lowerBound, upperBound)
290298 where
291299 bisect (! inf, ! sup)
@@ -306,7 +314,7 @@ _estimateMaxNumberOfInputs (Quantity maxSize) nOuts =
306314
307315 isTooBig nInps = size > fromIntegral maxSize
308316 where
309- size = computeTxSize Nothing sel
317+ size = computeTxSize proxy Nothing sel
310318 sel = dummyCoinSel nInps (fromIntegral nOuts)
311319
312320dummyCoinSel :: Int -> Int -> CoinSelection
@@ -346,12 +354,14 @@ _decodeSignedTx bytes = do
346354 Left $ ErrDecodeSignedTxWrongPayload (Cardano. renderApiError apiErr)
347355
348356_minimumFee
349- :: FeePolicy
357+ :: forall (n :: NetworkDiscriminant ). Typeable n
358+ => Proxy (n :: NetworkDiscriminant )
359+ -> FeePolicy
350360 -> Maybe DelegationAction
351361 -> CoinSelection
352362 -> Fee
353- _minimumFee policy action cs =
354- computeFee $ computeTxSize action cs
363+ _minimumFee proxy policy action cs =
364+ computeFee $ computeTxSize proxy action cs
355365 where
356366 computeFee :: Integer -> Fee
357367 computeFee size =
@@ -360,10 +370,12 @@ _minimumFee policy action cs =
360370 LinearFee (Quantity a) (Quantity b) _unused = policy
361371
362372computeTxSize
363- :: Maybe DelegationAction
373+ :: forall (n :: NetworkDiscriminant ). Typeable n
374+ => Proxy (n :: NetworkDiscriminant )
375+ -> Maybe DelegationAction
364376 -> CoinSelection
365377 -> Integer
366- computeTxSize action cs =
378+ computeTxSize proxy action cs =
367379 SL. txsize $ SL. Tx unsigned wits metadata
368380 where
369381 metadata = SL. SNothing
@@ -397,6 +409,7 @@ computeTxSize action cs =
397409 dummyKeyHashRaw = BS. pack (replicate 28 0 )
398410
399411 withdrawals = mkWithdrawals
412+ proxy
400413 (ChimericAccount dummyKeyHashRaw)
401414 (withdrawal cs)
402415
@@ -459,20 +472,21 @@ mkUnsignedTx ttl cs withdrawals certs =
459472 unsigned
460473
461474mkWithdrawals
462- :: ChimericAccount
475+ :: forall (n :: NetworkDiscriminant ). (Typeable n )
476+ => Proxy n
477+ -> ChimericAccount
463478 -> Word64
464479 -> Map (SL. RewardAcnt TPraosStandardCrypto ) SL. Coin
465- mkWithdrawals (ChimericAccount keyHash) amount
480+ mkWithdrawals proxy (ChimericAccount keyHash) amount
466481 | amount == 0 = mempty
467482 | otherwise = Map. fromList
468- [ ( SL. RewardAcnt SL. Mainnet keyHashObj
483+ [ ( SL. RewardAcnt (fromNetworkDiscriminant proxy) keyHashObj
469484 , SL. Coin $ fromIntegral amount
470485 )
471486 ]
472487 where
473488 keyHashObj = SL. KeyHashObj $ SL. KeyHash $ Hash. UnsafeHash keyHash
474489
475-
476490-- TODO: The SlotId-SlotNo conversion based on epoch length would not
477491-- work if the epoch length changed in a hard fork.
478492
0 commit comments