mainnet-js 3.1.7 → 4.0.0-next.10

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 (267) hide show
  1. package/dist/module/cache/IndexedDbCache.d.ts +1 -1
  2. package/dist/module/cache/IndexedDbCache.d.ts.map +1 -1
  3. package/dist/module/cache/MemoryCache.d.ts +1 -1
  4. package/dist/module/cache/MemoryCache.d.ts.map +1 -1
  5. package/dist/module/cache/WebStorageCache.d.ts +1 -1
  6. package/dist/module/cache/WebStorageCache.d.ts.map +1 -1
  7. package/dist/module/cache/walletCache.d.ts +16 -6
  8. package/dist/module/cache/walletCache.d.ts.map +1 -1
  9. package/dist/module/cache/walletCache.js +92 -34
  10. package/dist/module/cache/walletCache.js.map +1 -1
  11. package/dist/module/cli.js +1 -2
  12. package/dist/module/cli.js.map +1 -1
  13. package/dist/module/db/index.d.ts +1 -1
  14. package/dist/module/db/index.d.ts.map +1 -1
  15. package/dist/module/db/index.js +1 -1
  16. package/dist/module/db/index.js.map +1 -1
  17. package/dist/module/enum.d.ts +1 -1
  18. package/dist/module/enum.d.ts.map +1 -1
  19. package/dist/module/history/getHistory.d.ts +1 -1
  20. package/dist/module/history/getHistory.d.ts.map +1 -1
  21. package/dist/module/history/getHistory.js +3 -3
  22. package/dist/module/history/getHistory.js.map +1 -1
  23. package/dist/module/index.d.ts +25 -22
  24. package/dist/module/index.d.ts.map +1 -1
  25. package/dist/module/index.js +33 -26
  26. package/dist/module/index.js.map +1 -1
  27. package/dist/module/interface.d.ts +12 -2
  28. package/dist/module/interface.d.ts.map +1 -1
  29. package/dist/module/interface.js.map +1 -1
  30. package/dist/module/libauth.d.ts +1 -1
  31. package/dist/module/libauth.d.ts.map +1 -1
  32. package/dist/module/libauth.js +1 -1
  33. package/dist/module/libauth.js.map +1 -1
  34. package/dist/module/mine/mine.d.ts +2 -7
  35. package/dist/module/mine/mine.d.ts.map +1 -1
  36. package/dist/module/mine/mine.js +6 -27
  37. package/dist/module/mine/mine.js.map +1 -1
  38. package/dist/module/network/Connection.d.ts +1 -12
  39. package/dist/module/network/Connection.d.ts.map +1 -1
  40. package/dist/module/network/Connection.js +24 -33
  41. package/dist/module/network/Connection.js.map +1 -1
  42. package/dist/module/network/ElectrumNetworkProvider.d.ts +16 -17
  43. package/dist/module/network/ElectrumNetworkProvider.d.ts.map +1 -1
  44. package/dist/module/network/ElectrumNetworkProvider.js +91 -93
  45. package/dist/module/network/ElectrumNetworkProvider.js.map +1 -1
  46. package/dist/module/network/MockNetworkProvider.d.ts +28 -0
  47. package/dist/module/network/MockNetworkProvider.d.ts.map +1 -0
  48. package/dist/module/network/MockNetworkProvider.js +74 -0
  49. package/dist/module/network/MockNetworkProvider.js.map +1 -0
  50. package/dist/module/network/NetworkProvider.d.ts +9 -2
  51. package/dist/module/network/NetworkProvider.d.ts.map +1 -1
  52. package/dist/module/network/configuration.d.ts +2 -4
  53. package/dist/module/network/configuration.d.ts.map +1 -1
  54. package/dist/module/network/configuration.js +25 -50
  55. package/dist/module/network/configuration.js.map +1 -1
  56. package/dist/module/network/constant.d.ts +7 -7
  57. package/dist/module/network/constant.d.ts.map +1 -1
  58. package/dist/module/network/constant.js +21 -24
  59. package/dist/module/network/constant.js.map +1 -1
  60. package/dist/module/network/default.d.ts +5 -3
  61. package/dist/module/network/default.d.ts.map +1 -1
  62. package/dist/module/network/default.js +29 -51
  63. package/dist/module/network/default.js.map +1 -1
  64. package/dist/module/network/index.d.ts +4 -4
  65. package/dist/module/network/index.d.ts.map +1 -1
  66. package/dist/module/network/index.js +2 -2
  67. package/dist/module/network/index.js.map +1 -1
  68. package/dist/module/network/interface.d.ts +0 -6
  69. package/dist/module/network/interface.d.ts.map +1 -1
  70. package/dist/module/rate/ExchangeRate.d.ts +1 -1
  71. package/dist/module/rate/ExchangeRate.d.ts.map +1 -1
  72. package/dist/module/rate/ExchangeRate.js +13 -7
  73. package/dist/module/rate/ExchangeRate.js.map +1 -1
  74. package/dist/module/transaction/Wif.d.ts +3 -3
  75. package/dist/module/transaction/Wif.d.ts.map +1 -1
  76. package/dist/module/transaction/Wif.js +4 -4
  77. package/dist/module/transaction/Wif.js.map +1 -1
  78. package/dist/module/transaction/allocateFee.d.ts +1 -1
  79. package/dist/module/transaction/allocateFee.d.ts.map +1 -1
  80. package/dist/module/transaction/allocateFee.js +2 -2
  81. package/dist/module/transaction/allocateFee.js.map +1 -1
  82. package/dist/module/util/deriveCashaddr.js.map +1 -1
  83. package/dist/module/util/deriveNetwork.js +1 -1
  84. package/dist/module/util/deriveNetwork.js.map +1 -1
  85. package/dist/module/util/getAddrsByXpubKey.js +1 -1
  86. package/dist/module/util/getAddrsByXpubKey.js.map +1 -1
  87. package/dist/module/util/getXPubKey.js +1 -1
  88. package/dist/module/util/getXPubKey.js.map +1 -1
  89. package/dist/module/util/hd.d.ts +2 -0
  90. package/dist/module/util/hd.d.ts.map +1 -1
  91. package/dist/module/util/hd.js +41 -0
  92. package/dist/module/util/hd.js.map +1 -1
  93. package/dist/module/util/index.d.ts +7 -9
  94. package/dist/module/util/index.d.ts.map +1 -1
  95. package/dist/module/util/index.js +7 -9
  96. package/dist/module/util/index.js.map +1 -1
  97. package/dist/module/util/transaction.js +1 -1
  98. package/dist/module/util/transaction.js.map +1 -1
  99. package/dist/module/wallet/Base.d.ts +13 -9
  100. package/dist/module/wallet/Base.d.ts.map +1 -1
  101. package/dist/module/wallet/Base.js +54 -58
  102. package/dist/module/wallet/Base.js.map +1 -1
  103. package/dist/module/wallet/HDWallet.d.ts.map +1 -1
  104. package/dist/module/wallet/HDWallet.js +19 -38
  105. package/dist/module/wallet/HDWallet.js.map +1 -1
  106. package/dist/module/wallet/Util.d.ts +4 -22
  107. package/dist/module/wallet/Util.d.ts.map +1 -1
  108. package/dist/module/wallet/Util.js +75 -102
  109. package/dist/module/wallet/Util.js.map +1 -1
  110. package/dist/module/wallet/Watch.d.ts +24 -5
  111. package/dist/module/wallet/Watch.d.ts.map +1 -1
  112. package/dist/module/wallet/Watch.js +141 -17
  113. package/dist/module/wallet/Watch.js.map +1 -1
  114. package/dist/module/wallet/Wif.d.ts +2 -6
  115. package/dist/module/wallet/Wif.d.ts.map +1 -1
  116. package/dist/module/wallet/Wif.js +3 -69
  117. package/dist/module/wallet/Wif.js.map +1 -1
  118. package/dist/module/wallet/createWallet.d.ts +1 -1
  119. package/dist/module/wallet/createWallet.d.ts.map +1 -1
  120. package/dist/module/wallet/createWallet.js +2 -1
  121. package/dist/module/wallet/createWallet.js.map +1 -1
  122. package/dist/module/wallet/interface.d.ts +3 -2
  123. package/dist/module/wallet/interface.d.ts.map +1 -1
  124. package/dist/module/wallet/model.d.ts +2 -1
  125. package/dist/module/wallet/model.d.ts.map +1 -1
  126. package/dist/module/wallet/model.js +1 -1
  127. package/dist/module/wallet/model.js.map +1 -1
  128. package/package.json +17 -29
  129. package/dist/index.html +0 -9
  130. package/dist/mainnet-3.1.7.js +0 -2066
  131. package/dist/module/network/util.d.ts +0 -3
  132. package/dist/module/network/util.d.ts.map +0 -1
  133. package/dist/module/network/util.js +0 -27
  134. package/dist/module/network/util.js.map +0 -1
  135. package/dist/module/test/expect.d.ts +0 -12
  136. package/dist/module/test/expect.d.ts.map +0 -1
  137. package/dist/module/test/expect.js +0 -47
  138. package/dist/module/test/expect.js.map +0 -1
  139. package/dist/module/test/fetch.d.ts +0 -3
  140. package/dist/module/test/fetch.d.ts.map +0 -1
  141. package/dist/module/test/fetch.js +0 -32
  142. package/dist/module/test/fetch.js.map +0 -1
  143. package/dist/module/util/randomBytes.d.ts +0 -2
  144. package/dist/module/util/randomBytes.d.ts.map +0 -1
  145. package/dist/module/util/randomBytes.js +0 -13
  146. package/dist/module/util/randomBytes.js.map +0 -1
  147. package/dist/tsconfig.tsbuildinfo +0 -1
  148. package/src/cache/IndexedDbCache.test.ts +0 -15
  149. package/src/cache/IndexedDbCache.ts +0 -172
  150. package/src/cache/MemoryCache.test.ts +0 -15
  151. package/src/cache/MemoryCache.ts +0 -32
  152. package/src/cache/WebStorageCache.test.ts +0 -15
  153. package/src/cache/WebStorageCache.ts +0 -38
  154. package/src/cache/index.ts +0 -2
  155. package/src/cache/interface.ts +0 -9
  156. package/src/cache/walletCache.ts +0 -254
  157. package/src/chain.ts +0 -3
  158. package/src/cli.ts +0 -32
  159. package/src/config.ts +0 -23
  160. package/src/constant.ts +0 -27
  161. package/src/db/ExchangeRateProvider.ts +0 -28
  162. package/src/db/StorageProvider.ts +0 -64
  163. package/src/db/index.ts +0 -2
  164. package/src/db/interface.ts +0 -11
  165. package/src/enum.ts +0 -34
  166. package/src/history/getHistory.test.ts +0 -290
  167. package/src/history/getHistory.ts +0 -411
  168. package/src/history/interface.ts +0 -24
  169. package/src/index.ts +0 -48
  170. package/src/interface.ts +0 -72
  171. package/src/libauth.ts +0 -11
  172. package/src/message/index.ts +0 -2
  173. package/src/message/interface.ts +0 -40
  174. package/src/message/signed.test.ts +0 -309
  175. package/src/message/signed.ts +0 -201
  176. package/src/mine/index.ts +0 -1
  177. package/src/mine/mine.test.ts +0 -10
  178. package/src/mine/mine.ts +0 -42
  179. package/src/network/Connection.test.ts +0 -51
  180. package/src/network/Connection.ts +0 -73
  181. package/src/network/ElectrumNetworkProvider.ts +0 -657
  182. package/src/network/NetworkProvider.ts +0 -180
  183. package/src/network/Rpc.test.ts +0 -130
  184. package/src/network/configuration.test.ts +0 -59
  185. package/src/network/configuration.ts +0 -72
  186. package/src/network/constant.ts +0 -43
  187. package/src/network/default.ts +0 -120
  188. package/src/network/electrum.test.ts +0 -28
  189. package/src/network/getRelayFeeCache.test.ts +0 -15
  190. package/src/network/getRelayFeeCache.ts +0 -23
  191. package/src/network/index.ts +0 -14
  192. package/src/network/interface.ts +0 -80
  193. package/src/network/util.test.ts +0 -24
  194. package/src/network/util.ts +0 -30
  195. package/src/rate/ExchangeRate.test.headless.js +0 -35
  196. package/src/rate/ExchangeRate.test.ts +0 -51
  197. package/src/rate/ExchangeRate.ts +0 -142
  198. package/src/test/expect.ts +0 -59
  199. package/src/test/fetch.ts +0 -39
  200. package/src/test/json.test.ts +0 -13
  201. package/src/transaction/Wif.ts +0 -680
  202. package/src/transaction/allocateFee.test.ts +0 -298
  203. package/src/transaction/allocateFee.ts +0 -149
  204. package/src/util/amountInSatoshi.test.ts +0 -27
  205. package/src/util/amountInSatoshi.ts +0 -33
  206. package/src/util/asSendRequestObject.ts +0 -81
  207. package/src/util/base64.test.ts +0 -39
  208. package/src/util/base64.ts +0 -12
  209. package/src/util/browserNotSupported.ts +0 -7
  210. package/src/util/checkForEmptySeed.ts +0 -9
  211. package/src/util/checkUtxos.ts +0 -29
  212. package/src/util/checkWifNetwork.ts +0 -24
  213. package/src/util/convert.test.ts +0 -46
  214. package/src/util/convert.ts +0 -50
  215. package/src/util/delay.ts +0 -3
  216. package/src/util/deriveCashaddr.test.ts +0 -164
  217. package/src/util/deriveCashaddr.ts +0 -143
  218. package/src/util/deriveLockscript.ts +0 -16
  219. package/src/util/deriveNetwork.ts +0 -19
  220. package/src/util/derivePublicKeyHash.test.ts +0 -55
  221. package/src/util/derivePublicKeyHash.ts +0 -64
  222. package/src/util/floor.test.ts +0 -21
  223. package/src/util/floor.ts +0 -4
  224. package/src/util/getAddrsByXpubKey.test.ts +0 -115
  225. package/src/util/getAddrsByXpubKey.ts +0 -86
  226. package/src/util/getRuntimePlatform.test.headless.js +0 -40
  227. package/src/util/getRuntimePlatform.test.ts +0 -5
  228. package/src/util/getRuntimePlatform.ts +0 -31
  229. package/src/util/getUsdRate.ts +0 -5
  230. package/src/util/getXPubKey.ts +0 -39
  231. package/src/util/hash160.test.ts +0 -18
  232. package/src/util/hash160.ts +0 -12
  233. package/src/util/hd.ts +0 -16
  234. package/src/util/header.test.ts +0 -34
  235. package/src/util/header.ts +0 -26
  236. package/src/util/index.ts +0 -33
  237. package/src/util/randomBytes.ts +0 -13
  238. package/src/util/randomInt.test.ts +0 -15
  239. package/src/util/randomInt.ts +0 -4
  240. package/src/util/sanitizeAddress.ts +0 -10
  241. package/src/util/sanitizeUnit.ts +0 -11
  242. package/src/util/satoshiToAmount.test.ts +0 -6
  243. package/src/util/satoshiToAmount.ts +0 -33
  244. package/src/util/sumSendRequestAmounts.ts +0 -34
  245. package/src/util/sumUtxoValue.ts +0 -27
  246. package/src/util/transaction.ts +0 -10
  247. package/src/wallet/Base.ts +0 -1563
  248. package/src/wallet/Cashtokens.test.headless.js +0 -730
  249. package/src/wallet/Cashtokens.test.ts +0 -1411
  250. package/src/wallet/HDWallet.test.ts +0 -1086
  251. package/src/wallet/HDWallet.ts +0 -992
  252. package/src/wallet/Util.test.ts +0 -134
  253. package/src/wallet/Util.ts +0 -191
  254. package/src/wallet/WalletCache.test.ts +0 -45
  255. package/src/wallet/Watch.ts +0 -441
  256. package/src/wallet/Wif.bip39.test.ts +0 -48
  257. package/src/wallet/Wif.test.ts +0 -1189
  258. package/src/wallet/Wif.ts +0 -687
  259. package/src/wallet/Wif.watchOnly.test.ts +0 -58
  260. package/src/wallet/createWallet.ts +0 -238
  261. package/src/wallet/enum.ts +0 -18
  262. package/src/wallet/interface.ts +0 -102
  263. package/src/wallet/model.test.ts +0 -24
  264. package/src/wallet/model.ts +0 -352
  265. package/tsconfig.browser.json +0 -11
  266. package/tsconfig.json +0 -33
  267. package/webpack.config.cjs +0 -132
@@ -1,24 +0,0 @@
1
- import { TokenI } from "../interface.js";
2
-
3
- export interface InOutput {
4
- address: string;
5
- value: number;
6
- token?: TokenI;
7
- }
8
-
9
- export interface TransactionHistoryItem {
10
- inputs: InOutput[];
11
- outputs: InOutput[];
12
- blockHeight: number;
13
- timestamp?: number;
14
- hash: string;
15
- size: number;
16
- fee: number;
17
- balance: number;
18
- valueChange: number;
19
- tokenAmountChanges: {
20
- category: string;
21
- amount: bigint;
22
- nftAmount: bigint;
23
- }[];
24
- }
package/src/index.ts DELETED
@@ -1,48 +0,0 @@
1
- export * from "./test/fetch.js";
2
- export * from "./test/expect.js";
3
- export * from "./db/index.js";
4
- export * from "./mine/index.js";
5
-
6
- export * from "./network/index.js";
7
- export { SignedMessage } from "./message/signed.js";
8
-
9
- export * from "./wallet/Base.js";
10
- export * from "./wallet/Watch.js";
11
- export * from "./wallet/Wif.js";
12
- export * from "./wallet/HDWallet.js";
13
- export * from "./wallet/createWallet.js";
14
-
15
- // provider
16
- export { DefaultProvider } from "./network/configuration.js";
17
-
18
- // config
19
- export { Config } from "./config.js";
20
-
21
- // Enum
22
- export { NetworkType, UnitEnum } from "./enum.js";
23
- export { WalletTypeEnum, FeePaidByEnum } from "./wallet/enum.js";
24
-
25
- // models
26
- export * from "./wallet/model.js";
27
-
28
- // utils
29
- import * as Mainnet from "./util/index.js";
30
- export { Mainnet };
31
- export * from "./util/index.js";
32
- export { getHistory } from "./history/getHistory.js";
33
-
34
- // libauth
35
- export * as libauth from "./libauth.js";
36
-
37
- // constants
38
- import * as CONST from "./constant.js";
39
- export { CONST };
40
-
41
- // interfaces
42
- export * from "./interface.js";
43
- export {
44
- SignedMessageResponseI,
45
- VerifyMessageResponseI,
46
- } from "./message/interface.js";
47
- export * from "./wallet/interface.js";
48
- export * from "./history/interface.js";
package/src/interface.ts DELETED
@@ -1,72 +0,0 @@
1
- import { WalletImportFormatType } from "@bitauth/libauth";
2
-
3
- export interface PrivateKeyI {
4
- privateKey: Uint8Array;
5
- type: WalletImportFormatType;
6
- }
7
-
8
- // Weird setup to allow both Enum parameters, as well as literal strings
9
- // https://stackoverflow.com/questions/51433319/typescript-constructor-accept-string-for-enum
10
- const literal = <L extends string>(l: L): L => l;
11
- export const Network = {
12
- MAINNET: literal("mainnet"),
13
- TESTNET: literal("testnet"),
14
- REGTEST: literal("regtest"),
15
- };
16
- export type Network = typeof Network[keyof typeof Network];
17
-
18
- export interface Utxo {
19
- txid: string;
20
- vout: number;
21
- satoshis: bigint;
22
- height?: number;
23
- token?: TokenI;
24
- address: string;
25
- }
26
-
27
- export interface UtxoId {
28
- txid: string;
29
- vout: number;
30
- }
31
-
32
- export interface ElectrumBalanceI {
33
- confirmed: number;
34
- unconfirmed: number;
35
- }
36
-
37
- export interface TxI {
38
- tx_hash: string;
39
- height: number;
40
- fee?: number;
41
- }
42
-
43
- export interface HexHeaderI {
44
- height: number;
45
- hex: string;
46
- }
47
-
48
- export interface HeaderI {
49
- version: number;
50
- previousBlockHash: string;
51
- merkleRoot: string;
52
- timestamp: number;
53
- bits: number;
54
- nonce: number;
55
- height: number;
56
- }
57
-
58
- export interface TokenI {
59
- amount: bigint;
60
- category: string;
61
- nft?: {
62
- capability: NFTCapability;
63
- commitment: string;
64
- };
65
- }
66
-
67
- export const NFTCapability = {
68
- none: literal("none"),
69
- mutable: literal("mutable"),
70
- minting: literal("minting"),
71
- };
72
- export type NFTCapability = typeof NFTCapability[keyof typeof NFTCapability];
package/src/libauth.ts DELETED
@@ -1,11 +0,0 @@
1
- export {
2
- importWalletTemplate,
3
- walletTemplateP2pkhNonHd,
4
- walletTemplateP2pkh,
5
- walletTemplateToCompilerBCH,
6
- cashAddressToLockingBytecode,
7
- hexToBin,
8
- generateTransaction,
9
- encodeTransaction,
10
- decodeTransaction,
11
- } from "@bitauth/libauth";
@@ -1,2 +0,0 @@
1
- export * from "./interface.js";
2
- export * from "./signed.js";
@@ -1,40 +0,0 @@
1
- export interface SignedMessageI {
2
- sign(message: string, privateKey: Uint8Array): SignedMessageResponseI;
3
- verify(
4
- message: string,
5
- signature: string,
6
- cashaddr: string,
7
- publicKey?: Uint8Array
8
- ): VerifyMessageResponseI;
9
- }
10
-
11
- export interface SignedMessageRawI {
12
- ecdsa: string;
13
- schnorr: string;
14
- der: string;
15
- }
16
-
17
- export interface SignedMessageDetailsI {
18
- recoveryId: number;
19
- compressed: boolean;
20
- messageHash: string;
21
- }
22
-
23
- export interface SignedMessageResponseI {
24
- raw?: SignedMessageRawI;
25
- details?: SignedMessageDetailsI;
26
- signature: string;
27
- }
28
-
29
- export interface VerifyMessageDetailsI {
30
- signatureType: string;
31
- messageHash: string;
32
- signatureValid: boolean;
33
- publicKeyHashMatch: boolean;
34
- publicKeyMatch: boolean;
35
- }
36
-
37
- export interface VerifyMessageResponseI {
38
- valid: boolean;
39
- details?: VerifyMessageDetailsI;
40
- }
@@ -1,309 +0,0 @@
1
- import { SignedMessage, hash_message } from "./signed.js";
2
- import { Wallet, RegTestWallet, TestNetWallet } from "../wallet/Wif.js";
3
- import { binToHex } from "@bitauth/libauth";
4
-
5
- import fs from "fs";
6
-
7
- async function loadLargeMessage() {
8
- const data = await fs.promises.readFile("./jest/data/bitcoin.tex", "utf-8");
9
- return data;
10
- }
11
-
12
- describe("Test message Signing and Verification", () => {
13
- test("Test the magic hash function", async () => {
14
- // Test that the double sha256 hash of the wrapped messages matches
15
- // what would be had internally in electron-cash
16
- // b'\x18Bitcoin Signed Message:\n' + b'{message.length}' + b'{message}'
17
- let test_hash = hash_message("test");
18
- expect(binToHex(test_hash)).toBe(
19
- "9ce428d58e8e4caf619dc6fc7b2c2c28f0561654d1f80f322c038ad5e67ff8a6"
20
- );
21
-
22
- // b'\xe6\xb5\x8b\xe8\xaf\x95' in binary python
23
- let 测试_hash = hash_message("测试");
24
- expect(binToHex(测试_hash)).toBe(
25
- "8d8405050b7a763ccd5683f8470ea7dcbd10a87da2b7fe07eb2679ba71229688"
26
- );
27
- });
28
-
29
- test("Test testnet signature from electron cash", async () => {
30
- let msg1 = "Chancellor on brink of second bailout for banks";
31
- let w1 = await Wallet.fromId(
32
- `wif:mainnet:L1TnU2zbNaAqMoVh65Cyvmcjzbrj41Gs9iTLcWbpJCMynXuap6UN`
33
- );
34
- expect(w1.cashaddr!).toBe(
35
- "bitcoincash:qqehccy89v7ftlfgr9v0zvhjzyy7eatdkqt05lt3nw"
36
- );
37
- let sig = SignedMessage.sign(msg1, w1.privateKey!);
38
-
39
- let coreLibSig =
40
- "H/9jMOnj4MFbH3d7t4yCQ9i7DgZU/VZ278w3+ySv2F4yIsdqjsc5ng3kmN8OZAThgyfCZOQxZCWza9V5XzlVY0Y=";
41
- expect(sig.signature).toBe(coreLibSig);
42
- let result = SignedMessage.verify(msg1, sig.signature, w1.cashaddr!);
43
- expect(result.valid).toBe(true);
44
- expect(result.details!.messageHash).toBe(
45
- "gE9BDBFAOqW+yoOzABjnM+LQRWHd4dvUVrsTR+sIWsU="
46
- );
47
- expect(result.details!.publicKeyHashMatch).toBe(true);
48
- expect(result.details!.publicKeyMatch).toBe(false);
49
- expect(result.details!.signatureValid).toBe(true);
50
- expect(result.details!.signatureType).toBe("recoverable");
51
-
52
- let msg2 = "Lessons for China from Japan’s lost decade";
53
- result = SignedMessage.verify(msg2, sig.signature, w1.cashaddr!);
54
- expect(result.valid).toBe(false);
55
- expect(result.details!.messageHash).toBe(
56
- "070kQIcYPSHApGdOGH0O81N1AkMbNKwCTM3IX2Svd3I="
57
- );
58
- expect(result.details!.publicKeyHashMatch).toBe(false);
59
- expect(result.details!.publicKeyMatch).toBe(false);
60
- expect(result.details!.signatureValid).toBe(true);
61
- expect(result.details!.signatureType).toBe("recoverable");
62
- });
63
-
64
- // cTHMu3b13uh4i4GANQKm1XeziZhph18fwZgdaVftxh4FSuqj2AGM
65
- // bchtest:qqf25s9nm4uq982t94vq75v78n4j0e4r4vdf9j48wn
66
- // INGajEdcctxl+WR/icZJ5mNenqcxfhqhAkBkAauBxfZFdeKaU/FaL7fxgVyTul6Qxz1Oesn8avN/F+AaFIcMP74=
67
-
68
- test("Test testnet signature from electron cash", async () => {
69
- let w = await TestNetWallet.fromId(
70
- "wif:testnet:cTHMu3b13uh4i4GANQKm1XeziZhph18fwZgdaVftxh4FSuqj2AGM"
71
- );
72
- expect(w.cashaddr!).toBe(
73
- "bchtest:qqf25s9nm4uq982t94vq75v78n4j0e4r4vdf9j48wn"
74
- );
75
- let msg = "test";
76
- let sig = SignedMessage.sign(msg, w.privateKey!);
77
- let result = SignedMessage.verify(msg, sig.signature, w.cashaddr!);
78
- expect(result.valid).toBe(true);
79
-
80
- result = SignedMessage.verify("test2", sig.signature, w.cashaddr!);
81
- expect(result.valid).toBe(false);
82
- });
83
-
84
- test("Test signing and verifying regtest signature using Alice's wallet", async () => {
85
- let w = await RegTestWallet.fromId(
86
- "wif:regtest:cNfsPtqN2bMRS7vH5qd8tR8GMvgXyL5BjnGAKgZ8DYEiCrCCQcP6"
87
- );
88
- let msg = "test";
89
- let sig = SignedMessage.sign(msg, w.privateKey!);
90
-
91
- let result = SignedMessage.verify(msg, sig.signature, w.cashaddr!);
92
- expect(result.valid).toBe(true);
93
-
94
- result = SignedMessage.verify("test2", sig.signature, w.cashaddr!);
95
- expect(result.valid).toBe(false);
96
- });
97
-
98
- test("Test signing and verifying regtest signature using Alice's wallet", async () => {
99
- let w = await RegTestWallet.fromId(
100
- "wif:regtest:cNfsPtqN2bMRS7vH5qd8tR8GMvgXyL5BjnGAKgZ8DYEiCrCCQcP6"
101
- );
102
- let msg = "测试";
103
- let sig = SignedMessage.sign(msg, w.privateKey!);
104
- let result = SignedMessage.verify(msg, sig.signature, w.cashaddr!);
105
- expect(result.valid).toBe(true);
106
-
107
- result = SignedMessage.verify("测试二", sig.signature, w.cashaddr!);
108
- expect(result.valid).toBe(false);
109
- });
110
-
111
- test("Test signing and verifying a schnorr signature", async () => {
112
- let w = await Wallet.fromId(
113
- "wif:mainnet:L1TnU2zbNaAqMoVh65Cyvmcjzbrj41Gs9iTLcWbpJCMynXuap6UN"
114
- );
115
- let msg = "test";
116
- let sig = SignedMessage.sign(msg, w.privateKey!);
117
- let result = SignedMessage.verify(
118
- msg,
119
- sig.raw!.schnorr,
120
- undefined,
121
- w.publicKey!
122
- );
123
- expect(result.valid).toBe(true);
124
- expect(result.details!.signatureType).toBe("schnorr");
125
-
126
- let msg2 =
127
- "Biggest Selloff in 25 Years Hits Japan Bonds as BOJ Loosens Grip";
128
- let invalid = SignedMessage.verify(
129
- msg2,
130
- sig.raw!.schnorr,
131
- undefined,
132
- w.publicKey!
133
- );
134
- expect(invalid.valid).toBe(false);
135
- });
136
-
137
- test("Test signing and verifying a der signature", async () => {
138
- let w = await Wallet.fromId(
139
- "wif:mainnet:L1TnU2zbNaAqMoVh65Cyvmcjzbrj41Gs9iTLcWbpJCMynXuap6UN"
140
- );
141
- let msg = "test";
142
- let sig = SignedMessage.sign(msg, w.privateKey!);
143
- let result = SignedMessage.verify(
144
- msg,
145
- sig.raw!.der,
146
- undefined,
147
- w.publicKey!
148
- );
149
- expect(result.valid).toBe(true);
150
- expect(result.details!.signatureType).toBe("der");
151
- });
152
-
153
- test("Test signing and verifying a ecdsa signature", async () => {
154
- let w = await Wallet.fromId(
155
- "wif:mainnet:L1TnU2zbNaAqMoVh65Cyvmcjzbrj41Gs9iTLcWbpJCMynXuap6UN"
156
- );
157
- let msg = "test";
158
- let sig = SignedMessage.sign(msg, w.privateKey!);
159
- let result = SignedMessage.verify(
160
- msg,
161
- sig.raw!.ecdsa,
162
- undefined,
163
- w.publicKey!
164
- );
165
- expect(result.valid).toBe(true);
166
- expect(result.details!.signatureType).toBe("ecdsa");
167
-
168
- let msg2 =
169
- "Biggest Selloff in 25 Years Hits Japan Bonds as BOJ Loosens Grip";
170
- let invalid = SignedMessage.verify(
171
- msg2,
172
- sig.raw!.ecdsa,
173
- undefined,
174
- w.publicKey!
175
- );
176
- expect(invalid.valid).toBe(false);
177
- });
178
-
179
- test("Test signing and verifying a long message", async () => {
180
- let w = await Wallet.fromId(
181
- "wif:mainnet:L1TnU2zbNaAqMoVh65Cyvmcjzbrj41Gs9iTLcWbpJCMynXuap6UN"
182
- );
183
- let msg = await loadLargeMessage();
184
- let sig = SignedMessage.sign(msg, w.privateKey!);
185
- let result = SignedMessage.verify(msg, sig.signature, w.cashaddr!);
186
- expect(result.valid).toBe(true);
187
- });
188
-
189
- test("Test electron-cash example from static wallet methods", async () => {
190
- let msg1 = "Chancellor on brink of second bailout for banks";
191
- let w1 = await Wallet.fromId(
192
- `wif:mainnet:L1TnU2zbNaAqMoVh65Cyvmcjzbrj41Gs9iTLcWbpJCMynXuap6UN`
193
- );
194
- expect(w1.cashaddr!).toBe(
195
- "bitcoincash:qqehccy89v7ftlfgr9v0zvhjzyy7eatdkqt05lt3nw"
196
- );
197
- let sig = SignedMessage.sign(msg1, w1.privateKey!);
198
- let result = SignedMessage.verify(msg1, sig.signature, w1.cashaddr!);
199
- expect(result.valid).toBe(true);
200
-
201
- let msg2 =
202
- "Biggest Selloff in 25 Years Hits Japan Bonds as BOJ Loosens Grip";
203
- let invalid = SignedMessage.verify(msg2, sig.signature, w1.cashaddr!);
204
- expect(invalid.valid).toBe(false);
205
- });
206
-
207
- test("Test electron cash example from a wallet instance", async () => {
208
- let msg1 = "Chancellor on brink of second bailout for banks";
209
-
210
- let w1 = await Wallet.fromId(
211
- `wif:mainnet:L1TnU2zbNaAqMoVh65Cyvmcjzbrj41Gs9iTLcWbpJCMynXuap6UN`
212
- );
213
- expect(w1.cashaddr!).toBe(
214
- "bitcoincash:qqehccy89v7ftlfgr9v0zvhjzyy7eatdkqt05lt3nw"
215
- );
216
- let sig = w1.sign(msg1);
217
- let result = w1.verify(msg1, sig.signature);
218
- expect(result.valid).toBe(true);
219
-
220
- let msg2 =
221
- "Biggest Selloff in 25 Years Hits Japan Bonds as BOJ Loosens Grip";
222
- let invalid = w1.verify(msg2, sig.signature);
223
- expect(invalid.valid).toBe(false);
224
- });
225
-
226
- test("Test electron cash example from a wallet instance", async () => {
227
- let beak = "Eeny meeny, hide & seek―catch a cephalopod by the beak";
228
- let beakSig =
229
- "H2a0aK6ZhF5rii4yzKkE+15yLTaQPa4KzoGXwYNHm5I+OYxRdcpTiUVZm3h6+ocy2JYxb0UUrQn7UWh8IcxzEtk=";
230
-
231
- let falseMessage = "Employer provided healthcare is a benefit.";
232
-
233
- let w1 = await Wallet.fromId(
234
- `watch:mainnet:qqad5sy4jml3f6vcp246dulsex04xp48wq23d35rqe`
235
- );
236
- expect(w1.cashaddr!).toBe(
237
- "bitcoincash:qqad5sy4jml3f6vcp246dulsex04xp48wq23d35rqe"
238
- );
239
- let result = w1.verify(beak, beakSig);
240
- expect(result.valid).toBe(true);
241
- expect(result.details?.publicKeyHashMatch).toBe(true);
242
- expect(result.details?.publicKeyMatch).toBe(false);
243
- expect(result.details?.signatureValid).toBe(true);
244
- expect(result.details?.signatureType).toBe("recoverable");
245
-
246
- let badResult = w1.verify(falseMessage, beakSig);
247
- expect(badResult.valid).toBe(false);
248
-
249
- // While the recoverable sig is valid, it doesn't match the message.
250
- expect(badResult.details?.signatureValid).toBe(true);
251
- expect(badResult.details?.publicKeyHashMatch).toBe(false);
252
- expect(badResult.details?.publicKeyMatch).toBe(false);
253
- expect(result.details?.signatureType).toBe("recoverable");
254
- });
255
-
256
- // Test verifying a long message (>= 253 bytes) signed by Electron Cash
257
- // This tests that the varint length encoding is correct
258
- test("Test verifying long message signature from Electron Cash", async () => {
259
- // 329 byte message (10 lines of "1234567890 1234567890 1234567890")
260
- const longMsg = Array(10)
261
- .fill("1234567890 1234567890 1234567890")
262
- .join("\n");
263
- expect(longMsg.length).toBe(329); // Confirm >= 253 bytes
264
-
265
- const ecSig =
266
- "IPJZmd0kYQbll507F1wWMcbA7WPMcBkF6GhtYXQEpSHsWFNLzDmvy5rI0uA0NDlkHbUiHAiy67lPeCQoHJ8tk7s=";
267
-
268
- // Private key: cPPQTpVuL8WPDcH9wuhjVcbdKtRX3j4Q4uV2qnL8hbtyW2ugMAcn
269
- const addr = "bchtest:qrynfuk47hxqj4sgpt62v3yzzpnjw6l2hvnc4p897k";
270
-
271
- const result = await SignedMessage.verify(longMsg, ecSig, addr);
272
- expect(result.valid).toBe(true);
273
- expect(result.details?.publicKeyHashMatch).toBe(true);
274
- });
275
-
276
- test("Test signature verification with cashaddr and tokenaddr is equivalent", async () => {
277
- let msg1 = "Chancellor on brink of second bailout for banks";
278
- let w1 = await Wallet.fromId(
279
- `wif:mainnet:L1TnU2zbNaAqMoVh65Cyvmcjzbrj41Gs9iTLcWbpJCMynXuap6UN`
280
- );
281
- expect(w1.cashaddr!).toBe(
282
- "bitcoincash:qqehccy89v7ftlfgr9v0zvhjzyy7eatdkqt05lt3nw"
283
- );
284
- let sig = SignedMessage.sign(msg1, w1.privateKey!);
285
-
286
- let coreLibSig =
287
- "H/9jMOnj4MFbH3d7t4yCQ9i7DgZU/VZ278w3+ySv2F4yIsdqjsc5ng3kmN8OZAThgyfCZOQxZCWza9V5XzlVY0Y=";
288
- expect(sig.signature).toBe(coreLibSig);
289
- let result = SignedMessage.verify(msg1, sig.signature, w1.cashaddr!);
290
- expect(result.valid).toBe(true);
291
- expect(result.details!.messageHash).toBe(
292
- "gE9BDBFAOqW+yoOzABjnM+LQRWHd4dvUVrsTR+sIWsU="
293
- );
294
- expect(result.details!.publicKeyHashMatch).toBe(true);
295
- expect(result.details!.publicKeyMatch).toBe(false);
296
- expect(result.details!.signatureValid).toBe(true);
297
- expect(result.details!.signatureType).toBe("recoverable");
298
-
299
- let result2 = SignedMessage.verify(msg1, sig.signature, w1.tokenaddr!);
300
- expect(result2.valid).toBe(true);
301
- expect(result2.details!.messageHash).toBe(
302
- "gE9BDBFAOqW+yoOzABjnM+LQRWHd4dvUVrsTR+sIWsU="
303
- );
304
- expect(result2.details!.publicKeyHashMatch).toBe(true);
305
- expect(result2.details!.publicKeyMatch).toBe(false);
306
- expect(result2.details!.signatureValid).toBe(true);
307
- expect(result2.details!.signatureType).toBe("recoverable");
308
- });
309
- });