@atomiqlabs/lp-lib 10.3.11 → 11.0.1

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.
Files changed (97) hide show
  1. package/dist/index.d.ts +3 -1
  2. package/dist/index.js +3 -4
  3. package/dist/plugins/IPlugin.d.ts +3 -2
  4. package/dist/plugins/PluginManager.d.ts +3 -2
  5. package/dist/plugins/PluginManager.js +2 -2
  6. package/dist/prices/OKXSwapPrice.d.ts +27 -0
  7. package/dist/prices/OKXSwapPrice.js +106 -0
  8. package/dist/swaps/FromBtcBaseSwap.d.ts +5 -1
  9. package/dist/swaps/FromBtcBaseSwap.js +20 -0
  10. package/dist/swaps/FromBtcBaseSwapHandler.d.ts +1 -0
  11. package/dist/swaps/FromBtcBaseSwapHandler.js +1 -1
  12. package/dist/swaps/FromBtcLnBaseSwapHandler.d.ts +8 -6
  13. package/dist/swaps/FromBtcLnBaseSwapHandler.js +7 -5
  14. package/dist/swaps/SwapHandler.d.ts +1 -4
  15. package/dist/swaps/SwapHandler.js +1 -2
  16. package/dist/swaps/SwapHandlerSwap.d.ts +4 -0
  17. package/dist/swaps/SwapHandlerSwap.js +9 -1
  18. package/dist/swaps/ToBtcBaseSwap.d.ts +3 -1
  19. package/dist/swaps/ToBtcBaseSwap.js +8 -2
  20. package/dist/swaps/ToBtcBaseSwapHandler.d.ts +1 -0
  21. package/dist/swaps/ToBtcBaseSwapHandler.js +1 -1
  22. package/dist/swaps/frombtc_abstract/FromBtcAbs.d.ts +3 -5
  23. package/dist/swaps/frombtc_abstract/FromBtcAbs.js +18 -25
  24. package/dist/swaps/frombtc_abstract/FromBtcSwapAbs.d.ts +1 -4
  25. package/dist/swaps/frombtc_abstract/FromBtcSwapAbs.js +3 -16
  26. package/dist/swaps/frombtc_trusted/FromBtcTrusted.d.ts +6 -9
  27. package/dist/swaps/frombtc_trusted/FromBtcTrusted.js +238 -137
  28. package/dist/swaps/frombtc_trusted/FromBtcTrustedSwap.d.ts +9 -6
  29. package/dist/swaps/frombtc_trusted/FromBtcTrustedSwap.js +15 -10
  30. package/dist/swaps/frombtcln_abstract/FromBtcLnAbs.d.ts +2 -2
  31. package/dist/swaps/frombtcln_abstract/FromBtcLnAbs.js +42 -62
  32. package/dist/swaps/frombtcln_abstract/FromBtcLnSwapAbs.d.ts +1 -6
  33. package/dist/swaps/frombtcln_abstract/FromBtcLnSwapAbs.js +2 -14
  34. package/dist/swaps/frombtcln_trusted/FromBtcLnTrusted.d.ts +3 -5
  35. package/dist/swaps/frombtcln_trusted/FromBtcLnTrusted.js +90 -87
  36. package/dist/swaps/frombtcln_trusted/FromBtcLnTrustedSwap.d.ts +1 -2
  37. package/dist/swaps/frombtcln_trusted/FromBtcLnTrustedSwap.js +5 -8
  38. package/dist/swaps/tobtc_abstract/ToBtcAbs.d.ts +5 -125
  39. package/dist/swaps/tobtc_abstract/ToBtcAbs.js +41 -334
  40. package/dist/swaps/tobtc_abstract/ToBtcSwapAbs.d.ts +1 -4
  41. package/dist/swaps/tobtc_abstract/ToBtcSwapAbs.js +2 -11
  42. package/dist/swaps/tobtcln_abstract/ToBtcLnAbs.d.ts +5 -55
  43. package/dist/swaps/tobtcln_abstract/ToBtcLnAbs.js +152 -398
  44. package/dist/swaps/tobtcln_abstract/ToBtcLnSwapAbs.d.ts +1 -6
  45. package/dist/swaps/tobtcln_abstract/ToBtcLnSwapAbs.js +2 -15
  46. package/dist/utils/Utils.d.ts +0 -10
  47. package/dist/utils/Utils.js +1 -34
  48. package/dist/wallets/IBitcoinWallet.d.ts +62 -0
  49. package/dist/wallets/IBitcoinWallet.js +2 -0
  50. package/dist/wallets/ILightningWallet.d.ts +118 -0
  51. package/dist/wallets/ILightningWallet.js +37 -0
  52. package/package.json +4 -9
  53. package/src/index.ts +4 -5
  54. package/src/plugins/IPlugin.ts +4 -2
  55. package/src/plugins/PluginManager.ts +6 -3
  56. package/src/prices/OKXSwapPrice.ts +114 -0
  57. package/src/swaps/FromBtcBaseSwap.ts +24 -1
  58. package/src/swaps/FromBtcBaseSwapHandler.ts +6 -2
  59. package/src/swaps/FromBtcLnBaseSwapHandler.ts +22 -6
  60. package/src/swaps/SwapHandler.ts +1 -8
  61. package/src/swaps/SwapHandlerSwap.ts +14 -1
  62. package/src/swaps/ToBtcBaseSwap.ts +12 -3
  63. package/src/swaps/ToBtcBaseSwapHandler.ts +6 -2
  64. package/src/swaps/frombtc_abstract/FromBtcAbs.ts +24 -28
  65. package/src/swaps/frombtc_abstract/FromBtcSwapAbs.ts +3 -18
  66. package/src/swaps/frombtc_trusted/FromBtcTrusted.ts +260 -159
  67. package/src/swaps/frombtc_trusted/FromBtcTrustedSwap.ts +22 -15
  68. package/src/swaps/frombtcln_abstract/FromBtcLnAbs.ts +69 -79
  69. package/src/swaps/frombtcln_abstract/FromBtcLnSwapAbs.ts +3 -20
  70. package/src/swaps/frombtcln_trusted/FromBtcLnTrusted.ts +108 -103
  71. package/src/swaps/frombtcln_trusted/FromBtcLnTrustedSwap.ts +6 -9
  72. package/src/swaps/tobtc_abstract/ToBtcAbs.ts +52 -410
  73. package/src/swaps/tobtc_abstract/ToBtcSwapAbs.ts +3 -18
  74. package/src/swaps/tobtcln_abstract/ToBtcLnAbs.ts +157 -434
  75. package/src/swaps/tobtcln_abstract/ToBtcLnSwapAbs.ts +3 -20
  76. package/src/utils/Utils.ts +0 -31
  77. package/src/wallets/IBitcoinWallet.ts +66 -0
  78. package/src/wallets/ILightningWallet.ts +179 -0
  79. package/dist/fees/OneDollarFeeEstimator.d.ts +0 -16
  80. package/dist/fees/OneDollarFeeEstimator.js +0 -71
  81. package/dist/utils/coinselect2/accumulative.d.ts +0 -6
  82. package/dist/utils/coinselect2/accumulative.js +0 -44
  83. package/dist/utils/coinselect2/blackjack.d.ts +0 -6
  84. package/dist/utils/coinselect2/blackjack.js +0 -41
  85. package/dist/utils/coinselect2/index.d.ts +0 -16
  86. package/dist/utils/coinselect2/index.js +0 -40
  87. package/dist/utils/coinselect2/utils.d.ts +0 -64
  88. package/dist/utils/coinselect2/utils.js +0 -121
  89. package/src/fees/OneDollarFeeEstimator.ts +0 -95
  90. package/src/utils/coinselect2/accumulative.js +0 -32
  91. package/src/utils/coinselect2/accumulative.ts +0 -58
  92. package/src/utils/coinselect2/blackjack.js +0 -29
  93. package/src/utils/coinselect2/blackjack.ts +0 -54
  94. package/src/utils/coinselect2/index.js +0 -16
  95. package/src/utils/coinselect2/index.ts +0 -50
  96. package/src/utils/coinselect2/utils.js +0 -110
  97. package/src/utils/coinselect2/utils.ts +0 -183
@@ -2,11 +2,27 @@ import {SwapHandlerSwap} from "./SwapHandlerSwap";
2
2
  import {SwapData} from "@atomiqlabs/base";
3
3
  import {FromBtcBaseSwapHandler} from "./FromBtcBaseSwapHandler";
4
4
  import * as BN from "bn.js";
5
- import * as lncli from "ln-service";
5
+ import {ILightningWallet, LightningNetworkChannel} from "../wallets/ILightningWallet";
6
+ import {IIntermediaryStorage} from "../storage/IIntermediaryStorage";
7
+ import {MultichainData} from "./SwapHandler";
8
+ import {ISwapPrice} from "./ISwapPrice";
6
9
 
7
10
 
8
11
  export abstract class FromBtcLnBaseSwapHandler<V extends SwapHandlerSwap<SwapData, S>, S> extends FromBtcBaseSwapHandler<V, S> {
9
12
 
13
+ readonly lightning: ILightningWallet;
14
+
15
+ constructor(
16
+ storageDirectory: IIntermediaryStorage<V>,
17
+ path: string,
18
+ chains: MultichainData,
19
+ lightning: ILightningWallet,
20
+ swapPricing: ISwapPrice
21
+ ) {
22
+ super(storageDirectory, path, chains, swapPricing);
23
+ this.lightning = lightning;
24
+ }
25
+
10
26
  /**
11
27
  * Checks if we have enough inbound liquidity to be able to receive an LN payment (without MPP)
12
28
  *
@@ -15,14 +31,14 @@ export abstract class FromBtcLnBaseSwapHandler<V extends SwapHandlerSwap<SwapDat
15
31
  * @param signal
16
32
  * @throws {DefinedRuntimeError} will throw an error if there isn't enough inbound liquidity to receive the LN payment
17
33
  */
18
- protected async checkInboundLiquidity(amountBD: BN, channelsPrefetch: Promise<{channels: any[]}>, signal: AbortSignal) {
34
+ protected async checkInboundLiquidity(amountBD: BN, channelsPrefetch: Promise<LightningNetworkChannel[]>, signal: AbortSignal) {
19
35
  const channelsResponse = await channelsPrefetch;
20
36
 
21
37
  signal.throwIfAborted();
22
38
 
23
39
  let hasEnoughInboundLiquidity = false;
24
- channelsResponse.channels.forEach(channel => {
25
- if(new BN(channel.remote_balance).gte(amountBD)) hasEnoughInboundLiquidity = true;
40
+ channelsResponse.forEach(channel => {
41
+ if(channel.remoteBalance.gte(amountBD)) hasEnoughInboundLiquidity = true;
26
42
  });
27
43
  if(!hasEnoughInboundLiquidity) {
28
44
  throw {
@@ -37,8 +53,8 @@ export abstract class FromBtcLnBaseSwapHandler<V extends SwapHandlerSwap<SwapDat
37
53
  *
38
54
  * @param abortController
39
55
  */
40
- protected getChannelsPrefetch(abortController: AbortController): Promise<{channels: any[]}> {
41
- return lncli.getChannels({is_active: true, lnd: this.LND}).catch(e => {
56
+ protected getChannelsPrefetch(abortController: AbortController): Promise<LightningNetworkChannel[]> {
57
+ return this.lightning.getChannels(true).catch(e => {
42
58
  this.logger.error("getChannelsPrefetch(): error", e);
43
59
  abortController.abort(e);
44
60
  return null;
@@ -1,15 +1,12 @@
1
- import {Express, Request, Response} from "express";
1
+ import {Express, Request} from "express";
2
2
  import {ISwapPrice} from "./ISwapPrice";
3
3
  import {
4
- AbstractSigner,
5
4
  ChainType,
6
5
  ClaimEvent,
7
6
  InitializeEvent, RefundEvent,
8
- SwapContract,
9
7
  SwapData,
10
8
  SwapEvent
11
9
  } from "@atomiqlabs/base";
12
- import {AuthenticatedLnd} from "lightning";
13
10
  import {SwapHandlerSwap} from "./SwapHandlerSwap";
14
11
  import {PluginManager} from "../plugins/PluginManager";
15
12
  import {IIntermediaryStorage} from "../storage/IIntermediaryStorage";
@@ -48,7 +45,6 @@ export type SwapBaseConfig = {
48
45
  feePPM: BN,
49
46
  max: BN,
50
47
  min: BN,
51
- maxSkew: number,
52
48
  safetyFactor: BN,
53
49
  swapCheckInterval: number
54
50
  };
@@ -88,7 +84,6 @@ export abstract class SwapHandler<V extends SwapHandlerSwap<SwapData, S> = SwapH
88
84
  readonly chains: MultichainData;
89
85
  readonly allowedTokens: {[chainId: string]: Set<string>};
90
86
  readonly swapPricing: ISwapPrice;
91
- readonly LND: AuthenticatedLnd;
92
87
 
93
88
  abstract config: SwapBaseConfig;
94
89
 
@@ -110,14 +105,12 @@ export abstract class SwapHandler<V extends SwapHandlerSwap<SwapData, S> = SwapH
110
105
  storageDirectory: IIntermediaryStorage<V>,
111
106
  path: string,
112
107
  chainsData: MultichainData,
113
- lnd: AuthenticatedLnd,
114
108
  swapPricing: ISwapPrice
115
109
  ) {
116
110
  this.storageManager = storageDirectory;
117
111
  this.chains = chainsData;
118
112
  if(this.chains.chains[this.chains.default]==null) throw new Error("Invalid default chain specified");
119
113
  this.path = path;
120
- this.LND = lnd;
121
114
  this.swapPricing = swapPricing;
122
115
  this.allowedTokens = {};
123
116
  for(let chainId in chainsData.chains) {
@@ -24,6 +24,11 @@ export abstract class SwapHandlerSwap<T extends SwapData = SwapData, S = any> ex
24
24
  readonly swapFee: BN;
25
25
  readonly swapFeeInToken: BN;
26
26
 
27
+ prefix: string;
28
+ timeout: string;
29
+ signature: string;
30
+ feeRate: string;
31
+
27
32
  protected constructor(chainIdentifier: string, swapFee: BN, swapFeeInToken: BN);
28
33
  protected constructor(obj: any);
29
34
 
@@ -42,6 +47,10 @@ export abstract class SwapHandlerSwap<T extends SwapData = SwapData, S = any> ex
42
47
  this.state = obj.state;
43
48
  this.swapFee = deserializeBN(obj.swapFee);
44
49
  this.swapFeeInToken = deserializeBN(obj.swapFeeInToken);
50
+ this.prefix = obj.prefix;
51
+ this.timeout = obj.timeout;
52
+ this.signature = obj.signature;
53
+ this.feeRate = obj.feeRate;
45
54
  }
46
55
  }
47
56
 
@@ -53,7 +62,11 @@ export abstract class SwapHandlerSwap<T extends SwapData = SwapData, S = any> ex
53
62
  metadata: this.metadata,
54
63
  txIds: this.txIds,
55
64
  swapFee: serializeBN(this.swapFee),
56
- swapFeeInToken: serializeBN(this.swapFeeInToken)
65
+ swapFeeInToken: serializeBN(this.swapFeeInToken),
66
+ prefix: this.prefix,
67
+ timeout: this.timeout,
68
+ signature: this.signature,
69
+ feeRate: this.feeRate
57
70
  }
58
71
  }
59
72
 
@@ -6,22 +6,26 @@ import {deserializeBN, serializeBN} from "../utils/Utils";
6
6
 
7
7
  export abstract class ToBtcBaseSwap<T extends SwapData = SwapData, S = any> extends SwapHandlerSwap<T, S> {
8
8
 
9
+ amount: BN;
10
+
9
11
  quotedNetworkFee: BN;
10
12
  readonly quotedNetworkFeeInToken: BN;
11
13
  realNetworkFee: BN;
12
14
  realNetworkFeeInToken: BN;
13
15
 
14
- protected constructor(chainIdentifier: string, swapFee: BN, swapFeeInToken: BN, quotedNetworkFee: BN, quotedNetworkFeeInToken: BN);
16
+ protected constructor(chainIdentifier: string, amount: BN, swapFee: BN, swapFeeInToken: BN, quotedNetworkFee: BN, quotedNetworkFeeInToken: BN);
15
17
  protected constructor(obj: any);
16
18
 
17
- protected constructor(obj?: any | string, swapFee?: BN, swapFeeInToken?: BN, quotedNetworkFee?: BN, quotedNetworkFeeInToken?: BN) {
18
- if(typeof(obj)==="string" && BN.isBN(swapFee) && BN.isBN(swapFeeInToken) && BN.isBN(quotedNetworkFee) && BN.isBN(quotedNetworkFeeInToken)) {
19
+ protected constructor(obj?: any | string, amount?: BN, swapFee?: BN, swapFeeInToken?: BN, quotedNetworkFee?: BN, quotedNetworkFeeInToken?: BN) {
20
+ if(typeof(obj)==="string" && BN.isBN(amount) && BN.isBN(swapFee) && BN.isBN(swapFeeInToken) && BN.isBN(quotedNetworkFee) && BN.isBN(quotedNetworkFeeInToken)) {
19
21
  super(obj, swapFee, swapFeeInToken);
22
+ this.amount = amount;
20
23
  this.quotedNetworkFee = quotedNetworkFee;
21
24
  this.quotedNetworkFeeInToken = quotedNetworkFeeInToken;
22
25
  return;
23
26
  } else {
24
27
  super(obj);
28
+ this.amount = deserializeBN(obj.amount);
25
29
  this.quotedNetworkFee = deserializeBN(obj.quotedNetworkFee);
26
30
  this.quotedNetworkFeeInToken = deserializeBN(obj.quotedNetworkFeeInToken);
27
31
  this.realNetworkFee = deserializeBN(obj.realNetworkFee);
@@ -31,6 +35,7 @@ export abstract class ToBtcBaseSwap<T extends SwapData = SwapData, S = any> exte
31
35
 
32
36
  serialize(): any {
33
37
  const obj = super.serialize();
38
+ obj.amount = serializeBN(this.amount);
34
39
  obj.quotedNetworkFee = serializeBN(this.quotedNetworkFee);
35
40
  obj.quotedNetworkFeeInToken = serializeBN(this.quotedNetworkFeeInToken);
36
41
  obj.realNetworkFee = serializeBN(this.realNetworkFee);
@@ -73,4 +78,8 @@ export abstract class ToBtcBaseSwap<T extends SwapData = SwapData, S = any> exte
73
78
  return {inInputToken: this.realNetworkFeeInToken, inOutputToken: this.realNetworkFee};
74
79
  }
75
80
 
81
+ getOutputAmount(): BN {
82
+ return this.amount;
83
+ }
84
+
76
85
  }
@@ -280,7 +280,8 @@ export abstract class ToBtcBaseSwapHandler<V extends SwapHandlerSwap<SwapData, S
280
280
  ): Promise<{
281
281
  prefix: string,
282
282
  timeout: string,
283
- signature: string
283
+ signature: string,
284
+ feeRate: string
284
285
  }> {
285
286
  const prefetchedSignData = signDataPrefetchPromise!=null ? await signDataPrefetchPromise : null;
286
287
  if(prefetchedSignData!=null) this.logger.debug("getToBtcSignatureData(): pre-fetched signature data: ", prefetchedSignData);
@@ -303,7 +304,10 @@ export abstract class ToBtcBaseSwapHandler<V extends SwapHandlerSwap<SwapData, S
303
304
  );
304
305
  abortSignal.throwIfAborted();
305
306
 
306
- return sigData;
307
+ return {
308
+ ...sigData,
309
+ feeRate
310
+ };
307
311
  }
308
312
 
309
313
  }
@@ -1,5 +1,4 @@
1
1
  import * as BN from "bn.js";
2
- import * as lncli from "ln-service";
3
2
  import {Express, Request, Response} from "express";
4
3
  import {FromBtcSwapAbs, FromBtcSwapState} from "./FromBtcSwapAbs";
5
4
  import {MultichainData, SwapHandlerType} from "../SwapHandler";
@@ -11,8 +10,6 @@ import {
11
10
  RefundEvent,
12
11
  SwapData
13
12
  } from "@atomiqlabs/base";
14
- import {AuthenticatedLnd} from "lightning";
15
- import * as bitcoin from "bitcoinjs-lib";
16
13
  import {createHash} from "crypto";
17
14
  import {expressHandlerWrapper} from "../../utils/Utils";
18
15
  import {PluginManager} from "../../plugins/PluginManager";
@@ -22,9 +19,9 @@ import {serverParamDecoder} from "../../utils/paramcoders/server/ServerParamDeco
22
19
  import {IParamReader} from "../../utils/paramcoders/IParamReader";
23
20
  import {ServerParamEncoder} from "../../utils/paramcoders/server/ServerParamEncoder";
24
21
  import {FromBtcBaseConfig, FromBtcBaseSwapHandler} from "../FromBtcBaseSwapHandler";
22
+ import {IBitcoinWallet} from "../../wallets/IBitcoinWallet";
25
23
 
26
24
  export type FromBtcConfig = FromBtcBaseConfig & {
27
- bitcoinNetwork: bitcoin.networks.Network
28
25
  confirmations: number,
29
26
  swapCsvDelta: number
30
27
  };
@@ -46,18 +43,22 @@ export class FromBtcAbs extends FromBtcBaseSwapHandler<FromBtcSwapAbs, FromBtcSw
46
43
 
47
44
  readonly config: FromBtcConfig & {swapTsCsvDelta: BN};
48
45
 
46
+ readonly bitcoin: IBitcoinWallet;
47
+
49
48
  constructor(
50
49
  storageDirectory: IIntermediaryStorage<FromBtcSwapAbs>,
51
50
  path: string,
52
51
  chains: MultichainData,
53
- lnd: AuthenticatedLnd,
52
+ bitcoin: IBitcoinWallet,
54
53
  swapPricing: ISwapPrice,
55
54
  config: FromBtcConfig
56
55
  ) {
57
- super(storageDirectory, path, chains, lnd, swapPricing);
58
- const anyConfig = config as any;
59
- anyConfig.swapTsCsvDelta = new BN(config.swapCsvDelta).mul(config.bitcoinBlocktime.div(config.safetyFactor));
60
- this.config = anyConfig;
56
+ super(storageDirectory, path, chains, swapPricing);
57
+ this.bitcoin = bitcoin;
58
+ this.config = {
59
+ ...config,
60
+ swapTsCsvDelta: new BN(config.swapCsvDelta).mul(config.bitcoinBlocktime.div(config.safetyFactor))
61
+ };
61
62
  }
62
63
 
63
64
  /**
@@ -65,10 +66,9 @@ export class FromBtcAbs extends FromBtcBaseSwapHandler<FromBtcSwapAbs, FromBtcSw
65
66
  *
66
67
  * @param address
67
68
  * @param amount
68
- * @param bitcoinNetwork
69
69
  */
70
- private getTxoHash(address: string, amount: BN, bitcoinNetwork: bitcoin.networks.Network): Buffer {
71
- const parsedOutputScript = bitcoin.address.toOutputScript(address, bitcoinNetwork);
70
+ private getTxoHash(address: string, amount: BN): Buffer {
71
+ const parsedOutputScript = this.bitcoin.toOutputScript(address);
72
72
 
73
73
  return createHash("sha256").update(Buffer.concat([
74
74
  Buffer.from(amount.toArray("le", 8)),
@@ -84,7 +84,7 @@ export class FromBtcAbs extends FromBtcBaseSwapHandler<FromBtcSwapAbs, FromBtcSw
84
84
  * @param amount
85
85
  */
86
86
  private getHash(chainIdentifier: string, address: string, amount: BN): Buffer {
87
- const parsedOutputScript = bitcoin.address.toOutputScript(address, this.config.bitcoinNetwork);
87
+ const parsedOutputScript = this.bitcoin.toOutputScript(address);
88
88
  const {swapContract} = this.getChain(chainIdentifier);
89
89
  return swapContract.getHashForOnchain(parsedOutputScript, amount, new BN(0));
90
90
  }
@@ -97,15 +97,11 @@ export class FromBtcAbs extends FromBtcBaseSwapHandler<FromBtcSwapAbs, FromBtcSw
97
97
  * @returns true if the swap should be refunded, false if nothing should be done
98
98
  */
99
99
  protected async processPastSwap(swap: FromBtcSwapAbs): Promise<boolean> {
100
- //Current time, minus maximum chain time skew
101
- const currentTime = new BN(Math.floor(Date.now()/1000)-this.config.maxSkew);
102
-
103
- const {swapContract} = this.getChain(swap.chainIdentifier);
100
+ const {swapContract, signer} = this.getChain(swap.chainIdentifier);
104
101
 
105
102
  //Once authorization expires in CREATED state, the user can no more commit it on-chain
106
103
  if(swap.state===FromBtcSwapState.CREATED) {
107
- const isExpired = swap.authorizationExpiry.lt(currentTime);
108
- if(!isExpired) return false;
104
+ if(!await swapContract.isInitAuthorizationExpired(swap.data, swap)) return false;
109
105
 
110
106
  const isCommited = await swapContract.isCommited(swap.data);
111
107
  if(isCommited) {
@@ -116,15 +112,14 @@ export class FromBtcAbs extends FromBtcBaseSwapHandler<FromBtcSwapAbs, FromBtcSw
116
112
  }
117
113
 
118
114
  this.swapLogger.info(swap, "processPastSwap(state=CREATED): removing past swap due to authorization expiry, address: "+swap.address);
115
+ await this.bitcoin.addUnusedAddress(swap.address);
119
116
  await this.removeSwapData(swap, FromBtcSwapState.CANCELED);
120
117
  return false;
121
118
  }
122
119
 
123
- const expiryTime = swap.data.getExpiry();
124
120
  //Check if commited swap expired by now
125
121
  if(swap.state===FromBtcSwapState.COMMITED) {
126
- const isExpired = expiryTime.lt(currentTime);
127
- if(!isExpired) return false;
122
+ if(!swapContract.isExpired(signer.getAddress(), swap.data)) return false;
128
123
 
129
124
  const isCommited = await swapContract.isCommited(swap.data);
130
125
  if(isCommited) {
@@ -233,6 +228,7 @@ export class FromBtcAbs extends FromBtcBaseSwapHandler<FromBtcSwapAbs, FromBtcSw
233
228
  savedSwap.txIds.refund = (event as any).meta?.txId;
234
229
 
235
230
  this.swapLogger.info(event, "SC: RefundEvent: swap refunded, address: "+savedSwap.address);
231
+ await this.bitcoin.addUnusedAddress(savedSwap.address);
236
232
  await this.removeSwapData(savedSwap, FromBtcSwapState.REFUNDED);
237
233
  }
238
234
 
@@ -383,10 +379,7 @@ export class FromBtcAbs extends FromBtcBaseSwapHandler<FromBtcSwapAbs, FromBtcSw
383
379
  metadata.times.balanceChecked = Date.now();
384
380
 
385
381
  //Create swap receive bitcoin address
386
- const {address: receiveAddress} = await lncli.createChainAddress({
387
- lnd: this.LND,
388
- format: "p2wpkh"
389
- });
382
+ const receiveAddress = await this.bitcoin.getAddress();
390
383
  abortController.signal.throwIfAborted();
391
384
  metadata.times.addressCreated = Date.now();
392
385
 
@@ -424,7 +417,7 @@ export class FromBtcAbs extends FromBtcBaseSwapHandler<FromBtcSwapAbs, FromBtcSw
424
417
  totalSecurityDeposit,
425
418
  totalClaimerBounty
426
419
  );
427
- data.setTxoHash(this.getTxoHash(receiveAddress, amountBD, this.config.bitcoinNetwork).toString("hex"));
420
+ data.setTxoHash(this.getTxoHash(receiveAddress, amountBD).toString("hex"));
428
421
  abortController.signal.throwIfAborted();
429
422
  metadata.times.swapCreated = Date.now();
430
423
 
@@ -435,7 +428,10 @@ export class FromBtcAbs extends FromBtcBaseSwapHandler<FromBtcSwapAbs, FromBtcSw
435
428
  const createdSwap: FromBtcSwapAbs = new FromBtcSwapAbs(chainIdentifier, receiveAddress, amountBD, swapFee, swapFeeInToken);
436
429
  createdSwap.data = data;
437
430
  createdSwap.metadata = metadata;
438
- createdSwap.authorizationExpiry = new BN(sigData.timeout);
431
+ createdSwap.prefix = sigData.prefix;
432
+ createdSwap.timeout = sigData.timeout;
433
+ createdSwap.signature = sigData.signature;
434
+ createdSwap.feeRate = sigData.feeRate;
439
435
 
440
436
  await PluginManager.swapCreate(createdSwap);
441
437
  await this.storageManager.saveData(createdSwap.data.getHash(), createdSwap.data.getSequence(), createdSwap);
@@ -1,9 +1,6 @@
1
1
  import * as BN from "bn.js";
2
- import * as bitcoin from "bitcoinjs-lib";
3
- import {createHash} from "crypto";
4
2
  import {SwapData} from "@atomiqlabs/base";
5
3
  import {SwapHandlerType} from "../SwapHandler";
6
- import {deserializeBN, serializeBN} from "../../utils/Utils";
7
4
  import {FromBtcBaseSwap} from "../FromBtcBaseSwap";
8
5
 
9
6
  export enum FromBtcSwapState {
@@ -17,8 +14,6 @@ export enum FromBtcSwapState {
17
14
  export class FromBtcSwapAbs<T extends SwapData = SwapData> extends FromBtcBaseSwap<T, FromBtcSwapState> {
18
15
 
19
16
  readonly address: string;
20
- readonly amount: BN;
21
- authorizationExpiry: BN;
22
17
  txId: string;
23
18
 
24
19
  constructor(chainIdentifier: string, address: string, amount: BN, swapFee: BN, swapFeeInToken: BN);
@@ -26,15 +21,12 @@ export class FromBtcSwapAbs<T extends SwapData = SwapData> extends FromBtcBaseSw
26
21
 
27
22
  constructor(prOrObj: string | any, address?: string, amount?: BN, swapFee?: BN, swapFeeInToken?: BN) {
28
23
  if(typeof(prOrObj)==="string") {
29
- super(prOrObj, swapFee, swapFeeInToken);
24
+ super(prOrObj, amount, swapFee, swapFeeInToken);
30
25
  this.state = FromBtcSwapState.CREATED;
31
26
  this.address = address;
32
- this.amount = amount;
33
27
  } else {
34
28
  super(prOrObj);
35
29
  this.address = prOrObj.address;
36
- this.amount = new BN(prOrObj.amount);
37
- this.authorizationExpiry = deserializeBN(prOrObj.authorizationExpiry);
38
30
  this.txId = prOrObj.txId;
39
31
  }
40
32
  this.type = SwapHandlerType.FROM_BTC;
@@ -43,19 +35,12 @@ export class FromBtcSwapAbs<T extends SwapData = SwapData> extends FromBtcBaseSw
43
35
  serialize(): any {
44
36
  const partialSerialized = super.serialize();
45
37
  partialSerialized.address = this.address;
46
- partialSerialized.amount = this.amount.toString(10);
47
- partialSerialized.authorizationExpiry = serializeBN(this.authorizationExpiry);
48
38
  partialSerialized.txId = this.txId;
49
39
  return partialSerialized;
50
40
  }
51
41
 
52
- getTxoHash(bitcoinNetwork: bitcoin.networks.Network): Buffer {
53
- const parsedOutputScript = bitcoin.address.toOutputScript(this.address, bitcoinNetwork);
54
-
55
- return createHash("sha256").update(Buffer.concat([
56
- Buffer.from(this.amount.toArray("le", 8)),
57
- parsedOutputScript
58
- ])).digest();
42
+ getTxoHash(): Buffer {
43
+ return Buffer.from(this.data.getTxoHash(), "hex");
59
44
  }
60
45
 
61
46
  isInitiated(): boolean {