@vultisig/core-chain 1.4.0 → 1.4.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.
- package/CHANGELOG.md +15 -0
- package/dist/chains/cosmos/cosmosMsgTypes.d.ts +5 -1
- package/dist/chains/cosmos/cosmosMsgTypes.d.ts.map +1 -1
- package/dist/chains/cosmos/cosmosMsgTypes.js +5 -0
- package/dist/chains/cosmos/cosmosMsgTypes.js.map +1 -1
- package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.d.ts +4 -2
- package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.d.ts.map +1 -1
- package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.js +17 -6
- package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.js.map +1 -1
- package/dist/chains/cosmos/staking/lcdQueries.d.ts +117 -0
- package/dist/chains/cosmos/staking/lcdQueries.d.ts.map +1 -0
- package/dist/chains/cosmos/staking/lcdQueries.js +80 -0
- package/dist/chains/cosmos/staking/lcdQueries.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/pools.d.ts +1 -1
- package/dist/chains/cosmos/thor/lp/pools.d.ts.map +1 -1
- package/dist/chains/cosmos/thor/lp/pools.js +1 -1
- package/dist/chains/cosmos/thor/lp/pools.js.map +1 -1
- package/dist/chains/solana/client.d.ts.map +1 -1
- package/dist/chains/solana/client.js +1 -3
- package/dist/chains/solana/client.js.map +1 -1
- package/dist/chains/ton/messageBody/decode.d.ts +42 -0
- package/dist/chains/ton/messageBody/decode.d.ts.map +1 -0
- package/dist/chains/ton/messageBody/decode.js +337 -0
- package/dist/chains/ton/messageBody/decode.js.map +1 -0
- package/dist/chains/ton/messageBody/knownRouters.d.ts +19 -0
- package/dist/chains/ton/messageBody/knownRouters.d.ts.map +1 -0
- package/dist/chains/ton/messageBody/knownRouters.js +179 -0
- package/dist/chains/ton/messageBody/knownRouters.js.map +1 -0
- package/dist/chains/ton/messageBody/opcodes.d.ts +23 -0
- package/dist/chains/ton/messageBody/opcodes.d.ts.map +1 -0
- package/dist/chains/ton/messageBody/opcodes.js +22 -0
- package/dist/chains/ton/messageBody/opcodes.js.map +1 -0
- package/dist/chains/ton/messageBody/types.d.ts +50 -0
- package/dist/chains/ton/messageBody/types.d.ts.map +1 -0
- package/dist/chains/ton/messageBody/types.js +2 -0
- package/dist/chains/ton/messageBody/types.js.map +1 -0
- package/dist/coin/balance/resolvers/polkadot.d.ts.map +1 -1
- package/dist/coin/balance/resolvers/polkadot.js +72 -6
- package/dist/coin/balance/resolvers/polkadot.js.map +1 -1
- package/dist/publicKey/ecdsa/derivePublicKey.d.ts.map +1 -1
- package/dist/publicKey/ecdsa/derivePublicKey.js +6 -0
- package/dist/publicKey/ecdsa/derivePublicKey.js.map +1 -1
- package/dist/security/blockaid/tx/simulation/api/core.d.ts.map +1 -1
- package/dist/security/blockaid/tx/simulation/api/core.js +30 -29
- package/dist/security/blockaid/tx/simulation/api/core.js.map +1 -1
- package/package.json +31 -4
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
import { Cell } from '@ton/core';
|
|
2
|
+
import { DEDUST_NATIVE_VAULTS, isKnownRouterAddress, STONFI_V2_PTON_WALLETS, STONFI_V2_ROUTERS, } from './knownRouters.js';
|
|
3
|
+
import { TonOp } from './opcodes.js';
|
|
4
|
+
/**
|
|
5
|
+
* `Address.toString()` defaults to URL-safe + bounceable, which matches the
|
|
6
|
+
* mainnet user-friendly form (`EQ.../UQ...`) the wallet UI shows everywhere
|
|
7
|
+
* else. Centralized so all decoded addresses share the same encoding.
|
|
8
|
+
*/
|
|
9
|
+
const formatAddress = (address) => address.toString();
|
|
10
|
+
const safeDecode = (fn) => {
|
|
11
|
+
try {
|
|
12
|
+
return fn();
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
const HEX_BOC_MAGIC_PREFIXES = ['b5ee9c72', '68ff65f3', 'acc3a728'];
|
|
19
|
+
const isHexBoc = (payload) => {
|
|
20
|
+
if (payload.length % 2 !== 0)
|
|
21
|
+
return false;
|
|
22
|
+
if (!/^[\da-f]+$/i.test(payload))
|
|
23
|
+
return false;
|
|
24
|
+
const lower = payload.toLowerCase();
|
|
25
|
+
return HEX_BOC_MAGIC_PREFIXES.some(magic => lower.startsWith(magic));
|
|
26
|
+
};
|
|
27
|
+
export const tonPayloadToBase64 = (payload) => {
|
|
28
|
+
if (!payload)
|
|
29
|
+
return null;
|
|
30
|
+
const value = payload.trim();
|
|
31
|
+
if (!isHexBoc(value))
|
|
32
|
+
return value;
|
|
33
|
+
return Buffer.from(value, 'hex').toString('base64');
|
|
34
|
+
};
|
|
35
|
+
const loadAddress = (slice) => formatAddress(slice.loadAddress());
|
|
36
|
+
const loadMaybeAddress = (slice) => {
|
|
37
|
+
const address = slice.loadMaybeAddress();
|
|
38
|
+
return address ? formatAddress(address) : null;
|
|
39
|
+
};
|
|
40
|
+
const loadMaybeRef = (slice) => {
|
|
41
|
+
if (slice.remainingBits < 1) {
|
|
42
|
+
throw new Error('Maybe-^Cell discriminator missing');
|
|
43
|
+
}
|
|
44
|
+
const hasRef = slice.loadBit();
|
|
45
|
+
if (!hasRef)
|
|
46
|
+
return null;
|
|
47
|
+
if (slice.remainingRefs < 1) {
|
|
48
|
+
throw new Error('Maybe-^Cell discriminator set but no ref available');
|
|
49
|
+
}
|
|
50
|
+
return slice.loadRef();
|
|
51
|
+
};
|
|
52
|
+
const loadForwardPayload = (slice) => {
|
|
53
|
+
if (slice.remainingBits < 1) {
|
|
54
|
+
throw new Error('Either-Cell discriminator missing');
|
|
55
|
+
}
|
|
56
|
+
const isRef = slice.loadBit();
|
|
57
|
+
if (isRef) {
|
|
58
|
+
if (slice.remainingRefs < 1) {
|
|
59
|
+
throw new Error('Either-Cell discriminator set but no ref available');
|
|
60
|
+
}
|
|
61
|
+
return slice.loadRef();
|
|
62
|
+
}
|
|
63
|
+
return slice.asCell();
|
|
64
|
+
};
|
|
65
|
+
const parseStonfiV2Swap = (payload, offer) => safeDecode(() => {
|
|
66
|
+
const slice = payload.beginParse();
|
|
67
|
+
if (slice.remainingBits < 32)
|
|
68
|
+
return null;
|
|
69
|
+
const op = slice.loadUint(32);
|
|
70
|
+
if (op !== TonOp.STONFI_V2_SWAP)
|
|
71
|
+
return null;
|
|
72
|
+
const targetAddress = loadAddress(slice);
|
|
73
|
+
const refundAddress = loadAddress(slice);
|
|
74
|
+
const excessesAddress = loadAddress(slice);
|
|
75
|
+
slice.loadUintBig(64);
|
|
76
|
+
// additional_data ref shape (STON.fi v2 swap body — same layout used
|
|
77
|
+
// by both `createSwapBody` and `createCrossSwapBody` in the SDK):
|
|
78
|
+
// min_out:Coins
|
|
79
|
+
// receiver:MsgAddressInt
|
|
80
|
+
// custom_payload_fwd_gas:Coins
|
|
81
|
+
// custom_payload:(Maybe ^Cell)
|
|
82
|
+
// refund_fwd_gas:Coins
|
|
83
|
+
// refund_payload:(Maybe ^Cell)
|
|
84
|
+
// referral_value:uint16
|
|
85
|
+
// referral_address:MsgAddressInt
|
|
86
|
+
//
|
|
87
|
+
// Source: @ston-fi/sdk@2.x BaseRouterV2_1.createSwapBody
|
|
88
|
+
// (chunk-YSE6O2GU.cjs:96), confirmed against the v2 router smart-contract
|
|
89
|
+
// docs. We must consume ALL fields — without them, a body with a valid
|
|
90
|
+
// prefix (op + addresses + min_out + receiver) and garbage tail decodes
|
|
91
|
+
// as a "swap" because parseStonfiV2Swap stops after receiver. Codex
|
|
92
|
+
// adversarial review on PR #352 flagged this as fail-open.
|
|
93
|
+
//
|
|
94
|
+
// Reading all 8 fields turns "garbage tail" into a parse error caught
|
|
95
|
+
// by safeDecode. We DO NOT require the slice to be fully consumed
|
|
96
|
+
// afterwards — STON.fi may extend the cell shape with appended fields
|
|
97
|
+
// in a future protocol revision, and we want forward-compat over a
|
|
98
|
+
// brittle exact-shape assertion. The threshold is that an attacker
|
|
99
|
+
// must successfully encode all 8 typed fields before junk space, which
|
|
100
|
+
// is materially harder than just appending bits.
|
|
101
|
+
const additionalData = slice.loadRef().beginParse();
|
|
102
|
+
const minOut = additionalData.loadCoins();
|
|
103
|
+
const receiverAddress = loadAddress(additionalData);
|
|
104
|
+
additionalData.loadCoins(); // custom_payload_fwd_gas
|
|
105
|
+
loadMaybeRef(additionalData); // custom_payload
|
|
106
|
+
additionalData.loadCoins(); // refund_fwd_gas
|
|
107
|
+
loadMaybeRef(additionalData); // refund_payload
|
|
108
|
+
additionalData.loadUint(16); // referral_value (BPS)
|
|
109
|
+
additionalData.loadMaybeAddress(); // referral_address — addr_none on no-referral swaps; loadMaybeAddress tolerates that, plain loadAddress would throw and safeDecode would misclassify a real no-referral swap as a non-swap
|
|
110
|
+
return {
|
|
111
|
+
kind: 'swap',
|
|
112
|
+
provider: 'stonfi',
|
|
113
|
+
...offer,
|
|
114
|
+
minOut,
|
|
115
|
+
receiverAddress,
|
|
116
|
+
refundAddress,
|
|
117
|
+
excessesAddress,
|
|
118
|
+
targetAddress,
|
|
119
|
+
};
|
|
120
|
+
});
|
|
121
|
+
const parseDedustSwapStep = (slice) => {
|
|
122
|
+
const targetAddress = loadAddress(slice);
|
|
123
|
+
// SwapStepParams: kind:SwapKind limit:Coins next:(Maybe ^SwapStep)
|
|
124
|
+
// SwapKind is a 1-bit prefix: given_in$0 | given_out$1, and per
|
|
125
|
+
// https://docs.dedust.io/reference/tlb-schemes the docs explicitly state
|
|
126
|
+
// given_out is "Not implemented." Fail closed on kind=1 so a body with
|
|
127
|
+
// garbage in the SwapKind slot (or one crafted to look like a swap but
|
|
128
|
+
// actually using an unsupported kind) doesn't surface as `swap`. Codex
|
|
129
|
+
// adversarial review on PR #352 flagged the original `slice.loadBit()`-
|
|
130
|
+
// and-discard as a should-fix.
|
|
131
|
+
const kind = slice.loadBit();
|
|
132
|
+
if (kind) {
|
|
133
|
+
throw new Error('DeDust SwapKind given_out (kind=1) is not implemented');
|
|
134
|
+
}
|
|
135
|
+
const minOut = slice.loadCoins();
|
|
136
|
+
loadMaybeRef(slice);
|
|
137
|
+
return { targetAddress, minOut };
|
|
138
|
+
};
|
|
139
|
+
const parseDedustSwapParams = (slice) => {
|
|
140
|
+
slice.loadUint(32);
|
|
141
|
+
const receiverAddress = loadMaybeAddress(slice);
|
|
142
|
+
loadMaybeAddress(slice);
|
|
143
|
+
loadMaybeRef(slice);
|
|
144
|
+
loadMaybeRef(slice);
|
|
145
|
+
return receiverAddress;
|
|
146
|
+
};
|
|
147
|
+
const parseDedustSwap = (payload, offer) => safeDecode(() => {
|
|
148
|
+
const slice = payload.beginParse();
|
|
149
|
+
if (slice.remainingBits < 32)
|
|
150
|
+
return null;
|
|
151
|
+
const op = slice.loadUint(32);
|
|
152
|
+
const isNativeSwap = op === TonOp.DEDUST_NATIVE_SWAP;
|
|
153
|
+
const isJettonSwap = op === TonOp.DEDUST_JETTON_SWAP;
|
|
154
|
+
if (!isNativeSwap && !isJettonSwap)
|
|
155
|
+
return null;
|
|
156
|
+
const normalizedOffer = isNativeSwap
|
|
157
|
+
? (() => {
|
|
158
|
+
slice.loadUintBig(64);
|
|
159
|
+
return {
|
|
160
|
+
offerAsset: 'ton',
|
|
161
|
+
offerAmount: slice.loadCoins(),
|
|
162
|
+
};
|
|
163
|
+
})()
|
|
164
|
+
: offer;
|
|
165
|
+
const { targetAddress, minOut } = parseDedustSwapStep(slice);
|
|
166
|
+
const receiverAddress = parseDedustSwapParams(slice);
|
|
167
|
+
return {
|
|
168
|
+
kind: 'swap',
|
|
169
|
+
provider: 'dedust',
|
|
170
|
+
...normalizedOffer,
|
|
171
|
+
minOut,
|
|
172
|
+
receiverAddress,
|
|
173
|
+
refundAddress: null,
|
|
174
|
+
excessesAddress: null,
|
|
175
|
+
targetAddress,
|
|
176
|
+
};
|
|
177
|
+
});
|
|
178
|
+
/**
|
|
179
|
+
* Swap classification of the inner `forward_payload` of a STON.fi v2 jetton
|
|
180
|
+
* transfer. Caller MUST already have verified that the jetton transfer's
|
|
181
|
+
* inner destination is a known STON.fi v2 router; without that binding the
|
|
182
|
+
* STON.fi swap opcode is forgeable and can be used to mislabel a transfer to
|
|
183
|
+
* an attacker as a swap.
|
|
184
|
+
*/
|
|
185
|
+
const parseStonfiSwapPayload = (payload, offer) => parseStonfiV2Swap(payload, offer);
|
|
186
|
+
const parsePtonTransferSwap = (slice) => safeDecode(() => {
|
|
187
|
+
slice.loadUintBig(64);
|
|
188
|
+
const offerAmount = slice.loadCoins();
|
|
189
|
+
slice.loadAddress();
|
|
190
|
+
const forwardPayload = loadForwardPayload(slice);
|
|
191
|
+
if (!forwardPayload)
|
|
192
|
+
return null;
|
|
193
|
+
return parseStonfiSwapPayload(forwardPayload, {
|
|
194
|
+
offerAsset: 'ton',
|
|
195
|
+
offerAmount,
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
const parseJettonTransfer = (slice) => {
|
|
199
|
+
return safeDecode(() => {
|
|
200
|
+
const queryId = slice.loadUintBig(64);
|
|
201
|
+
const amount = slice.loadCoins();
|
|
202
|
+
const destination = slice.loadAddress();
|
|
203
|
+
const responseDestination = slice.loadMaybeAddress();
|
|
204
|
+
// custom_payload is `Maybe ^Cell` — load and discard; we don't surface it.
|
|
205
|
+
loadMaybeRef(slice);
|
|
206
|
+
const forwardTonAmount = slice.loadCoins();
|
|
207
|
+
const forwardPayload = loadForwardPayload(slice);
|
|
208
|
+
const innerDestination = formatAddress(destination);
|
|
209
|
+
// Swap classification is gated on the jetton transfer's inner destination
|
|
210
|
+
// being a known STON.fi v2 router. DeDust jetton swaps are intentionally
|
|
211
|
+
// not classified — DeDust uses one vault per jetton, and the vault set is
|
|
212
|
+
// not statically enumerable. Callers needing DeDust jetton-swap detection
|
|
213
|
+
// must verify the destination via DeDust factory `get_vault_address`.
|
|
214
|
+
const swapIntent = forwardPayload && isKnownRouterAddress(innerDestination, STONFI_V2_ROUTERS)
|
|
215
|
+
? parseStonfiSwapPayload(forwardPayload, {
|
|
216
|
+
offerAsset: 'jetton',
|
|
217
|
+
offerAmount: amount,
|
|
218
|
+
})
|
|
219
|
+
: null;
|
|
220
|
+
if (swapIntent)
|
|
221
|
+
return swapIntent;
|
|
222
|
+
return {
|
|
223
|
+
kind: 'jettonTransfer',
|
|
224
|
+
queryId,
|
|
225
|
+
amount,
|
|
226
|
+
destination: innerDestination,
|
|
227
|
+
responseDestination: responseDestination
|
|
228
|
+
? formatAddress(responseDestination)
|
|
229
|
+
: null,
|
|
230
|
+
forwardTonAmount,
|
|
231
|
+
};
|
|
232
|
+
});
|
|
233
|
+
};
|
|
234
|
+
const parseNftTransfer = (slice) => {
|
|
235
|
+
return safeDecode(() => {
|
|
236
|
+
const queryId = slice.loadUintBig(64);
|
|
237
|
+
const newOwner = slice.loadAddress();
|
|
238
|
+
const responseDestination = slice.loadMaybeAddress();
|
|
239
|
+
loadMaybeRef(slice);
|
|
240
|
+
const forwardAmount = slice.loadCoins();
|
|
241
|
+
// forward_payload:(Either Cell ^Cell) — required by TEP-62; we don't
|
|
242
|
+
// surface its content, but we must consume it to reject bodies truncated
|
|
243
|
+
// before this field.
|
|
244
|
+
loadForwardPayload(slice);
|
|
245
|
+
return {
|
|
246
|
+
kind: 'nftTransfer',
|
|
247
|
+
queryId,
|
|
248
|
+
newOwner: formatAddress(newOwner),
|
|
249
|
+
responseDestination: responseDestination
|
|
250
|
+
? formatAddress(responseDestination)
|
|
251
|
+
: null,
|
|
252
|
+
forwardAmount,
|
|
253
|
+
};
|
|
254
|
+
});
|
|
255
|
+
};
|
|
256
|
+
const parseExcesses = (slice) => {
|
|
257
|
+
return safeDecode(() => ({
|
|
258
|
+
kind: 'excesses',
|
|
259
|
+
queryId: slice.loadUintBig(64),
|
|
260
|
+
}));
|
|
261
|
+
};
|
|
262
|
+
/**
|
|
263
|
+
* Decode the body BOC of a TON internal message into a structured intent.
|
|
264
|
+
*
|
|
265
|
+
* Accepts the base64 BOC carried in `TonMessage.payload` (Vultisig's keysign
|
|
266
|
+
* payload schema) along with the outer message destination. Returns `null`
|
|
267
|
+
* when the payload is empty, not a parseable BOC, has no opcode header, or
|
|
268
|
+
* carries an opcode this decoder doesn't yet handle — callers should fall
|
|
269
|
+
* back to displaying the raw TON transfer.
|
|
270
|
+
*
|
|
271
|
+
* **Router binding.** Opcodes are contract-local in TON, so an attacker can
|
|
272
|
+
* craft a body whose leading 32 bits collide with a known DEX swap opcode. To
|
|
273
|
+
* prevent the keysign UI from labeling such a body as a "swap":
|
|
274
|
+
*
|
|
275
|
+
* - `DEDUST_NATIVE_SWAP` is dispatched only when `outerDestination` is a
|
|
276
|
+
* known DeDust **native vault** (NOT the factory — the factory only
|
|
277
|
+
* receives `create_vault`/`create_pool` ops; `swap#ea06185d` lives on
|
|
278
|
+
* the per-asset vault contracts per
|
|
279
|
+
* https://docs.dedust.io/reference/tlb-schemes).
|
|
280
|
+
* - `PTON_TRANSFER` (STON.fi v2 TON-side swap) is dispatched only when
|
|
281
|
+
* `outerDestination` is a known STON.fi v2 pTON wallet.
|
|
282
|
+
* - STON.fi v2 jetton-swap detection inside `JETTON_TRANSFER` is gated on
|
|
283
|
+
* the inner `destination` field being a known STON.fi v2 router.
|
|
284
|
+
*
|
|
285
|
+
* DeDust jetton-swap detection is intentionally not provided — DeDust vaults
|
|
286
|
+
* are per-jetton and not statically enumerable.
|
|
287
|
+
*
|
|
288
|
+
* Note: dApps sometimes prefix a jetton transfer body with an empty 32-bit
|
|
289
|
+
* "text comment" header (op = 0). In that case, we look at the next 32 bits.
|
|
290
|
+
*/
|
|
291
|
+
export const decodeTonMessageBody = ({ payload: payloadBase64, outerDestination, }) => {
|
|
292
|
+
const payload = tonPayloadToBase64(payloadBase64);
|
|
293
|
+
if (!payload)
|
|
294
|
+
return null;
|
|
295
|
+
const cell = safeDecode(() => Cell.fromBase64(payload));
|
|
296
|
+
if (!cell)
|
|
297
|
+
return null;
|
|
298
|
+
const slice = safeDecode(() => cell.beginParse());
|
|
299
|
+
if (!slice)
|
|
300
|
+
return null;
|
|
301
|
+
const dispatch = (op) => {
|
|
302
|
+
if (op === TonOp.JETTON_TRANSFER)
|
|
303
|
+
return parseJettonTransfer(slice);
|
|
304
|
+
if (op === TonOp.NFT_TRANSFER)
|
|
305
|
+
return parseNftTransfer(slice);
|
|
306
|
+
if (op === TonOp.EXCESSES)
|
|
307
|
+
return parseExcesses(slice);
|
|
308
|
+
if (op === TonOp.PTON_TRANSFER) {
|
|
309
|
+
if (!isKnownRouterAddress(outerDestination, STONFI_V2_PTON_WALLETS)) {
|
|
310
|
+
return null;
|
|
311
|
+
}
|
|
312
|
+
return parsePtonTransferSwap(slice);
|
|
313
|
+
}
|
|
314
|
+
if (op === TonOp.DEDUST_NATIVE_SWAP) {
|
|
315
|
+
if (!isKnownRouterAddress(outerDestination, DEDUST_NATIVE_VAULTS)) {
|
|
316
|
+
return null;
|
|
317
|
+
}
|
|
318
|
+
return parseDedustSwap(cell, { offerAsset: 'ton', offerAmount: 0n });
|
|
319
|
+
}
|
|
320
|
+
return null;
|
|
321
|
+
};
|
|
322
|
+
if (slice.remainingBits < 32)
|
|
323
|
+
return null;
|
|
324
|
+
const op = safeDecode(() => slice.loadUint(32));
|
|
325
|
+
if (op === null)
|
|
326
|
+
return null;
|
|
327
|
+
if (op === 0) {
|
|
328
|
+
if (slice.remainingBits < 32)
|
|
329
|
+
return null;
|
|
330
|
+
const nestedOp = safeDecode(() => slice.loadUint(32));
|
|
331
|
+
if (nestedOp === null)
|
|
332
|
+
return null;
|
|
333
|
+
return dispatch(nestedOp);
|
|
334
|
+
}
|
|
335
|
+
return dispatch(op);
|
|
336
|
+
};
|
|
337
|
+
//# sourceMappingURL=decode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decode.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/ton/messageBody/decode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** STON.fi v2 router addresses on TON mainnet (jetton-swap destinations). */
|
|
2
|
+
export declare const STONFI_V2_ROUTERS: ReadonlySet<string>;
|
|
3
|
+
/** STON.fi v2 pTON wallet addresses on TON mainnet (TON-swap destinations). */
|
|
4
|
+
export declare const STONFI_V2_PTON_WALLETS: ReadonlySet<string>;
|
|
5
|
+
/**
|
|
6
|
+
* DeDust mainnet TON Native Vault addresses — the destinations for the
|
|
7
|
+
* `swap#ea06185d` op when offering native TON. Used to gate
|
|
8
|
+
* DEDUST_NATIVE_SWAP classification so the keysign UI only labels a
|
|
9
|
+
* message as a "swap" when it's actually addressed to a real vault.
|
|
10
|
+
*/
|
|
11
|
+
export declare const DEDUST_NATIVE_VAULTS: ReadonlySet<string>;
|
|
12
|
+
/**
|
|
13
|
+
* Returns whether `address` matches any entry in `routerSet`. Both sides are
|
|
14
|
+
* normalised to user-friendly bounceable form so URL-safe and raw variants of
|
|
15
|
+
* the same address compare as equal. Returns false on null/undefined or any
|
|
16
|
+
* unparseable address.
|
|
17
|
+
*/
|
|
18
|
+
export declare const isKnownRouterAddress: (address: string | null | undefined, routerSet: ReadonlySet<string>) => boolean;
|
|
19
|
+
//# sourceMappingURL=knownRouters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knownRouters.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/ton/messageBody/knownRouters.ts"],"names":[],"mappings":"AAiKA,6EAA6E;AAC7E,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,MAAM,CACR,CAAA;AAE1C,+EAA+E;AAC/E,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,MAAM,CAEtD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CACR,CAAA;AAE7C;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,SAAS,MAAM,GAAG,IAAI,GAAG,SAAS,EAClC,WAAW,WAAW,CAAC,MAAM,CAAC,KAC7B,OAOF,CAAA"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { Address } from '@ton/core';
|
|
2
|
+
/**
|
|
3
|
+
* Known router/factory addresses used to bind opcode-based swap classification
|
|
4
|
+
* to specific contracts. Without these checks, an attacker could craft a body
|
|
5
|
+
* that decodes as a "swap" and have it labeled as such in the keysign UI even
|
|
6
|
+
* though it is actually a transfer to an attacker-controlled destination — the
|
|
7
|
+
* TON message-body opcodes are contract-local, not globally unique.
|
|
8
|
+
*
|
|
9
|
+
* **Refresh:** STON.fi addresses are sourced from
|
|
10
|
+
* <https://api.ston.fi/v1/routers>, filtered to `major_version >= 2`. To
|
|
11
|
+
* regenerate this list, run:
|
|
12
|
+
*
|
|
13
|
+
* ```sh
|
|
14
|
+
* curl -s https://api.ston.fi/v1/routers | jq -r '
|
|
15
|
+
* [.[] | select(.major_version >= 2)] |
|
|
16
|
+
* { routers: ([.[].address] | sort | unique),
|
|
17
|
+
* pton_wallets: ([.[].pton_wallet_address] | sort | unique) }
|
|
18
|
+
* '
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* The DeDust mainnet **native vault** address is the destination of
|
|
22
|
+
* `swap#ea06185d` per https://docs.dedust.io/reference/tlb-schemes (the
|
|
23
|
+
* factory at `EQBfBWT7…` only receives `create_vault` / `create_pool` ops).
|
|
24
|
+
* The native vault is a singleton on mainnet; its address is computed
|
|
25
|
+
* deterministically from the factory's `get_vault_address(asset.native())`
|
|
26
|
+
* TVM call. Verified live against mainnet via:
|
|
27
|
+
*
|
|
28
|
+
* ```ts
|
|
29
|
+
* import { TonClient4 } from '@ton/ton'
|
|
30
|
+
* import { Factory, MAINNET_FACTORY_ADDR } from '@dedust/sdk'
|
|
31
|
+
* const factory = new TonClient4({ endpoint: 'https://mainnet-v4.tonhubapi.com' })
|
|
32
|
+
* .open(Factory.createFromAddress(MAINNET_FACTORY_ADDR))
|
|
33
|
+
* console.log((await factory.getNativeVault()).address.toString())
|
|
34
|
+
* // → EQDa4VOnTYlLvDJ0gZjNYm5PXfSmmtL6Vs6A_CZEtXCNICq_
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* A future revision could resolve the address dynamically via the same
|
|
38
|
+
* factory call so we don't need to chase a redeploy, but the current
|
|
39
|
+
* mainnet vault is the only one in production.
|
|
40
|
+
*/
|
|
41
|
+
const stonfiV2RouterAddresses = [
|
|
42
|
+
'EQABT9GCyDI60CbC4c6uS33HFDwaqd6MddiwIIw7CXTgNR3A',
|
|
43
|
+
'EQACn16m9OrZ-mw186M4NlIpVP8Tb3q6SV9aX8NjSgVfJTo9',
|
|
44
|
+
'EQADEFMTMnC-gu5v2U0ZY8AYaGhAOk9TcECg1TOquAW3r-IE',
|
|
45
|
+
'EQAGV9vw11tKW2QOCYCXEmIdyufM3p5CfcgHcY9NiiBLfZGH',
|
|
46
|
+
'EQAJG5pyZPWEiQiMVJdf7bDRgRLzg6QR57qKeRsOrMO-ncZN',
|
|
47
|
+
'EQAQYbnb1EGK0Wb8mk3vEW4vbHTyv7cOcfJlPWQ87_6_qfzR',
|
|
48
|
+
'EQATvO_BXfkFocOXhlve01EZfsiyFjoV-0k9CLmpgwtzVtcN',
|
|
49
|
+
'EQAgERF5tvrNn0AM2Rrrvk-MutGP60ZL70bJPuqvCTGY-17_',
|
|
50
|
+
'EQAiLV677BgHNXEUuDJ3Cw8K5WOiJSO86xh8YQq2LthJEoED',
|
|
51
|
+
'EQAiv3IuxYA6ZGEunOgZSTuMBzbpjwRbWw09-WsE-iqKKMrK',
|
|
52
|
+
'EQAyD7O8CvVdR8AEJcr96fHI1ifFq21S8QMt1czi5IfJPyfA',
|
|
53
|
+
'EQAyY2lBQ6RsVe88CKTmeH3BWWsUCWu7ugQNaf5kwLDYAoKt',
|
|
54
|
+
'EQAz1D0ZUiG_9XCyjrJ1-xTx-CnmnQ3J3LMKQ7sZTr-XlNZP',
|
|
55
|
+
'EQBCl1JANkTpMpJ9N3lZktPMpp2btRe2vVwHon0la8ibRied',
|
|
56
|
+
'EQBCtlN7Zy96qx-3yH0Yi4V0SNtQ-8RbhYaNs65MC4Hwfq31',
|
|
57
|
+
'EQBQErJi0DHgKYseIHtrQk4N5CQLCr3XYwkQIEw0HNs470OG',
|
|
58
|
+
'EQBQ_UBQvR9ryUjKDwijtoiyyga2Wl-yJm6Y8gl0k-HDh_5x',
|
|
59
|
+
'EQBSNX_5mSikBVttWhIaIb0f8jJU7fL6kvyyFVppd7dWRO6M',
|
|
60
|
+
'EQBZj7nhXNhB4O9rRCn4qGS82DZaPUPlyM2k6ZrbvQ1j3Ge7',
|
|
61
|
+
'EQBigMnbY4NU1uwdvzertV5mv_yI7282R-ffW7XZFWPEVRDG',
|
|
62
|
+
'EQBjK_kjY5R_DoyTRff109VzFrSlKFCC_gOOWIMtyEvCcv2J',
|
|
63
|
+
'EQBjM7B2PKa82IPKrUFbMFaKeQDFGTMRnrvY1TmptC7Kxz7B',
|
|
64
|
+
'EQBqgCTdrtSod76UrcOeALSiLCp3WuNIFQBQvyjjlQMvwLkc',
|
|
65
|
+
'EQBwpBGEAb-NgjUxpmARAgVl8C4F_5GsXxZ3dpsA1qzQerNl',
|
|
66
|
+
'EQByADL5Ra2dldrMSBctgfSm2X2W1P61NVW2RYDb8eJNJGx6',
|
|
67
|
+
'EQBzkqAN4ViYdS24lD2fFPe8odHn2rUkfMYbEJ88EBKBAS1b',
|
|
68
|
+
'EQC67o2-2UzR1cJFrUGL5M7OAnLgG8oY_tHaTgGmR63LQNV-',
|
|
69
|
+
'EQCCdNmj4QbNjrg_PM-JJE-B9f_czXLkYmrO7P9UkA6tt95m',
|
|
70
|
+
'EQCDT9dCT52pdfsLNW0e6qP5T3cgq7M4Ug72zkGYgP17tsWD',
|
|
71
|
+
'EQCRgwuFbPRR7TGodkJwbjiBtNtb0hfzJIliV-5kY6lKr_18',
|
|
72
|
+
'EQCS4UEa5UaJLzOyyKieqQOQ2P9M-7kXpkO5HnP3Bv250cN3',
|
|
73
|
+
'EQChoROpuUM4cpN6IRzqNTrkP9iVZHYoHgxMABDVU28vlUiG',
|
|
74
|
+
'EQCiypoBWNIEPlarBp04UePyEj5zH0ZDHxuRNqJ1WQx3FCY-',
|
|
75
|
+
'EQCiz74FCV2lYlvFPEYhL3Jql8WwIO7QvbvYT-LQH0SmtCgI',
|
|
76
|
+
'EQCpuYtq55nhkwYDmL4OWjsrdYy83gj5_49nNRQ5CrPOze49',
|
|
77
|
+
'EQCx0HDJ_DxLxDSQyfsEqHI8Rs65nygvdmeD9Ra7rY15OWN8',
|
|
78
|
+
'EQCxkYVQcfXKw9uJ-MMtutvR2Cu0DVCZFfLNBp6NwXgO8vQY',
|
|
79
|
+
'EQD11suHkrO_1Mb5IIdYFx5ZPy38MuHoeHx6dA-QRaD8w0UJ',
|
|
80
|
+
'EQDAPye7HAPAAl4WXpz5jOCdhf2H9h9QkkzRQ-6K5usiuQeC',
|
|
81
|
+
'EQDBYUj5KEPUQrbj7da742UYJIeT9QU5C2dKsi12SdQ3yh9a',
|
|
82
|
+
'EQDQ6j53q21HuZtw6oclm7z4LU2cG6S2OKvpSSMH548d7kJT',
|
|
83
|
+
'EQDTb1w1TCohFqnNcyPrrbbBJQdAwwPn8DbCoaSUd0S5T4fB',
|
|
84
|
+
'EQDgebEMA6yriI7SMffE65DIVA9rzSRmfGV_gy3ylIhLicY8',
|
|
85
|
+
'EQDh5oHPvfRwPu2bORBGCoLEO4WQZKL4fk5DD1gydeNG9oEH',
|
|
86
|
+
'EQDi1eWU3HWWst8owY8OMq2Dz9nJJEHUROza8R-_wEGb8yu6',
|
|
87
|
+
'EQDkncuJ267Py3EmL2XAN7YsSNQMUu8u-GHsW9jVljcH8fr5',
|
|
88
|
+
'EQDwyjgjnTXJVPjXji3OPtUilcCjceGVQOLGwr9_sRLjImfG',
|
|
89
|
+
'EQDx--jUU9PUtHltPYZX7wdzIi0SPY3KZ8nvOs0iZvQJd6Ql',
|
|
90
|
+
];
|
|
91
|
+
const stonfiV2PtonWalletAddresses = [
|
|
92
|
+
'EQA2O81nzig4IUsCp_8dpzglywsCx-1ESPFzl0ygs1hFYUa2',
|
|
93
|
+
'EQACuz151snlY46PKdUOkyiCf0zzcxMsN6XmKQkSKZjkvyFH',
|
|
94
|
+
'EQAD2AcAb4blnbeGPPugZoxSpeibAMTB5kyDMIpUgKrsqk-z',
|
|
95
|
+
'EQADMtjROtxVRcr1PZ8Zoq6Uxv-5O6uRw7v2XktW0WRtZDnK',
|
|
96
|
+
'EQAGM0cbPP-HmOONE_RBFnPtHJDkY5qZ_crocAns0QW25e8p',
|
|
97
|
+
'EQAIuYlddISZbBf7iymZ-WPP9zHaVj9Kg45OH-PgntVz9QbQ',
|
|
98
|
+
'EQAKz7pQ4mi88Br4WKWcRozQbuRP3xi3eNnwlKa12ECcPfZG',
|
|
99
|
+
'EQARZ1hF4v95ELsH7pCPMN79_UeqKOOgOjt8xrkW9HhIM-u1',
|
|
100
|
+
'EQARs8oCeUBx5sWfazL6gZzTFAA9-RgnicsGhHBA8tDLIXgS',
|
|
101
|
+
'EQAg3Rfrs5JAy31xPIv0hVsAkjDmF8yTxxxkygNvpzNBcJAB',
|
|
102
|
+
'EQAgXtyQlqVF2V3F4mKlbvYzUijlGjUmJbPWkWuiFNdpzWL_',
|
|
103
|
+
'EQAmV2BzRi6c-S1263Ar9HhyCLrvtMEae_qfEzhxnK7qSpr0',
|
|
104
|
+
'EQAyEwoQcmDv0385t9szG-XIUcWMpYlUAOpA5I4HAViY-FnW',
|
|
105
|
+
'EQAyvcnP0RexLvnsQMXfKYnk18Bzl3Y-iGt6bXqFB75ugXmE',
|
|
106
|
+
'EQBB_dTiG6u4IIbDT80yirqwmLpwRp7cDGkdrmvQ3Xs_39xM',
|
|
107
|
+
'EQBDOw08nLEwr9TTXyXDiPuBogHZM_1Rk42Ks8h-FQkP330_',
|
|
108
|
+
'EQBS0OA18gacX-knOwi7kYuZms3JFwSs4A6j3DvowxfCX9aC',
|
|
109
|
+
'EQBSDTCjmP35i5CnqT0IiankTmJeOBnUzq7eJ19oO6JgOPgs',
|
|
110
|
+
'EQBTYCx7TGgVgaIr3tuJ3r_91E6FUBBWLtT73lTYYmrIc5gb',
|
|
111
|
+
'EQBiLHuQjDj4fNyCD7Ch5HwpNGldlb5g-LMwQ1kStQ4NM5kv',
|
|
112
|
+
'EQBicl-T79f0FwI_nygtAm_ISq15BVusRKEbZnC2_2QFjH34',
|
|
113
|
+
'EQBiy9ltu3lkML1i_MAVW2yaXOsPeJ3NXCXQLlcAx-6lKrN1',
|
|
114
|
+
'EQBvwdaM2LT9JPZGYdqYMCtIuLzjjAqHDSdaJW8fErAU7JUM',
|
|
115
|
+
'EQBwU5CgFHiNsGKIBetAsMqnoDCtEQIcC3m8HW12GGDz6KfN',
|
|
116
|
+
'EQByjaOja6-prxDrniGIzs-lBmNnP-nsvGxH1X2y4M3M5sjm',
|
|
117
|
+
'EQBzIe_KYGrezmSS3ua9buM0P8vzEnMFDrsv1prFnwP43hFk',
|
|
118
|
+
'EQC4V6MEH2RGiHw5a9g74AXEjyPR1qA-N9mzMEIs9hOSZzVP',
|
|
119
|
+
'EQCCcuEVMGOSBQwv8Wmak1zbB8WpIuQbfavZYc3cL3QPNlK7',
|
|
120
|
+
'EQCCgTcJEugMCmQjJDJLTFlu56od9fJDfkTSNv4QEGpHihJx',
|
|
121
|
+
'EQCSIMGBps_qzRG3uPYhON8bucyCtu0mYdL1-u4gSz77IBa3',
|
|
122
|
+
'EQCSQy327bW5cik1IycFmY4Qvsmgt-o4F6Ze54-lv2AOPBSk',
|
|
123
|
+
'EQCcM8n2_K5D9Gu-YkyxM2W35WFs7ekYSbV9lgjXUDYofYt4',
|
|
124
|
+
'EQCh82fvi6mY0FdoKprvfDLE2q-nE9FIU3SWTVLgNqMJliOO',
|
|
125
|
+
'EQChdJmlvKnQVkiOwUYnUKJU_zgoyLT81XIyYxVH6RO8OtlH',
|
|
126
|
+
'EQCjEo7QNUH5S2tVjYgFFdEh1pherydH9K-nrHx0aScsq7U5',
|
|
127
|
+
'EQClcxRtn7nhZ3zzwsLk_itGaSe0r1r0Dj8fBLAxonkKNsZh',
|
|
128
|
+
'EQCyfHYh17xx-KwZvcc1t61tLVVCxSk0jYxwRznbpHqQ-R0k',
|
|
129
|
+
'EQCzUiz7TFS7p7ByYXt-c3lJDmyGvmHTQIm0vhwSiiiaLpVj',
|
|
130
|
+
'EQD-zKpOa1GjFQDOMnP4A-tX3ntmgV7vs127m0tS_SrJY3kG',
|
|
131
|
+
'EQDARm-e3yRFmxAabT5OfXKjFp23PS6p7hXBwwrgmvkdbXCr',
|
|
132
|
+
'EQDBXpJBctAKlbAMWqH2iTPyBPfdBPeQZ6CGRp1oKBqQkEDL',
|
|
133
|
+
'EQDTN22aBi-Pa_GyDWi8wBuVUxLhOwfAklgN5-bbTk87-uBh',
|
|
134
|
+
'EQDTx6o7gmGo8cuJt_3EHEgO1RmGnLtGTzgTOsG5pAYs0uYd',
|
|
135
|
+
'EQDgXEo6f94Bq90eHGFTVK0LyhGaePDhXEgiv1JK6LHFEYRP',
|
|
136
|
+
'EQDiolbUI-wbmncBen7bYEG1pK_F27RKlqoRWCzSSA8mpqfe',
|
|
137
|
+
'EQDix2qMOc-QO05Nn9X7oKFnYTb3bvtxN7ySmzoGljrFv2bX',
|
|
138
|
+
'EQDwOyDlewGw8MkeXgZ_oOmPTIhJIlaJwhJmf4ffIPKv-294',
|
|
139
|
+
'EQDwVbvZWrXEWQ_lL_69WehyNkNKm4pkswOSeJQtzx1gcHMF',
|
|
140
|
+
];
|
|
141
|
+
/**
|
|
142
|
+
* DeDust mainnet TON Native Vault — the contract that receives the
|
|
143
|
+
* `swap#ea06185d` op for native-TON-in swaps. NOT the factory: the factory
|
|
144
|
+
* only handles `create_vault` / `create_pool`. See file-level comment for
|
|
145
|
+
* the dynamic-resolution recipe.
|
|
146
|
+
*/
|
|
147
|
+
const dedustNativeVaultAddresses = [
|
|
148
|
+
'EQDa4VOnTYlLvDJ0gZjNYm5PXfSmmtL6Vs6A_CZEtXCNICq_',
|
|
149
|
+
];
|
|
150
|
+
const normalizeAddress = (address) => Address.parse(address).toString();
|
|
151
|
+
const buildAddressSet = (addresses) => new Set(addresses.map(normalizeAddress));
|
|
152
|
+
/** STON.fi v2 router addresses on TON mainnet (jetton-swap destinations). */
|
|
153
|
+
export const STONFI_V2_ROUTERS = buildAddressSet(stonfiV2RouterAddresses);
|
|
154
|
+
/** STON.fi v2 pTON wallet addresses on TON mainnet (TON-swap destinations). */
|
|
155
|
+
export const STONFI_V2_PTON_WALLETS = buildAddressSet(stonfiV2PtonWalletAddresses);
|
|
156
|
+
/**
|
|
157
|
+
* DeDust mainnet TON Native Vault addresses — the destinations for the
|
|
158
|
+
* `swap#ea06185d` op when offering native TON. Used to gate
|
|
159
|
+
* DEDUST_NATIVE_SWAP classification so the keysign UI only labels a
|
|
160
|
+
* message as a "swap" when it's actually addressed to a real vault.
|
|
161
|
+
*/
|
|
162
|
+
export const DEDUST_NATIVE_VAULTS = buildAddressSet(dedustNativeVaultAddresses);
|
|
163
|
+
/**
|
|
164
|
+
* Returns whether `address` matches any entry in `routerSet`. Both sides are
|
|
165
|
+
* normalised to user-friendly bounceable form so URL-safe and raw variants of
|
|
166
|
+
* the same address compare as equal. Returns false on null/undefined or any
|
|
167
|
+
* unparseable address.
|
|
168
|
+
*/
|
|
169
|
+
export const isKnownRouterAddress = (address, routerSet) => {
|
|
170
|
+
if (!address)
|
|
171
|
+
return false;
|
|
172
|
+
try {
|
|
173
|
+
return routerSet.has(normalizeAddress(address));
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
//# sourceMappingURL=knownRouters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knownRouters.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/ton/messageBody/knownRouters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,MAAM,uBAAuB,GAAG;IAC9B,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;CAC1C,CAAA;AAEV,MAAM,2BAA2B,GAAG;IAClC,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;IAClD,kDAAkD;CAC1C,CAAA;AAEV;;;;;GAKG;AACH,MAAM,0BAA0B,GAAG;IACjC,kDAAkD;CAC1C,CAAA;AAEV,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAU,EAAE,CACnD,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAA;AAEnC,MAAM,eAAe,GAAG,CACtB,SAA4B,EACP,EAAE,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAA;AAElE,6EAA6E;AAC7E,MAAM,CAAC,MAAM,iBAAiB,GAC5B,eAAe,CAAC,uBAAuB,CAAC,CAAA;AAE1C,+EAA+E;AAC/E,MAAM,CAAC,MAAM,sBAAsB,GAAwB,eAAe,CACxE,2BAA2B,CAC5B,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAC/B,eAAe,CAAC,0BAA0B,CAAC,CAAA;AAE7C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,OAAkC,EAClC,SAA8B,EACrB,EAAE;IACX,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAA;IAC1B,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAA;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TON internal-message body opcodes for the operations Vultisig surfaces in
|
|
3
|
+
* keysign verify/done screens. The opcode is encoded as the first 32 bits of
|
|
4
|
+
* the message body cell.
|
|
5
|
+
*
|
|
6
|
+
* Sources:
|
|
7
|
+
* - Jetton transfer: TEP-74 (https://github.com/ton-blockchain/TEPs/blob/master/text/0074-jettons-standard.md)
|
|
8
|
+
* - NFT transfer: TEP-62 (https://github.com/ton-blockchain/TEPs/blob/master/text/0062-nft-standard.md)
|
|
9
|
+
* - Excesses: TEP-74 (return-of-gas notification)
|
|
10
|
+
* - STON.fi v2 swap: https://docs.ston.fi/developer-section/api-reference-v2/ops
|
|
11
|
+
* - DeDust swaps: https://docs.tact-lang.org/cookbook/dexes/dedust/
|
|
12
|
+
*/
|
|
13
|
+
export declare const TonOp: {
|
|
14
|
+
readonly JETTON_TRANSFER: 260734629;
|
|
15
|
+
readonly NFT_TRANSFER: 1607220500;
|
|
16
|
+
readonly EXCESSES: 3576854235;
|
|
17
|
+
readonly PTON_TRANSFER: 32736093;
|
|
18
|
+
readonly STONFI_V2_SWAP: 1717886506;
|
|
19
|
+
readonly DEDUST_NATIVE_SWAP: 3926267997;
|
|
20
|
+
readonly DEDUST_JETTON_SWAP: 3818968194;
|
|
21
|
+
};
|
|
22
|
+
export type TonOp = (typeof TonOp)[keyof typeof TonOp];
|
|
23
|
+
//# sourceMappingURL=opcodes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opcodes.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/ton/messageBody/opcodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,KAAK;;;;;;;;CAQR,CAAA;AAEV,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,OAAO,KAAK,CAAC,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TON internal-message body opcodes for the operations Vultisig surfaces in
|
|
3
|
+
* keysign verify/done screens. The opcode is encoded as the first 32 bits of
|
|
4
|
+
* the message body cell.
|
|
5
|
+
*
|
|
6
|
+
* Sources:
|
|
7
|
+
* - Jetton transfer: TEP-74 (https://github.com/ton-blockchain/TEPs/blob/master/text/0074-jettons-standard.md)
|
|
8
|
+
* - NFT transfer: TEP-62 (https://github.com/ton-blockchain/TEPs/blob/master/text/0062-nft-standard.md)
|
|
9
|
+
* - Excesses: TEP-74 (return-of-gas notification)
|
|
10
|
+
* - STON.fi v2 swap: https://docs.ston.fi/developer-section/api-reference-v2/ops
|
|
11
|
+
* - DeDust swaps: https://docs.tact-lang.org/cookbook/dexes/dedust/
|
|
12
|
+
*/
|
|
13
|
+
export const TonOp = {
|
|
14
|
+
JETTON_TRANSFER: 0x0f8a7ea5,
|
|
15
|
+
NFT_TRANSFER: 0x5fcc3d14,
|
|
16
|
+
EXCESSES: 0xd53276db,
|
|
17
|
+
PTON_TRANSFER: 0x01f3835d,
|
|
18
|
+
STONFI_V2_SWAP: 0x6664de2a,
|
|
19
|
+
DEDUST_NATIVE_SWAP: 0xea06185d,
|
|
20
|
+
DEDUST_JETTON_SWAP: 0xe3a0d482,
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=opcodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opcodes.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/ton/messageBody/opcodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,eAAe,EAAE,UAAU;IAC3B,YAAY,EAAE,UAAU;IACxB,QAAQ,EAAE,UAAU;IACpB,aAAa,EAAE,UAAU;IACzB,cAAc,EAAE,UAAU;IAC1B,kBAAkB,EAAE,UAAU;IAC9B,kBAAkB,EAAE,UAAU;CACtB,CAAA"}
|