Skip to content

Commit 743b379

Browse files
committed
Recompute aux data hash and re-sign CommitTx returned by hydra-node
1 parent bc92138 commit 743b379

File tree

4 files changed

+43
-2
lines changed

4 files changed

+43
-2
lines changed

spago.dhall

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
, "plutus-types"
3939
, "prelude"
4040
, "profunctor"
41+
, "profunctor-lenses"
4142
, "quickcheck"
4243
, "safely"
4344
, "strings"

src/Internal/Lib/Transaction.purs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
module HydraSdk.Internal.Lib.Transaction
2+
( fixCommitTx
3+
) where
4+
5+
import Prelude
6+
7+
import Cardano.Types (Transaction)
8+
import Cardano.Types.AuxiliaryData (hashAuxiliaryData)
9+
import Cardano.Types.Transaction (_body, _witnessSet)
10+
import Cardano.Types.TransactionBody (_auxiliaryDataHash)
11+
import Cardano.Types.TransactionWitnessSet (_vkeys)
12+
import Contract.Monad (Contract)
13+
import Contract.Transaction (signTransaction)
14+
import Data.Lens ((.~))
15+
import Data.Newtype (unwrap)
16+
17+
fixCommitTx :: Transaction -> Contract Transaction
18+
fixCommitTx = reSignTransaction <<< setAuxDataHash
19+
20+
setAuxDataHash :: Transaction -> Transaction
21+
setAuxDataHash tx =
22+
tx # _body <<< _auxiliaryDataHash .~
23+
(hashAuxiliaryData <$> (unwrap tx).auxiliaryData)
24+
25+
reSignTransaction :: Transaction -> Contract Transaction
26+
reSignTransaction tx = signTransaction (tx # _witnessSet <<< _vkeys .~ mempty)

src/Internal/NodeApi/Http.purs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,41 @@
11
module HydraSdk.Internal.NodeApi.Http
22
( commitRequest
3+
, commitRequestAff
34
) where
45

56
import Prelude
67

78
import Contract.Config (ServerConfig)
9+
import Contract.Monad (Contract)
810
import Ctl.Internal.Helpers ((<</>>))
911
import Ctl.Internal.ServerConfig (mkHttpUrl)
1012
import Data.Codec.Argonaut (encode) as CA
1113
import Data.Either (Either)
1214
import Data.Maybe (Maybe(Just))
15+
import Data.Traversable (traverse)
1316
import Effect.Aff (Aff)
17+
import Effect.Aff.Class (liftAff)
1418
import HydraSdk.Internal.Http.Error (HttpError)
1519
import HydraSdk.Internal.Http.Utils (handleResponse, postRequest)
20+
import HydraSdk.Internal.Lib.Transaction (fixCommitTx)
1621
import HydraSdk.Internal.Types.CommitRequest
1722
( HydraCommitRequest(SimpleCommitRequest, FullCommitRequest)
1823
, hydraFullCommitRequestCodec
1924
)
2025
import HydraSdk.Internal.Types.Tx (HydraTx, hydraTxCodec)
2126
import HydraSdk.Internal.Types.UtxoMap (hydraUtxoMapCodec)
2227

23-
commitRequest :: ServerConfig -> HydraCommitRequest -> Aff (Either HttpError HydraTx)
28+
commitRequest :: ServerConfig -> HydraCommitRequest -> Contract (Either HttpError HydraTx)
2429
commitRequest serverConfig req =
30+
liftAff (commitRequestAff serverConfig req) >>=
31+
traverse
32+
( \hydraTx ->
33+
fixCommitTx hydraTx.cborHex <#> \fixedTx ->
34+
hydraTx { cborHex = fixedTx }
35+
)
36+
37+
commitRequestAff :: ServerConfig -> HydraCommitRequest -> Aff (Either HttpError HydraTx)
38+
commitRequestAff serverConfig req =
2539
handleResponse hydraTxCodec <$>
2640
postRequest
2741
{ url: mkHttpUrl serverConfig <</>> "commit"

src/NodeApi.purs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module HydraSdk.NodeApi
33
, module ExportWebSocket
44
) where
55

6-
import HydraSdk.Internal.NodeApi.Http (commitRequest) as ExportHttp
6+
import HydraSdk.Internal.NodeApi.Http (commitRequest, commitRequestAff) as ExportHttp
77

88
import HydraSdk.Internal.NodeApi.WebSocket
99
( HydraNodeApiHandlers

0 commit comments

Comments
 (0)