@ercworldio/blockchain-shared 1.0.23 → 1.0.25
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/build/services/solana/escrow/services/TreasuryWithdrawalSignature.d.ts +18 -1
- package/build/services/solana/escrow/services/TreasuryWithdrawalSignature.d.ts.map +1 -1
- package/build/services/solana/escrow/services/TreasuryWithdrawalSignature.js +38 -1
- package/build/services/types/alchemy.d.ts +13 -2
- package/build/services/types/alchemy.d.ts.map +1 -1
- package/build/utils/solana.d.ts.map +1 -1
- package/build/utils/solana.js +46 -0
- package/package.json +1 -1
|
@@ -50,6 +50,23 @@ export interface Ed25519Entry {
|
|
|
50
50
|
signature: Uint8Array;
|
|
51
51
|
message: Uint8Array;
|
|
52
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Wraps `message` in the Solana off-chain message envelope (legacy version 0 header). MUST match
|
|
55
|
+
* the program's `offchain_envelope` byte for byte:
|
|
56
|
+
*
|
|
57
|
+
* 0xff "solana offchain" | version (0) | format | length (u16 LE) | message
|
|
58
|
+
*
|
|
59
|
+
* Ledger-backed wallets can't sign arbitrary bytes, so `signMessage` on them signs this envelope
|
|
60
|
+
* instead of the raw approval text. Format is 0 for printable ASCII only, otherwise 1.
|
|
61
|
+
*/
|
|
62
|
+
export declare function offchainEnvelope(message: Uint8Array): Buffer;
|
|
63
|
+
/**
|
|
64
|
+
* Returns the bytes `signature` actually covers: the raw message (regular wallets) or its
|
|
65
|
+
* off-chain envelope (Ledger-backed wallets). The precompile verifies whatever bytes the Ed25519
|
|
66
|
+
* instruction carries, and the program accepts either form, so the entry must carry the one that
|
|
67
|
+
* verifies. Falls back to the raw message when neither does; the precompile then rejects it.
|
|
68
|
+
*/
|
|
69
|
+
export declare function resolveSignedMessage(publicKey: Uint8Array, signature: Uint8Array, message: Uint8Array): Uint8Array;
|
|
53
70
|
/**
|
|
54
71
|
* Builds a single Ed25519SigVerify instruction carrying `entries` self-contained signatures
|
|
55
72
|
* (each entry's pubkey, signature and message live in this instruction's own data). This is the
|
|
@@ -61,5 +78,5 @@ export interface Ed25519Entry {
|
|
|
61
78
|
* approve one withdrawal all sign the same ~194-byte payload, so without sharing, a 2-of-N
|
|
62
79
|
* approval would spend an extra ~194 bytes and overflow Solana's 1232-byte transaction limit.
|
|
63
80
|
*/
|
|
64
|
-
export declare function buildTreasuryEd25519Instruction(
|
|
81
|
+
export declare function buildTreasuryEd25519Instruction(input: Ed25519Entry[]): TransactionInstruction;
|
|
65
82
|
//# sourceMappingURL=TreasuryWithdrawalSignature.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreasuryWithdrawalSignature.d.ts","sourceRoot":"","sources":["../../../../../src/services/solana/escrow/services/TreasuryWithdrawalSignature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,SAAS,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"TreasuryWithdrawalSignature.d.ts","sourceRoot":"","sources":["../../../../../src/services/solana/escrow/services/TreasuryWithdrawalSignature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,SAAS,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAIpF;;;;;GAKG;AAEH,wEAAwE;AACxE,MAAM,WAAW,sBAAsB;IACnC,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE;IACnD,eAAe,EAAE,SAAS,CAAC;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CAWT;AAED,oFAAoF;AACpF,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAU5D;AAED,4EAA4E;AAC5E,MAAM,WAAW,YAAY;IACzB,SAAS,EAAE,UAAU,CAAC;IACtB,SAAS,EAAE,UAAU,CAAC;IACtB,OAAO,EAAE,UAAU,CAAC;CACvB;AAID;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAM5D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,CAKlH;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,sBAAsB,CAsD7F"}
|
|
@@ -5,9 +5,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.buildWithdrawalApprovalMessage = buildWithdrawalApprovalMessage;
|
|
7
7
|
exports.decodeEd25519Signature = decodeEd25519Signature;
|
|
8
|
+
exports.offchainEnvelope = offchainEnvelope;
|
|
9
|
+
exports.resolveSignedMessage = resolveSignedMessage;
|
|
8
10
|
exports.buildTreasuryEd25519Instruction = buildTreasuryEd25519Instruction;
|
|
9
11
|
const web3_js_1 = require("@solana/web3.js");
|
|
10
12
|
const bs58_1 = __importDefault(require("bs58"));
|
|
13
|
+
const tweetnacl_1 = __importDefault(require("tweetnacl"));
|
|
11
14
|
/**
|
|
12
15
|
* Builds the UTF-8 approval message a treasury signer approves. MUST match the program's
|
|
13
16
|
* `build_withdrawal_message` byte for byte, or verification fails.
|
|
@@ -57,6 +60,38 @@ function decodeEd25519Signature(s) {
|
|
|
57
60
|
catch ( /* fallthrough */_a) { /* fallthrough */ }
|
|
58
61
|
throw new Error("Invalid Ed25519 signature encoding (expected 64 bytes as base64/hex/base58)");
|
|
59
62
|
}
|
|
63
|
+
const OFFCHAIN_SIGNING_DOMAIN = Buffer.concat([Buffer.from([0xff]), Buffer.from("solana offchain", "ascii")]);
|
|
64
|
+
/**
|
|
65
|
+
* Wraps `message` in the Solana off-chain message envelope (legacy version 0 header). MUST match
|
|
66
|
+
* the program's `offchain_envelope` byte for byte:
|
|
67
|
+
*
|
|
68
|
+
* 0xff "solana offchain" | version (0) | format | length (u16 LE) | message
|
|
69
|
+
*
|
|
70
|
+
* Ledger-backed wallets can't sign arbitrary bytes, so `signMessage` on them signs this envelope
|
|
71
|
+
* instead of the raw approval text. Format is 0 for printable ASCII only, otherwise 1.
|
|
72
|
+
*/
|
|
73
|
+
function offchainEnvelope(message) {
|
|
74
|
+
if (message.length > 0xffff)
|
|
75
|
+
throw new Error("Message too long for the off-chain message header");
|
|
76
|
+
const format = message.every(b => b >= 0x20 && b <= 0x7e) ? 0 : 1;
|
|
77
|
+
const len = Buffer.alloc(2);
|
|
78
|
+
len.writeUInt16LE(message.length);
|
|
79
|
+
return Buffer.concat([OFFCHAIN_SIGNING_DOMAIN, Buffer.from([0, format]), len, Buffer.from(message)]);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Returns the bytes `signature` actually covers: the raw message (regular wallets) or its
|
|
83
|
+
* off-chain envelope (Ledger-backed wallets). The precompile verifies whatever bytes the Ed25519
|
|
84
|
+
* instruction carries, and the program accepts either form, so the entry must carry the one that
|
|
85
|
+
* verifies. Falls back to the raw message when neither does; the precompile then rejects it.
|
|
86
|
+
*/
|
|
87
|
+
function resolveSignedMessage(publicKey, signature, message) {
|
|
88
|
+
if (tweetnacl_1.default.sign.detached.verify(message, signature, publicKey))
|
|
89
|
+
return message;
|
|
90
|
+
const envelope = offchainEnvelope(message);
|
|
91
|
+
if (tweetnacl_1.default.sign.detached.verify(envelope, signature, publicKey))
|
|
92
|
+
return envelope;
|
|
93
|
+
return message;
|
|
94
|
+
}
|
|
60
95
|
/**
|
|
61
96
|
* Builds a single Ed25519SigVerify instruction carrying `entries` self-contained signatures
|
|
62
97
|
* (each entry's pubkey, signature and message live in this instruction's own data). This is the
|
|
@@ -68,7 +103,9 @@ function decodeEd25519Signature(s) {
|
|
|
68
103
|
* approve one withdrawal all sign the same ~194-byte payload, so without sharing, a 2-of-N
|
|
69
104
|
* approval would spend an extra ~194 bytes and overflow Solana's 1232-byte transaction limit.
|
|
70
105
|
*/
|
|
71
|
-
function buildTreasuryEd25519Instruction(
|
|
106
|
+
function buildTreasuryEd25519Instruction(input) {
|
|
107
|
+
// Carry the bytes each signature actually covers (raw, or the Ledger off-chain envelope)
|
|
108
|
+
const entries = input.map(e => (Object.assign(Object.assign({}, e), { message: resolveSignedMessage(e.publicKey, e.signature, e.message) })));
|
|
72
109
|
const N = entries.length;
|
|
73
110
|
const OFFSETS_SIZE = 14;
|
|
74
111
|
const ENTRY_SIZE = 32 + 64; // pubkey + signature
|
|
@@ -143,12 +143,23 @@ interface SolanaTransactionMessage {
|
|
|
143
143
|
"account_keys": string[];
|
|
144
144
|
"recent_blockhash": string;
|
|
145
145
|
}
|
|
146
|
+
export interface SolanaTokenBalance {
|
|
147
|
+
accountIndex: number;
|
|
148
|
+
mint: string;
|
|
149
|
+
owner?: string;
|
|
150
|
+
uiTokenAmount: {
|
|
151
|
+
amount: string;
|
|
152
|
+
decimals: number;
|
|
153
|
+
uiAmount: number | null;
|
|
154
|
+
uiAmountString: string;
|
|
155
|
+
};
|
|
156
|
+
}
|
|
146
157
|
export interface SolanaMeta {
|
|
147
158
|
"fee": number;
|
|
148
159
|
"pre_balances": number[];
|
|
149
160
|
"post_balances": number[];
|
|
150
|
-
post_token_balances?:
|
|
151
|
-
pre_token_balances?:
|
|
161
|
+
post_token_balances?: SolanaTokenBalance[];
|
|
162
|
+
pre_token_balances?: SolanaTokenBalance[];
|
|
152
163
|
"inner_instructions_none": boolean;
|
|
153
164
|
"log_messages": string[];
|
|
154
165
|
"log_messages_none": boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alchemy.d.ts","sourceRoot":"","sources":["../../../src/services/types/alchemy.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"alchemy.d.ts","sourceRoot":"","sources":["../../../src/services/types/alchemy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../src/utils/solana.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../src/utils/solana.ts"],"names":[],"mappings":"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"}
|
package/build/utils/solana.js
CHANGED
|
@@ -48,6 +48,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
48
48
|
exports.check_approve_delegate = exports.handle_create_versioned_transaction_spl = exports.estimate_withdraw_gas_cost = exports.create_versioned_transaction_solana = exports.get_token_account_info = exports.getSolanaConnectionPublic = exports.getRpcUrl = exports.getSolanaArchivalConnection = exports.getSolanaConnection = exports.find_transfer_instruction_depr = exports.find_transfer_instruction = exports.handle_transfer_batch = exports.handle_sweep = exports.SplTransferCheckedLayout = exports.SolTransferInstructionLayout = exports.usdc_program_address = exports.solana_program_address = exports.min_solana_funding_lamports = void 0;
|
|
49
49
|
const buffer_layout_utils_1 = require("@solana/buffer-layout-utils");
|
|
50
50
|
const buffer_layout_1 = require("@solana/buffer-layout");
|
|
51
|
+
const bs58_1 = __importDefault(require("bs58"));
|
|
51
52
|
const web3_js_1 = __importStar(require("@solana/web3.js"));
|
|
52
53
|
const Utility_1 = require("./Utility");
|
|
53
54
|
const spl_token_1 = require("@solana/spl-token");
|
|
@@ -184,20 +185,65 @@ const handle_transfer_batch = (payloads_1, chain_id_1, token_type_1, connection_
|
|
|
184
185
|
return { status: true, signatures, success, failed };
|
|
185
186
|
});
|
|
186
187
|
exports.handle_transfer_batch = handle_transfer_batch;
|
|
188
|
+
// SystemProgram instruction discriminant is a 4-byte LE u32 at the start of the
|
|
189
|
+
// instruction data. 2 === Transfer. Other variants (CreateAccount, Allocate, ...)
|
|
190
|
+
// can also carry 2+ accounts, so this must be checked before assuming accounts[1]
|
|
191
|
+
// is a transfer destination.
|
|
192
|
+
const is_system_transfer_instruction = (data) => {
|
|
193
|
+
try {
|
|
194
|
+
const decoded = bs58_1.default.decode(data);
|
|
195
|
+
if (decoded.length < 4)
|
|
196
|
+
return false;
|
|
197
|
+
return new DataView(decoded.buffer, decoded.byteOffset).getUint32(0, true) === 2;
|
|
198
|
+
}
|
|
199
|
+
catch (_a) {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
};
|
|
187
203
|
const find_transfer_instruction = (tx, receiver) => {
|
|
188
204
|
const message = tx.transaction[0].message[0];
|
|
189
205
|
const target_instruction = message.instructions.find(i => {
|
|
206
|
+
var _a, _b;
|
|
190
207
|
const program = message.account_keys[parseInt(i.program_id_index)];
|
|
191
208
|
if (!token_program_addresses.some(a => a === program))
|
|
192
209
|
return false;
|
|
193
210
|
// If a receiver is specified and this is a native SOL transfer, match by
|
|
194
211
|
// the destination account (accounts[1]) to find the exact instruction for
|
|
195
212
|
// that recipient. Needed for batch sends where one tx has many transfers.
|
|
213
|
+
// Also verify this is actually a Transfer and not some other SystemProgram
|
|
214
|
+
// instruction (e.g. CreateAccount) that happens to carry 2+ accounts too.
|
|
196
215
|
if (receiver && program === exports.solana_program_address) {
|
|
197
216
|
if (!i.accounts || i.accounts.length < 2)
|
|
198
217
|
return false;
|
|
218
|
+
if (!is_system_transfer_instruction(i.data))
|
|
219
|
+
return false;
|
|
199
220
|
return message.account_keys[i.accounts[1]] === receiver;
|
|
200
221
|
}
|
|
222
|
+
// Same need for SPL transfers, but the destination account's position in
|
|
223
|
+
// `accounts` differs between Transfer ([source, dest, authority]) and
|
|
224
|
+
// TransferChecked ([source, mint, dest, authority]), so we can't assume a
|
|
225
|
+
// fixed index like the native case. Instead match via the tx's token
|
|
226
|
+
// balance deltas, which carry the owner directly — any account this
|
|
227
|
+
// instruction touches that gained balance and belongs to `receiver` means
|
|
228
|
+
// this is that recipient's instruction. Needed for batch sends where one
|
|
229
|
+
// tx has many SPL transfers (e.g. a bundled multi-recipient deposit).
|
|
230
|
+
if (receiver && program !== exports.solana_program_address) {
|
|
231
|
+
if (!i.accounts || i.accounts.length === 0)
|
|
232
|
+
return false;
|
|
233
|
+
const meta = tx.meta[0];
|
|
234
|
+
const post = (_a = meta.post_token_balances) !== null && _a !== void 0 ? _a : [];
|
|
235
|
+
const pre = (_b = meta.pre_token_balances) !== null && _b !== void 0 ? _b : [];
|
|
236
|
+
const preByIndex = new Map(pre.map(b => { var _a, _b; return [b.accountIndex, BigInt((_b = (_a = b.uiTokenAmount) === null || _a === void 0 ? void 0 : _a.amount) !== null && _b !== void 0 ? _b : 0)]; }));
|
|
237
|
+
return i.accounts.some(accountIndex => {
|
|
238
|
+
var _a, _b, _c;
|
|
239
|
+
const postBalance = post.find(b => b.accountIndex === accountIndex && b.owner === receiver);
|
|
240
|
+
if (!postBalance)
|
|
241
|
+
return false;
|
|
242
|
+
const postAmount = BigInt((_b = (_a = postBalance.uiTokenAmount) === null || _a === void 0 ? void 0 : _a.amount) !== null && _b !== void 0 ? _b : 0);
|
|
243
|
+
const preAmount = (_c = preByIndex.get(accountIndex)) !== null && _c !== void 0 ? _c : BigInt(0);
|
|
244
|
+
return postAmount > preAmount;
|
|
245
|
+
});
|
|
246
|
+
}
|
|
201
247
|
return true; // original behaviour: first matching program
|
|
202
248
|
});
|
|
203
249
|
if (!target_instruction)
|