Skip to content

Commit 2f0cf10

Browse files
committed
chore: merge changes from main
2 parents 6169f44 + d686403 commit 2f0cf10

File tree

4 files changed

+127
-34
lines changed

4 files changed

+127
-34
lines changed

cardano/gateway/.env.example

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ OGMIOS_ENDPOINT=http://127.0.0.1:1337
1212
CARDANO_CHAIN_HOST=127.0.0.1
1313
CARDANO_CHAIN_PORT=3001
1414
CARDANO_NETWORK_MAGIC=42
15-
CARDANO_EPOCH_NONCE_GENESIS="fc316b611e5233f92233b416010376dc01e296fbd9d3eb244a493ce1e0c69c4e"
15+
CARDANO_EPOCH_NONCE_GENESIS="6a79f9874589fec907f9e51d7d9203147a1ab2d8ad8d59c17c6a38459a836bb8"
1616

1717
HANDLER_JSON_PATH=/usr/src/app/cardano/offchain/deployments/handler.json
1818

cardano/onchain/lib/ibc/core/ics-004/channel_datum.ak

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use aiken/collection/list
22
use aiken/collection/pairs
3+
use aiken/primitive/int
34
use ibc/auth.{AuthToken}
45
use ibc/core/ics_004/types/channel.{Channel}
56
use ibc/core/ics_004/types/counterparty.{ChannelCounterparty}
@@ -222,10 +223,12 @@ pub fn validate_recv_packet(
222223
..input_datum.state,
223224
next_sequence_recv: expected_next_sequence_recv,
224225
packet_receipt: expected_packet_receipt,
225-
packet_acknowledgement: [
226-
Pair(packet.sequence, ack),
227-
..input_datum.state.packet_acknowledgement
228-
],
226+
packet_acknowledgement: pairs.insert_by_ascending_key(
227+
input_datum.state.packet_acknowledgement,
228+
packet.sequence,
229+
ack,
230+
int.compare,
231+
),
229232
},
230233
}
231234

@@ -238,20 +241,36 @@ pub fn validate_send_packet(
238241
packet: Packet,
239242
commitment: ByteArray,
240243
) -> Bool {
244+
// WORKAROUND: cloned output_datum required to "replace" an "apparently" unbounded list to a bounded one, or it would fail
245+
// to pass the equality check. This will make the validator to correctly pass
246+
let cloned_output_datum =
247+
ChannelDatum {
248+
..output_datum,
249+
state: ChannelDatumState {
250+
..output_datum.state,
251+
packet_commitment: pairs.map(
252+
output_datum.state.packet_commitment,
253+
fn(_k, v) { v },
254+
),
255+
},
256+
}
257+
241258
let expected_datum =
242259
ChannelDatum {
243260
..input_datum,
244261
state: ChannelDatumState {
245262
..input_datum.state,
246263
next_sequence_send: input_datum.state.next_sequence_send + 1,
247-
packet_commitment: [
248-
Pair(packet.sequence, commitment),
249-
..input_datum.state.packet_commitment
250-
],
264+
packet_commitment: pairs.insert_by_ascending_key(
265+
input_datum.state.packet_commitment,
266+
packet.sequence,
267+
commitment,
268+
int.compare,
269+
),
251270
},
252271
}
253272

254-
expected_datum == output_datum
273+
(expected_datum == cloned_output_datum)?
255274
}
256275

257276
pub fn validate_timeout_packet(

cardano/onchain/lib/ibc/core/ics-004/channel_datum_test/validate_send_packet.ak

Lines changed: 86 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -55,28 +55,103 @@ fn setup() -> (ChannelDatum, ChannelDatum, Packet, ByteArray) {
5555

5656
let output_channel_datum =
5757
ChannelDatum {
58-
..input_channel_datum,
5958
state: ChannelDatumState {
60-
..input_channel_datum.state,
59+
channel: input_channel,
6160
next_sequence_send: input_channel_datum.state.next_sequence_send + 1,
62-
packet_commitment: [
63-
Pair(packet.sequence, commitment),
64-
..input_channel_datum.state.packet_commitment
65-
],
61+
next_sequence_recv: 1,
62+
next_sequence_ack: 1,
63+
packet_commitment: [Pair(packet.sequence, commitment)],
64+
packet_receipt: [],
65+
packet_acknowledgement: [],
6666
},
67+
port_id: "port-1",
68+
token: mock_auth_token,
6769
}
6870

6971
(input_channel_datum, output_channel_datum, packet, commitment)
7072
}
7173

7274
test succeed() {
73-
let (input_datum, output_datum, packet, commitment) = setup()
75+
let input_datum_2 =
76+
ChannelDatum {
77+
state: ChannelDatumState {
78+
channel: channel_mod.new(
79+
Open,
80+
Unordered,
81+
counterparty: ChannelCounterparty {
82+
port_id: "transfer",
83+
channel_id: "channel-3",
84+
},
85+
connection_hops: ["connection-1"],
86+
version: "ics20-1",
87+
),
88+
next_sequence_send: 1,
89+
next_sequence_recv: 1,
90+
next_sequence_ack: 1,
91+
packet_commitment: [],
92+
packet_receipt: [],
93+
packet_acknowledgement: [],
94+
},
95+
port_id: "port-100",
96+
token: AuthToken {
97+
policy_id: #"0151eb42845171292d1342cdcf9ccd2a4e6236244e00dd6ccd4e826c",
98+
name: #"5217438dba7f0c1bedaeae4c467cbd01ff45d62c239b722031",
99+
},
100+
}
101+
102+
let output_datum_2 =
103+
ChannelDatum {
104+
state: ChannelDatumState {
105+
channel: channel_mod.new(
106+
Open,
107+
Unordered,
108+
counterparty: ChannelCounterparty {
109+
port_id: "transfer",
110+
channel_id: "channel-3",
111+
},
112+
connection_hops: ["connection-1"],
113+
version: "ics20-1",
114+
),
115+
next_sequence_send: 2,
116+
next_sequence_recv: 1,
117+
next_sequence_ack: 1,
118+
packet_commitment: [
119+
Pair(
120+
1,
121+
#"cf05032bc48756bdcb33b75937b4462a313732794b9573c6fd40e0690dd35d26",
122+
),
123+
],
124+
packet_receipt: [],
125+
packet_acknowledgement: [],
126+
},
127+
port_id: "port-100",
128+
token: AuthToken {
129+
policy_id: #"0151eb42845171292d1342cdcf9ccd2a4e6236244e00dd6ccd4e826c",
130+
name: #"5217438dba7f0c1bedaeae4c467cbd01ff45d62c239b722031",
131+
},
132+
}
133+
134+
let packet_2 =
135+
Packet {
136+
sequence: 1,
137+
source_port: #"706f72742d313030",
138+
source_channel: #"6368616e6e656c2d31",
139+
destination_port: "transfer",
140+
destination_channel: "channel-3",
141+
data: #"7b22616d6f756e74223a2231303030222c2264656e6f6d223a2234363532303931393566323763393964666566646362373235653933396164333236323333396139623135303939326236363637336265383664366636333662222c227265636569766572223a22636f736d6f73317963656c353361356439786b3839713376647237766d383339743276776c3038706c367a6b36222c2273656e646572223a223234373537306238626137646337323565396666333765393735376238313438623464356131323539353865646163326664343431376238227d",
142+
timeout_height: height_mod.zero_height(),
143+
timeout_timestamp: 1749555153208041341,
144+
}
145+
146+
trace @"input_datum_2": input_datum_2
147+
trace @"output_datum_2": output_datum_2
148+
trace @"packet_2": packet_2
74149

75150
channel_datum_mod.validate_send_packet(
76-
input_datum,
77-
output_datum,
78-
packet,
79-
commitment,
151+
input_datum_2,
152+
output_datum_2,
153+
packet_2,
154+
#"cf05032bc48756bdcb33b75937b4462a313732794b9573c6fd40e0690dd35d26",
80155
)
81156
}
82157

cardano/onchain/validators/spending_channel/send_packet.ak

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -136,19 +136,18 @@ validator send_packet(
136136
)
137137
expect Operator(_) = ibc_module_redeemer
138138
trace @"send_packet: tx spends module utxo"
139-
140139
and {
141-
channel_token == datum.token,
142-
auth.contain_auth_token(updated_output, datum.token),
143-
packet_mod.validate_basic(packet),
144-
is_valid_packet,
145-
packet.timeout_timestamp == 0 || latest_timestamp < packet.timeout_timestamp,
140+
(channel_token == datum.token)?,
141+
auth.contain_auth_token(updated_output, datum.token)?,
142+
packet_mod.validate_basic(packet)?,
143+
is_valid_packet?,
144+
(packet.timeout_timestamp == 0 || latest_timestamp < packet.timeout_timestamp)?,
146145
channel_datum_mod.validate_send_packet(
147146
datum,
148147
updated_datum,
149148
packet,
150149
commitment,
151-
),
150+
)?,
152151
}
153152
}
154153

@@ -261,17 +260,17 @@ validator send_packet(
261260
trace @"send_packet: tx spends module utxo"
262261

263262
and {
264-
channel_token == datum.token,
265-
auth.contain_auth_token(updated_output, datum.token),
266-
packet_mod.validate_basic(packet),
267-
is_valid_packet,
268-
packet.timeout_timestamp == 0 || latest_timestamp < packet.timeout_timestamp,
263+
(channel_token == datum.token)?,
264+
auth.contain_auth_token(updated_output, datum.token)?,
265+
packet_mod.validate_basic(packet)?,
266+
is_valid_packet?,
267+
(packet.timeout_timestamp == 0 || latest_timestamp < packet.timeout_timestamp)?,
269268
channel_datum_mod.validate_send_packet(
270269
datum,
271270
updated_datum,
272271
packet,
273272
commitment,
274-
),
273+
)?,
275274
}
276275
}
277276

0 commit comments

Comments
 (0)