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/dist/index.js CHANGED
@@ -3608,7 +3608,7 @@ function getWithdrawTransaction(_0) {
3608
3608
  env = "mainnet"
3609
3609
  }) {
3610
3610
  const provider = getBtcProvider();
3611
- const btcAddress = yield provider.account;
3611
+ const btcAddress = provider.account;
3612
3612
  const config = yield getConfig(env);
3613
3613
  const brgConfig = yield nearCall(config.bridgeContractId, "get_config", {});
3614
3614
  if (brgConfig.min_withdraw_amount) {
@@ -3632,7 +3632,7 @@ function getWithdrawTransaction(_0) {
3632
3632
  };
3633
3633
  });
3634
3634
  const _feeRate = feeRate || (yield getBtcGasPrice());
3635
- const { inputs, outputs, fee } = (0, import_coinselect.default)(
3635
+ let { inputs, outputs, fee } = (0, import_coinselect.default)(
3636
3636
  utxos,
3637
3637
  [{ address: btcAddress, value: Number(amount) }],
3638
3638
  Math.ceil(_feeRate)
@@ -3641,32 +3641,61 @@ function getWithdrawTransaction(_0) {
3641
3641
  throw new Error("The network is busy, please try again later.");
3642
3642
  }
3643
3643
  const maxBtcFee = Number(brgConfig.max_btc_gas_fee);
3644
- const newFee = fee;
3645
- const withdrawChangeAddress = brgConfig.change_address;
3646
- if (newFee > maxBtcFee) {
3644
+ const transactionFee = fee;
3645
+ const changeAddress = brgConfig.change_address;
3646
+ if (transactionFee > maxBtcFee) {
3647
3647
  throw new Error("Gas exceeds maximum value");
3648
3648
  }
3649
- let userOutput, noUserOutput;
3649
+ let recipientOutput, changeOutput;
3650
3650
  for (let i = 0; i < outputs.length; i++) {
3651
3651
  const output = outputs[i];
3652
3652
  if (output.value.toString() === amount.toString()) {
3653
- userOutput = output;
3653
+ recipientOutput = output;
3654
3654
  } else {
3655
- noUserOutput = output;
3655
+ changeOutput = output;
3656
3656
  }
3657
3657
  if (!output.address) {
3658
- output.address = withdrawChangeAddress;
3658
+ output.address = changeAddress;
3659
3659
  }
3660
3660
  }
3661
- userOutput.value = new import_big.default(userOutput.value).minus(newFee).minus(withdrawFee).toNumber();
3662
- if (noUserOutput) {
3663
- noUserOutput.value = new import_big.default(noUserOutput.value).plus(newFee).plus(withdrawFee).toNumber();
3661
+ recipientOutput.value = new import_big.default(recipientOutput.value).minus(transactionFee).minus(withdrawFee).toNumber();
3662
+ if (changeOutput) {
3663
+ changeOutput.value = new import_big.default(changeOutput.value).plus(transactionFee).plus(withdrawFee).toNumber();
3664
+ const remainingInputs = [...inputs];
3665
+ let smallestInput = Math.min.apply(
3666
+ null,
3667
+ remainingInputs.map((input) => input.value)
3668
+ );
3669
+ let remainingChangeAmount = changeOutput.value;
3670
+ while (remainingChangeAmount >= smallestInput && smallestInput > 0 && remainingInputs.length > 0) {
3671
+ remainingChangeAmount -= smallestInput;
3672
+ changeOutput.value = remainingChangeAmount;
3673
+ const smallestInputIndex = remainingInputs.findIndex(
3674
+ (input) => input.value === smallestInput
3675
+ );
3676
+ if (smallestInputIndex > -1) {
3677
+ remainingInputs.splice(smallestInputIndex, 1);
3678
+ }
3679
+ smallestInput = Math.min.apply(
3680
+ null,
3681
+ remainingInputs.map((input) => input.value)
3682
+ );
3683
+ }
3684
+ const minChangeAmount = Number(brgConfig.min_change_amount);
3685
+ let additionalFee = 0;
3686
+ if (changeOutput.value === 0) {
3687
+ outputs = outputs.filter((item) => item.value !== 0);
3688
+ } else if (changeOutput.value < minChangeAmount) {
3689
+ additionalFee = minChangeAmount - changeOutput.value;
3690
+ recipientOutput.value -= additionalFee;
3691
+ changeOutput.value = minChangeAmount;
3692
+ }
3664
3693
  } else {
3665
- noUserOutput = {
3666
- address: withdrawChangeAddress,
3667
- value: new import_big.default(newFee).plus(withdrawFee).toNumber()
3694
+ changeOutput = {
3695
+ address: changeAddress,
3696
+ value: new import_big.default(transactionFee).plus(withdrawFee).toNumber()
3668
3697
  };
3669
- outputs.push(noUserOutput);
3698
+ outputs.push(changeOutput);
3670
3699
  }
3671
3700
  const insufficientOutput = outputs.some((item) => item.value < 0);
3672
3701
  if (insufficientOutput) {
@@ -3674,7 +3703,7 @@ function getWithdrawTransaction(_0) {
3674
3703
  }
3675
3704
  const inputSum = inputs.reduce((sum, cur) => sum + Number(cur.value), 0);
3676
3705
  const outputSum = outputs.reduce((sum, cur) => sum + Number(cur.value), 0);
3677
- if (newFee + outputSum !== inputSum) {
3706
+ if (transactionFee + outputSum !== inputSum) {
3678
3707
  throw new Error("compute error");
3679
3708
  }
3680
3709
  const network = yield getNetwork();
@@ -4378,11 +4407,6 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
4378
4407
  tokenId: currentConfig.nearToken,
4379
4408
  env
4380
4409
  });
4381
- const { balance: btcBalance } = yield getTokenBalance({
4382
- csna: accountId,
4383
- tokenId: currentConfig.btcToken,
4384
- env
4385
- });
4386
4410
  const transferAmount = transactions2.reduce(
4387
4411
  (acc, tx) => {
4388
4412
  tx.actions.forEach((action) => {
@@ -4402,12 +4426,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
4402
4426
  { near: new import_big2.default(0), btc: new import_big2.default(0) }
4403
4427
  );
4404
4428
  const nearAvailableBalance = new import_big2.default(nearBalance).minus(transferAmount.near).toNumber();
4405
- const btcAvailableBalance = new import_big2.default(btcBalance).minus(transferAmount.btc).toNumber();
4406
- if (btcAvailableBalance < 8e-6) {
4407
- throw new Error("BTC balance is not enough, please deposit more BTC.");
4408
- }
4409
4429
  console.log("available near balance:", nearAvailableBalance);
4410
- console.log("available btc balance:", btcAvailableBalance);
4411
4430
  console.log("available gas token balance:", gasTokenBalance);
4412
4431
  const convertTx = yield Promise.all(
4413
4432
  transactions2.map((transaction, index) => convertTransactionToTxHex(transaction, index))
@@ -4555,7 +4574,7 @@ function setupBTCWallet({
4555
4574
 
4556
4575
  // src/index.ts
4557
4576
  var getVersion = () => {
4558
- return "0.5.12-beta";
4577
+ return "0.5.14-beta";
4559
4578
  };
4560
4579
  if (typeof window !== "undefined") {
4561
4580
  window.__BTC_WALLET_VERSION = getVersion();