btc-wallet 0.3.5 → 0.3.7

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.
@@ -0,0 +1,7 @@
1
+ import type { ProviderService } from '@near-wallet-selector/core/src/lib/services';
2
+ import { providers } from 'near-api-js';
3
+ export declare function nearCallFunction<T>(contractId: string, methodName: string, args: any, options: {
4
+ network?: string;
5
+ provider?: ProviderService;
6
+ }): Promise<T>;
7
+ export declare function pollTransactionStatuses(network: string, hashes: string[]): Promise<(providers.FinalExecutionOutcome | undefined)[]>;
package/esm/index.js CHANGED
@@ -2458,7 +2458,7 @@ function useBtcWalletSelector() {
2458
2458
  publicKey.current = res;
2459
2459
  });
2460
2460
  }
2461
- }, [provider]);
2461
+ }, [getPublicKey, provider]);
2462
2462
  useEffect6(() => {
2463
2463
  signMessageFn.current = signMessage;
2464
2464
  }, [signMessage]);
@@ -2480,18 +2480,15 @@ function useBtcWalletSelector() {
2480
2480
  connector.removeListener("accountsChanged", fn);
2481
2481
  }
2482
2482
  };
2483
- }, [connector]);
2483
+ }, [connector, context, getPublicKey]);
2484
2484
  const hook = useMemo6(() => {
2485
2485
  return {
2486
2486
  login: () => __async(this, null, function* () {
2487
- const account = accounts && accounts.length ? accounts[0] : null;
2488
- if (account) {
2489
- return account;
2490
- }
2491
- if (openConnectModal) {
2492
- yield openConnectModal();
2487
+ const account = accounts == null ? void 0 : accounts[0];
2488
+ if (!account) {
2489
+ openConnectModal == null ? void 0 : openConnectModal();
2493
2490
  }
2494
- return null;
2491
+ return account;
2495
2492
  }),
2496
2493
  autoConnect: () => __async(this, null, function* () {
2497
2494
  requestDirectAccount(connectorRef.current).catch((e) => {
@@ -2499,13 +2496,13 @@ function useBtcWalletSelector() {
2499
2496
  });
2500
2497
  }),
2501
2498
  logout: () => {
2502
- const accountId = accounts && accounts.length ? accounts[0] : null;
2499
+ const accountId = accounts == null ? void 0 : accounts[0];
2503
2500
  if (!accountId)
2504
2501
  return;
2505
2502
  disconnect == null ? void 0 : disconnect();
2506
2503
  context.emit("btcLogOut");
2507
2504
  },
2508
- account: accounts && accounts.length ? accounts[0] : null,
2505
+ account: accounts == null ? void 0 : accounts[0],
2509
2506
  getPublicKey: () => {
2510
2507
  return publicKey.current;
2511
2508
  },
@@ -2531,7 +2528,7 @@ function useBtcWalletSelector() {
2531
2528
  }
2532
2529
 
2533
2530
  // src/core/setupBTCWallet.ts
2534
- import { providers, transactions } from "near-api-js";
2531
+ import { transactions } from "near-api-js";
2535
2532
  import { actionCreators } from "@near-js/transactions";
2536
2533
  import { PublicKey } from "near-api-js/lib/utils/key_pair";
2537
2534
  import { encodeTransaction } from "near-api-js/lib/transaction";
@@ -2686,20 +2683,23 @@ function removeWalletButton() {
2686
2683
  var walletConfig = {
2687
2684
  dev: {
2688
2685
  base_url: "https://api.dev.satoshibridge.top",
2689
- token: "nbtc1-nsp.testnet",
2690
- contractId: "dev1-nsp.testnet",
2686
+ token: "nbtc-dev.testnet",
2687
+ accountContractId: "acc-dev.testnet",
2688
+ bridgeContractId: "brg-dev.testnet",
2691
2689
  walletUrl: "https://wallet-dev.satoshibridge.top"
2692
2690
  },
2693
2691
  testnet: {
2694
2692
  base_url: "https://api.testnet.satoshibridge.top",
2695
2693
  token: "nbtc2-nsp.testnet",
2696
- contractId: "dev2-nsp.testnet",
2694
+ accountContractId: "dev2-nsp.testnet",
2695
+ bridgeContractId: "brg2-nsp.testnet",
2697
2696
  walletUrl: "https://wallet-test.satoshibridge.top"
2698
2697
  },
2699
2698
  mainnet: {
2700
2699
  base_url: "https://api.mainnet.satoshibridge.top",
2701
2700
  token: "",
2702
- contractId: "",
2701
+ accountContractId: "",
2702
+ bridgeContractId: "",
2703
2703
  walletUrl: "https://wallet.satoshibridge.top"
2704
2704
  }
2705
2705
  };
@@ -2711,8 +2711,8 @@ var nearRpcUrls = {
2711
2711
  "https://near.drpc.org"
2712
2712
  ],
2713
2713
  testnet: [
2714
- "https://near-testnet.lava.build",
2715
2714
  "https://rpc.testnet.near.org",
2715
+ "https://near-testnet.lava.build",
2716
2716
  "https://near-testnet.drpc.org"
2717
2717
  ]
2718
2718
  };
@@ -2791,6 +2791,58 @@ function request(url, options) {
2791
2791
  });
2792
2792
  }
2793
2793
 
2794
+ // src/utils/nearUtils.ts
2795
+ import { providers } from "near-api-js";
2796
+ function nearCallFunction(contractId, methodName, args, options) {
2797
+ return __async(this, null, function* () {
2798
+ const nearProvider = (options == null ? void 0 : options.provider) || new providers.FailoverRpcProvider(
2799
+ nearRpcUrls[options == null ? void 0 : options.network].map(
2800
+ (url) => new providers.JsonRpcProvider({ url })
2801
+ )
2802
+ );
2803
+ const res = yield nearProvider.query({
2804
+ request_type: "call_function",
2805
+ account_id: contractId,
2806
+ method_name: methodName,
2807
+ args_base64: Buffer.from(JSON.stringify(args)).toString("base64"),
2808
+ finality: "final"
2809
+ });
2810
+ return JSON.parse(Buffer.from(res.result).toString());
2811
+ });
2812
+ }
2813
+ function pollTransactionStatuses(network, hashes) {
2814
+ return __async(this, null, function* () {
2815
+ const provider = new providers.FailoverRpcProvider(
2816
+ Object.values(nearRpcUrls[network]).map(
2817
+ (url) => new providers.JsonRpcProvider({ url })
2818
+ )
2819
+ );
2820
+ const maxAttempts = 3;
2821
+ const pollStatus = (hash) => __async(this, null, function* () {
2822
+ let attempt = 0;
2823
+ while (attempt < maxAttempts) {
2824
+ attempt++;
2825
+ try {
2826
+ const result = yield provider.txStatus(hash, "unused", "FINAL");
2827
+ if (result && result.status) {
2828
+ console.log(`Transaction ${hash} result:`, result);
2829
+ return result;
2830
+ }
2831
+ } catch (error) {
2832
+ console.error(`Failed to fetch transaction status for ${hash}: ${error.message}`);
2833
+ }
2834
+ if (attempt === maxAttempts) {
2835
+ throw new Error(`Transaction not found after max attempts: ${hash}`);
2836
+ }
2837
+ yield delay(1e4);
2838
+ console.log(`RPC request failed for ${hash}, retrying ${maxAttempts - attempt} more times`);
2839
+ }
2840
+ });
2841
+ const results = yield Promise.all(hashes.map((hash) => pollStatus(hash)));
2842
+ return results;
2843
+ });
2844
+ }
2845
+
2794
2846
  // src/core/setupBTCWallet.ts
2795
2847
  var { transfer, functionCall } = actionCreators;
2796
2848
  var state = {
@@ -2888,28 +2940,23 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
2888
2940
  }
2889
2941
  }), 500);
2890
2942
  }
2891
- function viewMethod(_02) {
2892
- return __async(this, arguments, function* ({ method, args = {} }) {
2893
- const res = yield provider.query({
2894
- request_type: "call_function",
2895
- account_id: currentConfig.contractId,
2896
- method_name: method,
2897
- args_base64: Buffer.from(JSON.stringify(args)).toString("base64"),
2898
- finality: "optimistic"
2899
- });
2900
- return JSON.parse(Buffer.from(res.result).toString());
2943
+ function nearCall2(contractId, methodName, args) {
2944
+ return __async(this, null, function* () {
2945
+ return nearCallFunction(contractId, methodName, args, { provider });
2901
2946
  });
2902
2947
  }
2903
2948
  function getNearAccountByBtcPublicKey(btcPublicKey) {
2904
2949
  return __async(this, null, function* () {
2905
- const nearTempAddress = yield viewMethod({
2906
- method: "get_chain_signature_near_account",
2907
- args: { btc_public_key: btcPublicKey }
2908
- });
2909
- const nearTempPublicKey = yield viewMethod({
2910
- method: "get_chain_signature_near_account_public_key",
2911
- args: { btc_public_key: btcPublicKey }
2912
- });
2950
+ const nearTempAddress = yield nearCall2(
2951
+ currentConfig.accountContractId,
2952
+ "get_chain_signature_near_account_id",
2953
+ { btc_public_key: btcPublicKey }
2954
+ );
2955
+ const nearTempPublicKey = yield nearCall2(
2956
+ currentConfig.accountContractId,
2957
+ "get_chain_signature_near_account_public_key",
2958
+ { btc_public_key: btcPublicKey }
2959
+ );
2913
2960
  state.saveAccount(nearTempAddress);
2914
2961
  state.savePublicKey(nearTempPublicKey);
2915
2962
  state.saveBtcPublicKey(btcPublicKey);
@@ -3009,11 +3056,14 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
3009
3056
  nonce: BigInt(rawAccessKey.nonce || 0)
3010
3057
  });
3011
3058
  const publicKeyFormat = PublicKey.from(publicKey);
3012
- const nearNonceApi = yield getNearNonceFromApi(currentConfig.base_url, accountId);
3059
+ const { result_data: nearNonceFromApi } = yield getNearNonceFromApi(
3060
+ currentConfig.base_url,
3061
+ accountId
3062
+ );
3013
3063
  const newTransactions = params.transactions.map((transaction, index) => {
3014
3064
  let nearNonceNumber = accessKey.nonce + BigInt(1);
3015
- if (nearNonceApi) {
3016
- nearNonceNumber = BigInt(nearNonceApi.result_data) > nearNonceNumber ? BigInt(nearNonceApi.result_data) : nearNonceNumber;
3065
+ if (nearNonceFromApi) {
3066
+ nearNonceNumber = BigInt(nearNonceFromApi) > nearNonceNumber ? BigInt(nearNonceFromApi) : nearNonceNumber;
3017
3067
  }
3018
3068
  const newActions = transaction.actions.map((action) => {
3019
3069
  switch (action.type) {
@@ -3045,20 +3095,34 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
3045
3095
  const hash = bs58.encode(new Uint8Array(sha256.array(txBytes)));
3046
3096
  return { txBytes, txHex, hash };
3047
3097
  });
3048
- const accountInfo = yield viewMethod({
3049
- method: "get_account",
3050
- args: { account_id: accountId }
3051
- });
3052
- const nonceApi = yield getNonceFromApi(currentConfig.base_url, accountId);
3053
- const nonce = Number(nonceApi == null ? void 0 : nonceApi.result_data) > Number(accountInfo.nonce) ? String(nonceApi == null ? void 0 : nonceApi.result_data) : String(accountInfo.nonce);
3098
+ const accountInfo = yield nearCall2(
3099
+ currentConfig.accountContractId,
3100
+ "get_account",
3101
+ { account_id: accountId }
3102
+ );
3103
+ const { result_data: nonceFromApi } = yield getNonceFromApi(
3104
+ currentConfig.base_url,
3105
+ accountId
3106
+ );
3107
+ const nonce = Number(nonceFromApi) > Number(accountInfo.nonce) ? String(nonceFromApi) : String(accountInfo.nonce);
3054
3108
  const intention = {
3055
3109
  chain_id: "397",
3056
3110
  csna: accountId,
3057
3111
  near_transactions: newTransactions.map((t) => t.txHex),
3058
3112
  gas_token: currentConfig.token,
3059
3113
  gas_limit: "3000",
3114
+ use_near_pay_gas: false,
3060
3115
  nonce
3061
3116
  };
3117
+ const nearAccount = yield provider.query({
3118
+ request_type: "view_account",
3119
+ account_id: accountId,
3120
+ finality: "final"
3121
+ });
3122
+ const availableBalance = parseFloat(nearAccount.amount) / __pow(10, 24);
3123
+ if (availableBalance > 0.2) {
3124
+ intention.use_near_pay_gas = true;
3125
+ }
3062
3126
  const strIntention = JSON.stringify(intention);
3063
3127
  const signature = yield btcContext.signMessage(strIntention);
3064
3128
  const result = yield uploadBTCTx(currentConfig.base_url, {
@@ -3143,41 +3207,8 @@ function toHex(originalString) {
3143
3207
  hexString = hexString.replace(/(^0+)/g, "");
3144
3208
  return hexString;
3145
3209
  }
3146
- function pollTransactionStatuses(network, hashes) {
3147
- return __async(this, null, function* () {
3148
- const provider = new providers.FailoverRpcProvider(
3149
- Object.values(nearRpcUrls[network]).map(
3150
- (url) => new providers.JsonRpcProvider({ url })
3151
- )
3152
- );
3153
- const maxAttempts = 3;
3154
- const pollStatus = (hash) => __async(this, null, function* () {
3155
- let attempt = 0;
3156
- while (attempt < maxAttempts) {
3157
- attempt++;
3158
- try {
3159
- const result = yield provider.txStatus(hash, "unused", "FINAL");
3160
- if (result && result.status) {
3161
- console.log(`Transaction ${hash} result:`, result);
3162
- return result;
3163
- }
3164
- } catch (error) {
3165
- console.error(`Failed to fetch transaction status for ${hash}: ${error.message}`);
3166
- }
3167
- if (attempt === maxAttempts) {
3168
- throw new Error(`Transaction not found after max attempts: ${hash}`);
3169
- }
3170
- yield delay(1e4);
3171
- console.log(`RPC request failed for ${hash}, retrying ${maxAttempts - attempt} more times`);
3172
- }
3173
- });
3174
- const results = yield Promise.all(hashes.map((hash) => pollStatus(hash)));
3175
- return results;
3176
- });
3177
- }
3178
3210
 
3179
3211
  // src/core/btcUtils.ts
3180
- import { providers as providers2 } from "near-api-js";
3181
3212
  import Big from "big.js";
3182
3213
  function getBtcProvider() {
3183
3214
  if (typeof window === "undefined" || !window.btcContext) {
@@ -3198,55 +3229,45 @@ function getBtcRpcUrl() {
3198
3229
  return btcRpcUrls[network];
3199
3230
  });
3200
3231
  }
3201
- function nearViewMethod(contractId, methodName, args) {
3232
+ function getConfig(isDev) {
3202
3233
  return __async(this, null, function* () {
3203
3234
  const network = yield getNetwork();
3204
- const nearProvider = new providers2.FailoverRpcProvider(
3205
- nearRpcUrls[network].map(
3206
- (url) => new providers2.JsonRpcProvider({ url })
3207
- )
3208
- );
3209
- const res = yield nearProvider.query({
3210
- request_type: "call_function",
3211
- account_id: contractId,
3212
- method_name: methodName,
3213
- args_base64: Buffer.from(JSON.stringify(args)).toString("base64"),
3214
- finality: "optimistic"
3215
- });
3216
- return JSON.parse(Buffer.from(res.result).toString());
3235
+ return walletConfig[isDev ? "dev" : network];
3217
3236
  });
3218
3237
  }
3219
- function getDepositAddress(btcPublicKey, contractId) {
3238
+ function nearCall(contractId, methodName, args) {
3220
3239
  return __async(this, null, function* () {
3221
- const res = yield nearViewMethod(contractId, "get_user_dapp_deposit_address", {
3222
- deposit_type: {
3223
- BtcPublicKey: { btc_public_key: btcPublicKey, dapp_operation: "Burrowland->Supply" }
3224
- }
3225
- });
3226
- return res;
3240
+ const network = yield getNetwork();
3241
+ return nearCallFunction(contractId, methodName, args, { network });
3227
3242
  });
3228
3243
  }
3229
3244
  function receiveDepositMsg(_0, _1) {
3230
3245
  return __async(this, arguments, function* (baseUrl, {
3231
3246
  btcPublicKey,
3232
3247
  txHash,
3233
- depositType = 1
3248
+ depositType = 1,
3249
+ postActions,
3250
+ extraMsg
3234
3251
  }) {
3235
3252
  const res = yield request(`${baseUrl}/v1/receiveDepositMsg`, {
3236
3253
  method: "POST",
3237
- body: { btcPublicKey, txHash, depositType }
3254
+ body: { btcPublicKey, txHash, depositType, postActions, extraMsg }
3238
3255
  });
3256
+ console.log("receiveDepositMsg resp:", res);
3239
3257
  return res;
3240
3258
  });
3241
3259
  }
3242
3260
  function checkTransactionStatus(baseUrl, txHash) {
3243
3261
  return __async(this, null, function* () {
3244
- const res = yield request(`${baseUrl}/v1/bridgeFromTx?fromTxHash=${txHash}`, {
3245
- timeout: 6e4,
3246
- pollingInterval: 5e3,
3247
- maxPollingAttempts: 10,
3248
- shouldStopPolling: (res2) => res2.result_code === 0
3249
- });
3262
+ const res = yield request(
3263
+ `${baseUrl}/v1/bridgeFromTx?fromTxHash=${txHash}&fromChainId=1`,
3264
+ {
3265
+ timeout: 6e4,
3266
+ pollingInterval: 5e3,
3267
+ maxPollingAttempts: 10,
3268
+ shouldStopPolling: (res2) => res2.result_code === 0
3269
+ }
3270
+ );
3250
3271
  return res;
3251
3272
  });
3252
3273
  }
@@ -3265,61 +3286,141 @@ function getBtcGasPrice() {
3265
3286
  }
3266
3287
  function getBtcBalance() {
3267
3288
  return __async(this, null, function* () {
3268
- var _a;
3269
3289
  const { account } = yield retryOperation(getBtcProvider, (res2) => !!res2.account);
3270
3290
  if (!account) {
3271
3291
  console.error("BTC Account is not available.");
3272
- return { rawBalance: 0, balance: 0 };
3292
+ return { rawBalance: 0, balance: 0, maxSpendableBalance: 0 };
3273
3293
  }
3274
3294
  const btcRpcUrl = yield getBtcRpcUrl();
3275
3295
  const res = yield fetch(`${btcRpcUrl}/address/${account}/utxo`).then((res2) => res2.json());
3276
- const rawBalance = (_a = res.filter((item) => {
3277
- var _a2;
3278
- return (_a2 = item == null ? void 0 : item.status) == null ? void 0 : _a2.confirmed;
3279
- })) == null ? void 0 : _a.reduce((acc, cur) => acc + cur.value, 0);
3296
+ const rawBalance = res == null ? void 0 : res.reduce((acc, cur) => acc + cur.value, 0);
3280
3297
  const balance = rawBalance / __pow(10, 8);
3281
- return { rawBalance, balance };
3298
+ const feeRate = yield getBtcGasPrice();
3299
+ const maxGasFee = feeRate * 250 / __pow(10, 8);
3300
+ const availableBalance = Math.max(0, balance - maxGasFee);
3301
+ return {
3302
+ rawBalance,
3303
+ balance,
3304
+ availableBalance
3305
+ };
3282
3306
  });
3283
3307
  }
3284
3308
  function sendBitcoin(address, amount, feeRate) {
3285
3309
  return __async(this, null, function* () {
3286
3310
  const { sendBitcoin: sendBitcoin2 } = getBtcProvider();
3287
- const satoshis = new Big(amount).mul(__pow(10, 8)).toNumber();
3288
- const txHash = yield sendBitcoin2(address, satoshis, { feeRate });
3311
+ const txHash = yield sendBitcoin2(address, amount, { feeRate });
3289
3312
  return txHash;
3290
3313
  });
3291
3314
  }
3292
- function executeBurrowSupply(_0) {
3315
+ function estimateDepositAmount(amount, option) {
3316
+ return __async(this, null, function* () {
3317
+ const config = yield getConfig((option == null ? void 0 : option.isDev) || false);
3318
+ const {
3319
+ deposit_bridge_fee: { fee_min, fee_rate }
3320
+ } = yield nearCall(
3321
+ config.bridgeContractId,
3322
+ "get_config",
3323
+ {}
3324
+ );
3325
+ const fee = Math.max(Number(fee_min), Number(amount) * fee_rate);
3326
+ return new Big(amount).minus(fee).toFixed(0);
3327
+ });
3328
+ }
3329
+ function executeBTCDepositAndAction(_0) {
3293
3330
  return __async(this, arguments, function* ({
3294
- amount,
3331
+ action,
3295
3332
  feeRate,
3296
3333
  isDev = false
3297
3334
  }) {
3298
3335
  try {
3299
3336
  const { getPublicKey } = getBtcProvider();
3300
- const network = yield getNetwork();
3301
- const config = walletConfig[isDev ? "dev" : network];
3337
+ const config = yield getConfig(isDev);
3302
3338
  const btcPublicKey = yield getPublicKey();
3339
+ const _action = Object.assign(
3340
+ {},
3341
+ __spreadProps(__spreadValues({}, action), {
3342
+ gas: new Big(100).mul(__pow(10, 12)).toFixed(0)
3343
+ })
3344
+ );
3303
3345
  if (!btcPublicKey) {
3304
3346
  throw new Error("BTC Public Key is not available.");
3305
3347
  }
3306
- const address = yield getDepositAddress(btcPublicKey, config.contractId);
3348
+ if (!_action.receiver_id) {
3349
+ throw new Error("action.receiver_id is required");
3350
+ }
3351
+ const amountWithFee = yield estimateDepositAmount(_action.amount, {
3352
+ isDev
3353
+ });
3354
+ _action.amount = amountWithFee;
3355
+ if (!_action.amount || !new Big(_action.amount || 0).gt(0)) {
3356
+ throw new Error("action.amount is required or deposit amount is not enough");
3357
+ }
3358
+ const csna = yield nearCall(
3359
+ config.accountContractId,
3360
+ "get_chain_signature_near_account_id",
3361
+ {
3362
+ btc_public_key: btcPublicKey
3363
+ }
3364
+ );
3365
+ const depositMsg = {
3366
+ recipient_id: csna,
3367
+ post_actions: [_action]
3368
+ };
3369
+ const storageDepositMsg = {};
3370
+ const accountInfo = yield nearCall(config.accountContractId, "get_account", {
3371
+ account_id: csna
3372
+ });
3373
+ if (!accountInfo.nonce) {
3374
+ storageDepositMsg.btc_public_key = btcPublicKey;
3375
+ }
3376
+ const registerRes = yield nearCall(action.receiver_id, "storage_balance_of", {
3377
+ account_id: csna
3378
+ });
3379
+ if (!(registerRes == null ? void 0 : registerRes.available)) {
3380
+ storageDepositMsg.storage_deposit_msg = {
3381
+ contract_id: action.receiver_id,
3382
+ deposit: new Big(0.25).mul(__pow(10, 24)).toFixed(0),
3383
+ registration_only: true
3384
+ };
3385
+ }
3386
+ if (Object.keys(storageDepositMsg).length > 0) {
3387
+ depositMsg.extra_msg = JSON.stringify(storageDepositMsg);
3388
+ }
3389
+ console.log("deposit msg:", depositMsg);
3390
+ const userDepositAddress = yield nearCall(
3391
+ config.bridgeContractId,
3392
+ "get_user_deposit_address",
3393
+ { deposit_msg: depositMsg }
3394
+ );
3307
3395
  const _feeRate = feeRate || (yield getBtcGasPrice());
3308
- console.log("feeRate", _feeRate);
3309
- const txHash = yield sendBitcoin(address, amount, _feeRate);
3310
- const receiveDepositMsgRes = yield receiveDepositMsg(config.base_url, { btcPublicKey, txHash });
3311
- console.log("receiveDepositMsg resp:", receiveDepositMsgRes);
3396
+ console.log("user deposit address:", userDepositAddress);
3397
+ console.log("deposit amount:", new Big(action.amount).toNumber());
3398
+ console.log("receive amount:", new Big(_action.amount).toNumber());
3399
+ console.log("fee rate:", _feeRate);
3400
+ const txHash = yield sendBitcoin(
3401
+ userDepositAddress,
3402
+ new Big(action.amount).toNumber(),
3403
+ _feeRate
3404
+ );
3405
+ yield receiveDepositMsg(config.base_url, {
3406
+ btcPublicKey,
3407
+ txHash,
3408
+ postActions: JSON.stringify(depositMsg.post_actions),
3409
+ extraMsg: depositMsg.extra_msg || ""
3410
+ });
3312
3411
  const checkTransactionStatusRes = yield checkTransactionStatus(config.base_url, txHash);
3313
3412
  console.log("checkTransactionStatus resp:", checkTransactionStatusRes);
3413
+ return checkTransactionStatusRes.result_code === 0 ? { result: "success" } : { result: "failed", error: checkTransactionStatusRes.result_message };
3314
3414
  } catch (error) {
3315
3415
  console.error("Error executing Bridge+BurrowSupply:", error);
3416
+ return { result: "failed", error: error.message };
3316
3417
  }
3317
3418
  });
3318
3419
  }
3319
3420
 
3320
3421
  // src/index.ts
3321
3422
  var getVersion = () => {
3322
- return "0.3.5";
3423
+ return "0.3.7";
3323
3424
  };
3324
3425
  if (typeof window !== "undefined") {
3325
3426
  window.__PARTICLE_BTC_CONNECT_VERSION = getVersion();
@@ -3337,7 +3438,8 @@ export {
3337
3438
  UnisatConnector,
3338
3439
  WizzConnector,
3339
3440
  XverseConnector,
3340
- executeBurrowSupply,
3441
+ estimateDepositAmount,
3442
+ executeBTCDepositAndAction,
3341
3443
  getBtcBalance,
3342
3444
  getBtcGasPrice,
3343
3445
  getVersion,