|
4 | 4 | "fmt" |
5 | 5 | "math/big" |
6 | 6 | "testing" |
| 7 | + "time" |
7 | 8 |
|
8 | 9 | "github.com/Masterminds/semver/v3" |
9 | 10 | gethcommon "github.com/ethereum/go-ethereum/common" |
@@ -68,89 +69,89 @@ func TestCanton2EVM_Basic(t *testing.T) { |
68 | 69 | require.NoError(t, err) |
69 | 70 | }) |
70 | 71 |
|
71 | | - // t.Run("EOA receiver and default committee verifier", func(t *testing.T) { |
72 | | - // subtestCtx := ccv.Plog.WithContext(t.Context()) |
73 | | - |
74 | | - // receiver, err := evmChain.GetEOAReceiverAddress() |
75 | | - // require.NoError(t, err) |
76 | | - // ccvAddr, err := tcapi.GetContractAddress( |
77 | | - // in, |
78 | | - // cantonChain.ChainSelector(), |
79 | | - // datastore.ContractType(canton_committee_verifier.ContractType), |
80 | | - // canton_committee_verifier.Version.String(), |
81 | | - // devenvcommon.DefaultCommitteeVerifierQualifier, |
82 | | - // "canton committee verifier", |
83 | | - // ) |
84 | | - // require.NoError(t, err) |
85 | | - // executorAddr, err := tcapi.GetContractAddress( |
86 | | - // in, |
87 | | - // cantonChain.ChainSelector(), |
88 | | - // datastore.ContractType(executor.ContractType), |
89 | | - // executor.Version.String(), |
90 | | - // devenvcommon.DefaultExecutorQualifier, |
91 | | - // "source executor", |
92 | | - // ) |
93 | | - // require.NoError(t, err) |
94 | | - // t.Logf( |
95 | | - // "Resolved contracts: receiver=%x cantonCCV=%x cantonExecutor=%x srcSelector=%d dstSelector=%d", |
96 | | - // receiver, |
97 | | - // ccvAddr, |
98 | | - // executorAddr, |
99 | | - // cantonChain.ChainSelector(), |
100 | | - // evmChain.ChainSelector(), |
101 | | - // ) |
102 | | - |
103 | | - // t.Logf("Sending Canton -> EVM message") |
104 | | - // msgFields := cciptestinterfaces.MessageFields{ |
105 | | - // Receiver: receiver, |
106 | | - // Data: []byte("canton2evm tcapi test"), |
107 | | - // } |
108 | | - // msgOpts := cciptestinterfaces.MessageOptions{ |
109 | | - // Version: 3, |
110 | | - // ExecutionGasLimit: 200_000, |
111 | | - // FinalityConfig: 1, |
112 | | - // Executor: executorAddr, |
113 | | - // CCVs: []protocol.CCV{ |
114 | | - // { |
115 | | - // CCVAddress: ccvAddr, |
116 | | - // Args: []byte{}, |
117 | | - // ArgsLen: 0, |
118 | | - // }, |
119 | | - // }, |
120 | | - // } |
121 | | - // cantonImpl, ok := cantonChain.(*cantondevenv.Chain) |
122 | | - // require.True(t, ok, "Canton chain implementation must be *devenv.Chain") |
123 | | - // require.NoError(t, cantonImpl.PrepareSendPrerequisites(subtestCtx, msgFields)) |
124 | | - // sendMessageResult, err := cantonChain.SendMessage(subtestCtx, evmChain.ChainSelector(), msgFields, msgOpts) |
125 | | - // require.NoError(t, err) |
126 | | - // require.NotNil(t, sendMessageResult.Message) |
127 | | - // // require.NotEmpty(t, sendMessageResult.ReceiptIssuers) |
128 | | - // seqNo := uint64(sendMessageResult.Message.SequenceNumber) |
129 | | - // t.Logf( |
130 | | - // "SendMessage accepted: seqNo=%d", |
131 | | - // seqNo, |
132 | | - // // len(sendMessageResult.ReceiptIssuers), |
133 | | - // ) |
134 | | - |
135 | | - // t.Logf("Waiting for CCIPMessageSent event: from=%d to=%d seq=%d", cantonChain.ChainSelector(), evmChain.ChainSelector(), seqNo) |
136 | | - // sentEvent, err := cantonChain.WaitOneSentEventBySeqNo(subtestCtx, evmChain.ChainSelector(), seqNo, 30*time.Second) |
137 | | - // require.NoError(t, err) |
138 | | - |
139 | | - // t.Logf("CCIPMessageSent event: %+v", sentEvent) |
140 | | - |
141 | | - // t.Logf("Asserting message propagated through aggregator/indexer: messageID=%x", sentEvent.MessageID) |
142 | | - // result := devenvtests.AssertSingleVerifierResult(t, subtestCtx, &harness, sentEvent.MessageID) |
143 | | - // t.Logf( |
144 | | - // "Message assertion succeeded: aggregated=true indexerResults=%+v", |
145 | | - // result.IndexedVerifications.Results, |
146 | | - // ) |
147 | | - |
148 | | - // t.Logf("Waiting for execution event on EVM: from=%d seq=%d", cantonChain.ChainSelector(), seqNo) |
149 | | - // ev, err := evmChain.WaitOneExecEventBySeqNo(subtestCtx, cantonChain.ChainSelector(), seqNo, tests.WaitTimeout(t)) |
150 | | - // require.NoError(t, err) |
151 | | - // assert.Equal(t, cciptestinterfaces.ExecutionStateSuccess, ev.State) |
152 | | - // t.Logf("Execution event: %+v", ev) |
153 | | - // }) |
| 72 | + t.Run("EOA receiver and default committee verifier", func(t *testing.T) { |
| 73 | + subtestCtx := ccv.Plog.WithContext(t.Context()) |
| 74 | + |
| 75 | + receiver, err := evmChain.GetEOAReceiverAddress() |
| 76 | + require.NoError(t, err) |
| 77 | + ccvAddr, err := tcapi.GetContractAddress( |
| 78 | + in, |
| 79 | + cantonChain.ChainSelector(), |
| 80 | + datastore.ContractType(canton_committee_verifier.ContractType), |
| 81 | + canton_committee_verifier.Version.String(), |
| 82 | + devenvcommon.DefaultCommitteeVerifierQualifier, |
| 83 | + "canton committee verifier", |
| 84 | + ) |
| 85 | + require.NoError(t, err) |
| 86 | + executorAddr, err := tcapi.GetContractAddress( |
| 87 | + in, |
| 88 | + cantonChain.ChainSelector(), |
| 89 | + datastore.ContractType(executor.ContractType), |
| 90 | + executor.Version.String(), |
| 91 | + devenvcommon.DefaultExecutorQualifier, |
| 92 | + "source executor", |
| 93 | + ) |
| 94 | + require.NoError(t, err) |
| 95 | + t.Logf( |
| 96 | + "Resolved contracts: receiver=%x cantonCCV=%x cantonExecutor=%x srcSelector=%d dstSelector=%d", |
| 97 | + receiver, |
| 98 | + ccvAddr, |
| 99 | + executorAddr, |
| 100 | + cantonChain.ChainSelector(), |
| 101 | + evmChain.ChainSelector(), |
| 102 | + ) |
| 103 | + |
| 104 | + t.Logf("Sending Canton -> EVM message") |
| 105 | + msgFields := cciptestinterfaces.MessageFields{ |
| 106 | + Receiver: receiver, |
| 107 | + Data: []byte("canton2evm tcapi test"), |
| 108 | + } |
| 109 | + msgOpts := cciptestinterfaces.MessageOptions{ |
| 110 | + Version: 3, |
| 111 | + ExecutionGasLimit: 200_000, |
| 112 | + FinalityConfig: 1, |
| 113 | + Executor: executorAddr, |
| 114 | + CCVs: []protocol.CCV{ |
| 115 | + { |
| 116 | + CCVAddress: ccvAddr, |
| 117 | + Args: []byte{}, |
| 118 | + ArgsLen: 0, |
| 119 | + }, |
| 120 | + }, |
| 121 | + } |
| 122 | + cantonImpl, ok := cantonChain.(*cantondevenv.Chain) |
| 123 | + require.True(t, ok, "Canton chain implementation must be *devenv.Chain") |
| 124 | + require.NoError(t, cantonImpl.PrepareSendPrerequisites(subtestCtx)) |
| 125 | + sendMessageResult, err := cantonChain.SendMessage(subtestCtx, evmChain.ChainSelector(), msgFields, msgOpts) |
| 126 | + require.NoError(t, err) |
| 127 | + require.NotNil(t, sendMessageResult.Message) |
| 128 | + // require.NotEmpty(t, sendMessageResult.ReceiptIssuers) |
| 129 | + seqNo := uint64(sendMessageResult.Message.SequenceNumber) |
| 130 | + t.Logf( |
| 131 | + "SendMessage accepted: seqNo=%d", |
| 132 | + seqNo, |
| 133 | + // len(sendMessageResult.ReceiptIssuers), |
| 134 | + ) |
| 135 | + |
| 136 | + t.Logf("Waiting for CCIPMessageSent event: from=%d to=%d seq=%d", cantonChain.ChainSelector(), evmChain.ChainSelector(), seqNo) |
| 137 | + sentEvent, err := cantonChain.WaitOneSentEventBySeqNo(subtestCtx, evmChain.ChainSelector(), seqNo, 30*time.Second) |
| 138 | + require.NoError(t, err) |
| 139 | + |
| 140 | + t.Logf("CCIPMessageSent event: %+v", sentEvent) |
| 141 | + |
| 142 | + t.Logf("Asserting message propagated through aggregator/indexer: messageID=%x", sentEvent.MessageID) |
| 143 | + result := devenvtests.AssertSingleVerifierResult(t, subtestCtx, &harness, sentEvent.MessageID) |
| 144 | + t.Logf( |
| 145 | + "Message assertion succeeded: aggregated=true indexerResults=%+v", |
| 146 | + result.IndexedVerifications.Results, |
| 147 | + ) |
| 148 | + |
| 149 | + t.Logf("Waiting for execution event on EVM: from=%d seq=%d", cantonChain.ChainSelector(), seqNo) |
| 150 | + ev, err := evmChain.WaitOneExecEventBySeqNo(subtestCtx, cantonChain.ChainSelector(), seqNo, tests.WaitTimeout(t)) |
| 151 | + require.NoError(t, err) |
| 152 | + assert.Equal(t, cciptestinterfaces.ExecutionStateSuccess, ev.State) |
| 153 | + t.Logf("Execution event: %+v", ev) |
| 154 | + }) |
154 | 155 |
|
155 | 156 | t.Run("EOA receiver and default committee verifier token transfer", func(t *testing.T) { |
156 | 157 | subtestCtx := ccv.Plog.WithContext(t.Context()) |
@@ -212,10 +213,10 @@ func TestCanton2EVM_Basic(t *testing.T) { |
212 | 213 | cantonImpl, ok := cantonChain.(*cantondevenv.Chain) |
213 | 214 | require.True(t, ok, "Canton chain implementation must be *devenv.Chain") |
214 | 215 |
|
| 216 | + require.NoError(t, cantonImpl.PrepareSendPrerequisites(subtestCtx)) |
215 | 217 | const numTokenTransfers = 2 |
216 | 218 | for i := range numTokenTransfers { |
217 | 219 | tokenMsgFields.Data = []byte(fmt.Sprintf("canton2evm token transfer #%d", i+1)) |
218 | | - require.NoError(t, cantonImpl.PrepareSendPrerequisites(subtestCtx)) |
219 | 220 | sendMessageResult, err := cantonChain.SendMessage(subtestCtx, evmChain.ChainSelector(), tokenMsgFields, tokenMsgOpts) |
220 | 221 | require.NoError(t, err) |
221 | 222 | require.NotNil(t, sendMessageResult.Message) |
|
0 commit comments