@lifi/sdk 3.8.10 → 3.9.0-beta.0

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 (110) hide show
  1. package/package.json +3 -2
  2. package/src/_cjs/core/EVM/EVM.js +2 -2
  3. package/src/_cjs/core/EVM/EVM.js.map +1 -1
  4. package/src/_cjs/core/EVM/EVMStepExecutor.js +3 -1
  5. package/src/_cjs/core/EVM/EVMStepExecutor.js.map +1 -1
  6. package/src/_cjs/core/EVM/publicClient.js +8 -0
  7. package/src/_cjs/core/EVM/publicClient.js.map +1 -1
  8. package/src/_cjs/core/EVM/{getENSAddress.js → resolveENSAddress.js} +4 -4
  9. package/src/_cjs/core/EVM/resolveENSAddress.js.map +1 -0
  10. package/src/_cjs/core/EVM/resolveEVMAddress.js +11 -0
  11. package/src/_cjs/core/EVM/resolveEVMAddress.js.map +1 -0
  12. package/src/_cjs/core/EVM/uns/constants.js +78 -0
  13. package/src/_cjs/core/EVM/uns/constants.js.map +1 -0
  14. package/src/_cjs/core/EVM/uns/resolveUNSAddress.js +82 -0
  15. package/src/_cjs/core/EVM/uns/resolveUNSAddress.js.map +1 -0
  16. package/src/_cjs/core/Solana/Solana.js +2 -2
  17. package/src/_cjs/core/Solana/Solana.js.map +1 -1
  18. package/src/_cjs/core/Solana/resolveSolanaAddress.js +8 -0
  19. package/src/_cjs/core/Solana/resolveSolanaAddress.js.map +1 -0
  20. package/src/_cjs/core/Sui/Sui.js +2 -2
  21. package/src/_cjs/core/Sui/Sui.js.map +1 -1
  22. package/src/_cjs/core/Sui/resolveSuiAddress.js +8 -0
  23. package/src/_cjs/core/Sui/resolveSuiAddress.js.map +1 -0
  24. package/src/_cjs/core/UTXO/UTXO.js +2 -3
  25. package/src/_cjs/core/UTXO/UTXO.js.map +1 -1
  26. package/src/_cjs/core/UTXO/UTXOStepExecutor.js +25 -1
  27. package/src/_cjs/core/UTXO/UTXOStepExecutor.js.map +1 -1
  28. package/src/_cjs/core/UTXO/resolveUTXOAddress.js +7 -0
  29. package/src/_cjs/core/UTXO/resolveUTXOAddress.js.map +1 -0
  30. package/src/_cjs/core/UTXO/utils.js +3 -0
  31. package/src/_cjs/core/UTXO/utils.js.map +1 -1
  32. package/src/_cjs/version.js +1 -1
  33. package/src/_cjs/version.js.map +1 -1
  34. package/src/_esm/core/EVM/EVM.js +2 -2
  35. package/src/_esm/core/EVM/EVM.js.map +1 -1
  36. package/src/_esm/core/EVM/EVMStepExecutor.js +3 -1
  37. package/src/_esm/core/EVM/EVMStepExecutor.js.map +1 -1
  38. package/src/_esm/core/EVM/publicClient.js +9 -0
  39. package/src/_esm/core/EVM/publicClient.js.map +1 -1
  40. package/src/_esm/core/EVM/{getENSAddress.js → resolveENSAddress.js} +2 -2
  41. package/src/_esm/core/EVM/resolveENSAddress.js.map +1 -0
  42. package/src/_esm/core/EVM/resolveEVMAddress.js +8 -0
  43. package/src/_esm/core/EVM/resolveEVMAddress.js.map +1 -0
  44. package/src/_esm/core/EVM/uns/constants.js +74 -0
  45. package/src/_esm/core/EVM/uns/constants.js.map +1 -0
  46. package/src/_esm/core/EVM/uns/resolveUNSAddress.js +80 -0
  47. package/src/_esm/core/EVM/uns/resolveUNSAddress.js.map +1 -0
  48. package/src/_esm/core/Solana/Solana.js +2 -2
  49. package/src/_esm/core/Solana/Solana.js.map +1 -1
  50. package/src/_esm/core/Solana/resolveSolanaAddress.js +5 -0
  51. package/src/_esm/core/Solana/resolveSolanaAddress.js.map +1 -0
  52. package/src/_esm/core/Sui/Sui.js +2 -2
  53. package/src/_esm/core/Sui/Sui.js.map +1 -1
  54. package/src/_esm/core/Sui/resolveSuiAddress.js +5 -0
  55. package/src/_esm/core/Sui/resolveSuiAddress.js.map +1 -0
  56. package/src/_esm/core/UTXO/UTXO.js +2 -4
  57. package/src/_esm/core/UTXO/UTXO.js.map +1 -1
  58. package/src/_esm/core/UTXO/UTXOStepExecutor.js +35 -4
  59. package/src/_esm/core/UTXO/UTXOStepExecutor.js.map +1 -1
  60. package/src/_esm/core/UTXO/resolveUTXOAddress.js +5 -0
  61. package/src/_esm/core/UTXO/resolveUTXOAddress.js.map +1 -0
  62. package/src/_esm/core/UTXO/utils.js +2 -0
  63. package/src/_esm/core/UTXO/utils.js.map +1 -1
  64. package/src/_esm/version.js +1 -1
  65. package/src/_esm/version.js.map +1 -1
  66. package/src/_types/core/EVM/EVMStepExecutor.d.ts.map +1 -1
  67. package/src/_types/core/EVM/publicClient.d.ts.map +1 -1
  68. package/src/_types/core/EVM/resolveENSAddress.d.ts +2 -0
  69. package/src/_types/core/EVM/resolveENSAddress.d.ts.map +1 -0
  70. package/src/_types/core/EVM/resolveEVMAddress.d.ts +3 -0
  71. package/src/_types/core/EVM/resolveEVMAddress.d.ts.map +1 -0
  72. package/src/_types/core/EVM/uns/constants.d.ts +51 -0
  73. package/src/_types/core/EVM/uns/constants.d.ts.map +1 -0
  74. package/src/_types/core/EVM/uns/resolveUNSAddress.d.ts +3 -0
  75. package/src/_types/core/EVM/uns/resolveUNSAddress.d.ts.map +1 -0
  76. package/src/_types/core/Solana/resolveSolanaAddress.d.ts +2 -0
  77. package/src/_types/core/Solana/resolveSolanaAddress.d.ts.map +1 -0
  78. package/src/_types/core/Sui/resolveSuiAddress.d.ts +2 -0
  79. package/src/_types/core/Sui/resolveSuiAddress.d.ts.map +1 -0
  80. package/src/_types/core/UTXO/UTXO.d.ts.map +1 -1
  81. package/src/_types/core/UTXO/UTXOStepExecutor.d.ts.map +1 -1
  82. package/src/_types/core/UTXO/resolveUTXOAddress.d.ts +2 -0
  83. package/src/_types/core/UTXO/resolveUTXOAddress.d.ts.map +1 -0
  84. package/src/_types/core/UTXO/utils.d.ts +1 -0
  85. package/src/_types/core/UTXO/utils.d.ts.map +1 -1
  86. package/src/_types/core/types.d.ts +2 -2
  87. package/src/_types/core/types.d.ts.map +1 -1
  88. package/src/_types/version.d.ts +1 -1
  89. package/src/_types/version.d.ts.map +1 -1
  90. package/src/core/EVM/EVM.ts +2 -2
  91. package/src/core/EVM/EVMStepExecutor.ts +3 -1
  92. package/src/core/EVM/publicClient.ts +13 -1
  93. package/src/core/EVM/{getENSAddress.ts → resolveENSAddress.ts} +1 -1
  94. package/src/core/EVM/resolveEVMAddress.ts +15 -0
  95. package/src/core/EVM/uns/constants.ts +81 -0
  96. package/src/core/EVM/uns/resolveUNSAddress.ts +123 -0
  97. package/src/core/Solana/Solana.ts +2 -2
  98. package/src/core/Solana/resolveSolanaAddress.ts +7 -0
  99. package/src/core/Sui/Sui.ts +2 -2
  100. package/src/core/Sui/resolveSuiAddress.ts +7 -0
  101. package/src/core/UTXO/UTXO.ts +2 -4
  102. package/src/core/UTXO/UTXOStepExecutor.ts +48 -4
  103. package/src/core/UTXO/resolveUTXOAddress.ts +6 -0
  104. package/src/core/UTXO/utils.ts +4 -0
  105. package/src/core/types.ts +7 -1
  106. package/src/version.ts +1 -1
  107. package/src/_cjs/core/EVM/getENSAddress.js.map +0 -1
  108. package/src/_esm/core/EVM/getENSAddress.js.map +0 -1
  109. package/src/_types/core/EVM/getENSAddress.d.ts +0 -2
  110. package/src/_types/core/EVM/getENSAddress.d.ts.map +0 -1
@@ -1,7 +1,15 @@
1
1
  import type { Client, ReplacementReason } from '@bigmi/core'
2
- import { signPsbt, waitForTransaction, withTimeout } from '@bigmi/core'
2
+ import {
3
+ AddressType,
4
+ getAddressInfo,
5
+ hexToUnit8Array,
6
+ signPsbt,
7
+ waitForTransaction,
8
+ withTimeout,
9
+ } from '@bigmi/core'
10
+ import * as ecc from '@bitcoinerlab/secp256k1'
3
11
  import { ChainId } from '@lifi/types'
4
- import { address, networks, Psbt } from 'bitcoinjs-lib'
12
+ import { address, initEccLib, networks, Psbt } from 'bitcoinjs-lib'
5
13
  import { config } from '../../config.js'
6
14
  import { LiFiErrorCode } from '../../errors/constants.js'
7
15
  import { TransactionError } from '../../errors/errors.js'
@@ -17,7 +25,7 @@ import type {
17
25
  import { waitForDestinationChainTransaction } from '../waitForDestinationChainTransaction.js'
18
26
  import { getUTXOPublicClient } from './getUTXOPublicClient.js'
19
27
  import { parseUTXOErrors } from './parseUTXOErrors.js'
20
- import { isPsbtFinalized } from './utils.js'
28
+ import { isPsbtFinalized, toXOnly } from './utils.js'
21
29
 
22
30
  export interface UTXOStepExecutorOptions extends StepExecutorOptions {
23
31
  client: Client
@@ -143,8 +151,44 @@ export class UTXOStepExecutor extends BaseStepExecutor {
143
151
 
144
152
  const psbtHex = transactionRequest.data
145
153
 
154
+ // Initialize ECC library required for Taproot operations
155
+ // https://github.com/bitcoinjs/bitcoinjs-lib?tab=readme-ov-file#using-taproot
156
+ initEccLib(ecc)
157
+
146
158
  const psbt = Psbt.fromHex(psbtHex, { network: networks.bitcoin })
147
159
 
160
+ psbt.data.inputs.forEach((input, index) => {
161
+ const accountAddress = input.witnessUtxo
162
+ ? address.fromOutputScript(
163
+ input.witnessUtxo.script,
164
+ networks.bitcoin
165
+ )
166
+ : (this.client.account?.address as string)
167
+ const addressInfo = getAddressInfo(accountAddress)
168
+ if (addressInfo.type === AddressType.p2tr) {
169
+ // Taproot (P2TR) addresses require specific PSBT fields for proper signing
170
+
171
+ // tapInternalKey: Required for Taproot key-path spending
172
+ // Most wallets / libraries usually handle this already
173
+ if (!input.tapInternalKey) {
174
+ const pubKey = this.client.account?.publicKey
175
+ if (pubKey) {
176
+ const tapInternalKey = toXOnly(hexToUnit8Array(pubKey))
177
+ psbt.updateInput(index, {
178
+ tapInternalKey,
179
+ })
180
+ }
181
+ }
182
+ // sighashType: Required by bitcoinjs-lib even though the bitcoin protocol allows defaults
183
+ // check if sighashType is default (0) or not set (undefined)
184
+ if (!input.sighashType) {
185
+ psbt.updateInput(index, {
186
+ sighashType: 1, // Default to Transaction.SIGHASH_ALL - 1
187
+ })
188
+ }
189
+ }
190
+ })
191
+
148
192
  const inputsToSign = Array.from(
149
193
  psbt.data.inputs
150
194
  .reduce((map, input, index) => {
@@ -172,7 +216,7 @@ export class UTXOStepExecutor extends BaseStepExecutor {
172
216
  const signedPsbtHex = await withTimeout(
173
217
  () =>
174
218
  signPsbt(this.client, {
175
- psbt: psbtHex,
219
+ psbt: psbt.toHex(),
176
220
  inputsToSign: inputsToSign,
177
221
  finalize: false,
178
222
  }),
@@ -0,0 +1,6 @@
1
+ export async function resolveUTXOAddress(
2
+ name: string
3
+ ): Promise<string | undefined> {
4
+ // Not supported on UTXO yet
5
+ return name
6
+ }
@@ -8,3 +8,7 @@ export function isPsbtFinalized(psbt: Psbt): boolean {
8
8
  return false
9
9
  }
10
10
  }
11
+
12
+ // helper function to convert full public key (33 bytes) to x-only compressed format (32 bytes) required after taproot update
13
+ export const toXOnly = (pubKey: Uint8Array) =>
14
+ pubKey.length === 32 ? pubKey : pubKey.subarray(1, 33)
package/src/core/types.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import type {
2
+ ChainId,
2
3
  ChainType,
4
+ CoinKey,
3
5
  FeeCost,
4
6
  GasCost,
5
7
  LiFiStep,
@@ -14,7 +16,11 @@ import type { Client } from 'viem'
14
16
  export interface SDKProvider {
15
17
  readonly type: ChainType
16
18
  isAddress(address: string): boolean
17
- resolveAddress(name: string): Promise<string | undefined>
19
+ resolveAddress(
20
+ name: string,
21
+ chainId?: ChainId,
22
+ token?: CoinKey
23
+ ): Promise<string | undefined>
18
24
  getStepExecutor(options: StepExecutorOptions): Promise<StepExecutor>
19
25
  getBalance(walletAddress: string, tokens: Token[]): Promise<TokenAmount[]>
20
26
  }
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export const name = '@lifi/sdk'
2
- export const version = '3.8.10'
2
+ export const version = '3.9.0-beta.0'
@@ -1 +0,0 @@
1
- {"version":3,"file":"getENSAddress.js","sourceRoot":"","sources":["../../../core/EVM/getENSAddress.ts"],"names":[],"mappings":";;;AAAA,uCAAqC;AACrC,kCAAmD;AACnD,uDAAmD;AAE5C,MAAM,aAAa,GAAG,KAAK,EAChC,IAAY,EACiB,EAAE;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,iCAAe,EAAC,eAAO,CAAC,GAAG,CAAC,CAAA;QACjD,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAa,EAAC,MAAM,EAAE;YAC1C,IAAI,EAAE,IAAA,eAAS,EAAC,IAAI,CAAC;SACtB,CAAC,CAAA;QACF,OAAO,OAA6B,CAAA;IACtC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAEX,OAAM;IACR,CAAC;AACH,CAAC,CAAA;AAbY,QAAA,aAAa,iBAazB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"getENSAddress.js","sourceRoot":"","sources":["../../../core/EVM/getENSAddress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAChC,IAAY,EACiB,EAAE;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACjD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE;YAC1C,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC;SACtB,CAAC,CAAA;QACF,OAAO,OAA6B,CAAA;IACtC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,SAAS;QACT,OAAM;IACR,CAAC;AACH,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export declare const getENSAddress: (name: string) => Promise<string | undefined>;
2
- //# sourceMappingURL=getENSAddress.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getENSAddress.d.ts","sourceRoot":"","sources":["../../../core/EVM/getENSAddress.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,aAAa,GACxB,MAAM,MAAM,KACX,OAAO,CAAC,MAAM,GAAG,SAAS,CAW5B,CAAA"}