From b4568a948ec81d521ec1065520efbe4eba61de7f Mon Sep 17 00:00:00 2001 From: nakul1010 Date: Tue, 13 Aug 2024 17:39:11 +0530 Subject: [PATCH 1/3] fix: use scure/btc-signer over bitcoinjs in gateway --- docs/docs/build/bob-sdk/gateway.md | 12 ++---------- sdk/examples/gateway.ts | 11 ++--------- 2 files changed, 4 insertions(+), 19 deletions(-) diff --git a/docs/docs/build/bob-sdk/gateway.md b/docs/docs/build/bob-sdk/gateway.md index cf6dd47e..31651401 100644 --- a/docs/docs/build/bob-sdk/gateway.md +++ b/docs/docs/build/bob-sdk/gateway.md @@ -93,7 +93,7 @@ We recommend using our [sats-wagmi](./sats-wagmi.md) package to query your user' ```ts title="/src/utils/gateway.ts" import { createTransfer } from "@gobob/bob-sdk"; -import * as bitcoin from "bitcoinjs-lib"; +import * as bitcoin from "@scure/btc-signer"; import { AddressType, getAddressInfo } from "bitcoin-address-validation"; import { hex } from "@scure/base"; import { Transaction as SigTx } from "@scure/btc-signer"; @@ -140,15 +140,7 @@ async function createTxWithOpReturn( opReturn ); const psbt = unsignedTx.toPSBT(0); - const psbtHex = hex.encode(psbt); - const signedPsbtHex = psbtHex; - const signedTx = SigTx.fromPSBT( - bitcoin.Psbt.fromHex(signedPsbtHex).toBuffer() - ); - signedTx.finalize(); - const tx = bitcoin.Transaction.fromBuffer(Buffer.from(signedTx.extract())); - - return tx; + return bitcoin.Transaction.fromPSBT(psbt); } ``` diff --git a/sdk/examples/gateway.ts b/sdk/examples/gateway.ts index 1898032b..2bf0058f 100644 --- a/sdk/examples/gateway.ts +++ b/sdk/examples/gateway.ts @@ -1,5 +1,5 @@ import { GatewayApiClient } from "../src/gateway"; -import * as bitcoin from "bitcoinjs-lib"; +import * as bitcoin from "@scure/btc-signer"; import { AddressType, getAddressInfo } from "bitcoin-address-validation"; import { createTransfer } from "../src/wallet/utxo"; import { hex } from '@scure/base'; @@ -51,13 +51,6 @@ async function createTxWithOpReturn(fromAddress: string, toAddress: string, amou ); const psbt = unsignedTx.toPSBT(0); - const psbtHex = hex.encode(psbt); - // TODO: sign PSBT - const signedPsbtHex = psbtHex; - - const signedTx = SigTx.fromPSBT(bitcoin.Psbt.fromHex(signedPsbtHex).toBuffer()); - signedTx.finalize(); - - return bitcoin.Transaction.fromBuffer(Buffer.from(signedTx.extract())); + return bitcoin.Transaction.fromPSBT(psbt); } From 7a39a2242f8e356c2e8121bcac4134c7c1ffaf27 Mon Sep 17 00:00:00 2001 From: nakul1010 Date: Tue, 13 Aug 2024 18:01:49 +0530 Subject: [PATCH 2/3] fix: return encoded base64 instead of transaction type --- docs/docs/build/bob-sdk/gateway.md | 7 +++---- sdk/examples/gateway.ts | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/docs/docs/build/bob-sdk/gateway.md b/docs/docs/build/bob-sdk/gateway.md index 31651401..20d5067e 100644 --- a/docs/docs/build/bob-sdk/gateway.md +++ b/docs/docs/build/bob-sdk/gateway.md @@ -93,9 +93,8 @@ We recommend using our [sats-wagmi](./sats-wagmi.md) package to query your user' ```ts title="/src/utils/gateway.ts" import { createTransfer } from "@gobob/bob-sdk"; -import * as bitcoin from "@scure/btc-signer"; import { AddressType, getAddressInfo } from "bitcoin-address-validation"; -import { hex } from "@scure/base"; +import { hex, base64 } from "@scure/base"; import { Transaction as SigTx } from "@scure/btc-signer"; const tx = await createTxWithOpReturn( @@ -111,7 +110,7 @@ async function createTxWithOpReturn( amount: number, opReturn: string, fromPubKey?: string -): Promise { +): Promise { const addressType = getAddressInfo(fromAddress).type; // Ensure this is not the P2TR address for ordinals (we don't want to spend from it) @@ -140,7 +139,7 @@ async function createTxWithOpReturn( opReturn ); const psbt = unsignedTx.toPSBT(0); - return bitcoin.Transaction.fromPSBT(psbt); + return base64.encode(psbt) } ``` diff --git a/sdk/examples/gateway.ts b/sdk/examples/gateway.ts index 2bf0058f..2ec1fad7 100644 --- a/sdk/examples/gateway.ts +++ b/sdk/examples/gateway.ts @@ -1,8 +1,7 @@ import { GatewayApiClient } from "../src/gateway"; -import * as bitcoin from "@scure/btc-signer"; import { AddressType, getAddressInfo } from "bitcoin-address-validation"; import { createTransfer } from "../src/wallet/utxo"; -import { hex } from '@scure/base'; +import { hex, base64 } from '@scure/base'; import { Transaction as SigTx } from '@scure/btc-signer'; const BOB_TBTC_V2_TOKEN_ADDRESS = "0xBBa2eF945D523C4e2608C9E1214C2Cc64D4fc2e2"; @@ -25,7 +24,7 @@ export async function swapBtcForToken(evmAddress: string) { } -async function createTxWithOpReturn(fromAddress: string, toAddress: string, amount: number, opReturn: string, fromPubKey?: string): Promise { +async function createTxWithOpReturn(fromAddress: string, toAddress: string, amount: number, opReturn: string, fromPubKey?: string): Promise { const addressType = getAddressInfo(fromAddress).type; // Ensure this is not the P2TR address for ordinals (we don't want to spend from it) @@ -52,5 +51,5 @@ async function createTxWithOpReturn(fromAddress: string, toAddress: string, amou const psbt = unsignedTx.toPSBT(0); - return bitcoin.Transaction.fromPSBT(psbt); + return base64.encode(psbt) } From 25fcfa5c6289277910b9cffbdf40fc4e74af94c9 Mon Sep 17 00:00:00 2001 From: nakul1010 Date: Tue, 13 Aug 2024 18:07:29 +0530 Subject: [PATCH 3/3] fix: return serialized signed transaction --- docs/docs/build/bob-sdk/gateway.md | 10 ++++++---- sdk/examples/gateway.ts | 9 +++++---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/docs/docs/build/bob-sdk/gateway.md b/docs/docs/build/bob-sdk/gateway.md index 20d5067e..d34d1292 100644 --- a/docs/docs/build/bob-sdk/gateway.md +++ b/docs/docs/build/bob-sdk/gateway.md @@ -94,8 +94,7 @@ We recommend using our [sats-wagmi](./sats-wagmi.md) package to query your user' ```ts title="/src/utils/gateway.ts" import { createTransfer } from "@gobob/bob-sdk"; import { AddressType, getAddressInfo } from "bitcoin-address-validation"; -import { hex, base64 } from "@scure/base"; -import { Transaction as SigTx } from "@scure/btc-signer"; +import { Transaction } from '@scure/btc-signer'; const tx = await createTxWithOpReturn( fromAddress, @@ -110,7 +109,7 @@ async function createTxWithOpReturn( amount: number, opReturn: string, fromPubKey?: string -): Promise { +): Promise { const addressType = getAddressInfo(fromAddress).type; // Ensure this is not the P2TR address for ordinals (we don't want to spend from it) @@ -139,7 +138,10 @@ async function createTxWithOpReturn( opReturn ); const psbt = unsignedTx.toPSBT(0); - return base64.encode(psbt) + + const signedTx = Transaction.fromPSBT(psbt); + + return Buffer.from(signedTx.extract()) } ``` diff --git a/sdk/examples/gateway.ts b/sdk/examples/gateway.ts index 2ec1fad7..0941a352 100644 --- a/sdk/examples/gateway.ts +++ b/sdk/examples/gateway.ts @@ -1,8 +1,7 @@ import { GatewayApiClient } from "../src/gateway"; import { AddressType, getAddressInfo } from "bitcoin-address-validation"; import { createTransfer } from "../src/wallet/utxo"; -import { hex, base64 } from '@scure/base'; -import { Transaction as SigTx } from '@scure/btc-signer'; +import { Transaction } from '@scure/btc-signer'; const BOB_TBTC_V2_TOKEN_ADDRESS = "0xBBa2eF945D523C4e2608C9E1214C2Cc64D4fc2e2"; @@ -24,7 +23,7 @@ export async function swapBtcForToken(evmAddress: string) { } -async function createTxWithOpReturn(fromAddress: string, toAddress: string, amount: number, opReturn: string, fromPubKey?: string): Promise { +async function createTxWithOpReturn(fromAddress: string, toAddress: string, amount: number, opReturn: string, fromPubKey?: string): Promise { const addressType = getAddressInfo(fromAddress).type; // Ensure this is not the P2TR address for ordinals (we don't want to spend from it) @@ -51,5 +50,7 @@ async function createTxWithOpReturn(fromAddress: string, toAddress: string, amou const psbt = unsignedTx.toPSBT(0); - return base64.encode(psbt) + const signedTx = Transaction.fromPSBT(psbt); + + return Buffer.from(signedTx.extract()) }