btc-wallet 0.5.12-beta → 0.5.14-beta

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.
package/esm/index.js CHANGED
@@ -3558,7 +3558,7 @@ function getWithdrawTransaction(_0) {
3558
3558
  env = "mainnet"
3559
3559
  }) {
3560
3560
  const provider = getBtcProvider();
3561
- const btcAddress = yield provider.account;
3561
+ const btcAddress = provider.account;
3562
3562
  const config = yield getConfig(env);
3563
3563
  const brgConfig = yield nearCall(config.bridgeContractId, "get_config", {});
3564
3564
  if (brgConfig.min_withdraw_amount) {
@@ -3582,7 +3582,7 @@ function getWithdrawTransaction(_0) {
3582
3582
  };
3583
3583
  });
3584
3584
  const _feeRate = feeRate || (yield getBtcGasPrice());
3585
- const { inputs, outputs, fee } = coinselect(
3585
+ let { inputs, outputs, fee } = coinselect(
3586
3586
  utxos,
3587
3587
  [{ address: btcAddress, value: Number(amount) }],
3588
3588
  Math.ceil(_feeRate)
@@ -3591,32 +3591,61 @@ function getWithdrawTransaction(_0) {
3591
3591
  throw new Error("The network is busy, please try again later.");
3592
3592
  }
3593
3593
  const maxBtcFee = Number(brgConfig.max_btc_gas_fee);
3594
- const newFee = fee;
3595
- const withdrawChangeAddress = brgConfig.change_address;
3596
- if (newFee > maxBtcFee) {
3594
+ const transactionFee = fee;
3595
+ const changeAddress = brgConfig.change_address;
3596
+ if (transactionFee > maxBtcFee) {
3597
3597
  throw new Error("Gas exceeds maximum value");
3598
3598
  }
3599
- let userOutput, noUserOutput;
3599
+ let recipientOutput, changeOutput;
3600
3600
  for (let i = 0; i < outputs.length; i++) {
3601
3601
  const output = outputs[i];
3602
3602
  if (output.value.toString() === amount.toString()) {
3603
- userOutput = output;
3603
+ recipientOutput = output;
3604
3604
  } else {
3605
- noUserOutput = output;
3605
+ changeOutput = output;
3606
3606
  }
3607
3607
  if (!output.address) {
3608
- output.address = withdrawChangeAddress;
3608
+ output.address = changeAddress;
3609
3609
  }
3610
3610
  }
3611
- userOutput.value = new Big(userOutput.value).minus(newFee).minus(withdrawFee).toNumber();
3612
- if (noUserOutput) {
3613
- noUserOutput.value = new Big(noUserOutput.value).plus(newFee).plus(withdrawFee).toNumber();
3611
+ recipientOutput.value = new Big(recipientOutput.value).minus(transactionFee).minus(withdrawFee).toNumber();
3612
+ if (changeOutput) {
3613
+ changeOutput.value = new Big(changeOutput.value).plus(transactionFee).plus(withdrawFee).toNumber();
3614
+ const remainingInputs = [...inputs];
3615
+ let smallestInput = Math.min.apply(
3616
+ null,
3617
+ remainingInputs.map((input) => input.value)
3618
+ );
3619
+ let remainingChangeAmount = changeOutput.value;
3620
+ while (remainingChangeAmount >= smallestInput && smallestInput > 0 && remainingInputs.length > 0) {
3621
+ remainingChangeAmount -= smallestInput;
3622
+ changeOutput.value = remainingChangeAmount;
3623
+ const smallestInputIndex = remainingInputs.findIndex(
3624
+ (input) => input.value === smallestInput
3625
+ );
3626
+ if (smallestInputIndex > -1) {
3627
+ remainingInputs.splice(smallestInputIndex, 1);
3628
+ }
3629
+ smallestInput = Math.min.apply(
3630
+ null,
3631
+ remainingInputs.map((input) => input.value)
3632
+ );
3633
+ }
3634
+ const minChangeAmount = Number(brgConfig.min_change_amount);
3635
+ let additionalFee = 0;
3636
+ if (changeOutput.value === 0) {
3637
+ outputs = outputs.filter((item) => item.value !== 0);
3638
+ } else if (changeOutput.value < minChangeAmount) {
3639
+ additionalFee = minChangeAmount - changeOutput.value;
3640
+ recipientOutput.value -= additionalFee;
3641
+ changeOutput.value = minChangeAmount;
3642
+ }
3614
3643
  } else {
3615
- noUserOutput = {
3616
- address: withdrawChangeAddress,
3617
- value: new Big(newFee).plus(withdrawFee).toNumber()
3644
+ changeOutput = {
3645
+ address: changeAddress,
3646
+ value: new Big(transactionFee).plus(withdrawFee).toNumber()
3618
3647
  };
3619
- outputs.push(noUserOutput);
3648
+ outputs.push(changeOutput);
3620
3649
  }
3621
3650
  const insufficientOutput = outputs.some((item) => item.value < 0);
3622
3651
  if (insufficientOutput) {
@@ -3624,7 +3653,7 @@ function getWithdrawTransaction(_0) {
3624
3653
  }
3625
3654
  const inputSum = inputs.reduce((sum, cur) => sum + Number(cur.value), 0);
3626
3655
  const outputSum = outputs.reduce((sum, cur) => sum + Number(cur.value), 0);
3627
- if (newFee + outputSum !== inputSum) {
3656
+ if (transactionFee + outputSum !== inputSum) {
3628
3657
  throw new Error("compute error");
3629
3658
  }
3630
3659
  const network = yield getNetwork();
@@ -4328,11 +4357,6 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
4328
4357
  tokenId: currentConfig.nearToken,
4329
4358
  env
4330
4359
  });
4331
- const { balance: btcBalance } = yield getTokenBalance({
4332
- csna: accountId,
4333
- tokenId: currentConfig.btcToken,
4334
- env
4335
- });
4336
4360
  const transferAmount = transactions2.reduce(
4337
4361
  (acc, tx) => {
4338
4362
  tx.actions.forEach((action) => {
@@ -4352,12 +4376,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
4352
4376
  { near: new Big2(0), btc: new Big2(0) }
4353
4377
  );
4354
4378
  const nearAvailableBalance = new Big2(nearBalance).minus(transferAmount.near).toNumber();
4355
- const btcAvailableBalance = new Big2(btcBalance).minus(transferAmount.btc).toNumber();
4356
- if (btcAvailableBalance < 8e-6) {
4357
- throw new Error("BTC balance is not enough, please deposit more BTC.");
4358
- }
4359
4379
  console.log("available near balance:", nearAvailableBalance);
4360
- console.log("available btc balance:", btcAvailableBalance);
4361
4380
  console.log("available gas token balance:", gasTokenBalance);
4362
4381
  const convertTx = yield Promise.all(
4363
4382
  transactions2.map((transaction, index) => convertTransactionToTxHex(transaction, index))
@@ -4505,7 +4524,7 @@ function setupBTCWallet({
4505
4524
 
4506
4525
  // src/index.ts
4507
4526
  var getVersion = () => {
4508
- return "0.5.12-beta";
4527
+ return "0.5.14-beta";
4509
4528
  };
4510
4529
  if (typeof window !== "undefined") {
4511
4530
  window.__BTC_WALLET_VERSION = getVersion();