UNPKG

@relayprotocol/relay-bitcoin-wallet-adapter

Version:

A Bitcoin adapter for use in @relayprotocol/relay-sdk

57 lines 2.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.adaptBitcoinWallet = void 0; const relay_sdk_1 = require("@relayprotocol/relay-sdk"); const bitcoin = require("bitcoinjs-lib"); const adaptBitcoinWallet = (walletAddress, signPsbt, publicKey) => { return { vmType: 'bvm', getChainId: async () => { return 8253038; }, address: async () => { return walletAddress; }, handleSignMessageStep: async () => { throw new Error('Message signing not implemented for Bitcoin'); }, handleSendTransactionStep: async (_chainId, stepItem) => { const client = (0, relay_sdk_1.getClient)(); const psbtHex = stepItem.data.psbt; const psbt = bitcoin.Psbt.fromHex(psbtHex, { network: bitcoin.networks.bitcoin }); const signature = psbt.txInputs.map((_input, index) => { return { address: walletAddress, signingIndexes: [index] }; }); const dynamicParams = { allowedSighash: [0, 1], unsignedPsbtBase64: psbt.toBase64(), signature }; const signedPsbt = bitcoin.Psbt.fromBase64(await signPsbt(walletAddress, psbt, dynamicParams)); signedPsbt.finalizeAllInputs(); const rawTransaction = signedPsbt.extractTransaction().toHex(); client.log(['BTC Transaction', rawTransaction], relay_sdk_1.LogLevel.Verbose); const mempoolResponse = await relay_sdk_1.axios .post('https://mempool.space/api/tx', rawTransaction) .then((r) => r.data); client.log(['Transaction Broadcasted', mempoolResponse], relay_sdk_1.LogLevel.Verbose); return mempoolResponse; }, handleConfirmTransactionStep: async () => { throw 'Not implemented'; }, switchChain: (chainId) => { throw 'Not yet implemented'; }, metadata: { publicKey } }; }; exports.adaptBitcoinWallet = adaptBitcoinWallet; //# sourceMappingURL=adapter.js.map