@metaplex-foundation/umi-web3js-adapters
Version:
A helper package to transform web3.js types to and from umi types
46 lines (43 loc) • 1.87 kB
JavaScript
import { base58 } from '@metaplex-foundation/umi';
import { VersionedTransaction, SIGNATURE_LENGTH_IN_BYTES, Transaction } from '@solana/web3.js';
import { fromWeb3JsMessage, toWeb3JsMessage } from './TransactionMessage.mjs';
function fromWeb3JsTransaction(web3JsTransaction) {
return {
message: fromWeb3JsMessage(web3JsTransaction.message),
serializedMessage: web3JsTransaction.message.serialize(),
signatures: web3JsTransaction.signatures
};
}
function toWeb3JsTransaction(transaction) {
return new VersionedTransaction(toWeb3JsMessage(transaction.message), transaction.signatures);
}
function fromWeb3JsLegacyTransaction(web3JsLegacyTransaction) {
const web3JsMessage = web3JsLegacyTransaction.compileMessage();
const web3JsLegacySignatures = web3JsLegacyTransaction.signatures.reduce((all, one) => {
all[one.publicKey.toBase58()] = one.signature ? new Uint8Array(one.signature) : null;
return all;
}, {});
const signatures = [];
for (let i = 0; i < web3JsMessage.header.numRequiredSignatures; i += 1) {
const pubkey = web3JsMessage.accountKeys[i].toBase58();
const signature = web3JsLegacySignatures[pubkey] ?? null;
signatures.push(signature ?? new Uint8Array(SIGNATURE_LENGTH_IN_BYTES));
}
return {
message: fromWeb3JsMessage(web3JsMessage),
serializedMessage: web3JsMessage.serialize(),
signatures
};
}
function toWeb3JsLegacyTransaction(transaction) {
const web3JsTransaction = toWeb3JsTransaction({
...transaction,
message: {
...transaction.message,
version: 'legacy'
}
});
return Transaction.populate(web3JsTransaction.message, web3JsTransaction.signatures.map(signature => base58.deserialize(signature)[0]));
}
export { fromWeb3JsLegacyTransaction, fromWeb3JsTransaction, toWeb3JsLegacyTransaction, toWeb3JsTransaction };
//# sourceMappingURL=Transaction.mjs.map