@@ -7,6 +7,7 @@ SPDX-License-Identifier: Apache-2.0
77package htlc
88
99import (
10+ "bytes"
1011 "encoding/json"
1112 "time"
1213
@@ -40,7 +41,7 @@ type ClaimView struct {
4041 * Claim
4142}
4243
43- func (r * ClaimView ) Call (context view.Context ) (res interface {}, err error ) {
44+ func (r * ClaimView ) Call (ctx view.Context ) (res interface {}, err error ) {
4445 var tx * htlc.Transaction
4546 defer func () {
4647 if e := recover (); e != nil {
@@ -61,7 +62,7 @@ func (r *ClaimView) Call(context view.Context) (res interface{}, err error) {
6162 // Scan for the pre-image
6263 var err error
6364 preImage , err = htlc .ScanForPreImage (
64- context ,
65+ ctx ,
6566 r .Script .HashInfo .Hash ,
6667 r .Script .HashInfo .HashFunc ,
6768 r .Script .HashInfo .HashEncoding ,
@@ -71,41 +72,56 @@ func (r *ClaimView) Call(context view.Context) (res interface{}, err error) {
7172 assert .NoError (err , "failed to receive the preImage" )
7273
7374 // double-check the value of the key
74- tms , err := token .GetManagementService (context , token .WithTMSID (r .ScriptTMSID ))
75+ tms , err := token .GetManagementService (ctx , token .WithTMSID (r .ScriptTMSID ))
7576 assert .NoError (err , "failed getting management service" )
76- network := network .GetInstance (context , tms .Network (), tms .Channel ())
77+ network := network .GetInstance (ctx , tms .Network (), tms .Channel ())
7778 assert .NotNil (network , "failed getting network" )
7879 ledger , err := network .Ledger ()
7980 assert .NoError (err , "failed getting ledger" )
8081 transferMetadataKey , err := ledger .TransferMetadataKey (htlc .ClaimKey (r .Script .HashInfo .Hash ))
8182 assert .NoError (err , "failed getting transfer metadata key" )
82- stateValues , err := ledger .GetStates (context .Context (), tms .Namespace (), transferMetadataKey )
83- assert .NoError (err , "failed getting states" )
84- assert .True (len (stateValues ) == 1 , "expected one state value" )
85- assert .Equal (preImage , stateValues [0 ], "pre-image mismatch [%s] vs [%s]" , utils .Hashable (preImage ), utils .Hashable (stateValues [0 ]))
83+
84+ // double-check the content of the ledger, retry a few time to give time to the committer
85+ runner := utils .NewRetryRunner (logger , 3 , 1 * time .Second , true )
86+ assert .NoError (err , runner .RunWithContext (ctx .Context (), func () error {
87+ logger .Debugf ("check transfer metadata key [%s]..." , transferMetadataKey )
88+ stateValues , err := ledger .GetStates (ctx .Context (), tms .Namespace (), transferMetadataKey )
89+ if err != nil {
90+ return err
91+ }
92+ logger .Debugf ("check transfer metadata key [%s], got [%v]" , transferMetadataKey , stateValues )
93+ if len (stateValues ) != 1 {
94+ return errors .Errorf ("expected 1 state, found %d" , len (stateValues ))
95+ }
96+ if ! bytes .Equal (stateValues [0 ], r .PreImage ) {
97+ return errors .Errorf ("pre-image mismatch [%s] vs [%s]" , utils .Hashable (preImage ), utils .Hashable (stateValues [0 ]))
98+ }
99+
100+ return nil
101+ }))
86102 }
87103
88- claimWallet := htlc .GetWallet (context , r .Wallet , token .WithTMSID (r .TMSID ))
104+ claimWallet := htlc .GetWallet (ctx , r .Wallet , token .WithTMSID (r .TMSID ))
89105 assert .NotNil (claimWallet , "wallet [%s] not found" , r .Wallet )
90106
91- matched , err := htlc .Wallet (context , claimWallet ).ListByPreImage (context .Context (), preImage )
107+ matched , err := htlc .Wallet (ctx , claimWallet ).ListByPreImage (ctx .Context (), preImage )
92108 assert .NoError (err , "htlc script has expired" )
93109 assert .True (matched .Count () == 1 , "expected only one htlc script to match [%s], got [%d]" , view .Identity (preImage ), matched .Count ())
94110
95- idProvider , err := id .GetProvider (context )
111+ idProvider , err := id .GetProvider (ctx )
96112 assert .NoError (err , "failed getting id provider" )
97113 tx , err = htlc .NewAnonymousTransaction (
98- context ,
114+ ctx ,
99115 ttx .WithAuditor (idProvider .Identity ("auditor" )),
100116 ttx .WithTMSID (r .TMSID ),
101117 )
102118 assert .NoError (err , "failed to create an htlc transaction" )
103119 assert .NoError (tx .Claim (claimWallet , matched .At (0 ), preImage ), "failed adding a claim for [%s]" , matched .At (0 ).Id )
104120
105- _ , err = context .RunView (htlc .NewCollectEndorsementsView (tx ))
121+ _ , err = ctx .RunView (htlc .NewCollectEndorsementsView (tx ))
106122 assert .NoError (err , "failed to collect endorsements on htlc transaction" )
107123
108- _ , err = context .RunView (htlc .NewOrderingAndFinalityView (tx ))
124+ _ , err = ctx .RunView (htlc .NewOrderingAndFinalityView (tx ))
109125 assert .NoError (err , "failed to commit htlc transaction" )
110126
111127 return tx .ID (), nil
0 commit comments