@debridge-finance/borderless-validation-sdk 0.4.1 → 0.5.0
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/dist/cjs/helpers/solana-hook-instructions.js +66 -0
- package/dist/cjs/helpers/solana-hook-instructions.js.map +1 -0
- package/dist/cjs/helpers/solana-instruction.js +5 -1
- package/dist/cjs/helpers/solana-instruction.js.map +1 -1
- package/dist/cjs/helpers/solana-intent-id.js +11 -1
- package/dist/cjs/helpers/solana-intent-id.js.map +1 -1
- package/dist/cjs/helpers/solana-intent-instruction.js +106 -0
- package/dist/cjs/helpers/solana-intent-instruction.js.map +1 -0
- package/dist/cjs/types/enums.js +2 -8
- package/dist/cjs/types/enums.js.map +1 -1
- package/dist/cjs/types/response.js +12 -2
- package/dist/cjs/types/response.js.map +1 -1
- package/dist/cjs/types/validation.js +30 -0
- package/dist/cjs/types/validation.js.map +1 -1
- package/dist/cjs/validations/evm-required-actions.js +2 -0
- package/dist/cjs/validations/evm-required-actions.js.map +1 -1
- package/dist/cjs/validations/evm-sign712-shared.js +2 -5
- package/dist/cjs/validations/evm-sign712-shared.js.map +1 -1
- package/dist/cjs/validations/evm-transaction-scope.js +29 -0
- package/dist/cjs/validations/evm-transaction-scope.js.map +1 -0
- package/dist/cjs/validations/hooks-common.js +18 -15
- package/dist/cjs/validations/hooks-common.js.map +1 -1
- package/dist/cjs/validations/low-input-sweep-bundle.js +94 -0
- package/dist/cjs/validations/low-input-sweep-bundle.js.map +1 -0
- package/dist/cjs/validations/low-input-sweep-hook.js +204 -0
- package/dist/cjs/validations/low-input-sweep-hook.js.map +1 -0
- package/dist/cjs/validations/low-input-sweep.js +294 -0
- package/dist/cjs/validations/low-input-sweep.js.map +1 -0
- package/dist/cjs/validations/on-chain-intent-submission.js +16 -5
- package/dist/cjs/validations/on-chain-intent-submission.js.map +1 -1
- package/dist/cjs/validations/ptp.js +13 -15
- package/dist/cjs/validations/ptp.js.map +1 -1
- package/dist/cjs/validations/solana-embedded-intent.js +187 -0
- package/dist/cjs/validations/solana-embedded-intent.js.map +1 -0
- package/dist/cjs/validations/solana-hook.js +1 -1
- package/dist/cjs/validations/solana-hook.js.map +1 -1
- package/dist/cjs/validations/solana-intent-accounts.js +99 -0
- package/dist/cjs/validations/solana-intent-accounts.js.map +1 -0
- package/dist/cjs/validations/solana-low-input-sweep.js +251 -0
- package/dist/cjs/validations/solana-low-input-sweep.js.map +1 -0
- package/dist/cjs/validations/solana-required-actions.js +6 -2
- package/dist/cjs/validations/solana-required-actions.js.map +1 -1
- package/dist/cjs/validations/solana-transaction.js +25 -5
- package/dist/cjs/validations/solana-transaction.js.map +1 -1
- package/dist/cjs/validations/trade-grouping.js +23 -26
- package/dist/cjs/validations/trade-grouping.js.map +1 -1
- package/dist/cjs/validations/trade-matching.js +21 -13
- package/dist/cjs/validations/trade-matching.js.map +1 -1
- package/dist/cjs/validations/trades.js +33 -20
- package/dist/cjs/validations/trades.js.map +1 -1
- package/dist/cjs/validator.js +14 -5
- package/dist/cjs/validator.js.map +1 -1
- package/dist/cjs/whitelists/environment-config.js +39 -0
- package/dist/cjs/whitelists/environment-config.js.map +1 -1
- package/dist/cjs/whitelists/types.js.map +1 -1
- package/dist/esm/helpers/solana-hook-instructions.js +63 -0
- package/dist/esm/helpers/solana-hook-instructions.js.map +1 -0
- package/dist/esm/helpers/solana-instruction.js +4 -0
- package/dist/esm/helpers/solana-instruction.js.map +1 -1
- package/dist/esm/helpers/solana-intent-id.js +10 -1
- package/dist/esm/helpers/solana-intent-id.js.map +1 -1
- package/dist/esm/helpers/solana-intent-instruction.js +98 -0
- package/dist/esm/helpers/solana-intent-instruction.js.map +1 -0
- package/dist/esm/types/enums.js +0 -6
- package/dist/esm/types/enums.js.map +1 -1
- package/dist/esm/types/response.js +12 -2
- package/dist/esm/types/response.js.map +1 -1
- package/dist/esm/types/validation.js +30 -0
- package/dist/esm/types/validation.js.map +1 -1
- package/dist/esm/validations/evm-required-actions.js +2 -0
- package/dist/esm/validations/evm-required-actions.js.map +1 -1
- package/dist/esm/validations/evm-sign712-shared.js +2 -5
- package/dist/esm/validations/evm-sign712-shared.js.map +1 -1
- package/dist/esm/validations/evm-transaction-scope.js +26 -0
- package/dist/esm/validations/evm-transaction-scope.js.map +1 -0
- package/dist/esm/validations/hooks-common.js +18 -15
- package/dist/esm/validations/hooks-common.js.map +1 -1
- package/dist/esm/validations/low-input-sweep-bundle.js +91 -0
- package/dist/esm/validations/low-input-sweep-bundle.js.map +1 -0
- package/dist/esm/validations/low-input-sweep-hook.js +201 -0
- package/dist/esm/validations/low-input-sweep-hook.js.map +1 -0
- package/dist/esm/validations/low-input-sweep.js +291 -0
- package/dist/esm/validations/low-input-sweep.js.map +1 -0
- package/dist/esm/validations/on-chain-intent-submission.js +17 -6
- package/dist/esm/validations/on-chain-intent-submission.js.map +1 -1
- package/dist/esm/validations/ptp.js +13 -15
- package/dist/esm/validations/ptp.js.map +1 -1
- package/dist/esm/validations/solana-embedded-intent.js +184 -0
- package/dist/esm/validations/solana-embedded-intent.js.map +1 -0
- package/dist/esm/validations/solana-hook.js +2 -2
- package/dist/esm/validations/solana-hook.js.map +1 -1
- package/dist/esm/validations/solana-intent-accounts.js +95 -0
- package/dist/esm/validations/solana-intent-accounts.js.map +1 -0
- package/dist/esm/validations/solana-low-input-sweep.js +248 -0
- package/dist/esm/validations/solana-low-input-sweep.js.map +1 -0
- package/dist/esm/validations/solana-required-actions.js +6 -2
- package/dist/esm/validations/solana-required-actions.js.map +1 -1
- package/dist/esm/validations/solana-transaction.js +25 -5
- package/dist/esm/validations/solana-transaction.js.map +1 -1
- package/dist/esm/validations/trade-grouping.js +23 -26
- package/dist/esm/validations/trade-grouping.js.map +1 -1
- package/dist/esm/validations/trade-matching.js +21 -13
- package/dist/esm/validations/trade-matching.js.map +1 -1
- package/dist/esm/validations/trades.js +33 -20
- package/dist/esm/validations/trades.js.map +1 -1
- package/dist/esm/validator.js +14 -5
- package/dist/esm/validator.js.map +1 -1
- package/dist/esm/whitelists/environment-config.js +39 -0
- package/dist/esm/whitelists/environment-config.js.map +1 -1
- package/dist/esm/whitelists/types.js.map +1 -1
- package/dist/types/helpers/solana-hook-instructions.d.ts +14 -0
- package/dist/types/helpers/solana-hook-instructions.d.ts.map +1 -0
- package/dist/types/helpers/solana-instruction.d.ts +3 -0
- package/dist/types/helpers/solana-instruction.d.ts.map +1 -1
- package/dist/types/helpers/solana-intent-id.d.ts +5 -0
- package/dist/types/helpers/solana-intent-id.d.ts.map +1 -1
- package/dist/types/helpers/solana-intent-instruction.d.ts +34 -0
- package/dist/types/helpers/solana-intent-instruction.d.ts.map +1 -0
- package/dist/types/types/enums.d.ts +0 -4
- package/dist/types/types/enums.d.ts.map +1 -1
- package/dist/types/types/response.d.ts +71 -1
- package/dist/types/types/response.d.ts.map +1 -1
- package/dist/types/types/validation.d.ts +29 -0
- package/dist/types/types/validation.d.ts.map +1 -1
- package/dist/types/validations/evm-required-actions.d.ts.map +1 -1
- package/dist/types/validations/evm-sign712-shared.d.ts.map +1 -1
- package/dist/types/validations/evm-transaction-scope.d.ts +3 -0
- package/dist/types/validations/evm-transaction-scope.d.ts.map +1 -0
- package/dist/types/validations/hooks-common.d.ts +2 -1
- package/dist/types/validations/hooks-common.d.ts.map +1 -1
- package/dist/types/validations/low-input-sweep-bundle.d.ts +3 -0
- package/dist/types/validations/low-input-sweep-bundle.d.ts.map +1 -0
- package/dist/types/validations/low-input-sweep-hook.d.ts +9 -0
- package/dist/types/validations/low-input-sweep-hook.d.ts.map +1 -0
- package/dist/types/validations/low-input-sweep.d.ts +15 -0
- package/dist/types/validations/low-input-sweep.d.ts.map +1 -0
- package/dist/types/validations/on-chain-intent-submission.d.ts.map +1 -1
- package/dist/types/validations/ptp.d.ts +3 -2
- package/dist/types/validations/ptp.d.ts.map +1 -1
- package/dist/types/validations/solana-embedded-intent.d.ts +3 -0
- package/dist/types/validations/solana-embedded-intent.d.ts.map +1 -0
- package/dist/types/validations/solana-hook.d.ts.map +1 -1
- package/dist/types/validations/solana-intent-accounts.d.ts +14 -0
- package/dist/types/validations/solana-intent-accounts.d.ts.map +1 -0
- package/dist/types/validations/solana-low-input-sweep.d.ts +9 -0
- package/dist/types/validations/solana-low-input-sweep.d.ts.map +1 -0
- package/dist/types/validations/solana-required-actions.d.ts.map +1 -1
- package/dist/types/validations/solana-transaction.d.ts.map +1 -1
- package/dist/types/validations/trade-grouping.d.ts +1 -1
- package/dist/types/validations/trade-grouping.d.ts.map +1 -1
- package/dist/types/validations/trade-matching.d.ts +1 -1
- package/dist/types/validations/trade-matching.d.ts.map +1 -1
- package/dist/types/validations/trades.d.ts +1 -1
- package/dist/types/validations/trades.d.ts.map +1 -1
- package/dist/types/validator.d.ts.map +1 -1
- package/dist/types/whitelists/environment-config.d.ts.map +1 -1
- package/dist/types/whitelists/types.d.ts +1 -0
- package/dist/types/whitelists/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateSolanaEmbeddedIntentActions = validateSolanaEmbeddedIntentActions;
|
|
4
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
5
|
+
const viem_1 = require("viem");
|
|
6
|
+
const types_1 = require("../types");
|
|
7
|
+
const solana_intent_id_1 = require("../helpers/solana-intent-id");
|
|
8
|
+
const solana_transaction_decode_1 = require("../helpers/solana-transaction-decode");
|
|
9
|
+
const solana_instruction_1 = require("../helpers/solana-instruction");
|
|
10
|
+
const solana_intent_instruction_1 = require("../helpers/solana-intent-instruction");
|
|
11
|
+
const solana_intent_accounts_1 = require("./solana-intent-accounts");
|
|
12
|
+
// CRITICAL: embedded transactions must create the same intent that was validated
|
|
13
|
+
// against the request. This also checks a quote's executable payload when present;
|
|
14
|
+
// an absent quote payload or a separate Sign action does not require an embedded one.
|
|
15
|
+
function validateSolanaEmbeddedIntentActions(actions, basePath, realChainId, intent, intentProgram) {
|
|
16
|
+
return actions.flatMap((action, i) => {
|
|
17
|
+
if (!action.actions.includes(types_1.SolanaActionOperation.Intent)
|
|
18
|
+
|| (action.type !== types_1.SolanaActionKind.Transaction
|
|
19
|
+
&& action.type !== types_1.SolanaActionKind.SignTransaction))
|
|
20
|
+
return [];
|
|
21
|
+
return validateEmbeddedIntentAction(action, `${basePath}.requiredActions[${i}].data.data`, realChainId, intent, intentProgram);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
function validateEmbeddedIntentAction(action, path, realChainId, intent, intentProgram) {
|
|
25
|
+
const decoded = (0, solana_transaction_decode_1.decodeSolanaVersionedTransaction)(action.data.data, path, types_1.ViolationCode.SolanaTransactionDecodeError, types_1.ViolationCode.SolanaTransactionVersionInvalid);
|
|
26
|
+
if (!decoded.ok)
|
|
27
|
+
return decoded.violations;
|
|
28
|
+
let expected;
|
|
29
|
+
try {
|
|
30
|
+
expected = buildExpectedIntent(intent, realChainId, intentProgram);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
return [{
|
|
34
|
+
code: types_1.ViolationCode.SolanaEmbeddedIntentComputeError,
|
|
35
|
+
message: "cannot derive the expected embedded Solana intent",
|
|
36
|
+
path,
|
|
37
|
+
details: error,
|
|
38
|
+
}];
|
|
39
|
+
}
|
|
40
|
+
return validateInstructions(decoded.transaction, expected, path);
|
|
41
|
+
}
|
|
42
|
+
function buildExpectedIntent(intent, realChainId, intentProgram) {
|
|
43
|
+
const encoded = (0, solana_intent_id_1.encodeSolanaIntent)(intent, realChainId, intentProgram);
|
|
44
|
+
const program = new web3_js_1.PublicKey(intentProgram);
|
|
45
|
+
const maker = new web3_js_1.PublicKey(intent.intentOwner);
|
|
46
|
+
const derive = (seed, ...seeds) => web3_js_1.PublicKey.findProgramAddressSync([new TextEncoder().encode(seed), ...seeds], program)[0].toBase58();
|
|
47
|
+
return {
|
|
48
|
+
...encoded,
|
|
49
|
+
space: (0, solana_intent_instruction_1.getSolanaIntentInitialSpace)(encoded.serializedIntent.length, (intent.inputToken ?? []).length),
|
|
50
|
+
accounts: {
|
|
51
|
+
program: program.toBase58(),
|
|
52
|
+
maker: maker.toBase58(),
|
|
53
|
+
makerInfo: derive("maker_info", maker.toBytes()),
|
|
54
|
+
state: derive("state"),
|
|
55
|
+
intentStorage: derive("intent_storage", encoded.intentId),
|
|
56
|
+
eventAuthority: derive("__event_authority"),
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// HIGH: initialize exactly once, then seal exactly once. An inline update carries
|
|
61
|
+
// the entire intent; it is not a chunk to be appended. Repeated updates cannot
|
|
62
|
+
// overwrite a sealed intent, and extra initializations can allocate other storage.
|
|
63
|
+
function validateInstructions(transaction, expected, path) {
|
|
64
|
+
const unresolvedPrograms = transaction.message.compiledInstructions.flatMap((instruction, i) => transaction.message.staticAccountKeys[instruction.programIdIndex] === undefined
|
|
65
|
+
? [i]
|
|
66
|
+
: []);
|
|
67
|
+
// HIGH: do not classify instructions whose program is unresolved. This also
|
|
68
|
+
// preserves the original instruction indices when resolving account operands.
|
|
69
|
+
if (unresolvedPrograms.length > 0) {
|
|
70
|
+
return [{
|
|
71
|
+
code: types_1.ViolationCode.SolanaIntentInstructionAccountsUnresolved,
|
|
72
|
+
message: "embedded intent transaction contains unresolved instruction programs",
|
|
73
|
+
path,
|
|
74
|
+
actual: { instructionIndices: unresolvedPrograms },
|
|
75
|
+
}];
|
|
76
|
+
}
|
|
77
|
+
const resolved = (0, solana_instruction_1.resolveInstructions)(transaction.message.compiledInstructions, transaction.message.staticAccountKeys.map(key => key.toBase58()));
|
|
78
|
+
const program = expected.accounts.program;
|
|
79
|
+
const initIndices = resolved.flatMap((instruction, i) => (0, solana_instruction_1.isInitIntentInstruction)(instruction, program) ? [i] : []);
|
|
80
|
+
const updateIndices = resolved.flatMap((instruction, i) => (0, solana_instruction_1.isUpdateIntentInstruction)(instruction, program) ? [i] : []);
|
|
81
|
+
return validateIntentSequence(transaction, resolved, initIndices, updateIndices, expected, path);
|
|
82
|
+
}
|
|
83
|
+
function validateIntentSequence(transaction, resolved, initIndices, updateIndices, expected, path) {
|
|
84
|
+
if (initIndices.length !== 1
|
|
85
|
+
|| updateIndices.length !== 1
|
|
86
|
+
|| initIndices[0] >= updateIndices[0]) {
|
|
87
|
+
return [{
|
|
88
|
+
code: types_1.ViolationCode.SolanaIntentInstructionSequenceInvalid,
|
|
89
|
+
message: "embedded intent requires one initialization followed by one complete update",
|
|
90
|
+
path,
|
|
91
|
+
actual: { initIndices, updateIndices },
|
|
92
|
+
}];
|
|
93
|
+
}
|
|
94
|
+
return [
|
|
95
|
+
...validateInit(transaction, resolved[initIndices[0]], initIndices[0], expected, path),
|
|
96
|
+
...validateUpdate(transaction, resolved[updateIndices[0]], updateIndices[0], expected, path),
|
|
97
|
+
];
|
|
98
|
+
}
|
|
99
|
+
function validateInit(transaction, instruction, instructionIndex, expected, path) {
|
|
100
|
+
try {
|
|
101
|
+
const data = (0, solana_intent_instruction_1.readSolanaInitIntent)(instruction);
|
|
102
|
+
return [
|
|
103
|
+
...validateInitData(data, expected, path, instructionIndex),
|
|
104
|
+
...(0, solana_intent_accounts_1.validateSolanaInitIntentAccounts)(transaction, instructionIndex, data.kind, expected.accounts, path),
|
|
105
|
+
];
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
return invalidInstruction(path, instructionIndex, error);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// CRITICAL: the initialization hash commits to the checked intent. Its allocation
|
|
112
|
+
// must match that intent's storage budget, not an arbitrary rent expense.
|
|
113
|
+
function validateInitData(data, expected, path, instructionIndex) {
|
|
114
|
+
const violations = [];
|
|
115
|
+
if (!bytesEqual(data.encodedIntentHash, expected.encodedIntentHash)) {
|
|
116
|
+
violations.push({
|
|
117
|
+
code: types_1.ViolationCode.SolanaIntentInstructionHashMismatch,
|
|
118
|
+
message: "initialization hash does not match the checked intent",
|
|
119
|
+
path,
|
|
120
|
+
expected: (0, viem_1.bytesToHex)(expected.encodedIntentHash),
|
|
121
|
+
actual: (0, viem_1.bytesToHex)(data.encodedIntentHash),
|
|
122
|
+
details: { instructionIndex },
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
if (data.space !== expected.space) {
|
|
126
|
+
violations.push({
|
|
127
|
+
code: types_1.ViolationCode.SolanaIntentInstructionSpaceMismatch,
|
|
128
|
+
message: "initialization allocation does not match the checked intent storage budget",
|
|
129
|
+
path,
|
|
130
|
+
expected: expected.space,
|
|
131
|
+
actual: data.space,
|
|
132
|
+
details: { instructionIndex },
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
return violations;
|
|
136
|
+
}
|
|
137
|
+
function validateUpdate(transaction, instruction, instructionIndex, expected, path) {
|
|
138
|
+
try {
|
|
139
|
+
const data = (0, solana_intent_instruction_1.readSolanaUpdateIntent)(instruction);
|
|
140
|
+
// CRITICAL: a reference to external account bytes is not proof of their
|
|
141
|
+
// contents. Reject this unverifiable representation rather than accepting
|
|
142
|
+
// a hash alone; inline updates supply the full payload for comparison.
|
|
143
|
+
if (data.origin === solana_intent_instruction_1.SolanaIntentDataOrigin.Buffer) {
|
|
144
|
+
return [{
|
|
145
|
+
code: types_1.ViolationCode.SolanaIntentUpdateBufferUnverifiable,
|
|
146
|
+
message: "external-buffer intent update cannot be verified from the bundle response",
|
|
147
|
+
path,
|
|
148
|
+
actual: { origin: solana_intent_instruction_1.SolanaIntentDataOrigin[data.origin], offset: data.offset, length: data.length },
|
|
149
|
+
details: { instructionIndex },
|
|
150
|
+
}];
|
|
151
|
+
}
|
|
152
|
+
return [
|
|
153
|
+
...validateUpdateData(data.data, expected.serializedIntent, path, instructionIndex),
|
|
154
|
+
...(0, solana_intent_accounts_1.validateSolanaUpdateIntentAccounts)(transaction, instructionIndex, expected.accounts, path),
|
|
155
|
+
];
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
return invalidInstruction(path, instructionIndex, error);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// CRITICAL: the complete update payload must encode the checked intent, not just
|
|
162
|
+
// start with an allowed discriminator. Chunking into different transactions is
|
|
163
|
+
// not inferred from labels; the update must itself contain the complete bytes.
|
|
164
|
+
function validateUpdateData(actual, expected, path, instructionIndex) {
|
|
165
|
+
if (bytesEqual(actual, expected))
|
|
166
|
+
return [];
|
|
167
|
+
return [{
|
|
168
|
+
code: types_1.ViolationCode.SolanaIntentInstructionDataMismatch,
|
|
169
|
+
message: "embedded update payload does not match the checked intent",
|
|
170
|
+
path,
|
|
171
|
+
expected: (0, viem_1.bytesToHex)(expected),
|
|
172
|
+
actual: (0, viem_1.bytesToHex)(actual),
|
|
173
|
+
details: { instructionIndex },
|
|
174
|
+
}];
|
|
175
|
+
}
|
|
176
|
+
function invalidInstruction(path, instructionIndex, error) {
|
|
177
|
+
return [{
|
|
178
|
+
code: types_1.ViolationCode.SolanaIntentInstructionDataInvalid,
|
|
179
|
+
message: "embedded intent instruction data or accounts could not be decoded",
|
|
180
|
+
path,
|
|
181
|
+
details: { instructionIndex, error },
|
|
182
|
+
}];
|
|
183
|
+
}
|
|
184
|
+
function bytesEqual(actual, expected) {
|
|
185
|
+
return actual.length === expected.length && actual.every((byte, i) => byte === expected[i]);
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=solana-embedded-intent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana-embedded-intent.js","sourceRoot":"","sources":["../../../src/validations/solana-embedded-intent.ts"],"names":[],"mappings":"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"}
|
|
@@ -307,7 +307,7 @@ function isSplTransferChecked(ix) {
|
|
|
307
307
|
if (ix.programId !== programs_1.SPL_TOKEN_PROGRAM && ix.programId !== programs_1.SPL_TOKEN_2022_PROGRAM) {
|
|
308
308
|
return false;
|
|
309
309
|
}
|
|
310
|
-
return ix.data.length >= 10 && ix.data[0] ===
|
|
310
|
+
return ix.data.length >= 10 && ix.data[0] === solana_instruction_1.SPL_TRANSFER_CHECKED_DISCRIMINATOR;
|
|
311
311
|
}
|
|
312
312
|
function truncateHex(hex) {
|
|
313
313
|
if (hex.length <= 20)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solana-hook.js","sourceRoot":"","sources":["../../../src/validations/solana-hook.ts"],"names":[],"mappings":";;AA+BA,8DAwDC;AAtFD,oCAUkB;AAClB,8CAAkE;AAClE,wCAA2C;AAC3C,sEAKuC;AACvC,4DAIuC;AACvC,gDAAmE;AACnE,0CAAsD;AACtD,qFAAwE;AACxE,oFAAwF;AACxF,wDAA4E;AAE5E,SAAgB,yBAAyB,CACrC,WAAgC,EAChC,WAAsC,EACtC,QAAgB,EAChB,SAAkB,EAClB,wBAA4C,EAC5C,OAA8B,EAC9B,WAAoB,EACpB,IAAc,EACd,cAA+B;IAE/B,MAAM,UAAU,GAAgB,EAAE,CAAC;IAEnC,MAAM,6BAA6B,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;SACzD,MAAM,CAAC,yBAAe,CAAC;SACvB,MAAM,CAAC,CAAC,CAAC,EAAE;QACR,MAAM,IAAI,GAAG,CAAC,CAAC,mBAAmB,CAAC;QACnC,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACrC,MAAM,IAAI,GAAG,IAAA,yCAAc,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,IAAI,KAAK,SAAS;eAClB,IAAA,wBAAc,EAAC,IAAI,CAAC,KAAK,mBAAW,CAAC,MAAM,CAAC;IACvD,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAoB,CAAC,YAAY,CAAC,CAAC;IAEnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,GAAG,QAAQ,oBAAoB,CAAC,GAAG,CAAC;QAEvD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAmB,CAAC;QAEvC,0EAA0E;QAE1E,IAAI,GAAG,CAAC,QAAQ,CAAC,6BAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,UAAU,CAAC,IAAI,CAAC,GAAG,wBAAwB,CACvC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,CACrE,CAAC,CAAC;QACP,CAAC;QAED,IAAI,GAAG,CAAC,QAAQ,CAAC,6BAAqB,CAAC,eAAe,CAAC,EAAE,CAAC;YACtD,UAAU,CAAC,IAAI,CACX,GAAG,mCAAmC,CAClC,MAAM,EACN,UAAU,EACV,SAAS,EACT,wBAAwB,EACxB,6BAA6B,EAC7B,WAAW,EACX,IAAA,yBAAe,EAAC,WAAW,CAAC,IAAI,CAAC;gBAC7B,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB;gBACtC,CAAC,CAAC,SAAS,CAClB,CACJ,CAAC;QACN,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,gDAAgD;AAChD,uDAAuD;AACvD,gDAAgD;AAEhD,SAAS,wBAAwB,CAC7B,MAA8B,EAC9B,WAAsC,EACtC,UAAkB,EAClB,WAAoB,EACpB,IAAc,EACd,cAA+B;IAE/B,MAAM,UAAU,GAAgB,EAAE,CAAC;IAEnC,2DAA2D;IAC3D,IAAI,MAAM,CAAC,IAAI,KAAK,wBAAgB,CAAC,eAAe,EAAE,CAAC;QACnD,UAAU,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,qBAAa,CAAC,2BAA2B;YAC/C,OAAO,EACH,uEAAuE;YAC3E,IAAI,EAAE,GAAG,UAAU,OAAO;YAC1B,QAAQ,EAAE,wBAAgB,CAAC,eAAe;YAC1C,MAAM,EAAE,MAAM,CAAC,IAAI;SACtB,CAAC,CAAC;QACH,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,gEAAgE;IAChE,gFAAgF;IAChF,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,UAAU,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,qBAAa,CAAC,sBAAsB;YAC1C,OAAO,EAAE,2DAA2D;YACpE,IAAI,EAAE,GAAG,UAAU,YAAY;SAClC,CAAC,CAAC;QACH,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,uEAAuE;IACvE,sEAAsE;IACtE,2EAA2E;IAC3E,sEAAsE;IACtE,2EAA2E;IAC3E,qCAAqC;IACrC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAA,sCAAwB,EACvD,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,YAAY,EAAE,cAAc,EAAE,IAAI,CAChF,CAAC;IACF,MAAM,YAAY,GAAI,MAAM,CAAC,IAAyB,CAAC,IAAI,CAAC;IAC5D,MAAM,uBAAuB,GAAG,4BAA4B,CACxD,YAAY,EAAE,WAAW,CAAC,YAAY,CACzC,CAAC;IACF,MAAM,iBAAiB,GAAG,uBAAuB;QAC7C,CAAC,CAAC,YAAY,KAAK,YAAY;QAC/B,CAAC,CAAC,IAAA,eAAS,EAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAE5C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACrB,UAAU,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,qBAAa,CAAC,sBAAsB;YAC1C,OAAO,EAAE,mDAAmD;YAC5D,IAAI,EAAE,GAAG,UAAU,YAAY;YAC/B,QAAQ,EAAE,WAAW,CAAC,YAAY,CAAC;YACnC,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC;SACpC,CAAC,CAAC;IACP,CAAC;IAGD,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,gDAAgD;AAChD,6DAA6D;AAC7D,gDAAgD;AAEhD,SAAS,mCAAmC,CACxC,MAA8B,EAC9B,UAAkB,EAClB,SAAkB,EAClB,wBAA4C,EAC5C,6BAAuC,EACvC,WAAoB,EACpB,0BAAgE;IAEhE,sDAAsD;IACtD,MAAM,YAAY,GAAG,uBAAuB,CACxC,MAAM,EAAE,UAAU,EAAE,qBAAa,CAAC,gCAAgC,CACrE,CAAC;IACF,IAAI,CAAC,YAAY,CAAC,EAAE;QAAE,OAAO,YAAY,CAAC,UAAU,CAAC;IAErD,MAAM,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC;IAC7C,MAAM,iBAAiB,GAAG,WAAW,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAC/D,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,CACxB,CAAC;IACF,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,oBAAoB,CAAC;IAE7D,MAAM,UAAU,GAAgB,EAAE,CAAC;IAEnC,sEAAsE;IACtE,UAAU,CAAC,IAAI,CACX,GAAG,sCAAsC,CACrC,WAAW,EAAE,iBAAiB,EAAE,UAAU,CAC7C,CACJ,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAA,wCAAmB,EAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAErE,+DAA+D;IAC/D,UAAU,CAAC,IAAI,CACX,GAAG,mCAAmC,CAClC,QAAQ,EACR,UAAU,EACV,6BAA6B,EAC7B,WAAW,EACX,0BAA0B,CAC7B,CACJ,CAAC;IAEF,mDAAmD;IACnD,UAAU,CAAC,IAAI,CAAC,GAAG,+BAA+B,CAC9C,WAAW,EACX,UAAU,EACV,SAAS,EACT,wBAAwB,EACxB,0BAA0B,EAC1B,WAAW,CACd,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,kCAAkC;AAClC,SAAS,sCAAsC,CAC3C,oBAAkD,EAClD,iBAA2B,EAC3B,UAAkB;IAElB,MAAM,UAAU,GAAgB,EAAE,CAAC;IAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,oBAAoB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,MAAM,UAAU,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;QAC1D,MAAM,SAAS,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAEhD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1B,gDAAgD;YAChD,UAAU,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,qBAAa,CAAC,qCAAqC;gBACzD,OAAO,EACH,iDAAiD;sBAC/C,uBAAuB;gBAC7B,IAAI,EAAE,GAAG,UAAU,YAAY;gBAC/B,MAAM,EAAE,eAAe,CAAC,oBAAoB,UAAU,EAAE;aAC3D,CAAC,CAAC;YACH,SAAS;QACb,CAAC;QAED,IAAI,CAAC,4CAAiC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACpD,UAAU,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,qBAAa,CAAC,qCAAqC;gBACzD,OAAO,EACH,sDAAsD;gBAC1D,IAAI,EAAE,GAAG,UAAU,YAAY;gBAC/B,QAAQ,EAAE,CAAC,GAAG,4CAAiC,CAAC;gBAChD,MAAM,EAAE,SAAS;aACpB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,8CAA8C;AAC9C,SAAS,mCAAmC,CACxC,QAA+B,EAC/B,UAAkB,EAClB,6BAAuC,EACvC,WAAoB,EACpB,0BAAgE;IAEhE,MAAM,UAAU,GAAgB,EAAE,CAAC;IACnC,MAAM,SAAS,GAA0B,EAAE,CAAC;IAC5C,MAAM,YAAY,GAA0B,EAAE,CAAC;IAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEvB,IAAI,IAAA,qCAAgB,EAAC,EAAE,CAAC,EAAE,CAAC;YACvB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,oBAAoB,CAAC,EAAE,CAAC,EAAE,CAAC;YAClC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,IAAA,2BAAM,EAAC,EAAE,CAAC,EAAE,CAAC;YACpB,oCAAoC;QACxC,CAAC;aAAM,CAAC;YACJ,oCAAoC;YACpC,UAAU,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,qBAAa,CAAC,0CAA0C;gBAC9D,OAAO,EACH,yDAAyD;gBAC7D,IAAI,EAAE,GAAG,UAAU,YAAY;gBAC/B,MAAM,EAAE;oBACJ,KAAK,EAAE,CAAC;oBACR,SAAS,EAAE,EAAE,CAAC,SAAS;oBACvB,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM;iBAC7B;aACJ,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;IAE9D,IAAI,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;QAC3C,UAAU,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,qBAAa,CAAC,oCAAoC;YACxD,OAAO,EAAE,mDAAmD;YAC5D,IAAI,EAAE,GAAG,UAAU,YAAY;YAC/B,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,cAAc;SACzB,CAAC,CAAC;IACP,CAAC;IAED,4EAA4E;IAC5E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,0BAA0B,KAAK,SAAS,EAAE,CAAC;QACrE,UAAU,CAAC,IAAI,CAAC,GAAG,kCAAkC,CACjD,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,0BAA0B,EAAE,WAAW,CACpE,CAAC,CAAC;IACP,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,UAAU,CAAC,IAAI,CACX,GAAG,gCAAgC,CAC/B,YAAY,CAAC,CAAC,CAAC,EACf,UAAU,EACV,6BAA6B,EAC7B,WAAW,EACX,0BAA0B,CAC7B,CACJ,CAAC;IACN,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,2EAA2E;AAC3E,SAAS,gCAAgC,CACrC,EAAuB,EACvB,UAAkB,EAClB,6BAAuC,EACvC,WAAoB,EACpB,0BAAgE;IAEhE,6EAA6E;IAC7E,IAAI,EAAE,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC;gBACJ,IAAI,EAAE,qBAAa,CAAC,kCAAkC;gBACtD,OAAO,EACH,2DAA2D;gBAC/D,IAAI,EAAE,GAAG,UAAU,YAAY;gBAC/B,QAAQ,EAAE,CAAC;gBACX,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM;aAChC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAEhC,MAAM,UAAU,GAAG,0BAA0B,KAAK,SAAS;QACvD,CAAC,CAAC,IAAA,uBAAa,EAAC,WAAW,EAAE,IAAI,EAAE,0BAA0B,CAAC,YAAY,CAAC;QAC3E,CAAC,CAAC,6BAA6B,CAAC,IAAI,CAChC,IAAI,CAAC,EAAE,CAAC,IAAA,uBAAa,EAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CACjD,CAAC;IAEN,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,OAAO,CAAC;gBACJ,IAAI,EAAE,qBAAa,CAAC,kCAAkC;gBACtD,OAAO,EACH,kDAAkD;sBAChD,uCAAuC;gBAC7C,IAAI,EAAE,GAAG,UAAU,YAAY;gBAC/B,QAAQ,EAAE,6BAA6B;gBACvC,MAAM,EAAE,IAAI;aACf,CAAC,CAAC;IACP,CAAC;IAED,IACI,0BAA0B,KAAK,SAAS;WACrC,CAAC,IAAA,uBAAa,EAAC,WAAW,EAAE,KAAK,EAAE,0BAA0B,CAAC,MAAM,CAAC,EAC1E,CAAC;QACC,OAAO,CAAC;gBACJ,IAAI,EAAE,qBAAa,CAAC,kCAAkC;gBACtD,OAAO,EAAE,0EAA0E;gBACnF,IAAI,EAAE,GAAG,UAAU,YAAY;gBAC/B,QAAQ,EAAE,0BAA0B,CAAC,MAAM;gBAC3C,MAAM,EAAE,KAAK;aAChB,CAAC,CAAC;IACP,CAAC;IAED,OAAO,EAAE,CAAC;AACd,CAAC;AAED,SAAS,kCAAkC,CACvC,EAAuB,EACvB,UAAkB,EAClB,IAAuD,EACvD,WAAoB;IAEpB,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,UAAU,GAAgB,EAAE,CAAC;IAEnC,IAAI,CAAC,IAAA,uBAAa,EAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACjD,UAAU,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,qBAAa,CAAC,kCAAkC;YACtD,OAAO,EAAE,2EAA2E;YACpF,IAAI,EAAE,GAAG,UAAU,YAAY;YAC/B,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,MAAM,EAAE,IAAI;SACf,CAAC,CAAC;IACP,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,SAAS,+BAA+B,CACpC,WAAiC,EACjC,UAAkB,EAClB,SAAkB,EAClB,wBAA4C,EAC5C,0BAAgE,EAChE,WAAoB;IAEpB,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,iBAAiB,CAAC;IACnD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACpC,OAAO;QACH,GAAG,4CAA4C,CAC3C,QAAQ,EACR,UAAU,EACV,0BAA0B,EAC1B,WAAW,CACd;QACD,GAAG,wCAAwC,CACvC,QAAQ,EACR,UAAU,EACV,SAAS,EACT,wBAAwB,EACxB,WAAW,CACd;KACJ,CAAC;AACN,CAAC;AAED,iEAAiE;AACjE,SAAS,4CAA4C,CACjD,QAAgB,EAChB,UAAkB,EAClB,0BAAgE,EAChE,WAAoB;IAEpB,IAAI,0BAA0B,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAExD,IAAI,IAAA,uBAAa,EAAC,WAAW,EAAE,QAAQ,EAAE,0BAA0B,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvF,OAAO,CAAC;YACJ,IAAI,EAAE,qBAAa,CAAC,qCAAqC;YACzD,OAAO,EAAE,iEAAiE;YAC1E,IAAI,EAAE,GAAG,UAAU,YAAY;YAC/B,QAAQ,EAAE,0BAA0B,CAAC,MAAM;YAC3C,MAAM,EAAE,QAAQ;SACnB,CAAC,CAAC;AACP,CAAC;AAED,gEAAgE;AAChE,SAAS,wCAAwC,CAC7C,QAAgB,EAChB,UAAkB,EAClB,SAAkB,EAClB,wBAA4C,EAC5C,WAAoB;IAEpB,2EAA2E;IAC3E,6EAA6E;IAC7E,IAAI,SAAS,IAAI,wBAAwB,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAEnE,IAAI,CAAC,IAAA,uBAAa,EAAC,WAAW,EAAE,QAAQ,EAAE,wBAAwB,CAAC;QAAE,OAAO,EAAE,CAAC;IAE/E,OAAO,CAAC;YACJ,IAAI,EAAE,qBAAa,CAAC,mCAAmC;YACvD,OAAO,EAAE,gDAAgD;YACzD,IAAI,EAAE,GAAG,UAAU,YAAY;YAC/B,MAAM,EAAE,QAAQ;SACnB,CAAC,CAAC;AACP,CAAC;AAED,gDAAgD;AAChD,UAAU;AACV,gDAAgD;AAEhD,SAAS,4BAA4B,CACjC,IAAY,EACZ,YAA2C;IAE3C,OAAO,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;QACnC,IAAI,WAAW,CAAC,IAAI,KAAK,uBAAe,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAChE,OAAO,oBAAoB,CAAC,IAAI,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,oBAAoB,CACzB,IAAY,EACZ,YAAoB;IAEpB,MAAM,WAAW,GAAG,IAAI,MAAM,CAC1B,MAAM,WAAW,CAAC,YAAY,CAAC,iBAAiB,CACnD,CAAC;IACF,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAC9B,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,uBAAuB,CAC5B,MAA8B,EAC9B,UAAkB,EAClB,SAAwB;IAExB,MAAM,OAAO,GAAI,MAAM,CAAC,IAAyB,CAAC,IAAI,CAAC;IACvD,OAAO,IAAA,4DAAgC,EACnC,OAAO,EAAE,GAAG,UAAU,YAAY,EAAE,SAAS,EAAE,SAAS,CAC3D,CAAC;AACN,CAAC;AAED,2EAA2E;AAC3E,mCAAmC;AACnC,SAAS,oBAAoB,CAAC,EAAuB;IACjD,IAAI,EAAE,CAAC,SAAS,KAAK,4BAAiB,IAAI,EAAE,CAAC,SAAS,KAAK,iCAAsB,EAAE,CAAC;QAChF,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC5B,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE;QAAE,OAAO,GAAG,CAAC;IACjC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC"}
|
|
1
|
+
{"version":3,"file":"solana-hook.js","sourceRoot":"","sources":["../../../src/validations/solana-hook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateSolanaInitIntentAccounts = validateSolanaInitIntentAccounts;
|
|
4
|
+
exports.validateSolanaUpdateIntentAccounts = validateSolanaUpdateIntentAccounts;
|
|
5
|
+
const types_1 = require("../types");
|
|
6
|
+
const solana_intent_instruction_1 = require("../helpers/solana-intent-instruction");
|
|
7
|
+
const programs_1 = require("../whitelists/solana/programs");
|
|
8
|
+
// CRITICAL: bind init accounts to the maker and the storage PDA of this intent.
|
|
9
|
+
// Rent payers are not whitelisted; only the privileges needed by the instruction
|
|
10
|
+
// are required. Delegated initialization additionally binds the maker-info PDA;
|
|
11
|
+
// authorization of its delegate is enforced by the program's maker-info state.
|
|
12
|
+
function validateSolanaInitIntentAccounts(transaction, instructionIndex, kind, accounts, path) {
|
|
13
|
+
const usesSignature = (0, solana_intent_instruction_1.isSignatureInit)(kind);
|
|
14
|
+
const maker = { name: "maker", address: accounts.maker };
|
|
15
|
+
const authorization = (0, solana_intent_instruction_1.isDelegateInit)(kind)
|
|
16
|
+
? [
|
|
17
|
+
{
|
|
18
|
+
name: "delegate",
|
|
19
|
+
...(usesSignature ? {} : { signer: true })
|
|
20
|
+
},
|
|
21
|
+
maker,
|
|
22
|
+
{
|
|
23
|
+
name: "makerInfo",
|
|
24
|
+
address: accounts.makerInfo,
|
|
25
|
+
...(usesSignature ? {} : { writable: true })
|
|
26
|
+
},
|
|
27
|
+
]
|
|
28
|
+
: [{ ...maker, ...(usesSignature ? {} : { signer: true }) }];
|
|
29
|
+
return validateInstructionAccounts(transaction, instructionIndex, [
|
|
30
|
+
...authorization,
|
|
31
|
+
{ name: "rentPayer", signer: true, writable: true },
|
|
32
|
+
{ name: "state", address: accounts.state },
|
|
33
|
+
{ name: "intentStorage", address: accounts.intentStorage, writable: true },
|
|
34
|
+
...programAccounts(accounts),
|
|
35
|
+
], path);
|
|
36
|
+
}
|
|
37
|
+
// CRITICAL: an inline update must seal the same storage account as initialization.
|
|
38
|
+
// The program ID occupies Anchor's absent optional buffer-account slot.
|
|
39
|
+
function validateSolanaUpdateIntentAccounts(transaction, instructionIndex, accounts, path) {
|
|
40
|
+
const [systemProgram, eventAuthority, program] = programAccounts(accounts);
|
|
41
|
+
return validateInstructionAccounts(transaction, instructionIndex, [
|
|
42
|
+
{ name: "rentPayer", signer: true, writable: true },
|
|
43
|
+
{ name: "state", address: accounts.state },
|
|
44
|
+
{ name: "intentStorage", address: accounts.intentStorage, writable: true },
|
|
45
|
+
systemProgram,
|
|
46
|
+
{ name: "buffer", address: accounts.program },
|
|
47
|
+
eventAuthority,
|
|
48
|
+
program,
|
|
49
|
+
], path);
|
|
50
|
+
}
|
|
51
|
+
function programAccounts(accounts) {
|
|
52
|
+
return [
|
|
53
|
+
{ name: "systemProgram", address: programs_1.SYSTEM_PROGRAM },
|
|
54
|
+
{ name: "eventAuthority", address: accounts.eventAuthority },
|
|
55
|
+
{ name: "program", address: accounts.program },
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
// HIGH: reject missing or extra operands rather than silently ignoring accounts.
|
|
59
|
+
function validateInstructionAccounts(transaction, instructionIndex, expected, path) {
|
|
60
|
+
const accountIndices = transaction.message.compiledInstructions[instructionIndex].accountKeyIndexes;
|
|
61
|
+
if (accountIndices.length !== expected.length) {
|
|
62
|
+
return [{
|
|
63
|
+
code: types_1.ViolationCode.SolanaIntentInstructionAccountsMismatch,
|
|
64
|
+
message: "intent instruction account count does not match its layout",
|
|
65
|
+
path,
|
|
66
|
+
expected: expected.length,
|
|
67
|
+
actual: accountIndices.length,
|
|
68
|
+
details: { instructionIndex },
|
|
69
|
+
}];
|
|
70
|
+
}
|
|
71
|
+
return expected.flatMap((account, i) => validateAccount(transaction, accountIndices[i], account, path, instructionIndex, i));
|
|
72
|
+
}
|
|
73
|
+
// CRITICAL: account identity and required signer/writable privileges must match.
|
|
74
|
+
// Other instructions can promote shared accounts to signer/writable, so additional
|
|
75
|
+
// privileges are not rejected merely because this instruction does not need them.
|
|
76
|
+
function validateAccount(transaction, keyIndex, expected, path, instructionIndex, accountIndex) {
|
|
77
|
+
const message = transaction.message;
|
|
78
|
+
const address = message.staticAccountKeys[keyIndex]?.toBase58();
|
|
79
|
+
const signer = message.isAccountSigner(keyIndex);
|
|
80
|
+
const writable = message.isAccountWritable(keyIndex);
|
|
81
|
+
if (address !== undefined
|
|
82
|
+
&& (expected.address === undefined || address === expected.address)
|
|
83
|
+
&& (!expected.signer || signer)
|
|
84
|
+
&& (!expected.writable || writable))
|
|
85
|
+
return [];
|
|
86
|
+
return [{
|
|
87
|
+
code: types_1.ViolationCode.SolanaIntentInstructionAccountsMismatch,
|
|
88
|
+
message: "intent instruction account identity or required privileges do not match",
|
|
89
|
+
path,
|
|
90
|
+
expected: { address: expected.address, signer: expected.signer, writable: expected.writable },
|
|
91
|
+
actual: {
|
|
92
|
+
address,
|
|
93
|
+
signer: expected.signer ? signer : undefined,
|
|
94
|
+
writable: expected.writable ? writable : undefined,
|
|
95
|
+
},
|
|
96
|
+
details: { instructionIndex, accountIndex, account: expected.name },
|
|
97
|
+
}];
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=solana-intent-accounts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana-intent-accounts.js","sourceRoot":"","sources":["../../../src/validations/solana-intent-accounts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readSolanaSweepTransfer = readSolanaSweepTransfer;
|
|
4
|
+
const address_1 = require("../helpers/address");
|
|
5
|
+
const solana_instruction_1 = require("../helpers/solana-instruction");
|
|
6
|
+
const solana_hook_instructions_1 = require("../helpers/solana-hook-instructions");
|
|
7
|
+
const programs_1 = require("../whitelists/solana/programs");
|
|
8
|
+
// Checks whether the entire hook is an allowed transfer for this sweep.
|
|
9
|
+
// Returns `undefined` when the hook does not match.
|
|
10
|
+
// Recipient whitelisting is checked separately.
|
|
11
|
+
function readSolanaSweepTransfer(hook, sweep) {
|
|
12
|
+
// CRITICAL: an API-built Solana hook is not a trusted user-provided transaction.
|
|
13
|
+
// Decode every instruction before treating its bytes as the expected Hook payload.
|
|
14
|
+
try {
|
|
15
|
+
const decoded = (0, solana_hook_instructions_1.decodeSolanaHookInstructions)(hook.data);
|
|
16
|
+
// CRITICAL: additional signers must be readonly and used only by Memo.
|
|
17
|
+
if (!areSweepSignersAllowed(decoded, sweep))
|
|
18
|
+
return undefined;
|
|
19
|
+
// Collect matching transfers and retain their instruction indices.
|
|
20
|
+
// Non-matching instructions are checked separately below, not ignored.
|
|
21
|
+
const transfers = decoded.instructions.flatMap((instruction, index) => {
|
|
22
|
+
const transfer = readTransfer(instruction, sweep);
|
|
23
|
+
return transfer === undefined ? [] : [{ transfer, index }];
|
|
24
|
+
});
|
|
25
|
+
// CRITICAL: exactly one instruction must match this sweep's transfer.
|
|
26
|
+
if (transfers.length !== 1)
|
|
27
|
+
return undefined;
|
|
28
|
+
const { transfer, index } = transfers[0];
|
|
29
|
+
// CRITICAL: every remaining instruction must be an allowed memo,
|
|
30
|
+
// destination ATA creation, or source ATA close. This also rejects
|
|
31
|
+
// transfers that did not match the sweep.
|
|
32
|
+
if (!auxiliaryInstructionsMatch(decoded.instructions, index, transfer, sweep, decoded.feePayer))
|
|
33
|
+
return undefined;
|
|
34
|
+
return transfer;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Malformed bytes/accounts cannot bind a sweep.
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// The API currently adds one Memo co-signer. Intentionally, the SDK does not cap
|
|
42
|
+
// their number: additional base fees and dependence on every required signature
|
|
43
|
+
// are accepted risks. This checks signer roles, not API identity or signatures.
|
|
44
|
+
function areSweepSignersAllowed(decoded, sweep) {
|
|
45
|
+
return decoded.signers.every(signer => {
|
|
46
|
+
// Authority and fee payer may be writable and may also sign Memo.
|
|
47
|
+
if ((0, address_1.addressEquals)(sweep.realChainId, signer, sweep.sender)
|
|
48
|
+
|| (0, address_1.addressEquals)(sweep.realChainId, signer, decoded.feePayer))
|
|
49
|
+
return true;
|
|
50
|
+
return isReadonlyMemoOnlySigner(decoded.instructions, signer, sweep.realChainId);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
// Requires actual Memo use and rejects every other use of the additional signer,
|
|
54
|
+
// including as a program ID. Privileges are resolved from the complete message.
|
|
55
|
+
function isReadonlyMemoOnlySigner(instructions, signer, realChainId) {
|
|
56
|
+
let usedInMemo = false;
|
|
57
|
+
for (const instruction of instructions) {
|
|
58
|
+
// CRITICAL: an additional signer must not be used as an instruction's program ID.
|
|
59
|
+
if ((0, address_1.addressEquals)(realChainId, instruction.programId, signer))
|
|
60
|
+
return false;
|
|
61
|
+
for (let i = 0; i < instruction.accountKeys.length; i++) {
|
|
62
|
+
if (!(0, address_1.addressEquals)(realChainId, instruction.accountKeys[i], signer))
|
|
63
|
+
continue;
|
|
64
|
+
// CRITICAL: check every occurrence; writable privileges are global,
|
|
65
|
+
// and even a readonly account reference outside Memo is forbidden.
|
|
66
|
+
if (!(0, solana_instruction_1.isMemo)(instruction)
|
|
67
|
+
|| !instruction.accountMetas[i].isSigner
|
|
68
|
+
|| instruction.accountMetas[i].isWritable)
|
|
69
|
+
return false;
|
|
70
|
+
usedInMemo = true;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// HIGH: an unused required signer adds a signature without a permitted role.
|
|
74
|
+
return usedInMemo;
|
|
75
|
+
}
|
|
76
|
+
// Checks whether this instruction transfers the expected asset from the expected
|
|
77
|
+
// sender for the sweep amount. Returns `undefined` if the instruction does not match.
|
|
78
|
+
function readTransfer(instruction, sweep) {
|
|
79
|
+
if ((0, address_1.isNativeToken)(sweep.trade.srcChainTokenIn, sweep.realChainId)) {
|
|
80
|
+
// CRITICAL: native SOL must use a SystemProgram.Transfer from the request authority.
|
|
81
|
+
if (!(0, solana_instruction_1.isSystemTransfer)(instruction)
|
|
82
|
+
|| instruction.data.length !== 12 // operation ID (4 bytes) + amount (8 bytes)
|
|
83
|
+
|| instruction.accountKeys.length !== 2 // sender + recipient
|
|
84
|
+
)
|
|
85
|
+
return undefined;
|
|
86
|
+
// Index 0 - sender account. Index 1 - recipient account.
|
|
87
|
+
if (!(0, address_1.addressEquals)(sweep.realChainId, instruction.accountKeys[0], sweep.sender)
|
|
88
|
+
|| !instruction.accountMetas[0].isSigner // sender must sign
|
|
89
|
+
|| !instruction.accountMetas[0].isWritable // writable because balance decreases
|
|
90
|
+
|| !instruction.accountMetas[1].isWritable // writable because balance increases
|
|
91
|
+
)
|
|
92
|
+
return undefined;
|
|
93
|
+
// Skip operation ID (4 bytes) and read the amount.
|
|
94
|
+
return readAmount(instruction.data, 4) === sweep.amount
|
|
95
|
+
? { destinationAddress: instruction.accountKeys[1] }
|
|
96
|
+
: undefined;
|
|
97
|
+
}
|
|
98
|
+
return readTokenTransfer(instruction, sweep);
|
|
99
|
+
}
|
|
100
|
+
// Checks whether this instruction transfers the expected SPL token from the source
|
|
101
|
+
// authority's ATA for the sweep amount. Returns `undefined` if the instruction does not match.
|
|
102
|
+
function readTokenTransfer(instruction, sweep) {
|
|
103
|
+
// CRITICAL: only the SPL Token and Token-2022 programs may execute this transfer.
|
|
104
|
+
if (instruction.programId !== programs_1.SPL_TOKEN_PROGRAM
|
|
105
|
+
&& instruction.programId !== programs_1.SPL_TOKEN_2022_PROGRAM)
|
|
106
|
+
return undefined;
|
|
107
|
+
const isTransferChecked = instruction.data[0] === solana_instruction_1.SPL_TRANSFER_CHECKED_DISCRIMINATOR;
|
|
108
|
+
if (!isTransferChecked && instruction.data[0] !== solana_instruction_1.SPL_TRANSFER_DISCRIMINATOR)
|
|
109
|
+
return undefined;
|
|
110
|
+
if (
|
|
111
|
+
// Operation ID (1 byte) + amount (8 bytes) + decimals (1 byte, TransferChecked only).
|
|
112
|
+
instruction.data.length !== (isTransferChecked ? 10 : 9)
|
|
113
|
+
|| instruction.accountKeys.length !== (isTransferChecked ? 4 : 3) // TransferChecked also includes the mint.
|
|
114
|
+
)
|
|
115
|
+
return undefined;
|
|
116
|
+
// TransferChecked: source token account (0), mint (1), destination token account (2), authority (3).
|
|
117
|
+
// Transfer: source token account (0), destination token account (1), authority (2).
|
|
118
|
+
const destinationIndex = isTransferChecked ? 2 : 1;
|
|
119
|
+
const authorityIndex = isTransferChecked ? 3 : 2;
|
|
120
|
+
// CRITICAL: accept both Transfer and TransferChecked intentionally: the
|
|
121
|
+
// request-derived source ATA binds the mint even without an explicit mint
|
|
122
|
+
// operand. Multisig/extension accounts are not implicitly authorized.
|
|
123
|
+
const source = (0, solana_instruction_1.deriveAta)(sweep.sender, sweep.trade.srcChainTokenIn, instruction.programId);
|
|
124
|
+
const sourceTokenAccountIndex = 0;
|
|
125
|
+
if (!(0, address_1.addressEquals)(sweep.realChainId, instruction.accountKeys[sourceTokenAccountIndex], source)
|
|
126
|
+
|| !(0, address_1.addressEquals)(sweep.realChainId, instruction.accountKeys[authorityIndex], sweep.sender)
|
|
127
|
+
|| !instruction.accountMetas[authorityIndex].isSigner // the source authority must sign
|
|
128
|
+
|| !instruction.accountMetas[sourceTokenAccountIndex].isWritable // writable because balance decreases
|
|
129
|
+
|| !instruction.accountMetas[destinationIndex].isWritable // writable because balance increases
|
|
130
|
+
)
|
|
131
|
+
return undefined;
|
|
132
|
+
// TransferChecked explicitly supplies the mint at index 1; it must match the request token.
|
|
133
|
+
if (isTransferChecked
|
|
134
|
+
&& !(0, address_1.addressEquals)(sweep.realChainId, instruction.accountKeys[1], sweep.trade.srcChainTokenIn))
|
|
135
|
+
return undefined;
|
|
136
|
+
// TransferChecked decimals are checked against the bound mint on chain;
|
|
137
|
+
// they do not scale the raw amount and cannot authorize additional tokens.
|
|
138
|
+
// Skip operation ID (1 byte) and read the uint64 little-endian amount in token base units.
|
|
139
|
+
return readAmount(instruction.data, 1) === sweep.amount
|
|
140
|
+
? {
|
|
141
|
+
destinationAddress: instruction.accountKeys[destinationIndex],
|
|
142
|
+
sourceTokenAccountAddress: source,
|
|
143
|
+
tokenProgram: instruction.programId,
|
|
144
|
+
}
|
|
145
|
+
: undefined;
|
|
146
|
+
}
|
|
147
|
+
// Checks every instruction except the matched transfer. Allows memos and at most
|
|
148
|
+
// one matching destination ATA creation before the transfer, and at most one
|
|
149
|
+
// matching source ATA close after the transfer. Returns false if any remaining
|
|
150
|
+
// instruction does not match these permitted forms.
|
|
151
|
+
function auxiliaryInstructionsMatch(instructions, transferIndex, transfer, sweep, feePayer) {
|
|
152
|
+
let createAtaCount = 0;
|
|
153
|
+
let closeAccountCount = 0;
|
|
154
|
+
for (let i = 0; i < instructions.length; i++) {
|
|
155
|
+
// The transfer itself has already been checked by `readTransfer`.
|
|
156
|
+
if (i === transferIndex)
|
|
157
|
+
continue;
|
|
158
|
+
const instruction = instructions[i];
|
|
159
|
+
// The Memo program cannot transfer funds. Memo accounts must be signers;
|
|
160
|
+
// only the source authority / fee payer may have writable privileges.
|
|
161
|
+
if (matchesSweepMemo(instruction, sweep, feePayer))
|
|
162
|
+
continue;
|
|
163
|
+
// CRITICAL: allow at most one destination ATA creation before the transfer.
|
|
164
|
+
// It may be needed when the recipient's ATA does not yet exist.
|
|
165
|
+
if (i < transferIndex
|
|
166
|
+
&& matchesDestinationAtaCreation(instruction, transfer, sweep, feePayer)) {
|
|
167
|
+
if (++createAtaCount > 1)
|
|
168
|
+
return false;
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
// CRITICAL: closing is limited to the exact source ATA after the transfer,
|
|
172
|
+
// returning rent to the source authority. No other closes or fee instructions are allowed.
|
|
173
|
+
if (i > transferIndex && matchesSourceAtaClose(instruction, transfer, sweep)) {
|
|
174
|
+
if (++closeAccountCount > 1)
|
|
175
|
+
return false;
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
// Checks whether this is a memo with no accounts or only signer accounts.
|
|
183
|
+
// Additional signers must be readonly; authority / fee payer may be writable.
|
|
184
|
+
function matchesSweepMemo(instruction, sweep, feePayer) {
|
|
185
|
+
// HIGH: all accounts must sign, with writable privileges limited to the
|
|
186
|
+
// authority / fee payer. An empty list is valid: Memo need not name signers.
|
|
187
|
+
return (0, solana_instruction_1.isMemo)(instruction)
|
|
188
|
+
&& instruction.accountKeys.every((address, index) => {
|
|
189
|
+
return instruction.accountMetas[index].isSigner
|
|
190
|
+
&& ((0, address_1.addressEquals)(sweep.realChainId, address, sweep.sender)
|
|
191
|
+
|| (0, address_1.addressEquals)(sweep.realChainId, address, feePayer)
|
|
192
|
+
|| !instruction.accountMetas[index].isWritable);
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
// Checks whether this instruction idempotently creates the transfer's destination ATA.
|
|
196
|
+
// The fee payer may be the source authority, so this can spend the user's SOL on ATA rent.
|
|
197
|
+
// Returns false on a mismatch.
|
|
198
|
+
function matchesDestinationAtaCreation(instruction, transfer, sweep, feePayer) {
|
|
199
|
+
if (transfer.tokenProgram === undefined // Native SOL transfers do not use a destination ATA.
|
|
200
|
+
|| !(0, solana_instruction_1.isCreateAtaIdempotent)(instruction)
|
|
201
|
+
|| instruction.accountKeys.length !== 6 // payer, destination ATA, owner, mint, System Program, token program
|
|
202
|
+
)
|
|
203
|
+
return false;
|
|
204
|
+
const [payer, destination, owner, mint, systemProgram, tokenProgram] = instruction.accountKeys;
|
|
205
|
+
if (!hasDestinationAtaCreationPrivileges(instruction))
|
|
206
|
+
return false;
|
|
207
|
+
// Funding must come from the transaction fee payer, not another account.
|
|
208
|
+
if (!(0, address_1.addressEquals)(sweep.realChainId, payer, feePayer))
|
|
209
|
+
return false;
|
|
210
|
+
// Bind the programs, mint and destination to this transfer, and verify that
|
|
211
|
+
// the supplied owner derives the same destination ATA for this mint/token program.
|
|
212
|
+
return systemProgram === programs_1.SYSTEM_PROGRAM
|
|
213
|
+
&& tokenProgram === transfer.tokenProgram
|
|
214
|
+
&& (0, address_1.addressEquals)(sweep.realChainId, mint, sweep.trade.srcChainTokenIn)
|
|
215
|
+
&& (0, address_1.addressEquals)(sweep.realChainId, destination, transfer.destinationAddress)
|
|
216
|
+
&& (0, address_1.addressEquals)(sweep.realChainId, destination, (0, solana_instruction_1.deriveAta)(owner, mint, tokenProgram));
|
|
217
|
+
}
|
|
218
|
+
function hasDestinationAtaCreationPrivileges(instruction) {
|
|
219
|
+
// CRITICAL: privileges are transaction-global, so owner/mint/program accounts
|
|
220
|
+
// may inherit signer/writable status from safe aliases such as user=recipient.
|
|
221
|
+
// Require only the capabilities needed by the ATA create instruction.
|
|
222
|
+
return instruction.accountMetas[0].isSigner // The payer must authorize funding the account.
|
|
223
|
+
&& instruction.accountMetas[0].isWritable // The payer's SOL balance may decrease.
|
|
224
|
+
&& instruction.accountMetas[1].isWritable; // The destination ATA may be initialized.
|
|
225
|
+
}
|
|
226
|
+
// Checks whether this closes the source ATA after the sweep transfer and returns rent
|
|
227
|
+
// to the source authority. Returns false for native SOL or any unbound account.
|
|
228
|
+
function matchesSourceAtaClose(instruction, transfer, sweep) {
|
|
229
|
+
if (transfer.sourceTokenAccountAddress === undefined
|
|
230
|
+
|| transfer.tokenProgram === undefined
|
|
231
|
+
|| instruction.programId !== transfer.tokenProgram
|
|
232
|
+
|| instruction.data.length !== 1 // Operation ID (1 byte), with no additional instruction data.
|
|
233
|
+
|| instruction.data[0] !== solana_instruction_1.SPL_CLOSE_ACCOUNT_DISCRIMINATOR
|
|
234
|
+
|| instruction.accountKeys.length !== 3 // account, rent destination, close authority
|
|
235
|
+
)
|
|
236
|
+
return false;
|
|
237
|
+
const [account, destination, authority] = instruction.accountKeys;
|
|
238
|
+
// CRITICAL: CloseAccount may only close the source authority's ATA and must
|
|
239
|
+
// return its rent to the same authority. Privileges are transaction-global:
|
|
240
|
+
// only require needed writable/signer capabilities, not exact readonly aliases.
|
|
241
|
+
return (0, address_1.addressEquals)(sweep.realChainId, account, transfer.sourceTokenAccountAddress)
|
|
242
|
+
&& (0, address_1.addressEquals)(sweep.realChainId, destination, sweep.sender)
|
|
243
|
+
&& (0, address_1.addressEquals)(sweep.realChainId, authority, sweep.sender)
|
|
244
|
+
&& instruction.accountMetas[0].isWritable // Source ATA: writable because the account is closed.
|
|
245
|
+
&& instruction.accountMetas[1].isWritable // Rent destination: writable because its SOL balance increases.
|
|
246
|
+
&& instruction.accountMetas[2].isSigner; // Close authority: must sign to authorize closing the account.
|
|
247
|
+
}
|
|
248
|
+
function readAmount(data, offset) {
|
|
249
|
+
return new DataView(data.buffer, data.byteOffset, data.byteLength).getBigUint64(offset, true);
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=solana-low-input-sweep.js.map
|