@meshconnect/uwc-bridge-parent 1.3.1-snapshot.ff0e2d8 → 1.4.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/BridgeParent.d.ts +2 -1
- package/dist/BridgeParent.d.ts.map +1 -1
- package/dist/BridgeParent.js +18 -2
- package/dist/BridgeParent.js.map +1 -1
- package/dist/signSolanaBytes.d.ts +23 -0
- package/dist/signSolanaBytes.d.ts.map +1 -0
- package/dist/signSolanaBytes.js +74 -0
- package/dist/signSolanaBytes.js.map +1 -0
- package/dist/signSolanaBytes.test.d.ts +2 -0
- package/dist/signSolanaBytes.test.d.ts.map +1 -0
- package/dist/signSolanaBytes.test.js +194 -0
- package/dist/signSolanaBytes.test.js.map +1 -0
- package/package.json +1 -1
- package/src/BridgeParent.ts +37 -2
- package/src/signSolanaBytes.test.ts +237 -0
- package/src/signSolanaBytes.ts +119 -0
package/dist/BridgeParent.d.ts
CHANGED
|
@@ -9,10 +9,11 @@ export interface EthereumProvider {
|
|
|
9
9
|
removeListener?: (event: string, handler: (...args: any[]) => void) => void;
|
|
10
10
|
}
|
|
11
11
|
interface ExtendedStandardWalletAdapter extends StandardWalletAdapter {
|
|
12
|
-
customFunctions: ('sendSerializedTransaction' | 'signSerializedTransaction' | 'signAllSerializedTransactions')[];
|
|
12
|
+
customFunctions: ('sendSerializedTransaction' | 'signSerializedTransaction' | 'signAllSerializedTransactions' | 'signSolanaTransactionBytes')[];
|
|
13
13
|
sendSerializedTransaction: (transaction: ArrayBufferLike, rpcUrl: string) => Promise<string>;
|
|
14
14
|
signSerializedTransaction: (transaction: ArrayBufferLike) => Promise<Error | Transaction>;
|
|
15
15
|
signAllSerializedTransactions: (transactions: ArrayBufferLike[]) => Promise<Error | Transaction[]>;
|
|
16
|
+
signSolanaTransactionBytes: (transaction: ArrayBufferLike, connectedAddress?: string) => Promise<Uint8Array>;
|
|
16
17
|
}
|
|
17
18
|
export interface WalletStandardInfo {
|
|
18
19
|
uuid: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BridgeParent.d.ts","sourceRoot":"","sources":["../src/BridgeParent.ts"],"names":[],"mappings":"AAOA,OAAO,EAAc,WAAW,EAAwB,MAAM,iBAAiB,CAAA;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAA;
|
|
1
|
+
{"version":3,"file":"BridgeParent.d.ts","sourceRoot":"","sources":["../src/BridgeParent.ts"],"names":[],"mappings":"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"}
|
package/dist/BridgeParent.js
CHANGED
|
@@ -4,6 +4,7 @@ import { isWalletAdapterCompatibleStandardWallet, WalletReadyState } from '@sola
|
|
|
4
4
|
import { Connection, Transaction, VersionedTransaction } from '@solana/web3.js';
|
|
5
5
|
import { StandardWalletAdapter } from '@solana/wallet-standard-wallet-adapter-base';
|
|
6
6
|
import { BaseWalletAdapter } from './BaseWalletAdapter';
|
|
7
|
+
import { signSolanaBytes } from './signSolanaBytes';
|
|
7
8
|
export class BridgeParent {
|
|
8
9
|
iframe;
|
|
9
10
|
parentAPI = null;
|
|
@@ -165,8 +166,16 @@ export class BridgeParent {
|
|
|
165
166
|
customFunctions: [
|
|
166
167
|
'sendSerializedTransaction',
|
|
167
168
|
'signAllSerializedTransactions',
|
|
168
|
-
'signSerializedTransaction'
|
|
169
|
+
'signSerializedTransaction',
|
|
170
|
+
'signSolanaTransactionBytes'
|
|
169
171
|
],
|
|
172
|
+
// Sign on the parent (where the wallet is) so only bytes cross
|
|
173
|
+
// Comlink — a Transaction object loses its prototype via
|
|
174
|
+
// structured clone. connectedAddress (from the child) wins over
|
|
175
|
+
// the parent publicKey, which may have drifted.
|
|
176
|
+
signSolanaTransactionBytes: async (transaction, connectedAddress) => {
|
|
177
|
+
return signSolanaBytes(adapter, new Uint8Array(transaction), connectedAddress);
|
|
178
|
+
},
|
|
170
179
|
sendSerializedTransaction: async (transaction, rpcUrl) => {
|
|
171
180
|
const connection = new Connection(rpcUrl);
|
|
172
181
|
const uint8Array = new Uint8Array(transaction);
|
|
@@ -308,8 +317,15 @@ export class BridgeParent {
|
|
|
308
317
|
customFunctions: [
|
|
309
318
|
'sendSerializedTransaction',
|
|
310
319
|
'signAllSerializedTransactions',
|
|
311
|
-
'signSerializedTransaction'
|
|
320
|
+
'signSerializedTransaction',
|
|
321
|
+
'signSolanaTransactionBytes'
|
|
312
322
|
],
|
|
323
|
+
// Legacy base adapter (no Wallet Standard feature) — signSolanaBytes
|
|
324
|
+
// falls back to deserialize → sign → reserialize. See Standard
|
|
325
|
+
// wrapper above for the connectedAddress rationale.
|
|
326
|
+
signSolanaTransactionBytes: async (transaction, connectedAddress) => {
|
|
327
|
+
return signSolanaBytes(baseAdapter, new Uint8Array(transaction), connectedAddress);
|
|
328
|
+
},
|
|
313
329
|
sendSerializedTransaction: async (transaction, rpcUrl) => {
|
|
314
330
|
const connection = new Connection(rpcUrl);
|
|
315
331
|
const uint8Array = new Uint8Array(transaction);
|
package/dist/BridgeParent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BridgeParent.js","sourceRoot":"","sources":["../src/BridgeParent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BridgeParent.js","sourceRoot":"","sources":["../src/BridgeParent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Transaction, VersionedTransaction } from '@solana/web3.js';
|
|
2
|
+
export interface SignableSolanaAdapter {
|
|
3
|
+
publicKey?: {
|
|
4
|
+
toBase58(): string;
|
|
5
|
+
} | null;
|
|
6
|
+
signTransaction?: ((tx: Transaction | VersionedTransaction) => Promise<Transaction | VersionedTransaction>) | undefined;
|
|
7
|
+
wallet?: {
|
|
8
|
+
accounts: ReadonlyArray<{
|
|
9
|
+
address: string;
|
|
10
|
+
}>;
|
|
11
|
+
features: Record<string, unknown>;
|
|
12
|
+
} | undefined;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Sign raw Solana tx bytes → raw signed bytes. Sign-only (the relay broadcasts).
|
|
16
|
+
* Prefers the Wallet Standard feature (no Transaction object → avoids the
|
|
17
|
+
* serialize() crash on some mobile WebViews); falls back to the adapter signer
|
|
18
|
+
* for legacy wallets. `connectedAddress` (from the iframe child) wins over the
|
|
19
|
+
* adapter publicKey, which can drift. The caller verifies the message wasn't
|
|
20
|
+
* altered (see InjectedConnector Path 1).
|
|
21
|
+
*/
|
|
22
|
+
export declare function signSolanaBytes(adapter: SignableSolanaAdapter, serializedTx: Uint8Array, connectedAddress?: string): Promise<Uint8Array>;
|
|
23
|
+
//# sourceMappingURL=signSolanaBytes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signSolanaBytes.d.ts","sourceRoot":"","sources":["../src/signSolanaBytes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAanE,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACzC,eAAe,CAAC,EACZ,CAAC,CACC,EAAE,EAAE,WAAW,GAAG,oBAAoB,KACnC,OAAO,CAAC,WAAW,GAAG,oBAAoB,CAAC,CAAC,GACjD,SAAS,CAAA;IACb,MAAM,CAAC,EACH;QACE,QAAQ,EAAE,aAAa,CAAC;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QAC5C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAClC,GACD,SAAS,CAAA;CACd;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,qBAAqB,EAC9B,YAAY,EAAE,UAAU,EACxB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,UAAU,CAAC,CAuCrB"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Transaction, VersionedTransaction } from '@solana/web3.js';
|
|
2
|
+
const SOLANA_SIGN_FEATURE = 'solana:signTransaction';
|
|
3
|
+
/**
|
|
4
|
+
* Sign raw Solana tx bytes → raw signed bytes. Sign-only (the relay broadcasts).
|
|
5
|
+
* Prefers the Wallet Standard feature (no Transaction object → avoids the
|
|
6
|
+
* serialize() crash on some mobile WebViews); falls back to the adapter signer
|
|
7
|
+
* for legacy wallets. `connectedAddress` (from the iframe child) wins over the
|
|
8
|
+
* adapter publicKey, which can drift. The caller verifies the message wasn't
|
|
9
|
+
* altered (see InjectedConnector Path 1).
|
|
10
|
+
*/
|
|
11
|
+
export async function signSolanaBytes(adapter, serializedTx, connectedAddress) {
|
|
12
|
+
const wallet = adapter.wallet;
|
|
13
|
+
if (wallet &&
|
|
14
|
+
SOLANA_SIGN_FEATURE in wallet.features &&
|
|
15
|
+
wallet.accounts.length > 0) {
|
|
16
|
+
const account = resolveSigningAccount(wallet.accounts, connectedAddress ?? adapter.publicKey?.toBase58());
|
|
17
|
+
const feature = wallet.features[SOLANA_SIGN_FEATURE];
|
|
18
|
+
const [output] = await feature.signTransaction({
|
|
19
|
+
account,
|
|
20
|
+
transaction: serializedTx
|
|
21
|
+
});
|
|
22
|
+
if (!output?.signedTransaction) {
|
|
23
|
+
throw new Error('Wallet returned no signed transaction');
|
|
24
|
+
}
|
|
25
|
+
// Caller (InjectedConnector Path 1) verifies the message — keeps this
|
|
26
|
+
// package @meshconnect-free.
|
|
27
|
+
return output.signedTransaction;
|
|
28
|
+
}
|
|
29
|
+
// Legacy fallback: build a Transaction and use the adapter's signer.
|
|
30
|
+
if (adapter.signTransaction === undefined) {
|
|
31
|
+
throw new Error('Adapter does not support signTransaction');
|
|
32
|
+
}
|
|
33
|
+
const tx = deserialize(serializedTx);
|
|
34
|
+
const signed = await adapter.signTransaction(tx);
|
|
35
|
+
// Serialize without the fee-payer's signature — the relay fills that slot.
|
|
36
|
+
return signed instanceof VersionedTransaction
|
|
37
|
+
? signed.serialize()
|
|
38
|
+
: new Uint8Array(signed.serialize({
|
|
39
|
+
requireAllSignatures: false,
|
|
40
|
+
verifySignatures: false
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Pick which account signs. We must sign with the account the user connected —
|
|
45
|
+
* never guess. A wrong signer produces a useless signature for a payment, so we
|
|
46
|
+
* throw instead of silently falling back to the first account.
|
|
47
|
+
*/
|
|
48
|
+
function resolveSigningAccount(accounts, connectedAddress) {
|
|
49
|
+
if (connectedAddress) {
|
|
50
|
+
const match = accounts.find(a => a.address === connectedAddress);
|
|
51
|
+
if (!match) {
|
|
52
|
+
throw new Error('Connected Solana account not found in the wallet — refusing to sign with a different account');
|
|
53
|
+
}
|
|
54
|
+
return match;
|
|
55
|
+
}
|
|
56
|
+
// No explicit selection is only safe when the wallet has exactly one account.
|
|
57
|
+
if (accounts.length === 1)
|
|
58
|
+
return accounts[0];
|
|
59
|
+
throw new Error('Cannot determine which Solana account to sign with — multiple accounts and none selected');
|
|
60
|
+
}
|
|
61
|
+
function deserialize(bytes) {
|
|
62
|
+
try {
|
|
63
|
+
return VersionedTransaction.deserialize(bytes);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
try {
|
|
67
|
+
return Transaction.from(bytes);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
throw new Error('Failed to deserialize transaction as either versioned or legacy format');
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=signSolanaBytes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signSolanaBytes.js","sourceRoot":"","sources":["../src/signSolanaBytes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAEnE,MAAM,mBAAmB,GAAG,wBAAwB,CAAA;AA0BpD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAA8B,EAC9B,YAAwB,EACxB,gBAAyB;IAEzB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAC7B,IACE,MAAM;QACN,mBAAmB,IAAI,MAAM,CAAC,QAAQ;QACtC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAC1B,CAAC;QACD,MAAM,OAAO,GAAG,qBAAqB,CACnC,MAAM,CAAC,QAAQ,EACf,gBAAgB,IAAI,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,CAClD,CAAA;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAsB,CAAA;QACzE,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC;YAC7C,OAAO;YACP,WAAW,EAAE,YAAY;SAC1B,CAAC,CAAA;QACF,IAAI,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;QAC1D,CAAC;QACD,sEAAsE;QACtE,6BAA6B;QAC7B,OAAO,MAAM,CAAC,iBAAiB,CAAA;IACjC,CAAC;IAED,qEAAqE;IACrE,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAC7D,CAAC;IACD,MAAM,EAAE,GAAG,WAAW,CAAC,YAAY,CAAC,CAAA;IACpC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;IAChD,2EAA2E;IAC3E,OAAO,MAAM,YAAY,oBAAoB;QAC3C,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE;QACpB,CAAC,CAAC,IAAI,UAAU,CACZ,MAAM,CAAC,SAAS,CAAC;YACf,oBAAoB,EAAE,KAAK;YAC3B,gBAAgB,EAAE,KAAK;SACxB,CAAC,CACH,CAAA;AACP,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAC5B,QAA0B,EAC1B,gBAAoC;IAEpC,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,gBAAgB,CAAC,CAAA;QAChE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,8FAA8F,CAC/F,CAAA;QACH,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,8EAA8E;IAC9E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAE,CAAA;IAC9C,MAAM,IAAI,KAAK,CACb,0FAA0F,CAC3F,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAiB;IACpC,IAAI,CAAC;QACH,OAAO,oBAAoB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAA;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signSolanaBytes.test.d.ts","sourceRoot":"","sources":["../src/signSolanaBytes.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
// @vitest-environment node
|
|
2
|
+
//
|
|
3
|
+
// Node env (not jsdom): @solana/web3.js's VersionedTransaction.deserialize relies
|
|
4
|
+
// on a Uint8Array prototype check that fails under jsdom's polyfilled Buffer.
|
|
5
|
+
// Same reason as injected-connector/src/signSolanaTransactionBytes.test.ts.
|
|
6
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
7
|
+
import { Keypair, SystemProgram, TransactionMessage, VersionedTransaction } from '@solana/web3.js';
|
|
8
|
+
import { signSolanaBytes } from './signSolanaBytes';
|
|
9
|
+
const payer = Keypair.generate();
|
|
10
|
+
const recipient = Keypair.generate().publicKey;
|
|
11
|
+
function buildSerializedV0Tx() {
|
|
12
|
+
const msg = new TransactionMessage({
|
|
13
|
+
payerKey: payer.publicKey,
|
|
14
|
+
recentBlockhash: '11111111111111111111111111111111',
|
|
15
|
+
instructions: [
|
|
16
|
+
SystemProgram.transfer({
|
|
17
|
+
fromPubkey: payer.publicKey,
|
|
18
|
+
toPubkey: recipient,
|
|
19
|
+
lamports: 1
|
|
20
|
+
})
|
|
21
|
+
]
|
|
22
|
+
}).compileToV0Message();
|
|
23
|
+
return new VersionedTransaction(msg).serialize();
|
|
24
|
+
}
|
|
25
|
+
function buildSignedV0Bytes() {
|
|
26
|
+
const msg = new TransactionMessage({
|
|
27
|
+
payerKey: payer.publicKey,
|
|
28
|
+
recentBlockhash: '11111111111111111111111111111111',
|
|
29
|
+
instructions: [
|
|
30
|
+
SystemProgram.transfer({
|
|
31
|
+
fromPubkey: payer.publicKey,
|
|
32
|
+
toPubkey: recipient,
|
|
33
|
+
lamports: 1
|
|
34
|
+
})
|
|
35
|
+
]
|
|
36
|
+
}).compileToV0Message();
|
|
37
|
+
const tx = new VersionedTransaction(msg);
|
|
38
|
+
tx.sign([payer]);
|
|
39
|
+
return tx.serialize();
|
|
40
|
+
}
|
|
41
|
+
describe('signSolanaBytes (uwc-bridge-parent)', () => {
|
|
42
|
+
// ── Preferred path: raw Wallet Standard feature ───────────────────────────
|
|
43
|
+
it('signs via the solana:signTransaction feature with raw bytes (no Transaction object built)', async () => {
|
|
44
|
+
const signedBytes = buildSignedV0Bytes();
|
|
45
|
+
const featureSignTx = vi
|
|
46
|
+
.fn()
|
|
47
|
+
.mockResolvedValue([{ signedTransaction: signedBytes }]);
|
|
48
|
+
const account = { address: payer.publicKey.toBase58() };
|
|
49
|
+
const adapter = {
|
|
50
|
+
publicKey: { toBase58: () => payer.publicKey.toBase58() },
|
|
51
|
+
// adapter.signTransaction is present but must NOT be used on this path.
|
|
52
|
+
signTransaction: vi.fn(),
|
|
53
|
+
wallet: {
|
|
54
|
+
accounts: [account],
|
|
55
|
+
features: {
|
|
56
|
+
'solana:signTransaction': { signTransaction: featureSignTx }
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const serialized = buildSerializedV0Tx();
|
|
61
|
+
const result = await signSolanaBytes(adapter, serialized);
|
|
62
|
+
expect(result).toBe(signedBytes);
|
|
63
|
+
// Raw bytes in — the exact same reference, never a deserialized object.
|
|
64
|
+
expect(featureSignTx).toHaveBeenCalledWith({
|
|
65
|
+
account,
|
|
66
|
+
transaction: serialized
|
|
67
|
+
});
|
|
68
|
+
expect(adapter.signTransaction).not.toHaveBeenCalled();
|
|
69
|
+
});
|
|
70
|
+
it('signs with the connected account, not blindly the first one', async () => {
|
|
71
|
+
const signedBytes = buildSignedV0Bytes();
|
|
72
|
+
const featureSignTx = vi
|
|
73
|
+
.fn()
|
|
74
|
+
.mockResolvedValue([{ signedTransaction: signedBytes }]);
|
|
75
|
+
const accountAAA = { address: 'AAA' };
|
|
76
|
+
const accountBBB = { address: 'BBB' };
|
|
77
|
+
const adapter = {
|
|
78
|
+
publicKey: { toBase58: () => 'BBB' },
|
|
79
|
+
wallet: {
|
|
80
|
+
accounts: [accountAAA, accountBBB],
|
|
81
|
+
features: {
|
|
82
|
+
'solana:signTransaction': { signTransaction: featureSignTx }
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
await signSolanaBytes(adapter, buildSerializedV0Tx());
|
|
87
|
+
expect(featureSignTx.mock.calls[0]?.[0]?.account).toBe(accountBBB);
|
|
88
|
+
});
|
|
89
|
+
it('prefers the explicit connectedAddress over the adapter publicKey', async () => {
|
|
90
|
+
// The parent's publicKey may have drifted; the caller-supplied address wins.
|
|
91
|
+
const signedBytes = buildSignedV0Bytes();
|
|
92
|
+
const featureSignTx = vi
|
|
93
|
+
.fn()
|
|
94
|
+
.mockResolvedValue([{ signedTransaction: signedBytes }]);
|
|
95
|
+
const accountAAA = { address: 'AAA' };
|
|
96
|
+
const accountBBB = { address: 'BBB' };
|
|
97
|
+
const adapter = {
|
|
98
|
+
publicKey: { toBase58: () => 'AAA' }, // parent's current account
|
|
99
|
+
wallet: {
|
|
100
|
+
accounts: [accountAAA, accountBBB],
|
|
101
|
+
features: {
|
|
102
|
+
'solana:signTransaction': { signTransaction: featureSignTx }
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
await signSolanaBytes(adapter, buildSerializedV0Tx(), 'BBB');
|
|
107
|
+
expect(featureSignTx.mock.calls[0]?.[0]?.account).toBe(accountBBB);
|
|
108
|
+
});
|
|
109
|
+
it('throws when the explicit connectedAddress is not in the wallet, even if publicKey is', async () => {
|
|
110
|
+
const featureSignTx = vi.fn();
|
|
111
|
+
const adapter = {
|
|
112
|
+
publicKey: { toBase58: () => 'AAA' }, // in the wallet, but not what we asked for
|
|
113
|
+
wallet: {
|
|
114
|
+
accounts: [{ address: 'AAA' }, { address: 'BBB' }],
|
|
115
|
+
features: {
|
|
116
|
+
'solana:signTransaction': { signTransaction: featureSignTx }
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
await expect(signSolanaBytes(adapter, buildSerializedV0Tx(), 'NOT_IN_WALLET')).rejects.toThrow('Connected Solana account not found in the wallet');
|
|
121
|
+
expect(featureSignTx).not.toHaveBeenCalled();
|
|
122
|
+
});
|
|
123
|
+
it('throws when the connected account is not in the wallet (never signs with a different account)', async () => {
|
|
124
|
+
const featureSignTx = vi.fn();
|
|
125
|
+
const adapter = {
|
|
126
|
+
publicKey: { toBase58: () => 'NOT_IN_WALLET' },
|
|
127
|
+
wallet: {
|
|
128
|
+
accounts: [{ address: 'AAA' }, { address: 'BBB' }],
|
|
129
|
+
features: {
|
|
130
|
+
'solana:signTransaction': { signTransaction: featureSignTx }
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
await expect(signSolanaBytes(adapter, buildSerializedV0Tx())).rejects.toThrow('Connected Solana account not found in the wallet');
|
|
135
|
+
expect(featureSignTx).not.toHaveBeenCalled();
|
|
136
|
+
});
|
|
137
|
+
it('throws when no account is selected and several exist', async () => {
|
|
138
|
+
const featureSignTx = vi.fn();
|
|
139
|
+
const adapter = {
|
|
140
|
+
publicKey: null, // toBase58 yields undefined → no selection
|
|
141
|
+
wallet: {
|
|
142
|
+
accounts: [{ address: 'AAA' }, { address: 'BBB' }],
|
|
143
|
+
features: {
|
|
144
|
+
'solana:signTransaction': { signTransaction: featureSignTx }
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
await expect(signSolanaBytes(adapter, buildSerializedV0Tx())).rejects.toThrow('Cannot determine which Solana account to sign with');
|
|
149
|
+
});
|
|
150
|
+
// ── Legacy fallback: deserialize → adapter.signTransaction → reserialize ───
|
|
151
|
+
it('falls back to adapter.signTransaction when the wallet has no Standard feature', async () => {
|
|
152
|
+
const adapterSignTx = vi
|
|
153
|
+
.fn()
|
|
154
|
+
.mockResolvedValue(VersionedTransaction.deserialize(buildSignedV0Bytes()));
|
|
155
|
+
const adapter = {
|
|
156
|
+
// No `wallet` → legacy base adapter shape.
|
|
157
|
+
signTransaction: adapterSignTx
|
|
158
|
+
};
|
|
159
|
+
const result = await signSolanaBytes(adapter, buildSerializedV0Tx());
|
|
160
|
+
expect(adapterSignTx).toHaveBeenCalledOnce();
|
|
161
|
+
// The adapter receives a deserialized Transaction object, not raw bytes.
|
|
162
|
+
expect(adapterSignTx.mock.calls[0]?.[0]).toBeInstanceOf(VersionedTransaction);
|
|
163
|
+
expect(result).toBeInstanceOf(Uint8Array);
|
|
164
|
+
expect(result.length).toBeGreaterThan(0);
|
|
165
|
+
});
|
|
166
|
+
it('throws when a legacy adapter cannot sign at all', async () => {
|
|
167
|
+
const adapter = {}; // no feature, no signTransaction
|
|
168
|
+
await expect(signSolanaBytes(adapter, buildSerializedV0Tx())).rejects.toThrow('Adapter does not support signTransaction');
|
|
169
|
+
});
|
|
170
|
+
// ── Invariant: sign-only, never broadcasts ────────────────────────────────
|
|
171
|
+
it('INVARIANT: never invokes any send/broadcast method', async () => {
|
|
172
|
+
const signAndSend = vi.fn();
|
|
173
|
+
const sendTransaction = vi.fn();
|
|
174
|
+
const featureSignTx = vi
|
|
175
|
+
.fn()
|
|
176
|
+
.mockResolvedValue([{ signedTransaction: buildSignedV0Bytes() }]);
|
|
177
|
+
const adapter = {
|
|
178
|
+
publicKey: { toBase58: () => payer.publicKey.toBase58() },
|
|
179
|
+
signTransaction: vi.fn(),
|
|
180
|
+
sendTransaction,
|
|
181
|
+
signAndSendTransaction: signAndSend,
|
|
182
|
+
wallet: {
|
|
183
|
+
accounts: [{ address: payer.publicKey.toBase58() }],
|
|
184
|
+
features: {
|
|
185
|
+
'solana:signTransaction': { signTransaction: featureSignTx }
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
await signSolanaBytes(adapter, buildSerializedV0Tx());
|
|
190
|
+
expect(signAndSend).not.toHaveBeenCalled();
|
|
191
|
+
expect(sendTransaction).not.toHaveBeenCalled();
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
//# sourceMappingURL=signSolanaBytes.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signSolanaBytes.test.js","sourceRoot":"","sources":["../src/signSolanaBytes.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/BridgeParent.ts
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
import { Connection, Transaction, VersionedTransaction } from '@solana/web3.js'
|
|
9
9
|
import { StandardWalletAdapter } from '@solana/wallet-standard-wallet-adapter-base'
|
|
10
10
|
import { BaseWalletAdapter } from './BaseWalletAdapter'
|
|
11
|
+
import { signSolanaBytes } from './signSolanaBytes'
|
|
11
12
|
|
|
12
13
|
export interface EthereumProvider {
|
|
13
14
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -23,6 +24,7 @@ interface ExtendedStandardWalletAdapter extends StandardWalletAdapter {
|
|
|
23
24
|
| 'sendSerializedTransaction'
|
|
24
25
|
| 'signSerializedTransaction'
|
|
25
26
|
| 'signAllSerializedTransactions'
|
|
27
|
+
| 'signSolanaTransactionBytes'
|
|
26
28
|
)[]
|
|
27
29
|
sendSerializedTransaction: (
|
|
28
30
|
transaction: ArrayBufferLike,
|
|
@@ -34,6 +36,10 @@ interface ExtendedStandardWalletAdapter extends StandardWalletAdapter {
|
|
|
34
36
|
signAllSerializedTransactions: (
|
|
35
37
|
transactions: ArrayBufferLike[]
|
|
36
38
|
) => Promise<Error | Transaction[]>
|
|
39
|
+
signSolanaTransactionBytes: (
|
|
40
|
+
transaction: ArrayBufferLike,
|
|
41
|
+
connectedAddress?: string
|
|
42
|
+
) => Promise<Uint8Array>
|
|
37
43
|
}
|
|
38
44
|
|
|
39
45
|
export interface WalletStandardInfo {
|
|
@@ -304,8 +310,23 @@ export class BridgeParent {
|
|
|
304
310
|
customFunctions: [
|
|
305
311
|
'sendSerializedTransaction',
|
|
306
312
|
'signAllSerializedTransactions',
|
|
307
|
-
'signSerializedTransaction'
|
|
313
|
+
'signSerializedTransaction',
|
|
314
|
+
'signSolanaTransactionBytes'
|
|
308
315
|
],
|
|
316
|
+
// Sign on the parent (where the wallet is) so only bytes cross
|
|
317
|
+
// Comlink — a Transaction object loses its prototype via
|
|
318
|
+
// structured clone. connectedAddress (from the child) wins over
|
|
319
|
+
// the parent publicKey, which may have drifted.
|
|
320
|
+
signSolanaTransactionBytes: async (
|
|
321
|
+
transaction: ArrayBufferLike,
|
|
322
|
+
connectedAddress?: string
|
|
323
|
+
): Promise<Uint8Array> => {
|
|
324
|
+
return signSolanaBytes(
|
|
325
|
+
adapter,
|
|
326
|
+
new Uint8Array(transaction),
|
|
327
|
+
connectedAddress
|
|
328
|
+
)
|
|
329
|
+
},
|
|
309
330
|
sendSerializedTransaction: async (
|
|
310
331
|
transaction: ArrayBufferLike,
|
|
311
332
|
rpcUrl: string
|
|
@@ -481,8 +502,22 @@ export class BridgeParent {
|
|
|
481
502
|
customFunctions: [
|
|
482
503
|
'sendSerializedTransaction',
|
|
483
504
|
'signAllSerializedTransactions',
|
|
484
|
-
'signSerializedTransaction'
|
|
505
|
+
'signSerializedTransaction',
|
|
506
|
+
'signSolanaTransactionBytes'
|
|
485
507
|
],
|
|
508
|
+
// Legacy base adapter (no Wallet Standard feature) — signSolanaBytes
|
|
509
|
+
// falls back to deserialize → sign → reserialize. See Standard
|
|
510
|
+
// wrapper above for the connectedAddress rationale.
|
|
511
|
+
signSolanaTransactionBytes: async (
|
|
512
|
+
transaction: ArrayBufferLike,
|
|
513
|
+
connectedAddress?: string
|
|
514
|
+
): Promise<Uint8Array> => {
|
|
515
|
+
return signSolanaBytes(
|
|
516
|
+
baseAdapter,
|
|
517
|
+
new Uint8Array(transaction),
|
|
518
|
+
connectedAddress
|
|
519
|
+
)
|
|
520
|
+
},
|
|
486
521
|
sendSerializedTransaction: async (
|
|
487
522
|
transaction: ArrayBufferLike,
|
|
488
523
|
rpcUrl: string
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
// @vitest-environment node
|
|
2
|
+
//
|
|
3
|
+
// Node env (not jsdom): @solana/web3.js's VersionedTransaction.deserialize relies
|
|
4
|
+
// on a Uint8Array prototype check that fails under jsdom's polyfilled Buffer.
|
|
5
|
+
// Same reason as injected-connector/src/signSolanaTransactionBytes.test.ts.
|
|
6
|
+
import { describe, it, expect, vi } from 'vitest'
|
|
7
|
+
import {
|
|
8
|
+
Keypair,
|
|
9
|
+
SystemProgram,
|
|
10
|
+
TransactionMessage,
|
|
11
|
+
VersionedTransaction
|
|
12
|
+
} from '@solana/web3.js'
|
|
13
|
+
import { signSolanaBytes, type SignableSolanaAdapter } from './signSolanaBytes'
|
|
14
|
+
|
|
15
|
+
const payer = Keypair.generate()
|
|
16
|
+
const recipient = Keypair.generate().publicKey
|
|
17
|
+
|
|
18
|
+
function buildSerializedV0Tx(): Uint8Array {
|
|
19
|
+
const msg = new TransactionMessage({
|
|
20
|
+
payerKey: payer.publicKey,
|
|
21
|
+
recentBlockhash: '11111111111111111111111111111111',
|
|
22
|
+
instructions: [
|
|
23
|
+
SystemProgram.transfer({
|
|
24
|
+
fromPubkey: payer.publicKey,
|
|
25
|
+
toPubkey: recipient,
|
|
26
|
+
lamports: 1
|
|
27
|
+
})
|
|
28
|
+
]
|
|
29
|
+
}).compileToV0Message()
|
|
30
|
+
return new VersionedTransaction(msg).serialize()
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function buildSignedV0Bytes(): Uint8Array {
|
|
34
|
+
const msg = new TransactionMessage({
|
|
35
|
+
payerKey: payer.publicKey,
|
|
36
|
+
recentBlockhash: '11111111111111111111111111111111',
|
|
37
|
+
instructions: [
|
|
38
|
+
SystemProgram.transfer({
|
|
39
|
+
fromPubkey: payer.publicKey,
|
|
40
|
+
toPubkey: recipient,
|
|
41
|
+
lamports: 1
|
|
42
|
+
})
|
|
43
|
+
]
|
|
44
|
+
}).compileToV0Message()
|
|
45
|
+
const tx = new VersionedTransaction(msg)
|
|
46
|
+
tx.sign([payer])
|
|
47
|
+
return tx.serialize()
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
describe('signSolanaBytes (uwc-bridge-parent)', () => {
|
|
51
|
+
// ── Preferred path: raw Wallet Standard feature ───────────────────────────
|
|
52
|
+
|
|
53
|
+
it('signs via the solana:signTransaction feature with raw bytes (no Transaction object built)', async () => {
|
|
54
|
+
const signedBytes = buildSignedV0Bytes()
|
|
55
|
+
const featureSignTx = vi
|
|
56
|
+
.fn()
|
|
57
|
+
.mockResolvedValue([{ signedTransaction: signedBytes }])
|
|
58
|
+
const account = { address: payer.publicKey.toBase58() }
|
|
59
|
+
const adapter: SignableSolanaAdapter = {
|
|
60
|
+
publicKey: { toBase58: () => payer.publicKey.toBase58() },
|
|
61
|
+
// adapter.signTransaction is present but must NOT be used on this path.
|
|
62
|
+
signTransaction: vi.fn(),
|
|
63
|
+
wallet: {
|
|
64
|
+
accounts: [account],
|
|
65
|
+
features: {
|
|
66
|
+
'solana:signTransaction': { signTransaction: featureSignTx }
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const serialized = buildSerializedV0Tx()
|
|
72
|
+
const result = await signSolanaBytes(adapter, serialized)
|
|
73
|
+
|
|
74
|
+
expect(result).toBe(signedBytes)
|
|
75
|
+
// Raw bytes in — the exact same reference, never a deserialized object.
|
|
76
|
+
expect(featureSignTx).toHaveBeenCalledWith({
|
|
77
|
+
account,
|
|
78
|
+
transaction: serialized
|
|
79
|
+
})
|
|
80
|
+
expect(adapter.signTransaction).not.toHaveBeenCalled()
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
it('signs with the connected account, not blindly the first one', async () => {
|
|
84
|
+
const signedBytes = buildSignedV0Bytes()
|
|
85
|
+
const featureSignTx = vi
|
|
86
|
+
.fn()
|
|
87
|
+
.mockResolvedValue([{ signedTransaction: signedBytes }])
|
|
88
|
+
const accountAAA = { address: 'AAA' }
|
|
89
|
+
const accountBBB = { address: 'BBB' }
|
|
90
|
+
const adapter: SignableSolanaAdapter = {
|
|
91
|
+
publicKey: { toBase58: () => 'BBB' },
|
|
92
|
+
wallet: {
|
|
93
|
+
accounts: [accountAAA, accountBBB],
|
|
94
|
+
features: {
|
|
95
|
+
'solana:signTransaction': { signTransaction: featureSignTx }
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
await signSolanaBytes(adapter, buildSerializedV0Tx())
|
|
101
|
+
|
|
102
|
+
expect(featureSignTx.mock.calls[0]?.[0]?.account).toBe(accountBBB)
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
it('prefers the explicit connectedAddress over the adapter publicKey', async () => {
|
|
106
|
+
// The parent's publicKey may have drifted; the caller-supplied address wins.
|
|
107
|
+
const signedBytes = buildSignedV0Bytes()
|
|
108
|
+
const featureSignTx = vi
|
|
109
|
+
.fn()
|
|
110
|
+
.mockResolvedValue([{ signedTransaction: signedBytes }])
|
|
111
|
+
const accountAAA = { address: 'AAA' }
|
|
112
|
+
const accountBBB = { address: 'BBB' }
|
|
113
|
+
const adapter: SignableSolanaAdapter = {
|
|
114
|
+
publicKey: { toBase58: () => 'AAA' }, // parent's current account
|
|
115
|
+
wallet: {
|
|
116
|
+
accounts: [accountAAA, accountBBB],
|
|
117
|
+
features: {
|
|
118
|
+
'solana:signTransaction': { signTransaction: featureSignTx }
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
await signSolanaBytes(adapter, buildSerializedV0Tx(), 'BBB')
|
|
124
|
+
|
|
125
|
+
expect(featureSignTx.mock.calls[0]?.[0]?.account).toBe(accountBBB)
|
|
126
|
+
})
|
|
127
|
+
|
|
128
|
+
it('throws when the explicit connectedAddress is not in the wallet, even if publicKey is', async () => {
|
|
129
|
+
const featureSignTx = vi.fn()
|
|
130
|
+
const adapter: SignableSolanaAdapter = {
|
|
131
|
+
publicKey: { toBase58: () => 'AAA' }, // in the wallet, but not what we asked for
|
|
132
|
+
wallet: {
|
|
133
|
+
accounts: [{ address: 'AAA' }, { address: 'BBB' }],
|
|
134
|
+
features: {
|
|
135
|
+
'solana:signTransaction': { signTransaction: featureSignTx }
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
await expect(
|
|
141
|
+
signSolanaBytes(adapter, buildSerializedV0Tx(), 'NOT_IN_WALLET')
|
|
142
|
+
).rejects.toThrow('Connected Solana account not found in the wallet')
|
|
143
|
+
expect(featureSignTx).not.toHaveBeenCalled()
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
it('throws when the connected account is not in the wallet (never signs with a different account)', async () => {
|
|
147
|
+
const featureSignTx = vi.fn()
|
|
148
|
+
const adapter: SignableSolanaAdapter = {
|
|
149
|
+
publicKey: { toBase58: () => 'NOT_IN_WALLET' },
|
|
150
|
+
wallet: {
|
|
151
|
+
accounts: [{ address: 'AAA' }, { address: 'BBB' }],
|
|
152
|
+
features: {
|
|
153
|
+
'solana:signTransaction': { signTransaction: featureSignTx }
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
await expect(
|
|
159
|
+
signSolanaBytes(adapter, buildSerializedV0Tx())
|
|
160
|
+
).rejects.toThrow('Connected Solana account not found in the wallet')
|
|
161
|
+
expect(featureSignTx).not.toHaveBeenCalled()
|
|
162
|
+
})
|
|
163
|
+
|
|
164
|
+
it('throws when no account is selected and several exist', async () => {
|
|
165
|
+
const featureSignTx = vi.fn()
|
|
166
|
+
const adapter: SignableSolanaAdapter = {
|
|
167
|
+
publicKey: null, // toBase58 yields undefined → no selection
|
|
168
|
+
wallet: {
|
|
169
|
+
accounts: [{ address: 'AAA' }, { address: 'BBB' }],
|
|
170
|
+
features: {
|
|
171
|
+
'solana:signTransaction': { signTransaction: featureSignTx }
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
await expect(
|
|
177
|
+
signSolanaBytes(adapter, buildSerializedV0Tx())
|
|
178
|
+
).rejects.toThrow('Cannot determine which Solana account to sign with')
|
|
179
|
+
})
|
|
180
|
+
|
|
181
|
+
// ── Legacy fallback: deserialize → adapter.signTransaction → reserialize ───
|
|
182
|
+
|
|
183
|
+
it('falls back to adapter.signTransaction when the wallet has no Standard feature', async () => {
|
|
184
|
+
const adapterSignTx = vi
|
|
185
|
+
.fn()
|
|
186
|
+
.mockResolvedValue(VersionedTransaction.deserialize(buildSignedV0Bytes()))
|
|
187
|
+
const adapter: SignableSolanaAdapter = {
|
|
188
|
+
// No `wallet` → legacy base adapter shape.
|
|
189
|
+
signTransaction: adapterSignTx
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
const result = await signSolanaBytes(adapter, buildSerializedV0Tx())
|
|
193
|
+
|
|
194
|
+
expect(adapterSignTx).toHaveBeenCalledOnce()
|
|
195
|
+
// The adapter receives a deserialized Transaction object, not raw bytes.
|
|
196
|
+
expect(adapterSignTx.mock.calls[0]?.[0]).toBeInstanceOf(
|
|
197
|
+
VersionedTransaction
|
|
198
|
+
)
|
|
199
|
+
expect(result).toBeInstanceOf(Uint8Array)
|
|
200
|
+
expect(result.length).toBeGreaterThan(0)
|
|
201
|
+
})
|
|
202
|
+
|
|
203
|
+
it('throws when a legacy adapter cannot sign at all', async () => {
|
|
204
|
+
const adapter: SignableSolanaAdapter = {} // no feature, no signTransaction
|
|
205
|
+
|
|
206
|
+
await expect(
|
|
207
|
+
signSolanaBytes(adapter, buildSerializedV0Tx())
|
|
208
|
+
).rejects.toThrow('Adapter does not support signTransaction')
|
|
209
|
+
})
|
|
210
|
+
|
|
211
|
+
// ── Invariant: sign-only, never broadcasts ────────────────────────────────
|
|
212
|
+
|
|
213
|
+
it('INVARIANT: never invokes any send/broadcast method', async () => {
|
|
214
|
+
const signAndSend = vi.fn()
|
|
215
|
+
const sendTransaction = vi.fn()
|
|
216
|
+
const featureSignTx = vi
|
|
217
|
+
.fn()
|
|
218
|
+
.mockResolvedValue([{ signedTransaction: buildSignedV0Bytes() }])
|
|
219
|
+
const adapter = {
|
|
220
|
+
publicKey: { toBase58: () => payer.publicKey.toBase58() },
|
|
221
|
+
signTransaction: vi.fn(),
|
|
222
|
+
sendTransaction,
|
|
223
|
+
signAndSendTransaction: signAndSend,
|
|
224
|
+
wallet: {
|
|
225
|
+
accounts: [{ address: payer.publicKey.toBase58() }],
|
|
226
|
+
features: {
|
|
227
|
+
'solana:signTransaction': { signTransaction: featureSignTx }
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
} as unknown as SignableSolanaAdapter
|
|
231
|
+
|
|
232
|
+
await signSolanaBytes(adapter, buildSerializedV0Tx())
|
|
233
|
+
|
|
234
|
+
expect(signAndSend).not.toHaveBeenCalled()
|
|
235
|
+
expect(sendTransaction).not.toHaveBeenCalled()
|
|
236
|
+
})
|
|
237
|
+
})
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { Transaction, VersionedTransaction } from '@solana/web3.js'
|
|
2
|
+
|
|
3
|
+
const SOLANA_SIGN_FEATURE = 'solana:signTransaction'
|
|
4
|
+
|
|
5
|
+
// Wallet Standard `solana:signTransaction` feature: raw bytes in, raw bytes out.
|
|
6
|
+
interface SolanaSignFeature {
|
|
7
|
+
signTransaction: (input: {
|
|
8
|
+
account: { address: string }
|
|
9
|
+
transaction: Uint8Array
|
|
10
|
+
}) => Promise<Array<{ signedTransaction: Uint8Array }>>
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// Minimal Solana adapter shape. `wallet` exists only on Wallet Standard adapters.
|
|
14
|
+
export interface SignableSolanaAdapter {
|
|
15
|
+
publicKey?: { toBase58(): string } | null
|
|
16
|
+
signTransaction?:
|
|
17
|
+
| ((
|
|
18
|
+
tx: Transaction | VersionedTransaction
|
|
19
|
+
) => Promise<Transaction | VersionedTransaction>)
|
|
20
|
+
| undefined
|
|
21
|
+
wallet?:
|
|
22
|
+
| {
|
|
23
|
+
accounts: ReadonlyArray<{ address: string }>
|
|
24
|
+
features: Record<string, unknown>
|
|
25
|
+
}
|
|
26
|
+
| undefined
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Sign raw Solana tx bytes → raw signed bytes. Sign-only (the relay broadcasts).
|
|
31
|
+
* Prefers the Wallet Standard feature (no Transaction object → avoids the
|
|
32
|
+
* serialize() crash on some mobile WebViews); falls back to the adapter signer
|
|
33
|
+
* for legacy wallets. `connectedAddress` (from the iframe child) wins over the
|
|
34
|
+
* adapter publicKey, which can drift. The caller verifies the message wasn't
|
|
35
|
+
* altered (see InjectedConnector Path 1).
|
|
36
|
+
*/
|
|
37
|
+
export async function signSolanaBytes(
|
|
38
|
+
adapter: SignableSolanaAdapter,
|
|
39
|
+
serializedTx: Uint8Array,
|
|
40
|
+
connectedAddress?: string
|
|
41
|
+
): Promise<Uint8Array> {
|
|
42
|
+
const wallet = adapter.wallet
|
|
43
|
+
if (
|
|
44
|
+
wallet &&
|
|
45
|
+
SOLANA_SIGN_FEATURE in wallet.features &&
|
|
46
|
+
wallet.accounts.length > 0
|
|
47
|
+
) {
|
|
48
|
+
const account = resolveSigningAccount(
|
|
49
|
+
wallet.accounts,
|
|
50
|
+
connectedAddress ?? adapter.publicKey?.toBase58()
|
|
51
|
+
)
|
|
52
|
+
const feature = wallet.features[SOLANA_SIGN_FEATURE] as SolanaSignFeature
|
|
53
|
+
const [output] = await feature.signTransaction({
|
|
54
|
+
account,
|
|
55
|
+
transaction: serializedTx
|
|
56
|
+
})
|
|
57
|
+
if (!output?.signedTransaction) {
|
|
58
|
+
throw new Error('Wallet returned no signed transaction')
|
|
59
|
+
}
|
|
60
|
+
// Caller (InjectedConnector Path 1) verifies the message — keeps this
|
|
61
|
+
// package @meshconnect-free.
|
|
62
|
+
return output.signedTransaction
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Legacy fallback: build a Transaction and use the adapter's signer.
|
|
66
|
+
if (adapter.signTransaction === undefined) {
|
|
67
|
+
throw new Error('Adapter does not support signTransaction')
|
|
68
|
+
}
|
|
69
|
+
const tx = deserialize(serializedTx)
|
|
70
|
+
const signed = await adapter.signTransaction(tx)
|
|
71
|
+
// Serialize without the fee-payer's signature — the relay fills that slot.
|
|
72
|
+
return signed instanceof VersionedTransaction
|
|
73
|
+
? signed.serialize()
|
|
74
|
+
: new Uint8Array(
|
|
75
|
+
signed.serialize({
|
|
76
|
+
requireAllSignatures: false,
|
|
77
|
+
verifySignatures: false
|
|
78
|
+
})
|
|
79
|
+
)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Pick which account signs. We must sign with the account the user connected —
|
|
84
|
+
* never guess. A wrong signer produces a useless signature for a payment, so we
|
|
85
|
+
* throw instead of silently falling back to the first account.
|
|
86
|
+
*/
|
|
87
|
+
function resolveSigningAccount<T extends { address: string }>(
|
|
88
|
+
accounts: ReadonlyArray<T>,
|
|
89
|
+
connectedAddress: string | undefined
|
|
90
|
+
): T {
|
|
91
|
+
if (connectedAddress) {
|
|
92
|
+
const match = accounts.find(a => a.address === connectedAddress)
|
|
93
|
+
if (!match) {
|
|
94
|
+
throw new Error(
|
|
95
|
+
'Connected Solana account not found in the wallet — refusing to sign with a different account'
|
|
96
|
+
)
|
|
97
|
+
}
|
|
98
|
+
return match
|
|
99
|
+
}
|
|
100
|
+
// No explicit selection is only safe when the wallet has exactly one account.
|
|
101
|
+
if (accounts.length === 1) return accounts[0]!
|
|
102
|
+
throw new Error(
|
|
103
|
+
'Cannot determine which Solana account to sign with — multiple accounts and none selected'
|
|
104
|
+
)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function deserialize(bytes: Uint8Array): Transaction | VersionedTransaction {
|
|
108
|
+
try {
|
|
109
|
+
return VersionedTransaction.deserialize(bytes)
|
|
110
|
+
} catch {
|
|
111
|
+
try {
|
|
112
|
+
return Transaction.from(bytes)
|
|
113
|
+
} catch {
|
|
114
|
+
throw new Error(
|
|
115
|
+
'Failed to deserialize transaction as either versioned or legacy format'
|
|
116
|
+
)
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|