UNPKG

@solana/compat

Version:

Helpers for converting from legacy web3js classes

78 lines (75 loc) 2.87 kB
'use strict'; var instructions = require('@solana/instructions'); var keys = require('@solana/keys'); var errors = require('@solana/errors'); // src/address.ts function fromLegacyPublicKey(publicKey) { return publicKey.toBase58(); } function fromLegacyTransactionInstruction(legacyInstruction) { const data = legacyInstruction.data?.byteLength > 0 ? Uint8Array.from(legacyInstruction.data) : void 0; const accounts = legacyInstruction.keys.map( (accountMeta) => Object.freeze({ address: fromLegacyPublicKey(accountMeta.pubkey), role: determineRole(accountMeta.isSigner, accountMeta.isWritable) }) ); const programAddress = fromLegacyPublicKey(legacyInstruction.programId); return Object.freeze({ ...accounts.length ? { accounts: Object.freeze(accounts) } : null, ...data ? { data } : null, programAddress }); } function determineRole(isSigner, isWritable) { if (isSigner && isWritable) return instructions.AccountRole.WRITABLE_SIGNER; if (isSigner) return instructions.AccountRole.READONLY_SIGNER; if (isWritable) return instructions.AccountRole.WRITABLE; return instructions.AccountRole.READONLY; } async function fromLegacyKeypair(keypair, extractable) { const bytes = new Uint8Array(64); bytes.set(keypair.secretKey); bytes.set( keypair.publicKey.toBytes(), /* offset */ 32 ); return await keys.createKeyPairFromBytes(bytes, extractable); } function convertSignatures(transaction, staticAccountKeys) { return Object.fromEntries( transaction.signatures.map((sig, index) => { const address = staticAccountKeys[index]; if (sig.every((b) => b === 0)) { return [address, null]; } else { return [address, sig]; } }) ); } function fromVersionedTransaction(transaction) { const { message } = transaction; const { staticAccountKeys } = message.getAccountKeys(); const { numRequiredSignatures } = message.header; if (numRequiredSignatures !== transaction.signatures.length) { throw new errors.SolanaError(errors.SOLANA_ERROR__TRANSACTION__MESSAGE_SIGNATURES_MISMATCH, { numRequiredSignatures: transaction.message.header.numRequiredSignatures, signaturesLength: transaction.signatures.length, signerAddresses: staticAccountKeys.slice(0, numRequiredSignatures).map((p) => p.toBase58()) }); } const messageBytes = message.serialize(); const signatures = convertSignatures(transaction, staticAccountKeys); return { messageBytes, signatures: Object.freeze(signatures) }; } exports.fromLegacyKeypair = fromLegacyKeypair; exports.fromLegacyPublicKey = fromLegacyPublicKey; exports.fromLegacyTransactionInstruction = fromLegacyTransactionInstruction; exports.fromVersionedTransaction = fromVersionedTransaction; //# sourceMappingURL=index.browser.cjs.map //# sourceMappingURL=index.browser.cjs.map