btc-wallet 0.5.12-beta → 0.5.14-beta

Sign up to get free protection for your applications and to get access to all the features.
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();