From 1211c5ee822796a4154ad9eb5d258b6abe36fe8d Mon Sep 17 00:00:00 2001 From: abicky Date: Fri, 14 Feb 2025 16:39:02 +0900 Subject: [PATCH] Add context.Context to Chain methods and Prover methods Signed-off-by: abicky --- go.mod | 6 +++--- go.sum | 12 ++++++------ module/prover.go | 33 +++++++++++++++++---------------- module/prover_test.go | 19 ++++++++++--------- tests/prover_network_test.go | 17 +++++++++-------- 5 files changed, 45 insertions(+), 42 deletions(-) diff --git a/go.mod b/go.mod index 4b4def9a..f2fb2b1b 100644 --- a/go.mod +++ b/go.mod @@ -7,10 +7,10 @@ require ( github.com/cosmos/cosmos-sdk v0.50.5 github.com/cosmos/gogoproto v1.4.11 github.com/cosmos/ibc-go/v8 v8.2.1 - github.com/datachainlab/ethereum-ibc-relay-chain v0.3.13 - github.com/datachainlab/ibc-hd-signer v0.1.1 + github.com/datachainlab/ethereum-ibc-relay-chain v0.3.16 + github.com/datachainlab/ibc-hd-signer v0.1.2 github.com/ethereum/go-ethereum v1.15.0 - github.com/hyperledger-labs/yui-relayer v0.5.10 + github.com/hyperledger-labs/yui-relayer v0.5.11 github.com/spf13/cobra v1.8.1 github.com/stretchr/testify v1.10.0 google.golang.org/protobuf v1.35.2 diff --git a/go.sum b/go.sum index 82c863ab..59999ad4 100644 --- a/go.sum +++ b/go.sum @@ -418,10 +418,10 @@ github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7Do github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= -github.com/datachainlab/ethereum-ibc-relay-chain v0.3.13 h1:RbYtraeZwN55qfbzfoDIJPK8CWWx5dWfO8CfnvS+dhk= -github.com/datachainlab/ethereum-ibc-relay-chain v0.3.13/go.mod h1:dxL5umpjncKRw7iBFE2W+dGpmmWOiggth0aQsJrtLKM= -github.com/datachainlab/ibc-hd-signer v0.1.1 h1:ws90eXVjjLcx2i6iPJu2bJ2w06tIeuSyIBfYbOIEv68= -github.com/datachainlab/ibc-hd-signer v0.1.1/go.mod h1:I1pas5LB8QupngqT05/h3u1nqhHww9OOnAwliuPEd3c= +github.com/datachainlab/ethereum-ibc-relay-chain v0.3.16 h1:C4xwZ1Pq5O+ITjP5UphpwThtTHnWiTe0V4pckEvqfwI= +github.com/datachainlab/ethereum-ibc-relay-chain v0.3.16/go.mod h1:sf+ti1uM1joxhukxIyj8oDQ5yf7d+e+nl+3vtn9f5CM= +github.com/datachainlab/ibc-hd-signer v0.1.2 h1:fWAYjMBVyM390OllX/l58mZYA7we0spEBFLYKWYTwfw= +github.com/datachainlab/ibc-hd-signer v0.1.2/go.mod h1:nwH0Z3TK/7jbu/oInGGWGRimQ+LCn6yvDyjMZrw9mR4= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -776,8 +776,8 @@ github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXM github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= -github.com/hyperledger-labs/yui-relayer v0.5.10 h1:j35SRowNfVDU3gvq4Th3Wy8ufRD5K4wbXDLQAGOgT8w= -github.com/hyperledger-labs/yui-relayer v0.5.10/go.mod h1:kJvSmuagdDsSlvbnHtEHbhmkUlAS43/ArLDwukOKSlo= +github.com/hyperledger-labs/yui-relayer v0.5.11 h1:tBDWJa96jQhxL9zLDbB94VvSgw0f8Xk9tqPuKMT3ARw= +github.com/hyperledger-labs/yui-relayer v0.5.11/go.mod h1:kJvSmuagdDsSlvbnHtEHbhmkUlAS43/ArLDwukOKSlo= github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= diff --git a/module/prover.go b/module/prover.go index b9862171..506dd55e 100644 --- a/module/prover.go +++ b/module/prover.go @@ -3,9 +3,10 @@ package module import ( "context" "fmt" + "time" + "github.com/ethereum/go-ethereum/common" "github.com/hyperledger-labs/yui-relayer/log" - "time" "github.com/ethereum/go-ethereum/crypto" @@ -50,8 +51,8 @@ func (pr *Prover) SetupForRelay(ctx context.Context) error { // CreateInitialLightClientState returns a pair of ClientState and ConsensusState based on the state of the self chain at `height`. // These states will be submitted to the counterparty chain as MsgCreateClient. // If `height` is nil, the latest finalized height is selected automatically. -func (pr *Prover) CreateInitialLightClientState(height exported.Height) (exported.ClientState, exported.ConsensusState, error) { - latestHeight, err := pr.chain.LatestHeight() +func (pr *Prover) CreateInitialLightClientState(ctx context.Context, height exported.Height) (exported.ClientState, exported.ConsensusState, error) { + latestHeight, err := pr.chain.LatestHeight(context.TODO()) if err != nil { return nil, nil, err } @@ -74,12 +75,12 @@ func (pr *Prover) CreateInitialLightClientState(height exported.Height) (exporte } // GetLatestFinalizedHeader returns the latest finalized header from the chain -func (pr *Prover) GetLatestFinalizedHeader() (out core.Header, err error) { - latestHeight, err := pr.chain.LatestHeight() +func (pr *Prover) GetLatestFinalizedHeader(ctx context.Context) (out core.Header, err error) { + latestHeight, err := pr.chain.LatestHeight(context.TODO()) if err != nil { return nil, err } - header, err := pr.GetLatestFinalizedHeaderByLatestHeight(latestHeight.GetRevisionHeight()) + header, err := pr.GetLatestFinalizedHeaderByLatestHeight(context.TODO(), latestHeight.GetRevisionHeight()) if err != nil { return nil, err } @@ -88,7 +89,7 @@ func (pr *Prover) GetLatestFinalizedHeader() (out core.Header, err error) { } // GetLatestFinalizedHeaderByLatestHeight returns the latest finalized verifiable header from the chain -func (pr *Prover) GetLatestFinalizedHeaderByLatestHeight(latestBlockNumber uint64) (core.Header, error) { +func (pr *Prover) GetLatestFinalizedHeaderByLatestHeight(ctx context.Context, latestBlockNumber uint64) (core.Header, error) { height, finalizedHeader, err := queryLatestFinalizedHeader(pr.chain.Header, latestBlockNumber) if err != nil { return nil, err @@ -98,10 +99,10 @@ func (pr *Prover) GetLatestFinalizedHeaderByLatestHeight(latestBlockNumber uint6 } // SetupHeadersForUpdate creates a new header based on a given header -func (pr *Prover) SetupHeadersForUpdate(counterparty core.FinalityAwareChain, latestFinalizedHeader core.Header) ([]core.Header, error) { +func (pr *Prover) SetupHeadersForUpdate(ctx context.Context, counterparty core.FinalityAwareChain, latestFinalizedHeader core.Header) ([]core.Header, error) { header := latestFinalizedHeader.(*Header) // LCP doesn't need height / EVM needs latest height - latestHeightOnDstChain, err := counterparty.LatestHeight() + latestHeightOnDstChain, err := counterparty.LatestHeight(context.TODO()) if err != nil { return nil, err } @@ -113,10 +114,10 @@ func (pr *Prover) SetupHeadersForUpdate(counterparty core.FinalityAwareChain, la if err = pr.chain.Codec().UnpackAny(csRes.ClientState, &cs); err != nil { return nil, err } - return pr.SetupHeadersForUpdateByLatestHeight(cs.GetLatestHeight(), header) + return pr.SetupHeadersForUpdateByLatestHeight(context.TODO(), cs.GetLatestHeight(), header) } -func (pr *Prover) SetupHeadersForUpdateByLatestHeight(clientStateLatestHeight exported.Height, latestFinalizedHeader *Header) ([]core.Header, error) { +func (pr *Prover) SetupHeadersForUpdateByLatestHeight(ctx context.Context, clientStateLatestHeight exported.Height, latestFinalizedHeader *Header) ([]core.Header, error) { queryVerifiableNeighboringEpochHeader := func(height uint64, limitHeight uint64) (core.Header, error) { ethHeaders, err := queryFinalizedHeader(pr.chain.Header, height, limitHeight) if err != nil { @@ -128,7 +129,7 @@ func (pr *Prover) SetupHeadersForUpdateByLatestHeight(clientStateLatestHeight ex } return pr.withProofAndValidators(height, ethHeaders) } - latestHeight, err := pr.chain.LatestHeight() + latestHeight, err := pr.chain.LatestHeight(context.TODO()) if err != nil { return nil, err } @@ -146,8 +147,8 @@ func (pr *Prover) ProveState(ctx core.QueryContext, path string, value []byte) ( return proof, proofHeight, err } -func (pr *Prover) CheckRefreshRequired(counterparty core.ChainInfoICS02Querier) (bool, error) { - cpQueryHeight, err := counterparty.LatestHeight() +func (pr *Prover) CheckRefreshRequired(ctx context.Context, counterparty core.ChainInfoICS02Querier) (bool, error) { + cpQueryHeight, err := counterparty.LatestHeight(context.TODO()) if err != nil { return false, fmt.Errorf("failed to get the latest height of the counterparty chain: %+v", err) } @@ -174,12 +175,12 @@ func (pr *Prover) CheckRefreshRequired(counterparty core.ChainInfoICS02Querier) } lcLastTimestamp := time.Unix(0, int64(cons.GetTimestamp())) - selfQueryHeight, err := pr.chain.LatestHeight() + selfQueryHeight, err := pr.chain.LatestHeight(context.TODO()) if err != nil { return false, fmt.Errorf("failed to get the latest height of the self chain: %+v", err) } - selfTimestamp, err := pr.chain.Timestamp(selfQueryHeight) + selfTimestamp, err := pr.chain.Timestamp(context.TODO(), selfQueryHeight) if err != nil { return false, fmt.Errorf("failed to get timestamp of the self chain: %+v", err) } diff --git a/module/prover_test.go b/module/prover_test.go index ce6462ca..52f10354 100644 --- a/module/prover_test.go +++ b/module/prover_test.go @@ -2,12 +2,13 @@ package module import ( "context" - "github.com/datachainlab/ibc-hd-signer/pkg/hd" - "github.com/hyperledger-labs/yui-relayer/log" "math/big" "testing" "time" + "github.com/datachainlab/ibc-hd-signer/pkg/hd" + "github.com/hyperledger-labs/yui-relayer/log" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" conntypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" @@ -77,11 +78,11 @@ func (c *mockChain) QueryClientConsensusState(_ core.QueryContext, height export return clienttypes.NewQueryConsensusStateResponse(anyConsensusState, nil, cHeight), nil } -func (c *mockChain) Timestamp(height exported.Height) (time.Time, error) { +func (c *mockChain) Timestamp(_ context.Context, height exported.Height) (time.Time, error) { return time.Unix(int64(c.chainTimestamp[height]), 0), nil } -func (c *mockChain) LatestHeight() (exported.Height, error) { +func (c *mockChain) LatestHeight(_ context.Context) (exported.Height, error) { return clienttypes.NewHeight(0, c.latestHeight), nil } @@ -249,26 +250,26 @@ func (ts *ProverTestSuite) TestCheckRefreshRequired() { // should refresh by trusting_period ts.chain.consensusStateTimestamp[csHeight] = uint64(now.Add(-51 * time.Second).UnixNano()) - required, err := ts.prover.CheckRefreshRequired(dst) + required, err := ts.prover.CheckRefreshRequired(context.TODO(), dst) ts.Require().NoError(err) ts.Require().True(required) // needless by trusting_period ts.chain.consensusStateTimestamp[csHeight] = uint64(now.Add(-50 * time.Second).UnixNano()) - required, err = ts.prover.CheckRefreshRequired(dst) + required, err = ts.prover.CheckRefreshRequired(context.TODO(), dst) ts.Require().NoError(err) ts.Require().False(required) // should refresh by block difference ts.chain.latestHeight = 2 ts.prover.config.RefreshBlockDifferenceThreshold = 1 - required, err = ts.prover.CheckRefreshRequired(dst) + required, err = ts.prover.CheckRefreshRequired(context.TODO(), dst) ts.Require().NoError(err) ts.Require().True(required) // needless by block difference ts.prover.config.RefreshBlockDifferenceThreshold = 2 - required, err = ts.prover.CheckRefreshRequired(dst) + required, err = ts.prover.CheckRefreshRequired(context.TODO(), dst) ts.Require().NoError(err) ts.Require().False(required) @@ -276,7 +277,7 @@ func (ts *ProverTestSuite) TestCheckRefreshRequired() { ts.chain.latestHeight = 1 ts.chain.trustedHeight = 3 ts.prover.config.RefreshBlockDifferenceThreshold = 1 - required, err = ts.prover.CheckRefreshRequired(dst) + required, err = ts.prover.CheckRefreshRequired(context.TODO(), dst) ts.Require().NoError(err) ts.Require().False(required) } diff --git a/tests/prover_network_test.go b/tests/prover_network_test.go index 727cdbf2..56b912bf 100644 --- a/tests/prover_network_test.go +++ b/tests/prover_network_test.go @@ -2,13 +2,14 @@ package tests import ( "context" + "strings" + "testing" + "time" + "github.com/datachainlab/ibc-hd-signer/pkg/hd" "github.com/datachainlab/ibc-parlia-relay/module" "github.com/hyperledger-labs/yui-relayer/config" "github.com/hyperledger-labs/yui-relayer/log" - "strings" - "testing" - "time" codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/datachainlab/ethereum-ibc-relay-chain/pkg/relay/ethereum" @@ -21,7 +22,7 @@ type dstChain struct { core.Chain } -func (d dstChain) GetLatestFinalizedHeader() (latestFinalizedHeader core.Header, err error) { +func (d dstChain) GetLatestFinalizedHeader(_ context.Context) (latestFinalizedHeader core.Header, err error) { panic("implement me") } @@ -46,7 +47,7 @@ func (ts *ProverNetworkTestSuite) SetupTest() { } func (ts *ProverNetworkTestSuite) TestQueryLatestFinalizedHeader() { - header, err := ts.prover.GetLatestFinalizedHeader() + header, err := ts.prover.GetLatestFinalizedHeader(context.TODO()) ts.Require().NoError(err) ts.Require().NoError(header.ValidateBasic()) ts.Require().Len(header.(*module.Header).Headers, 3) @@ -65,9 +66,9 @@ func (ts *ProverNetworkTestSuite) TestSetupHeadersForUpdate() { dst := dstChain{ Chain: ts.makeChain("http://localhost:8645", "ibc0"), } - header, err := ts.prover.GetLatestFinalizedHeader() + header, err := ts.prover.GetLatestFinalizedHeader(context.TODO()) ts.Require().NoError(err) - setupDone, err := ts.prover.SetupHeadersForUpdate(dst, header) + setupDone, err := ts.prover.SetupHeadersForUpdate(context.TODO(), dst, header) ts.Require().NoError(err) ts.Require().True(len(setupDone) > 0) for _, h := range setupDone { @@ -76,7 +77,7 @@ func (ts *ProverNetworkTestSuite) TestSetupHeadersForUpdate() { } func (ts *ProverNetworkTestSuite) TestSuccessCreateInitialLightClientState() { - s1, s2, err := ts.prover.CreateInitialLightClientState(nil) + s1, s2, err := ts.prover.CreateInitialLightClientState(context.TODO(), nil) ts.Require().NoError(err) cs := s1.(*module.ClientState)