s402 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,338 @@
1
+ [
2
+ {
3
+ "description": "Minimal exact requirements",
4
+ "input": {
5
+ "s402Version": "1",
6
+ "accepts": [
7
+ "exact"
8
+ ],
9
+ "network": "sui:mainnet",
10
+ "asset": "0x2::sui::SUI",
11
+ "amount": "1000000",
12
+ "payTo": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890"
13
+ },
14
+ "expected": {
15
+ "header": "eyJzNDAyVmVyc2lvbiI6IjEiLCJhY2NlcHRzIjpbImV4YWN0Il0sIm5ldHdvcmsiOiJzdWk6bWFpbm5ldCIsImFzc2V0IjoiMHgyOjpzdWk6OlNVSSIsImFtb3VudCI6IjEwMDAwMDAiLCJwYXlUbyI6IjB4YWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MCJ9"
16
+ },
17
+ "shouldReject": false
18
+ },
19
+ {
20
+ "description": "Stream scheme with extras",
21
+ "input": {
22
+ "s402Version": "1",
23
+ "accepts": [
24
+ "stream"
25
+ ],
26
+ "network": "sui:mainnet",
27
+ "asset": "0x2::sui::SUI",
28
+ "amount": "1000000",
29
+ "payTo": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
30
+ "stream": {
31
+ "ratePerSecond": "1000",
32
+ "budgetCap": "100000000",
33
+ "minDeposit": "10000000"
34
+ }
35
+ },
36
+ "expected": {
37
+ "header": "eyJzNDAyVmVyc2lvbiI6IjEiLCJhY2NlcHRzIjpbInN0cmVhbSJdLCJuZXR3b3JrIjoic3VpOm1haW5uZXQiLCJhc3NldCI6IjB4Mjo6c3VpOjpTVUkiLCJhbW91bnQiOiIxMDAwMDAwIiwicGF5VG8iOiIweGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTAiLCJzdHJlYW0iOnsicmF0ZVBlclNlY29uZCI6IjEwMDAiLCJidWRnZXRDYXAiOiIxMDAwMDAwMDAiLCJtaW5EZXBvc2l0IjoiMTAwMDAwMDAifX0="
38
+ },
39
+ "shouldReject": false
40
+ },
41
+ {
42
+ "description": "Escrow scheme with extras",
43
+ "input": {
44
+ "s402Version": "1",
45
+ "accepts": [
46
+ "escrow"
47
+ ],
48
+ "network": "sui:mainnet",
49
+ "asset": "0x2::sui::SUI",
50
+ "amount": "1000000",
51
+ "payTo": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
52
+ "escrow": {
53
+ "seller": "0xseller1234567890",
54
+ "deadlineMs": "1700000000000"
55
+ }
56
+ },
57
+ "expected": {
58
+ "header": "eyJzNDAyVmVyc2lvbiI6IjEiLCJhY2NlcHRzIjpbImVzY3JvdyJdLCJuZXR3b3JrIjoic3VpOm1haW5uZXQiLCJhc3NldCI6IjB4Mjo6c3VpOjpTVUkiLCJhbW91bnQiOiIxMDAwMDAwIiwicGF5VG8iOiIweGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTAiLCJlc2Nyb3ciOnsic2VsbGVyIjoiMHhzZWxsZXIxMjM0NTY3ODkwIiwiZGVhZGxpbmVNcyI6IjE3MDAwMDAwMDAwMDAifX0="
59
+ },
60
+ "shouldReject": false
61
+ },
62
+ {
63
+ "description": "Unlock scheme with extras",
64
+ "input": {
65
+ "s402Version": "1",
66
+ "accepts": [
67
+ "unlock"
68
+ ],
69
+ "network": "sui:mainnet",
70
+ "asset": "0x2::sui::SUI",
71
+ "amount": "1000000",
72
+ "payTo": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
73
+ "unlock": {
74
+ "encryptionId": "enc-abc-123",
75
+ "walrusBlobId": "blob-xyz-789",
76
+ "encryptionPackageId": "0xpkg1234567890"
77
+ }
78
+ },
79
+ "expected": {
80
+ "header": "eyJzNDAyVmVyc2lvbiI6IjEiLCJhY2NlcHRzIjpbInVubG9jayJdLCJuZXR3b3JrIjoic3VpOm1haW5uZXQiLCJhc3NldCI6IjB4Mjo6c3VpOjpTVUkiLCJhbW91bnQiOiIxMDAwMDAwIiwicGF5VG8iOiIweGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTAiLCJ1bmxvY2siOnsiZW5jcnlwdGlvbklkIjoiZW5jLWFiYy0xMjMiLCJ3YWxydXNCbG9iSWQiOiJibG9iLXh5ei03ODkiLCJlbmNyeXB0aW9uUGFja2FnZUlkIjoiMHhwa2cxMjM0NTY3ODkwIn19"
81
+ },
82
+ "shouldReject": false
83
+ },
84
+ {
85
+ "description": "Prepaid v0.2 (providerPubkey + disputeWindowMs)",
86
+ "input": {
87
+ "s402Version": "1",
88
+ "accepts": [
89
+ "prepaid"
90
+ ],
91
+ "network": "sui:mainnet",
92
+ "asset": "0x2::sui::SUI",
93
+ "amount": "1000000",
94
+ "payTo": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
95
+ "prepaid": {
96
+ "ratePerCall": "5000",
97
+ "minDeposit": "500000",
98
+ "withdrawalDelayMs": "3600000",
99
+ "providerPubkey": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2",
100
+ "disputeWindowMs": "86400000"
101
+ }
102
+ },
103
+ "expected": {
104
+ "header": "eyJzNDAyVmVyc2lvbiI6IjEiLCJhY2NlcHRzIjpbInByZXBhaWQiXSwibmV0d29yayI6InN1aTptYWlubmV0IiwiYXNzZXQiOiIweDI6OnN1aTo6U1VJIiwiYW1vdW50IjoiMTAwMDAwMCIsInBheVRvIjoiMHhhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwIiwicHJlcGFpZCI6eyJyYXRlUGVyQ2FsbCI6IjUwMDAiLCJtaW5EZXBvc2l0IjoiNTAwMDAwIiwid2l0aGRyYXdhbERlbGF5TXMiOiIzNjAwMDAwIiwicHJvdmlkZXJQdWJrZXkiOiJhMWIyYzNkNGU1ZjZhMWIyYzNkNGU1ZjZhMWIyYzNkNGU1ZjZhMWIyYzNkNGU1ZjZhMWIyYzNkNGU1ZjZhMWIyIiwiZGlzcHV0ZVdpbmRvd01zIjoiODY0MDAwMDAifX0="
105
+ },
106
+ "shouldReject": false
107
+ },
108
+ {
109
+ "description": "Prepaid v0.1 (no providerPubkey/disputeWindowMs)",
110
+ "input": {
111
+ "s402Version": "1",
112
+ "accepts": [
113
+ "prepaid"
114
+ ],
115
+ "network": "sui:mainnet",
116
+ "asset": "0x2::sui::SUI",
117
+ "amount": "1000000",
118
+ "payTo": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
119
+ "prepaid": {
120
+ "ratePerCall": "5000",
121
+ "minDeposit": "500000",
122
+ "withdrawalDelayMs": "3600000"
123
+ }
124
+ },
125
+ "expected": {
126
+ "header": "eyJzNDAyVmVyc2lvbiI6IjEiLCJhY2NlcHRzIjpbInByZXBhaWQiXSwibmV0d29yayI6InN1aTptYWlubmV0IiwiYXNzZXQiOiIweDI6OnN1aTo6U1VJIiwiYW1vdW50IjoiMTAwMDAwMCIsInBheVRvIjoiMHhhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwIiwicHJlcGFpZCI6eyJyYXRlUGVyQ2FsbCI6IjUwMDAiLCJtaW5EZXBvc2l0IjoiNTAwMDAwIiwid2l0aGRyYXdhbERlbGF5TXMiOiIzNjAwMDAwIn19"
127
+ },
128
+ "shouldReject": false
129
+ },
130
+ {
131
+ "description": "With mandate (required: true, minPerTx set)",
132
+ "input": {
133
+ "s402Version": "1",
134
+ "accepts": [
135
+ "exact"
136
+ ],
137
+ "network": "sui:mainnet",
138
+ "asset": "0x2::sui::SUI",
139
+ "amount": "1000000",
140
+ "payTo": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
141
+ "mandate": {
142
+ "required": true,
143
+ "minPerTx": "100000"
144
+ }
145
+ },
146
+ "expected": {
147
+ "header": "eyJzNDAyVmVyc2lvbiI6IjEiLCJhY2NlcHRzIjpbImV4YWN0Il0sIm5ldHdvcmsiOiJzdWk6bWFpbm5ldCIsImFzc2V0IjoiMHgyOjpzdWk6OlNVSSIsImFtb3VudCI6IjEwMDAwMDAiLCJwYXlUbyI6IjB4YWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MCIsIm1hbmRhdGUiOnsicmVxdWlyZWQiOnRydWUsIm1pblBlclR4IjoiMTAwMDAwIn19"
148
+ },
149
+ "shouldReject": false
150
+ },
151
+ {
152
+ "description": "With protocolFeeBps and protocolFeeAddress",
153
+ "input": {
154
+ "s402Version": "1",
155
+ "accepts": [
156
+ "exact"
157
+ ],
158
+ "network": "sui:mainnet",
159
+ "asset": "0x2::sui::SUI",
160
+ "amount": "1000000",
161
+ "payTo": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
162
+ "protocolFeeBps": 250,
163
+ "protocolFeeAddress": "0xfee_collector_address_1234567890"
164
+ },
165
+ "expected": {
166
+ "header": "eyJzNDAyVmVyc2lvbiI6IjEiLCJhY2NlcHRzIjpbImV4YWN0Il0sIm5ldHdvcmsiOiJzdWk6bWFpbm5ldCIsImFzc2V0IjoiMHgyOjpzdWk6OlNVSSIsImFtb3VudCI6IjEwMDAwMDAiLCJwYXlUbyI6IjB4YWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MCIsInByb3RvY29sRmVlQnBzIjoyNTAsInByb3RvY29sRmVlQWRkcmVzcyI6IjB4ZmVlX2NvbGxlY3Rvcl9hZGRyZXNzXzEyMzQ1Njc4OTAifQ=="
167
+ },
168
+ "shouldReject": false
169
+ },
170
+ {
171
+ "description": "With facilitatorUrl",
172
+ "input": {
173
+ "s402Version": "1",
174
+ "accepts": [
175
+ "exact"
176
+ ],
177
+ "network": "sui:mainnet",
178
+ "asset": "0x2::sui::SUI",
179
+ "amount": "1000000",
180
+ "payTo": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
181
+ "facilitatorUrl": "https://facilitator.example.com/settle"
182
+ },
183
+ "expected": {
184
+ "header": "eyJzNDAyVmVyc2lvbiI6IjEiLCJhY2NlcHRzIjpbImV4YWN0Il0sIm5ldHdvcmsiOiJzdWk6bWFpbm5ldCIsImFzc2V0IjoiMHgyOjpzdWk6OlNVSSIsImFtb3VudCI6IjEwMDAwMDAiLCJwYXlUbyI6IjB4YWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MCIsImZhY2lsaXRhdG9yVXJsIjoiaHR0cHM6Ly9mYWNpbGl0YXRvci5leGFtcGxlLmNvbS9zZXR0bGUifQ=="
185
+ },
186
+ "shouldReject": false
187
+ },
188
+ {
189
+ "description": "With expiresAt",
190
+ "input": {
191
+ "s402Version": "1",
192
+ "accepts": [
193
+ "exact"
194
+ ],
195
+ "network": "sui:mainnet",
196
+ "asset": "0x2::sui::SUI",
197
+ "amount": "1000000",
198
+ "payTo": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
199
+ "expiresAt": 1700000000000
200
+ },
201
+ "expected": {
202
+ "header": "eyJzNDAyVmVyc2lvbiI6IjEiLCJhY2NlcHRzIjpbImV4YWN0Il0sIm5ldHdvcmsiOiJzdWk6bWFpbm5ldCIsImFzc2V0IjoiMHgyOjpzdWk6OlNVSSIsImFtb3VudCI6IjEwMDAwMDAiLCJwYXlUbyI6IjB4YWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MCIsImV4cGlyZXNBdCI6MTcwMDAwMDAwMDAwMH0="
203
+ },
204
+ "shouldReject": false
205
+ },
206
+ {
207
+ "description": "With extensions (unknown fields preserved)",
208
+ "input": {
209
+ "s402Version": "1",
210
+ "accepts": [
211
+ "exact"
212
+ ],
213
+ "network": "sui:mainnet",
214
+ "asset": "0x2::sui::SUI",
215
+ "amount": "1000000",
216
+ "payTo": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
217
+ "extensions": {
218
+ "auction": {
219
+ "type": "sealed-bid",
220
+ "deadline": 1708000000000
221
+ },
222
+ "customField": "hello world"
223
+ }
224
+ },
225
+ "expected": {
226
+ "header": "eyJzNDAyVmVyc2lvbiI6IjEiLCJhY2NlcHRzIjpbImV4YWN0Il0sIm5ldHdvcmsiOiJzdWk6bWFpbm5ldCIsImFzc2V0IjoiMHgyOjpzdWk6OlNVSSIsImFtb3VudCI6IjEwMDAwMDAiLCJwYXlUbyI6IjB4YWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MCIsImV4dGVuc2lvbnMiOnsiYXVjdGlvbiI6eyJ0eXBlIjoic2VhbGVkLWJpZCIsImRlYWRsaW5lIjoxNzA4MDAwMDAwMDAwfSwiY3VzdG9tRmllbGQiOiJoZWxsbyB3b3JsZCJ9fQ=="
227
+ },
228
+ "shouldReject": false
229
+ },
230
+ {
231
+ "description": "With settlementMode: direct",
232
+ "input": {
233
+ "s402Version": "1",
234
+ "accepts": [
235
+ "exact"
236
+ ],
237
+ "network": "sui:mainnet",
238
+ "asset": "0x2::sui::SUI",
239
+ "amount": "1000000",
240
+ "payTo": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
241
+ "settlementMode": "direct"
242
+ },
243
+ "expected": {
244
+ "header": "eyJzNDAyVmVyc2lvbiI6IjEiLCJhY2NlcHRzIjpbImV4YWN0Il0sIm5ldHdvcmsiOiJzdWk6bWFpbm5ldCIsImFzc2V0IjoiMHgyOjpzdWk6OlNVSSIsImFtb3VudCI6IjEwMDAwMDAiLCJwYXlUbyI6IjB4YWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MCIsInNldHRsZW1lbnRNb2RlIjoiZGlyZWN0In0="
245
+ },
246
+ "shouldReject": false
247
+ },
248
+ {
249
+ "description": "With settlementMode: facilitator",
250
+ "input": {
251
+ "s402Version": "1",
252
+ "accepts": [
253
+ "exact"
254
+ ],
255
+ "network": "sui:mainnet",
256
+ "asset": "0x2::sui::SUI",
257
+ "amount": "1000000",
258
+ "payTo": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
259
+ "settlementMode": "facilitator",
260
+ "facilitatorUrl": "https://facilitator.example.com/settle"
261
+ },
262
+ "expected": {
263
+ "header": "eyJzNDAyVmVyc2lvbiI6IjEiLCJhY2NlcHRzIjpbImV4YWN0Il0sIm5ldHdvcmsiOiJzdWk6bWFpbm5ldCIsImFzc2V0IjoiMHgyOjpzdWk6OlNVSSIsImFtb3VudCI6IjEwMDAwMDAiLCJwYXlUbyI6IjB4YWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MCIsInNldHRsZW1lbnRNb2RlIjoiZmFjaWxpdGF0b3IiLCJmYWNpbGl0YXRvclVybCI6Imh0dHBzOi8vZmFjaWxpdGF0b3IuZXhhbXBsZS5jb20vc2V0dGxlIn0="
264
+ },
265
+ "shouldReject": false
266
+ },
267
+ {
268
+ "description": "With receiptRequired: true",
269
+ "input": {
270
+ "s402Version": "1",
271
+ "accepts": [
272
+ "exact"
273
+ ],
274
+ "network": "sui:mainnet",
275
+ "asset": "0x2::sui::SUI",
276
+ "amount": "1000000",
277
+ "payTo": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
278
+ "receiptRequired": true
279
+ },
280
+ "expected": {
281
+ "header": "eyJzNDAyVmVyc2lvbiI6IjEiLCJhY2NlcHRzIjpbImV4YWN0Il0sIm5ldHdvcmsiOiJzdWk6bWFpbm5ldCIsImFzc2V0IjoiMHgyOjpzdWk6OlNVSSIsImFtb3VudCI6IjEwMDAwMDAiLCJwYXlUbyI6IjB4YWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MCIsInJlY2VpcHRSZXF1aXJlZCI6dHJ1ZX0="
282
+ },
283
+ "shouldReject": false
284
+ },
285
+ {
286
+ "description": "Multiple schemes in accepts array",
287
+ "input": {
288
+ "s402Version": "1",
289
+ "accepts": [
290
+ "exact",
291
+ "prepaid",
292
+ "stream"
293
+ ],
294
+ "network": "sui:mainnet",
295
+ "asset": "0x2::sui::SUI",
296
+ "amount": "1000000",
297
+ "payTo": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890"
298
+ },
299
+ "expected": {
300
+ "header": "eyJzNDAyVmVyc2lvbiI6IjEiLCJhY2NlcHRzIjpbImV4YWN0IiwicHJlcGFpZCIsInN0cmVhbSJdLCJuZXR3b3JrIjoic3VpOm1haW5uZXQiLCJhc3NldCI6IjB4Mjo6c3VpOjpTVUkiLCJhbW91bnQiOiIxMDAwMDAwIiwicGF5VG8iOiIweGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTAifQ=="
301
+ },
302
+ "shouldReject": false
303
+ },
304
+ {
305
+ "description": "Amount at u64 boundary (2^64-1)",
306
+ "input": {
307
+ "s402Version": "1",
308
+ "accepts": [
309
+ "exact"
310
+ ],
311
+ "network": "sui:mainnet",
312
+ "asset": "0x2::sui::SUI",
313
+ "amount": "18446744073709551615",
314
+ "payTo": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890"
315
+ },
316
+ "expected": {
317
+ "header": "eyJzNDAyVmVyc2lvbiI6IjEiLCJhY2NlcHRzIjpbImV4YWN0Il0sIm5ldHdvcmsiOiJzdWk6bWFpbm5ldCIsImFzc2V0IjoiMHgyOjpzdWk6OlNVSSIsImFtb3VudCI6IjE4NDQ2NzQ0MDczNzA5NTUxNjE1IiwicGF5VG8iOiIweGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTAifQ=="
318
+ },
319
+ "shouldReject": false
320
+ },
321
+ {
322
+ "description": "Amount of zero",
323
+ "input": {
324
+ "s402Version": "1",
325
+ "accepts": [
326
+ "exact"
327
+ ],
328
+ "network": "sui:mainnet",
329
+ "asset": "0x2::sui::SUI",
330
+ "amount": "0",
331
+ "payTo": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890"
332
+ },
333
+ "expected": {
334
+ "header": "eyJzNDAyVmVyc2lvbiI6IjEiLCJhY2NlcHRzIjpbImV4YWN0Il0sIm5ldHdvcmsiOiJzdWk6bWFpbm5ldCIsImFzc2V0IjoiMHgyOjpzdWk6OlNVSSIsImFtb3VudCI6IjAiLCJwYXlUbyI6IjB4YWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MCJ9"
335
+ },
336
+ "shouldReject": false
337
+ }
338
+ ]
@@ -0,0 +1,156 @@
1
+ [
2
+ {
3
+ "description": "Requirements header roundtrip: encode → decode → re-encode = identical",
4
+ "input": {
5
+ "type": "requirements",
6
+ "transport": "header",
7
+ "value": {
8
+ "s402Version": "1",
9
+ "accepts": [
10
+ "exact"
11
+ ],
12
+ "network": "sui:mainnet",
13
+ "asset": "0x2::sui::SUI",
14
+ "amount": "1000000",
15
+ "payTo": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890"
16
+ }
17
+ },
18
+ "expected": {
19
+ "firstEncode": "eyJzNDAyVmVyc2lvbiI6IjEiLCJhY2NlcHRzIjpbImV4YWN0Il0sIm5ldHdvcmsiOiJzdWk6bWFpbm5ldCIsImFzc2V0IjoiMHgyOjpzdWk6OlNVSSIsImFtb3VudCI6IjEwMDAwMDAiLCJwYXlUbyI6IjB4YWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MCJ9",
20
+ "reEncode": "eyJzNDAyVmVyc2lvbiI6IjEiLCJhY2NlcHRzIjpbImV4YWN0Il0sIm5ldHdvcmsiOiJzdWk6bWFpbm5ldCIsImFzc2V0IjoiMHgyOjpzdWk6OlNVSSIsImFtb3VudCI6IjEwMDAwMDAiLCJwYXlUbyI6IjB4YWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MCJ9",
21
+ "identical": true
22
+ },
23
+ "shouldReject": false
24
+ },
25
+ {
26
+ "description": "Requirements body roundtrip: encode → decode → re-encode = identical",
27
+ "input": {
28
+ "type": "requirements",
29
+ "transport": "body",
30
+ "value": {
31
+ "s402Version": "1",
32
+ "accepts": [
33
+ "exact"
34
+ ],
35
+ "network": "sui:mainnet",
36
+ "asset": "0x2::sui::SUI",
37
+ "amount": "1000000",
38
+ "payTo": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890"
39
+ }
40
+ },
41
+ "expected": {
42
+ "firstEncode": "{\"s402Version\":\"1\",\"accepts\":[\"exact\"],\"network\":\"sui:mainnet\",\"asset\":\"0x2::sui::SUI\",\"amount\":\"1000000\",\"payTo\":\"0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890\"}",
43
+ "reEncode": "{\"s402Version\":\"1\",\"accepts\":[\"exact\"],\"network\":\"sui:mainnet\",\"asset\":\"0x2::sui::SUI\",\"amount\":\"1000000\",\"payTo\":\"0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890\"}",
44
+ "identical": true
45
+ },
46
+ "shouldReject": false
47
+ },
48
+ {
49
+ "description": "Payload header roundtrip: encode → decode → re-encode = identical",
50
+ "input": {
51
+ "type": "payload",
52
+ "transport": "header",
53
+ "value": {
54
+ "s402Version": "1",
55
+ "scheme": "exact",
56
+ "payload": {
57
+ "transaction": "dHhfYnl0ZXM=",
58
+ "signature": "c2lnX2J5dGVz"
59
+ }
60
+ }
61
+ },
62
+ "expected": {
63
+ "firstEncode": "eyJzNDAyVmVyc2lvbiI6IjEiLCJzY2hlbWUiOiJleGFjdCIsInBheWxvYWQiOnsidHJhbnNhY3Rpb24iOiJkSGhmWW5sMFpYTT0iLCJzaWduYXR1cmUiOiJjMmxuWDJKNWRHVnoifX0=",
64
+ "reEncode": "eyJzNDAyVmVyc2lvbiI6IjEiLCJzY2hlbWUiOiJleGFjdCIsInBheWxvYWQiOnsidHJhbnNhY3Rpb24iOiJkSGhmWW5sMFpYTT0iLCJzaWduYXR1cmUiOiJjMmxuWDJKNWRHVnoifX0=",
65
+ "identical": true
66
+ },
67
+ "shouldReject": false
68
+ },
69
+ {
70
+ "description": "Payload body roundtrip: encode → decode → re-encode = identical",
71
+ "input": {
72
+ "type": "payload",
73
+ "transport": "body",
74
+ "value": {
75
+ "s402Version": "1",
76
+ "scheme": "exact",
77
+ "payload": {
78
+ "transaction": "dHhfYnl0ZXM=",
79
+ "signature": "c2lnX2J5dGVz"
80
+ }
81
+ }
82
+ },
83
+ "expected": {
84
+ "firstEncode": "{\"s402Version\":\"1\",\"scheme\":\"exact\",\"payload\":{\"transaction\":\"dHhfYnl0ZXM=\",\"signature\":\"c2lnX2J5dGVz\"}}",
85
+ "reEncode": "{\"s402Version\":\"1\",\"scheme\":\"exact\",\"payload\":{\"transaction\":\"dHhfYnl0ZXM=\",\"signature\":\"c2lnX2J5dGVz\"}}",
86
+ "identical": true
87
+ },
88
+ "shouldReject": false
89
+ },
90
+ {
91
+ "description": "Settle header roundtrip: encode → decode → re-encode = identical",
92
+ "input": {
93
+ "type": "settle",
94
+ "transport": "header",
95
+ "value": {
96
+ "success": true,
97
+ "txDigest": "ABC123",
98
+ "finalityMs": 300
99
+ }
100
+ },
101
+ "expected": {
102
+ "firstEncode": "eyJzdWNjZXNzIjp0cnVlLCJ0eERpZ2VzdCI6IkFCQzEyMyIsImZpbmFsaXR5TXMiOjMwMH0=",
103
+ "reEncode": "eyJzdWNjZXNzIjp0cnVlLCJ0eERpZ2VzdCI6IkFCQzEyMyIsImZpbmFsaXR5TXMiOjMwMH0=",
104
+ "identical": true
105
+ },
106
+ "shouldReject": false
107
+ },
108
+ {
109
+ "description": "Settle body roundtrip: encode → decode → re-encode = identical",
110
+ "input": {
111
+ "type": "settle",
112
+ "transport": "body",
113
+ "value": {
114
+ "success": true,
115
+ "txDigest": "ABC123",
116
+ "finalityMs": 300
117
+ }
118
+ },
119
+ "expected": {
120
+ "firstEncode": "{\"success\":true,\"txDigest\":\"ABC123\",\"finalityMs\":300}",
121
+ "reEncode": "{\"success\":true,\"txDigest\":\"ABC123\",\"finalityMs\":300}",
122
+ "identical": true
123
+ },
124
+ "shouldReject": false
125
+ },
126
+ {
127
+ "description": "Complex requirements with extensions roundtrip",
128
+ "input": {
129
+ "type": "requirements",
130
+ "transport": "header",
131
+ "value": {
132
+ "s402Version": "1",
133
+ "accepts": [
134
+ "exact"
135
+ ],
136
+ "network": "sui:mainnet",
137
+ "asset": "0x2::sui::SUI",
138
+ "amount": "1000000",
139
+ "payTo": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
140
+ "extensions": {
141
+ "auction": {
142
+ "type": "sealed-bid",
143
+ "deadline": 1708000000000
144
+ },
145
+ "customField": "hello world"
146
+ }
147
+ }
148
+ },
149
+ "expected": {
150
+ "firstEncode": "eyJzNDAyVmVyc2lvbiI6IjEiLCJhY2NlcHRzIjpbImV4YWN0Il0sIm5ldHdvcmsiOiJzdWk6bWFpbm5ldCIsImFzc2V0IjoiMHgyOjpzdWk6OlNVSSIsImFtb3VudCI6IjEwMDAwMDAiLCJwYXlUbyI6IjB4YWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MCIsImV4dGVuc2lvbnMiOnsiYXVjdGlvbiI6eyJ0eXBlIjoic2VhbGVkLWJpZCIsImRlYWRsaW5lIjoxNzA4MDAwMDAwMDAwfSwiY3VzdG9tRmllbGQiOiJoZWxsbyB3b3JsZCJ9fQ==",
151
+ "reEncode": "eyJzNDAyVmVyc2lvbiI6IjEiLCJhY2NlcHRzIjpbImV4YWN0Il0sIm5ldHdvcmsiOiJzdWk6bWFpbm5ldCIsImFzc2V0IjoiMHgyOjpzdWk6OlNVSSIsImFtb3VudCI6IjEwMDAwMDAiLCJwYXlUbyI6IjB4YWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MCIsImV4dGVuc2lvbnMiOnsiYXVjdGlvbiI6eyJ0eXBlIjoic2VhbGVkLWJpZCIsImRlYWRsaW5lIjoxNzA4MDAwMDAwMDAwfSwiY3VzdG9tRmllbGQiOiJoZWxsbyB3b3JsZCJ9fQ==",
152
+ "identical": true
153
+ },
154
+ "shouldReject": false
155
+ }
156
+ ]
@@ -0,0 +1,76 @@
1
+ [
2
+ {
3
+ "description": "Decode success response",
4
+ "input": {
5
+ "header": "eyJzdWNjZXNzIjp0cnVlLCJ0eERpZ2VzdCI6IkFCQzEyM2RpZ2VzdCIsImZpbmFsaXR5TXMiOjQ1MH0="
6
+ },
7
+ "expected": {
8
+ "success": true,
9
+ "txDigest": "ABC123digest",
10
+ "finalityMs": 450
11
+ },
12
+ "shouldReject": false
13
+ },
14
+ {
15
+ "description": "Decode failure response",
16
+ "input": {
17
+ "header": "eyJzdWNjZXNzIjpmYWxzZSwiZXJyb3IiOiJJbnN1ZmZpY2llbnQgZ2FzIiwiZXJyb3JDb2RlIjoiU0VUVExFTUVOVF9GQUlMRUQifQ=="
18
+ },
19
+ "expected": {
20
+ "success": false,
21
+ "error": "Insufficient gas",
22
+ "errorCode": "SETTLEMENT_FAILED"
23
+ },
24
+ "shouldReject": false
25
+ },
26
+ {
27
+ "description": "Decode failure with retryable flag",
28
+ "input": {
29
+ "header": "eyJzdWNjZXNzIjpmYWxzZSwiZXJyb3IiOiJSUEMgdGltZW91dCIsImVycm9yQ29kZSI6IkZJTkFMSVRZX1RJTUVPVVQifQ=="
30
+ },
31
+ "expected": {
32
+ "success": false,
33
+ "error": "RPC timeout",
34
+ "errorCode": "FINALITY_TIMEOUT"
35
+ },
36
+ "shouldReject": false
37
+ },
38
+ {
39
+ "description": "Decode success with escrowId",
40
+ "input": {
41
+ "header": "eyJzdWNjZXNzIjp0cnVlLCJ0eERpZ2VzdCI6ImVzY3Jvd19kaWdlc3QiLCJlc2Nyb3dJZCI6IjB4ZXNjcm93MTIzIiwiZmluYWxpdHlNcyI6NTAwfQ=="
42
+ },
43
+ "expected": {
44
+ "success": true,
45
+ "txDigest": "escrow_digest",
46
+ "finalityMs": 500,
47
+ "escrowId": "0xescrow123"
48
+ },
49
+ "shouldReject": false
50
+ },
51
+ {
52
+ "description": "Decode success with balanceId",
53
+ "input": {
54
+ "header": "eyJzdWNjZXNzIjp0cnVlLCJ0eERpZ2VzdCI6ImJhbGFuY2VfZGlnZXN0IiwiYmFsYW5jZUlkIjoiMHhiYWxhbmNlNDU2IiwiZmluYWxpdHlNcyI6MzUwfQ=="
55
+ },
56
+ "expected": {
57
+ "success": true,
58
+ "txDigest": "balance_digest",
59
+ "finalityMs": 350,
60
+ "balanceId": "0xbalance456"
61
+ },
62
+ "shouldReject": false
63
+ },
64
+ {
65
+ "description": "Decode strips unknown top-level keys from settle response",
66
+ "input": {
67
+ "header": "eyJzdWNjZXNzIjp0cnVlLCJ0eERpZ2VzdCI6IkFCQzEyMyIsImZpbmFsaXR5TXMiOjMwMCwiaW5qZWN0ZWRFdmlsIjoic2hvdWxkIGJlIHN0cmlwcGVkIiwiaW50ZXJuYWxOb3RlIjoiYWxzbyBzdHJpcHBlZCJ9"
68
+ },
69
+ "expected": {
70
+ "success": true,
71
+ "txDigest": "ABC123",
72
+ "finalityMs": 300
73
+ },
74
+ "shouldReject": false
75
+ }
76
+ ]
@@ -0,0 +1,65 @@
1
+ [
2
+ {
3
+ "description": "Success with txDigest and finalityMs",
4
+ "input": {
5
+ "success": true,
6
+ "txDigest": "ABC123digest",
7
+ "finalityMs": 450
8
+ },
9
+ "expected": {
10
+ "header": "eyJzdWNjZXNzIjp0cnVlLCJ0eERpZ2VzdCI6IkFCQzEyM2RpZ2VzdCIsImZpbmFsaXR5TXMiOjQ1MH0="
11
+ },
12
+ "shouldReject": false
13
+ },
14
+ {
15
+ "description": "Success with all optional fields",
16
+ "input": {
17
+ "success": true,
18
+ "txDigest": "XYZ789digest",
19
+ "receiptId": "0xreceipt123",
20
+ "finalityMs": 200,
21
+ "streamId": "0xstream456"
22
+ },
23
+ "expected": {
24
+ "header": "eyJzdWNjZXNzIjp0cnVlLCJ0eERpZ2VzdCI6IlhZWjc4OWRpZ2VzdCIsInJlY2VpcHRJZCI6IjB4cmVjZWlwdDEyMyIsImZpbmFsaXR5TXMiOjIwMCwic3RyZWFtSWQiOiIweHN0cmVhbTQ1NiJ9"
25
+ },
26
+ "shouldReject": false
27
+ },
28
+ {
29
+ "description": "Failure with error message",
30
+ "input": {
31
+ "success": false,
32
+ "error": "Insufficient gas",
33
+ "errorCode": "SETTLEMENT_FAILED"
34
+ },
35
+ "expected": {
36
+ "header": "eyJzdWNjZXNzIjpmYWxzZSwiZXJyb3IiOiJJbnN1ZmZpY2llbnQgZ2FzIiwiZXJyb3JDb2RlIjoiU0VUVExFTUVOVF9GQUlMRUQifQ=="
37
+ },
38
+ "shouldReject": false
39
+ },
40
+ {
41
+ "description": "Failure with retryable errorCode",
42
+ "input": {
43
+ "success": false,
44
+ "error": "RPC timeout",
45
+ "errorCode": "FINALITY_TIMEOUT"
46
+ },
47
+ "expected": {
48
+ "header": "eyJzdWNjZXNzIjpmYWxzZSwiZXJyb3IiOiJSUEMgdGltZW91dCIsImVycm9yQ29kZSI6IkZJTkFMSVRZX1RJTUVPVVQifQ=="
49
+ },
50
+ "shouldReject": false
51
+ },
52
+ {
53
+ "description": "Success with balanceId (prepaid)",
54
+ "input": {
55
+ "success": true,
56
+ "txDigest": "prep123",
57
+ "balanceId": "0xbalance789",
58
+ "finalityMs": 300
59
+ },
60
+ "expected": {
61
+ "header": "eyJzdWNjZXNzIjp0cnVlLCJ0eERpZ2VzdCI6InByZXAxMjMiLCJiYWxhbmNlSWQiOiIweGJhbGFuY2U3ODkiLCJmaW5hbGl0eU1zIjozMDB9"
62
+ },
63
+ "shouldReject": false
64
+ }
65
+ ]