@btc-vision/transaction 1.0.85 → 1.0.87

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 (281) hide show
  1. package/.gitattributes +2 -2
  2. package/browser/_version.d.ts +1 -1
  3. package/browser/index.js +1 -1
  4. package/browser/keypair/Wallet.d.ts +3 -0
  5. package/browser/transaction/builders/TapUnwarpTransaction.d.ts +40 -40
  6. package/browser/transaction/builders/UnwarpTransaction.d.ts +34 -34
  7. package/browser/utxo/UTXOManager.d.ts +7 -7
  8. package/build/Utils.d.ts +0 -0
  9. package/build/Utils.js +1 -0
  10. package/build/_version.d.ts +1 -1
  11. package/build/_version.js +1 -1
  12. package/build/consensus/metadata/RoswsellConsensus.d.ts +2 -0
  13. package/build/consensus/metadata/RoswsellConsensus.js +4 -0
  14. package/build/contracts/ContractMetadataManager.d.ts +0 -0
  15. package/build/contracts/ContractMetadataManager.js +1 -0
  16. package/build/generators/OPNetAddressGenerator.d.ts +0 -0
  17. package/build/generators/OPNetAddressGenerator.js +1 -0
  18. package/build/generators/builders/UnwrapGenerator.d.ts +8 -0
  19. package/build/generators/builders/UnwrapGenerator.js +79 -0
  20. package/build/keypair/Wallet.d.ts +3 -0
  21. package/build/keypair/Wallet.js +8 -0
  22. package/build/keypair/interfaces/GeneratedWallet.d.ts +5 -0
  23. package/build/keypair/interfaces/GeneratedWallet.js +1 -0
  24. package/build/metadata/CommonContracts.d.ts +6 -0
  25. package/build/metadata/CommonContracts.js +5 -0
  26. package/build/metadata/ContractMetadataManager.d.ts +1 -0
  27. package/build/metadata/ContractMetadataManager.js +9 -0
  28. package/build/metadata/contracts/ContractBase.d.ts +9 -0
  29. package/build/metadata/contracts/ContractBase.js +13 -0
  30. package/build/metadata/contracts/ContractBaseMetadata.d.ts +9 -0
  31. package/build/metadata/contracts/ContractBaseMetadata.js +13 -0
  32. package/build/metadata/contracts/ContractMetadataManager.d.ts +0 -0
  33. package/build/metadata/contracts/ContractMetadataManager.js +1 -0
  34. package/build/metadata/tokens.js +1 -1
  35. package/build/network/NetworkConverter.d.ts +0 -0
  36. package/build/network/NetworkConverter.js +14 -0
  37. package/build/scripts/Regtest.d.ts +2 -0
  38. package/build/scripts/Regtest.js +15 -0
  39. package/build/scripts/test.d.ts +1 -0
  40. package/build/scripts/test.js +74 -0
  41. package/build/signer/Regtest.d.ts +2 -0
  42. package/build/signer/Regtest.js +15 -0
  43. package/build/tests/Regtest.d.ts +3 -0
  44. package/build/tests/Regtest.js +29 -0
  45. package/build/tests/adaptPSBT.d.ts +1 -0
  46. package/build/tests/adaptPSBT.js +44 -0
  47. package/build/tests/btc/send.d.ts +1 -0
  48. package/build/tests/btc/send.js +35 -0
  49. package/build/tests/btc/transfer.d.ts +1 -0
  50. package/build/tests/btc/transfer.js +35 -0
  51. package/build/tests/createPairReg.d.ts +1 -0
  52. package/build/tests/createPairReg.js +73 -0
  53. package/build/tests/deploy/deployMoto.d.ts +4 -0
  54. package/build/tests/deploy/deployMoto.js +89 -0
  55. package/build/tests/deploy/deployPool.d.ts +1 -0
  56. package/build/tests/deploy/deployPool.js +5 -0
  57. package/build/tests/deploy/deployStep1.d.ts +1 -0
  58. package/build/tests/deploy/deployStep1.js +5 -0
  59. package/build/tests/deploy/deployStep2.d.ts +1 -0
  60. package/build/tests/deploy/deployStep2.js +5 -0
  61. package/build/tests/deploy/deployStep3.d.ts +1 -0
  62. package/build/tests/deploy/deployStep3.js +5 -0
  63. package/build/tests/deploy.d.ts +1 -0
  64. package/build/tests/deploy.js +41 -0
  65. package/build/tests/deployMotoRegStep1.d.ts +1 -0
  66. package/build/tests/deployMotoRegStep1.js +85 -0
  67. package/build/tests/deployReg.d.ts +1 -0
  68. package/build/tests/deployReg.js +85 -0
  69. package/build/tests/factory/createPairReg.d.ts +1 -0
  70. package/build/tests/factory/createPairReg.js +13 -0
  71. package/build/tests/gen.d.ts +1 -0
  72. package/build/tests/gen.js +19 -0
  73. package/build/tests/interaction.d.ts +5 -0
  74. package/build/tests/interaction.js +62 -0
  75. package/build/tests/massWrapReg.d.ts +1 -0
  76. package/build/tests/massWrapReg.js +105 -0
  77. package/build/tests/mineReg.d.ts +1 -0
  78. package/build/tests/mineReg.js +19 -0
  79. package/build/tests/moto/airdropToken.d.ts +1 -0
  80. package/build/tests/moto/airdropToken.js +21 -0
  81. package/build/tests/moto/airdropTokens.d.ts +1 -0
  82. package/build/tests/moto/airdropTokens.js +60 -0
  83. package/build/tests/moto/allowance.d.ts +1 -0
  84. package/build/tests/moto/allowance.js +6 -0
  85. package/build/tests/moto/approve.d.ts +1 -0
  86. package/build/tests/moto/approve.js +10 -0
  87. package/build/tests/moto/approveWBTC.d.ts +1 -0
  88. package/build/tests/moto/approveWBTC.js +12 -0
  89. package/build/tests/moto/balanceOf.d.ts +1 -0
  90. package/build/tests/moto/balanceOf.js +12 -0
  91. package/build/tests/moto/transfer.d.ts +1 -0
  92. package/build/tests/moto/transfer.js +16 -0
  93. package/build/tests/motoswap/airdropToken.d.ts +11 -0
  94. package/build/tests/motoswap/airdropToken.js +36 -0
  95. package/build/tests/motoswap/deployMoto.d.ts +4 -0
  96. package/build/tests/motoswap/deployMoto.js +89 -0
  97. package/build/tests/motoswap/deployMotoRegStep1.d.ts +1 -0
  98. package/build/tests/motoswap/deployMotoRegStep1.js +91 -0
  99. package/build/tests/motoswap/deployMotoRegStep2.d.ts +1 -0
  100. package/build/tests/motoswap/deployMotoRegStep2.js +91 -0
  101. package/build/tests/motoswap/deployPool.d.ts +1 -0
  102. package/build/tests/motoswap/deployPool.js +5 -0
  103. package/build/tests/motoswap/deployStep1.d.ts +1 -0
  104. package/build/tests/motoswap/deployStep1.js +5 -0
  105. package/build/tests/motoswap/deployStep2.d.ts +1 -0
  106. package/build/tests/motoswap/deployStep2.js +5 -0
  107. package/build/tests/motoswap/deployStep3.d.ts +1 -0
  108. package/build/tests/motoswap/deployStep3.js +5 -0
  109. package/build/tests/motoswap/interaction.d.ts +3 -0
  110. package/build/tests/motoswap/interaction.js +63 -0
  111. package/build/tests/motoswap/routerAddLiquidity.d.ts +11 -0
  112. package/build/tests/motoswap/routerAddLiquidity.js +35 -0
  113. package/build/tests/motoswap-router/addLiquidity.d.ts +11 -0
  114. package/build/tests/motoswap-router/addLiquidity.js +36 -0
  115. package/build/tests/motoswap-router/deployMoto.d.ts +4 -0
  116. package/build/tests/motoswap-router/deployMoto.js +89 -0
  117. package/build/tests/motoswap-router/deployPool.d.ts +1 -0
  118. package/build/tests/motoswap-router/deployPool.js +5 -0
  119. package/build/tests/motoswap-router/deployStep1.d.ts +1 -0
  120. package/build/tests/motoswap-router/deployStep1.js +5 -0
  121. package/build/tests/motoswap-router/deployStep2.d.ts +1 -0
  122. package/build/tests/motoswap-router/deployStep2.js +5 -0
  123. package/build/tests/motoswap-router/deployStep3.d.ts +1 -0
  124. package/build/tests/motoswap-router/deployStep3.js +5 -0
  125. package/build/tests/motoswap-router/getAmountsOut.d.ts +5 -0
  126. package/build/tests/motoswap-router/getAmountsOut.js +34 -0
  127. package/build/tests/motoswap-router/routerAddLiquidity.d.ts +11 -0
  128. package/build/tests/motoswap-router/routerAddLiquidity.js +35 -0
  129. package/build/tests/motoswap-router/swap.d.ts +8 -0
  130. package/build/tests/motoswap-router/swap.js +24 -0
  131. package/build/tests/multisign.d.ts +1 -0
  132. package/build/tests/multisign.js +47 -0
  133. package/build/tests/multisign2.d.ts +1 -0
  134. package/build/tests/multisign2.js +27 -0
  135. package/build/tests/pool/DecodePoolAddress.d.ts +6 -0
  136. package/build/tests/pool/DecodePoolAddress.js +12 -0
  137. package/build/tests/pool/decodeReserves.d.ts +5 -0
  138. package/build/tests/pool/decodeReserves.js +13 -0
  139. package/build/tests/pool/reserves.d.ts +1 -0
  140. package/build/tests/pool/reserves.js +18 -0
  141. package/build/tests/shared/Utils.d.ts +2 -0
  142. package/build/tests/shared/Utils.js +14 -0
  143. package/build/tests/shared/interaction.d.ts +7 -0
  144. package/build/tests/shared/interaction.js +85 -0
  145. package/build/tests/shared/tokens.d.ts +6 -0
  146. package/build/tests/shared/tokens.js +5 -0
  147. package/build/tests/stakeReg.d.ts +1 -0
  148. package/build/tests/stakeReg.js +73 -0
  149. package/build/tests/stakedReg.d.ts +1 -0
  150. package/build/tests/stakedReg.js +28 -0
  151. package/build/tests/test.d.ts +1 -0
  152. package/build/tests/test.js +51 -0
  153. package/build/tests/test2.d.ts +1 -0
  154. package/build/tests/test2.js +73 -0
  155. package/build/tests/testReg.d.ts +1 -0
  156. package/build/tests/testReg.js +91 -0
  157. package/build/tests/tokens.d.ts +6 -0
  158. package/build/tests/tokens.js +5 -0
  159. package/build/tests/totalRewardReg.d.ts +1 -0
  160. package/build/tests/totalRewardReg.js +28 -0
  161. package/build/tests/transfer.d.ts +1 -0
  162. package/build/tests/transfer.js +74 -0
  163. package/build/tests/transferReg.d.ts +1 -0
  164. package/build/tests/transferReg.js +74 -0
  165. package/build/tests/unStakeReg.d.ts +1 -0
  166. package/build/tests/unStakeReg.js +72 -0
  167. package/build/tests/unwrapReg.d.ts +1 -0
  168. package/build/tests/unwrapReg.js +61 -0
  169. package/build/tests/unwrapReg2.d.ts +1 -0
  170. package/build/tests/unwrapReg2.js +56 -0
  171. package/build/tests/unwrapRegSegwit.d.ts +1 -0
  172. package/build/tests/unwrapRegSegwit.js +83 -0
  173. package/build/tests/wbtc/approve.d.ts +1 -0
  174. package/build/tests/wbtc/approve.js +6 -0
  175. package/build/tests/wbtc/approveWBTC.d.ts +1 -0
  176. package/build/tests/wbtc/approveWBTC.js +12 -0
  177. package/build/tests/wbtc/massWrapReg.d.ts +1 -0
  178. package/build/tests/wbtc/massWrapReg.js +105 -0
  179. package/build/tests/wbtc/transfer.d.ts +1 -0
  180. package/build/tests/wbtc/transfer.js +16 -0
  181. package/build/tests/wbtc/transferReg.d.ts +1 -0
  182. package/build/tests/wbtc/transferReg.js +16 -0
  183. package/build/tests/wbtc/unStakeReg.d.ts +1 -0
  184. package/build/tests/wbtc/unStakeReg.js +72 -0
  185. package/build/tests/wbtc/unwrapReg.d.ts +1 -0
  186. package/build/tests/wbtc/unwrapReg.js +60 -0
  187. package/build/tests/wbtc/unwrapRegSegwit.d.ts +1 -0
  188. package/build/tests/wbtc/unwrapRegSegwit.js +83 -0
  189. package/build/tests/wbtc/withdrawalRequestReg.d.ts +1 -0
  190. package/build/tests/wbtc/withdrawalRequestReg.js +71 -0
  191. package/build/tests/wbtc/wrapReg.d.ts +1 -0
  192. package/build/tests/wbtc/wrapReg.js +65 -0
  193. package/build/tests/wbtc/wrapTest.d.ts +1 -0
  194. package/build/tests/wbtc/wrapTest.js +66 -0
  195. package/build/tests/withdrawalRequestReg.d.ts +1 -0
  196. package/build/tests/withdrawalRequestReg.js +71 -0
  197. package/build/tests/wrap.d.ts +1 -0
  198. package/build/tests/wrap.js +65 -0
  199. package/build/tests/wrapReg.d.ts +1 -0
  200. package/build/tests/wrapReg.js +68 -0
  201. package/build/tests/wrapTest.d.ts +1 -0
  202. package/build/tests/wrapTest.js +66 -0
  203. package/build/tests/wrapTestg.d.ts +1 -0
  204. package/build/tests/wrapTestg.js +66 -0
  205. package/build/tests/writers/allowance.d.ts +3 -0
  206. package/build/tests/writers/allowance.js +10 -0
  207. package/build/tests/writers/approve.d.ts +4 -0
  208. package/build/tests/writers/approve.js +11 -0
  209. package/build/transaction/TransactionBuilder.d.ts +60 -0
  210. package/build/transaction/TransactionBuilder.js +244 -0
  211. package/build/transaction/TransactionFactory.js +2 -0
  212. package/build/transaction/browser/BrowserSigner.d.ts +11 -0
  213. package/build/transaction/browser/BrowserSigner.js +10 -0
  214. package/build/transaction/browser/extensions/Unisat.d.ts +54 -0
  215. package/build/transaction/browser/extensions/Unisat.js +11 -0
  216. package/build/transaction/builders/GenericTransaction.d.ts +11 -0
  217. package/build/transaction/builders/GenericTransaction.js +23 -0
  218. package/build/transaction/builders/TapUnwarpTransaction.d.ts +37 -0
  219. package/build/transaction/builders/TapUnwarpTransaction.js +201 -0
  220. package/build/transaction/builders/UnwarpSegwitTransaction.d.ts +34 -0
  221. package/build/transaction/builders/UnwarpSegwitTransaction.js +184 -0
  222. package/build/transaction/builders/UnwarpTransaction.d.ts +35 -0
  223. package/build/transaction/builders/UnwarpTransaction.js +199 -0
  224. package/build/transaction/interfaces/ITransactions.d.ts +32 -0
  225. package/build/transaction/interfaces/ITransactions.js +1 -0
  226. package/build/utxo/IUTXO.d.ts +0 -0
  227. package/build/utxo/IUTXO.js +1 -0
  228. package/build/utxo/OPNetUtils.d.ts +7 -0
  229. package/build/utxo/OPNetUtils.js +47 -0
  230. package/build/utxo/UTXOManager.d.ts +7 -0
  231. package/build/utxo/UTXOManager.js +47 -0
  232. package/build/wbtc/BroadcastResponse.d.ts +0 -0
  233. package/build/wbtc/BroadcastResponse.js +1 -0
  234. package/gulpfile.js +152 -152
  235. package/package.json +109 -109
  236. package/src/_version.ts +1 -1
  237. package/src/consensus/Consensus.ts +36 -36
  238. package/src/consensus/ConsensusConfig.ts +39 -39
  239. package/src/crypto/crypto-browser.js +75 -75
  240. package/src/generators/AddressGenerator.ts +24 -24
  241. package/src/generators/Features.ts +5 -5
  242. package/src/generators/Generator.ts +75 -75
  243. package/src/generators/builders/CalldataGenerator.ts +148 -148
  244. package/src/generators/builders/DeploymentGenerator.ts +66 -66
  245. package/src/index.ts +4 -4
  246. package/src/keypair/AddressVerificator.ts +40 -40
  247. package/src/keypair/EcKeyPair.ts +282 -282
  248. package/src/keypair/Wallet.ts +120 -97
  249. package/src/keypair/interfaces/IWallet.ts +19 -19
  250. package/src/metadata/ContractBaseMetadata.ts +23 -23
  251. package/src/metadata/contracts/wBTC.ts +60 -60
  252. package/src/metadata/tokens.ts +1 -1
  253. package/src/network/NetworkInformation.ts +7 -7
  254. package/src/transaction/TransactionFactory.ts +2 -0
  255. package/src/transaction/browser/BrowserSignerBase.ts +37 -37
  256. package/src/transaction/browser/Web3Provider.ts +46 -46
  257. package/src/transaction/browser/extensions/UnisatSigner.ts +218 -218
  258. package/src/transaction/browser/types/Unisat.ts +97 -97
  259. package/src/transaction/builders/FundingTransaction.ts +40 -40
  260. package/src/transaction/builders/InteractionTransaction.ts +38 -38
  261. package/src/transaction/builders/SharedInteractionTransaction.ts +368 -368
  262. package/src/transaction/builders/TransactionBuilder.ts +665 -665
  263. package/src/transaction/builders/UnwrapSegwitTransaction.ts +365 -365
  264. package/src/transaction/builders/UnwrapTransaction.ts +507 -507
  265. package/src/transaction/builders/WrapTransaction.ts +346 -346
  266. package/src/transaction/interfaces/ITransactionParameters.ts +59 -59
  267. package/src/transaction/interfaces/Tap.ts +26 -26
  268. package/src/transaction/psbt/PSBTTypes.ts +3 -3
  269. package/src/transaction/shared/TweakedTransaction.ts +539 -539
  270. package/src/utxo/OPNetLimitedProvider.ts +244 -244
  271. package/src/utxo/interfaces/BroadcastResponse.ts +10 -10
  272. package/src/utxo/interfaces/IUTXO.ts +29 -29
  273. package/src/verification/TapscriptVerificator.ts +89 -89
  274. package/src/wbtc/Generate.ts +40 -40
  275. package/src/wbtc/UnwrapGeneration.ts +13 -13
  276. package/src/wbtc/WrappedGenerationParameters.ts +33 -33
  277. package/webpack.config.js +78 -78
  278. /package/build/generators/builders/{MultiSignGenerator.d.ts → MultisignGenerator.d.ts} +0 -0
  279. /package/build/generators/builders/{MultiSignGenerator.js → MultisignGenerator.js} +0 -0
  280. /package/build/generators/{Features.d.ts → features.d.ts} +0 -0
  281. /package/build/generators/{Features.js → features.js} +0 -0
@@ -1,218 +1,218 @@
1
- import { CustomKeypair } from '../BrowserSignerBase.js';
2
- import { Network, networks, Psbt } from 'bitcoinjs-lib';
3
- import { PsbtSignatureOptions, Unisat, UnisatNetwork } from '../types/Unisat.js';
4
- import { Address } from '@btc-vision/bsi-binary';
5
- import { EcKeyPair } from '../../../keypair/EcKeyPair.js';
6
- import { ECPairInterface } from 'ecpair';
7
- import { TapScriptSig } from 'bip174/src/lib/interfaces.js';
8
-
9
- declare global {
10
- interface Window {
11
- unisat?: Unisat;
12
- }
13
- }
14
-
15
- export class UnisatSigner extends CustomKeypair {
16
- private isInitialized: boolean = false;
17
-
18
- constructor() {
19
- super();
20
-
21
- if (!window) {
22
- throw new Error('UnisatSigner can only be used in a browser environment');
23
- }
24
- }
25
-
26
- private _p2tr: Address | undefined;
27
-
28
- public get p2tr(): Address {
29
- if (!this._p2tr) {
30
- throw new Error('P2TR address not set');
31
- }
32
-
33
- return this._p2tr;
34
- }
35
-
36
- private _p2wpkh: Address | undefined;
37
-
38
- public get p2wpkh(): Address {
39
- if (!this._p2wpkh) {
40
- throw new Error('P2PKH address not set');
41
- }
42
-
43
- return this._p2wpkh;
44
- }
45
-
46
- private _addresses: Address[] | undefined;
47
-
48
- public get addresses(): Address[] {
49
- if (!this._addresses) {
50
- throw new Error('Addresses not set');
51
- }
52
-
53
- return this._addresses;
54
- }
55
-
56
- private _publicKey: Buffer | undefined;
57
-
58
- public get publicKey(): Buffer {
59
- if (!this._publicKey) {
60
- throw new Error('Public key not set');
61
- }
62
-
63
- return this._publicKey;
64
- }
65
-
66
- public _network: Network | undefined;
67
-
68
- public get network(): Network {
69
- if (!this._network) {
70
- throw new Error('Network not set');
71
- }
72
-
73
- return this._network;
74
- }
75
-
76
- public get unisat(): Unisat {
77
- if (!window.unisat) {
78
- throw new Error('Unisat extension not found');
79
- }
80
-
81
- return window.unisat;
82
- }
83
-
84
- public async init(): Promise<void> {
85
- if (this.isInitialized) {
86
- return;
87
- }
88
-
89
- const network = await this.unisat.getNetwork();
90
- switch (network) {
91
- case UnisatNetwork.mainnet:
92
- this._network = networks.bitcoin;
93
- break;
94
- case UnisatNetwork.testnet:
95
- this._network = networks.testnet;
96
- break;
97
- case UnisatNetwork.regtest:
98
- this._network = networks.regtest;
99
- break;
100
- default:
101
- throw new Error('Invalid network');
102
- }
103
-
104
- const publicKey = await this.unisat.getPublicKey();
105
- this._publicKey = Buffer.from(publicKey, 'hex');
106
-
107
- this._p2wpkh = EcKeyPair.getP2WPKHAddress(this as unknown as ECPairInterface, this.network);
108
-
109
- this._p2tr = EcKeyPair.getTaprootAddress(this as unknown as ECPairInterface, this.network);
110
-
111
- this._addresses = [this._p2wpkh, this._p2tr];
112
-
113
- this.isInitialized = true;
114
- }
115
-
116
- public getPublicKey(): Buffer {
117
- if (!this.isInitialized) {
118
- throw new Error('UnisatSigner not initialized');
119
- }
120
-
121
- return this.publicKey;
122
- }
123
-
124
- public sign(hash: Buffer, lowR?: boolean): Buffer {
125
- throw new Error('Not implemented: sign');
126
- }
127
-
128
- public signSchnorr(hash: Buffer): Buffer {
129
- throw new Error('Not implemented: signSchnorr');
130
- }
131
-
132
- public verify(hash: Buffer, signature: Buffer): boolean {
133
- throw new Error('Not implemented: verify');
134
- }
135
-
136
- public async signTaprootInput(
137
- transaction: Psbt,
138
- i: number,
139
- sighashTypes: number[],
140
- ): Promise<void> {
141
- let firstSignature = await this.signTweaked(transaction, i, sighashTypes, false);
142
- this.combine(transaction, firstSignature, i);
143
- }
144
-
145
- public async signInput(transaction: Psbt, i: number, sighashTypes: number[]): Promise<void> {
146
- const secondSignature = await this.signTweaked(transaction, i, sighashTypes, true);
147
-
148
- this.combine(transaction, secondSignature, i);
149
- }
150
-
151
- private combine(transaction: Psbt, newPsbt: Psbt, i: number): void {
152
- const signedInput = newPsbt.data.inputs[i];
153
- const originalInput = transaction.data.inputs[i];
154
-
155
- if (signedInput.partialSig) {
156
- transaction.updateInput(i, { partialSig: signedInput.partialSig });
157
- }
158
-
159
- if (signedInput.tapKeySig && !originalInput.tapKeySig) {
160
- transaction.updateInput(i, { tapKeySig: signedInput.tapKeySig });
161
- }
162
-
163
- if (signedInput.tapScriptSig?.length) {
164
- const lastScriptSig = originalInput.tapScriptSig;
165
- if (lastScriptSig) {
166
- const getNonDuplicate = this.getNonDuplicateScriptSig(
167
- lastScriptSig,
168
- signedInput.tapScriptSig,
169
- );
170
-
171
- if (getNonDuplicate.length) {
172
- transaction.updateInput(i, { tapScriptSig: getNonDuplicate });
173
- }
174
- } else {
175
- transaction.updateInput(i, { tapScriptSig: signedInput.tapScriptSig });
176
- }
177
- }
178
- }
179
-
180
- private async signTweaked(
181
- transaction: Psbt,
182
- i: number,
183
- sighashTypes: number[],
184
- disableTweakSigner: boolean = false,
185
- ): Promise<Psbt> {
186
- const opts: PsbtSignatureOptions = {
187
- autoFinalized: false,
188
- toSignInputs: [
189
- {
190
- index: i,
191
- publicKey: this.publicKey.toString('hex'),
192
- sighashTypes,
193
- disableTweakSigner: disableTweakSigner,
194
- },
195
- ],
196
- };
197
-
198
- const psbt = transaction.toHex();
199
- const signed = await this.unisat.signPsbt(psbt, opts);
200
-
201
- return Psbt.fromHex(signed);
202
- }
203
-
204
- private getNonDuplicateScriptSig(
205
- scriptSig1: TapScriptSig[],
206
- scriptSig2: TapScriptSig[],
207
- ): TapScriptSig[] {
208
- const nonDuplicate: TapScriptSig[] = [];
209
- for (let i = 0; i < scriptSig2.length; i++) {
210
- const found = scriptSig1.find((item) => item.pubkey.equals(scriptSig2[i].pubkey));
211
- if (!found) {
212
- nonDuplicate.push(scriptSig2[i]);
213
- }
214
- }
215
-
216
- return nonDuplicate;
217
- }
218
- }
1
+ import { CustomKeypair } from '../BrowserSignerBase.js';
2
+ import { Network, networks, Psbt } from 'bitcoinjs-lib';
3
+ import { PsbtSignatureOptions, Unisat, UnisatNetwork } from '../types/Unisat.js';
4
+ import { Address } from '@btc-vision/bsi-binary';
5
+ import { EcKeyPair } from '../../../keypair/EcKeyPair.js';
6
+ import { ECPairInterface } from 'ecpair';
7
+ import { TapScriptSig } from 'bip174/src/lib/interfaces.js';
8
+
9
+ declare global {
10
+ interface Window {
11
+ unisat?: Unisat;
12
+ }
13
+ }
14
+
15
+ export class UnisatSigner extends CustomKeypair {
16
+ private isInitialized: boolean = false;
17
+
18
+ constructor() {
19
+ super();
20
+
21
+ if (!window) {
22
+ throw new Error('UnisatSigner can only be used in a browser environment');
23
+ }
24
+ }
25
+
26
+ private _p2tr: Address | undefined;
27
+
28
+ public get p2tr(): Address {
29
+ if (!this._p2tr) {
30
+ throw new Error('P2TR address not set');
31
+ }
32
+
33
+ return this._p2tr;
34
+ }
35
+
36
+ private _p2wpkh: Address | undefined;
37
+
38
+ public get p2wpkh(): Address {
39
+ if (!this._p2wpkh) {
40
+ throw new Error('P2PKH address not set');
41
+ }
42
+
43
+ return this._p2wpkh;
44
+ }
45
+
46
+ private _addresses: Address[] | undefined;
47
+
48
+ public get addresses(): Address[] {
49
+ if (!this._addresses) {
50
+ throw new Error('Addresses not set');
51
+ }
52
+
53
+ return this._addresses;
54
+ }
55
+
56
+ private _publicKey: Buffer | undefined;
57
+
58
+ public get publicKey(): Buffer {
59
+ if (!this._publicKey) {
60
+ throw new Error('Public key not set');
61
+ }
62
+
63
+ return this._publicKey;
64
+ }
65
+
66
+ public _network: Network | undefined;
67
+
68
+ public get network(): Network {
69
+ if (!this._network) {
70
+ throw new Error('Network not set');
71
+ }
72
+
73
+ return this._network;
74
+ }
75
+
76
+ public get unisat(): Unisat {
77
+ if (!window.unisat) {
78
+ throw new Error('Unisat extension not found');
79
+ }
80
+
81
+ return window.unisat;
82
+ }
83
+
84
+ public async init(): Promise<void> {
85
+ if (this.isInitialized) {
86
+ return;
87
+ }
88
+
89
+ const network = await this.unisat.getNetwork();
90
+ switch (network) {
91
+ case UnisatNetwork.mainnet:
92
+ this._network = networks.bitcoin;
93
+ break;
94
+ case UnisatNetwork.testnet:
95
+ this._network = networks.testnet;
96
+ break;
97
+ case UnisatNetwork.regtest:
98
+ this._network = networks.regtest;
99
+ break;
100
+ default:
101
+ throw new Error('Invalid network');
102
+ }
103
+
104
+ const publicKey = await this.unisat.getPublicKey();
105
+ this._publicKey = Buffer.from(publicKey, 'hex');
106
+
107
+ this._p2wpkh = EcKeyPair.getP2WPKHAddress(this as unknown as ECPairInterface, this.network);
108
+
109
+ this._p2tr = EcKeyPair.getTaprootAddress(this as unknown as ECPairInterface, this.network);
110
+
111
+ this._addresses = [this._p2wpkh, this._p2tr];
112
+
113
+ this.isInitialized = true;
114
+ }
115
+
116
+ public getPublicKey(): Buffer {
117
+ if (!this.isInitialized) {
118
+ throw new Error('UnisatSigner not initialized');
119
+ }
120
+
121
+ return this.publicKey;
122
+ }
123
+
124
+ public sign(hash: Buffer, lowR?: boolean): Buffer {
125
+ throw new Error('Not implemented: sign');
126
+ }
127
+
128
+ public signSchnorr(hash: Buffer): Buffer {
129
+ throw new Error('Not implemented: signSchnorr');
130
+ }
131
+
132
+ public verify(hash: Buffer, signature: Buffer): boolean {
133
+ throw new Error('Not implemented: verify');
134
+ }
135
+
136
+ public async signTaprootInput(
137
+ transaction: Psbt,
138
+ i: number,
139
+ sighashTypes: number[],
140
+ ): Promise<void> {
141
+ let firstSignature = await this.signTweaked(transaction, i, sighashTypes, false);
142
+ this.combine(transaction, firstSignature, i);
143
+ }
144
+
145
+ public async signInput(transaction: Psbt, i: number, sighashTypes: number[]): Promise<void> {
146
+ const secondSignature = await this.signTweaked(transaction, i, sighashTypes, true);
147
+
148
+ this.combine(transaction, secondSignature, i);
149
+ }
150
+
151
+ private combine(transaction: Psbt, newPsbt: Psbt, i: number): void {
152
+ const signedInput = newPsbt.data.inputs[i];
153
+ const originalInput = transaction.data.inputs[i];
154
+
155
+ if (signedInput.partialSig) {
156
+ transaction.updateInput(i, { partialSig: signedInput.partialSig });
157
+ }
158
+
159
+ if (signedInput.tapKeySig && !originalInput.tapKeySig) {
160
+ transaction.updateInput(i, { tapKeySig: signedInput.tapKeySig });
161
+ }
162
+
163
+ if (signedInput.tapScriptSig?.length) {
164
+ const lastScriptSig = originalInput.tapScriptSig;
165
+ if (lastScriptSig) {
166
+ const getNonDuplicate = this.getNonDuplicateScriptSig(
167
+ lastScriptSig,
168
+ signedInput.tapScriptSig,
169
+ );
170
+
171
+ if (getNonDuplicate.length) {
172
+ transaction.updateInput(i, { tapScriptSig: getNonDuplicate });
173
+ }
174
+ } else {
175
+ transaction.updateInput(i, { tapScriptSig: signedInput.tapScriptSig });
176
+ }
177
+ }
178
+ }
179
+
180
+ private async signTweaked(
181
+ transaction: Psbt,
182
+ i: number,
183
+ sighashTypes: number[],
184
+ disableTweakSigner: boolean = false,
185
+ ): Promise<Psbt> {
186
+ const opts: PsbtSignatureOptions = {
187
+ autoFinalized: false,
188
+ toSignInputs: [
189
+ {
190
+ index: i,
191
+ publicKey: this.publicKey.toString('hex'),
192
+ sighashTypes,
193
+ disableTweakSigner: disableTweakSigner,
194
+ },
195
+ ],
196
+ };
197
+
198
+ const psbt = transaction.toHex();
199
+ const signed = await this.unisat.signPsbt(psbt, opts);
200
+
201
+ return Psbt.fromHex(signed);
202
+ }
203
+
204
+ private getNonDuplicateScriptSig(
205
+ scriptSig1: TapScriptSig[],
206
+ scriptSig2: TapScriptSig[],
207
+ ): TapScriptSig[] {
208
+ const nonDuplicate: TapScriptSig[] = [];
209
+ for (let i = 0; i < scriptSig2.length; i++) {
210
+ const found = scriptSig1.find((item) => item.pubkey.equals(scriptSig2[i].pubkey));
211
+ if (!found) {
212
+ nonDuplicate.push(scriptSig2[i]);
213
+ }
214
+ }
215
+
216
+ return nonDuplicate;
217
+ }
218
+ }
@@ -1,97 +1,97 @@
1
- import { Address } from '@btc-vision/bsi-binary';
2
- import { Web3Provider } from '../Web3Provider.js';
3
-
4
- export enum UnisatNetwork {
5
- testnet = 'testnet',
6
- mainnet = 'livenet',
7
- regtest = 'regtest',
8
- }
9
-
10
- export enum UnisatChainType {
11
- BITCOIN_MAINNET = 'BITCOIN_MAINNET',
12
- BITCOIN_TESTNET = 'BITCOIN_TESTNET',
13
- FRACTAL_BITCOIN_MAINNET = 'FRACTAL_BITCOIN_MAINNET',
14
- BITCOIN_REGTEST = 'BITCOIN_REGTEST',
15
- }
16
-
17
- export interface UnisatChainInfo {
18
- readonly enum: UnisatChainType;
19
- readonly name: string;
20
- readonly network: UnisatNetwork;
21
- }
22
-
23
- export interface Balance {
24
- readonly confirmed: number;
25
- readonly unconfirmed: number;
26
- readonly total: number;
27
- }
28
-
29
- export enum MessageType {
30
- ecdsa = 'ecdsa',
31
- bip322 = 'bip322-simple',
32
- }
33
-
34
- interface ToSignInputBase {
35
- readonly index: number;
36
- readonly sighashTypes?: number[];
37
- readonly disableTweakSigner?: boolean;
38
- }
39
-
40
- export interface ToSignInputPublicKey extends ToSignInputBase {
41
- readonly publicKey: string;
42
- }
43
-
44
- export interface ToSignInputAddress extends ToSignInputBase {
45
- readonly address: Address;
46
- }
47
-
48
- export type ToSignInput = ToSignInputPublicKey | ToSignInputAddress;
49
-
50
- export interface PsbtSignatureOptions {
51
- readonly autoFinalized?: boolean;
52
- readonly toSignInputs?: ToSignInput[];
53
- }
54
-
55
- export interface Unisat {
56
- web3?: Web3Provider;
57
-
58
- sendBitcoin(
59
- toAddress: Address,
60
- satoshis: number,
61
- options: { feeRate: number; memo?: string; memos?: string[] },
62
- ): Promise<string>;
63
-
64
- requestAccounts(): Promise<string[]>;
65
-
66
- getNetwork(): Promise<UnisatNetwork>;
67
-
68
- getChain(): Promise<UnisatChainType>;
69
-
70
- getAccounts(): Promise<string[]>;
71
-
72
- switchNetwork(network: UnisatNetwork): Promise<void>;
73
-
74
- getPublicKey(): Promise<string>;
75
-
76
- getBalance(): Promise<Balance>;
77
-
78
- signMessage(message: string, type?: MessageType): Promise<string>;
79
-
80
- pushTx(options: { rawtx: string }): Promise<string>;
81
-
82
- signPsbt(psbtHex: string, psbtOptions: PsbtSignatureOptions): Promise<string>;
83
-
84
- signPsbts(psbtHex: string[], psbtOptions: PsbtSignatureOptions): Promise<string[]>;
85
-
86
- pushPsbt(psbtHex: string): Promise<string>;
87
-
88
- on(event: 'accountsChanged', listener: (accounts: string[]) => void): void;
89
-
90
- on(event: 'networkChanged', listener: (network: UnisatNetwork) => void): void;
91
-
92
- on(event: 'chainChanged', listener: (network: UnisatNetwork) => void): void;
93
-
94
- removeListener(event: 'accountsChanged', listener: (accounts: string[]) => void): void;
95
-
96
- removeListener(event: 'networkChanged', listener: (network: UnisatNetwork) => void): void;
97
- }
1
+ import { Address } from '@btc-vision/bsi-binary';
2
+ import { Web3Provider } from '../Web3Provider.js';
3
+
4
+ export enum UnisatNetwork {
5
+ testnet = 'testnet',
6
+ mainnet = 'livenet',
7
+ regtest = 'regtest',
8
+ }
9
+
10
+ export enum UnisatChainType {
11
+ BITCOIN_MAINNET = 'BITCOIN_MAINNET',
12
+ BITCOIN_TESTNET = 'BITCOIN_TESTNET',
13
+ FRACTAL_BITCOIN_MAINNET = 'FRACTAL_BITCOIN_MAINNET',
14
+ BITCOIN_REGTEST = 'BITCOIN_REGTEST',
15
+ }
16
+
17
+ export interface UnisatChainInfo {
18
+ readonly enum: UnisatChainType;
19
+ readonly name: string;
20
+ readonly network: UnisatNetwork;
21
+ }
22
+
23
+ export interface Balance {
24
+ readonly confirmed: number;
25
+ readonly unconfirmed: number;
26
+ readonly total: number;
27
+ }
28
+
29
+ export enum MessageType {
30
+ ecdsa = 'ecdsa',
31
+ bip322 = 'bip322-simple',
32
+ }
33
+
34
+ interface ToSignInputBase {
35
+ readonly index: number;
36
+ readonly sighashTypes?: number[];
37
+ readonly disableTweakSigner?: boolean;
38
+ }
39
+
40
+ export interface ToSignInputPublicKey extends ToSignInputBase {
41
+ readonly publicKey: string;
42
+ }
43
+
44
+ export interface ToSignInputAddress extends ToSignInputBase {
45
+ readonly address: Address;
46
+ }
47
+
48
+ export type ToSignInput = ToSignInputPublicKey | ToSignInputAddress;
49
+
50
+ export interface PsbtSignatureOptions {
51
+ readonly autoFinalized?: boolean;
52
+ readonly toSignInputs?: ToSignInput[];
53
+ }
54
+
55
+ export interface Unisat {
56
+ web3?: Web3Provider;
57
+
58
+ sendBitcoin(
59
+ toAddress: Address,
60
+ satoshis: number,
61
+ options: { feeRate: number; memo?: string; memos?: string[] },
62
+ ): Promise<string>;
63
+
64
+ requestAccounts(): Promise<string[]>;
65
+
66
+ getNetwork(): Promise<UnisatNetwork>;
67
+
68
+ getChain(): Promise<UnisatChainType>;
69
+
70
+ getAccounts(): Promise<string[]>;
71
+
72
+ switchNetwork(network: UnisatNetwork): Promise<void>;
73
+
74
+ getPublicKey(): Promise<string>;
75
+
76
+ getBalance(): Promise<Balance>;
77
+
78
+ signMessage(message: string, type?: MessageType): Promise<string>;
79
+
80
+ pushTx(options: { rawtx: string }): Promise<string>;
81
+
82
+ signPsbt(psbtHex: string, psbtOptions: PsbtSignatureOptions): Promise<string>;
83
+
84
+ signPsbts(psbtHex: string[], psbtOptions: PsbtSignatureOptions): Promise<string[]>;
85
+
86
+ pushPsbt(psbtHex: string): Promise<string>;
87
+
88
+ on(event: 'accountsChanged', listener: (accounts: string[]) => void): void;
89
+
90
+ on(event: 'networkChanged', listener: (network: UnisatNetwork) => void): void;
91
+
92
+ on(event: 'chainChanged', listener: (network: UnisatNetwork) => void): void;
93
+
94
+ removeListener(event: 'accountsChanged', listener: (accounts: string[]) => void): void;
95
+
96
+ removeListener(event: 'networkChanged', listener: (network: UnisatNetwork) => void): void;
97
+ }