xpi-ts 0.2.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 (216) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +516 -0
  3. package/dist/index.d.ts +9 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +8 -0
  6. package/dist/lib/bitcore/address.d.ts +66 -0
  7. package/dist/lib/bitcore/address.d.ts.map +1 -0
  8. package/dist/lib/bitcore/address.js +407 -0
  9. package/dist/lib/bitcore/block/block.d.ts +57 -0
  10. package/dist/lib/bitcore/block/block.d.ts.map +1 -0
  11. package/dist/lib/bitcore/block/block.js +233 -0
  12. package/dist/lib/bitcore/block/blockheader.d.ts +82 -0
  13. package/dist/lib/bitcore/block/blockheader.d.ts.map +1 -0
  14. package/dist/lib/bitcore/block/blockheader.js +323 -0
  15. package/dist/lib/bitcore/block/index.d.ts +5 -0
  16. package/dist/lib/bitcore/block/index.d.ts.map +1 -0
  17. package/dist/lib/bitcore/block/index.js +2 -0
  18. package/dist/lib/bitcore/chunk.d.ts +22 -0
  19. package/dist/lib/bitcore/chunk.d.ts.map +1 -0
  20. package/dist/lib/bitcore/chunk.js +46 -0
  21. package/dist/lib/bitcore/crypto/bn.d.ts +53 -0
  22. package/dist/lib/bitcore/crypto/bn.d.ts.map +1 -0
  23. package/dist/lib/bitcore/crypto/bn.js +238 -0
  24. package/dist/lib/bitcore/crypto/ecdsa.d.ts +46 -0
  25. package/dist/lib/bitcore/crypto/ecdsa.d.ts.map +1 -0
  26. package/dist/lib/bitcore/crypto/ecdsa.js +247 -0
  27. package/dist/lib/bitcore/crypto/hash.d.ts +16 -0
  28. package/dist/lib/bitcore/crypto/hash.d.ts.map +1 -0
  29. package/dist/lib/bitcore/crypto/hash.js +87 -0
  30. package/dist/lib/bitcore/crypto/index.d.ts +9 -0
  31. package/dist/lib/bitcore/crypto/index.d.ts.map +1 -0
  32. package/dist/lib/bitcore/crypto/index.js +8 -0
  33. package/dist/lib/bitcore/crypto/musig2.d.ts +40 -0
  34. package/dist/lib/bitcore/crypto/musig2.d.ts.map +1 -0
  35. package/dist/lib/bitcore/crypto/musig2.js +236 -0
  36. package/dist/lib/bitcore/crypto/point.d.ts +20 -0
  37. package/dist/lib/bitcore/crypto/point.d.ts.map +1 -0
  38. package/dist/lib/bitcore/crypto/point.js +133 -0
  39. package/dist/lib/bitcore/crypto/random.d.ts +7 -0
  40. package/dist/lib/bitcore/crypto/random.d.ts.map +1 -0
  41. package/dist/lib/bitcore/crypto/random.js +30 -0
  42. package/dist/lib/bitcore/crypto/schnorr.d.ts +40 -0
  43. package/dist/lib/bitcore/crypto/schnorr.d.ts.map +1 -0
  44. package/dist/lib/bitcore/crypto/schnorr.js +185 -0
  45. package/dist/lib/bitcore/crypto/signature.d.ts +53 -0
  46. package/dist/lib/bitcore/crypto/signature.d.ts.map +1 -0
  47. package/dist/lib/bitcore/crypto/signature.js +300 -0
  48. package/dist/lib/bitcore/crypto/sigtype.d.ts +5 -0
  49. package/dist/lib/bitcore/crypto/sigtype.d.ts.map +1 -0
  50. package/dist/lib/bitcore/crypto/sigtype.js +18 -0
  51. package/dist/lib/bitcore/encoding/base58.d.ts +16 -0
  52. package/dist/lib/bitcore/encoding/base58.d.ts.map +1 -0
  53. package/dist/lib/bitcore/encoding/base58.js +55 -0
  54. package/dist/lib/bitcore/encoding/base58check.d.ts +9 -0
  55. package/dist/lib/bitcore/encoding/base58check.d.ts.map +1 -0
  56. package/dist/lib/bitcore/encoding/base58check.js +82 -0
  57. package/dist/lib/bitcore/encoding/bufferreader.d.ts +34 -0
  58. package/dist/lib/bitcore/encoding/bufferreader.d.ts.map +1 -0
  59. package/dist/lib/bitcore/encoding/bufferreader.js +198 -0
  60. package/dist/lib/bitcore/encoding/bufferwriter.d.ts +36 -0
  61. package/dist/lib/bitcore/encoding/bufferwriter.d.ts.map +1 -0
  62. package/dist/lib/bitcore/encoding/bufferwriter.js +189 -0
  63. package/dist/lib/bitcore/encoding/varint.d.ts +20 -0
  64. package/dist/lib/bitcore/encoding/varint.d.ts.map +1 -0
  65. package/dist/lib/bitcore/encoding/varint.js +61 -0
  66. package/dist/lib/bitcore/errors.d.ts +28 -0
  67. package/dist/lib/bitcore/errors.d.ts.map +1 -0
  68. package/dist/lib/bitcore/errors.js +325 -0
  69. package/dist/lib/bitcore/hdprivatekey.d.ts +78 -0
  70. package/dist/lib/bitcore/hdprivatekey.d.ts.map +1 -0
  71. package/dist/lib/bitcore/hdprivatekey.js +381 -0
  72. package/dist/lib/bitcore/hdpublickey.d.ts +98 -0
  73. package/dist/lib/bitcore/hdpublickey.d.ts.map +1 -0
  74. package/dist/lib/bitcore/hdpublickey.js +416 -0
  75. package/dist/lib/bitcore/index.d.ts +60 -0
  76. package/dist/lib/bitcore/index.d.ts.map +1 -0
  77. package/dist/lib/bitcore/index.js +44 -0
  78. package/dist/lib/bitcore/message.d.ts +23 -0
  79. package/dist/lib/bitcore/message.d.ts.map +1 -0
  80. package/dist/lib/bitcore/message.js +112 -0
  81. package/dist/lib/bitcore/mnemonic/errors.d.ts +7 -0
  82. package/dist/lib/bitcore/mnemonic/errors.d.ts.map +1 -0
  83. package/dist/lib/bitcore/mnemonic/errors.js +20 -0
  84. package/dist/lib/bitcore/mnemonic/index.d.ts +5 -0
  85. package/dist/lib/bitcore/mnemonic/index.d.ts.map +1 -0
  86. package/dist/lib/bitcore/mnemonic/index.js +4 -0
  87. package/dist/lib/bitcore/mnemonic/mnemonic.d.ts +23 -0
  88. package/dist/lib/bitcore/mnemonic/mnemonic.d.ts.map +1 -0
  89. package/dist/lib/bitcore/mnemonic/mnemonic.js +164 -0
  90. package/dist/lib/bitcore/mnemonic/pbkdf2.d.ts +2 -0
  91. package/dist/lib/bitcore/mnemonic/pbkdf2.d.ts.map +1 -0
  92. package/dist/lib/bitcore/mnemonic/pbkdf2.js +25 -0
  93. package/dist/lib/bitcore/mnemonic/words/english.d.ts +2 -0
  94. package/dist/lib/bitcore/mnemonic/words/english.d.ts.map +1 -0
  95. package/dist/lib/bitcore/mnemonic/words/english.js +2050 -0
  96. package/dist/lib/bitcore/mnemonic/words/index.d.ts +4 -0
  97. package/dist/lib/bitcore/mnemonic/words/index.d.ts.map +1 -0
  98. package/dist/lib/bitcore/mnemonic/words/index.js +4 -0
  99. package/dist/lib/bitcore/musig2/index.d.ts +3 -0
  100. package/dist/lib/bitcore/musig2/index.d.ts.map +1 -0
  101. package/dist/lib/bitcore/musig2/index.js +2 -0
  102. package/dist/lib/bitcore/musig2/session.d.ts +79 -0
  103. package/dist/lib/bitcore/musig2/session.d.ts.map +1 -0
  104. package/dist/lib/bitcore/musig2/session.js +346 -0
  105. package/dist/lib/bitcore/musig2/signer.d.ts +61 -0
  106. package/dist/lib/bitcore/musig2/signer.d.ts.map +1 -0
  107. package/dist/lib/bitcore/musig2/signer.js +146 -0
  108. package/dist/lib/bitcore/networks.d.ts +53 -0
  109. package/dist/lib/bitcore/networks.d.ts.map +1 -0
  110. package/dist/lib/bitcore/networks.js +150 -0
  111. package/dist/lib/bitcore/opcode.d.ts +250 -0
  112. package/dist/lib/bitcore/opcode.d.ts.map +1 -0
  113. package/dist/lib/bitcore/opcode.js +270 -0
  114. package/dist/lib/bitcore/privatekey.d.ts +56 -0
  115. package/dist/lib/bitcore/privatekey.d.ts.map +1 -0
  116. package/dist/lib/bitcore/privatekey.js +237 -0
  117. package/dist/lib/bitcore/publickey.d.ts +59 -0
  118. package/dist/lib/bitcore/publickey.d.ts.map +1 -0
  119. package/dist/lib/bitcore/publickey.js +263 -0
  120. package/dist/lib/bitcore/script/interpreter.d.ts +98 -0
  121. package/dist/lib/bitcore/script/interpreter.d.ts.map +1 -0
  122. package/dist/lib/bitcore/script/interpreter.js +1704 -0
  123. package/dist/lib/bitcore/script.d.ts +111 -0
  124. package/dist/lib/bitcore/script.d.ts.map +1 -0
  125. package/dist/lib/bitcore/script.js +1112 -0
  126. package/dist/lib/bitcore/taproot/musig2.d.ts +29 -0
  127. package/dist/lib/bitcore/taproot/musig2.d.ts.map +1 -0
  128. package/dist/lib/bitcore/taproot/musig2.js +104 -0
  129. package/dist/lib/bitcore/taproot/nft.d.ts +164 -0
  130. package/dist/lib/bitcore/taproot/nft.d.ts.map +1 -0
  131. package/dist/lib/bitcore/taproot/nft.js +407 -0
  132. package/dist/lib/bitcore/taproot.d.ts +65 -0
  133. package/dist/lib/bitcore/taproot.d.ts.map +1 -0
  134. package/dist/lib/bitcore/taproot.js +288 -0
  135. package/dist/lib/bitcore/transaction/index.d.ts +12 -0
  136. package/dist/lib/bitcore/transaction/index.d.ts.map +1 -0
  137. package/dist/lib/bitcore/transaction/index.js +6 -0
  138. package/dist/lib/bitcore/transaction/input.d.ts +202 -0
  139. package/dist/lib/bitcore/transaction/input.d.ts.map +1 -0
  140. package/dist/lib/bitcore/transaction/input.js +911 -0
  141. package/dist/lib/bitcore/transaction/output.d.ts +48 -0
  142. package/dist/lib/bitcore/transaction/output.d.ts.map +1 -0
  143. package/dist/lib/bitcore/transaction/output.js +231 -0
  144. package/dist/lib/bitcore/transaction/sighash.d.ts +32 -0
  145. package/dist/lib/bitcore/transaction/sighash.d.ts.map +1 -0
  146. package/dist/lib/bitcore/transaction/sighash.js +335 -0
  147. package/dist/lib/bitcore/transaction/signature.d.ts +36 -0
  148. package/dist/lib/bitcore/transaction/signature.d.ts.map +1 -0
  149. package/dist/lib/bitcore/transaction/signature.js +130 -0
  150. package/dist/lib/bitcore/transaction/transaction.d.ts +164 -0
  151. package/dist/lib/bitcore/transaction/transaction.d.ts.map +1 -0
  152. package/dist/lib/bitcore/transaction/transaction.js +1016 -0
  153. package/dist/lib/bitcore/transaction/unspentoutput.d.ts +58 -0
  154. package/dist/lib/bitcore/transaction/unspentoutput.d.ts.map +1 -0
  155. package/dist/lib/bitcore/transaction/unspentoutput.js +167 -0
  156. package/dist/lib/bitcore/unit.d.ts +44 -0
  157. package/dist/lib/bitcore/unit.d.ts.map +1 -0
  158. package/dist/lib/bitcore/unit.js +106 -0
  159. package/dist/lib/bitcore/uri.d.ts +29 -0
  160. package/dist/lib/bitcore/uri.d.ts.map +1 -0
  161. package/dist/lib/bitcore/uri.js +163 -0
  162. package/dist/lib/bitcore/util/base32.d.ts +5 -0
  163. package/dist/lib/bitcore/util/base32.d.ts.map +1 -0
  164. package/dist/lib/bitcore/util/base32.js +58 -0
  165. package/dist/lib/bitcore/util/buffer.d.ts +18 -0
  166. package/dist/lib/bitcore/util/buffer.d.ts.map +1 -0
  167. package/dist/lib/bitcore/util/buffer.js +76 -0
  168. package/dist/lib/bitcore/util/convertBits.d.ts +2 -0
  169. package/dist/lib/bitcore/util/convertBits.d.ts.map +1 -0
  170. package/dist/lib/bitcore/util/convertBits.js +26 -0
  171. package/dist/lib/bitcore/util/js.d.ts +9 -0
  172. package/dist/lib/bitcore/util/js.d.ts.map +1 -0
  173. package/dist/lib/bitcore/util/js.js +45 -0
  174. package/dist/lib/bitcore/util/preconditions.d.ts +6 -0
  175. package/dist/lib/bitcore/util/preconditions.d.ts.map +1 -0
  176. package/dist/lib/bitcore/util/preconditions.js +31 -0
  177. package/dist/lib/bitcore/util.d.ts +14 -0
  178. package/dist/lib/bitcore/util.d.ts.map +1 -0
  179. package/dist/lib/bitcore/util.js +13 -0
  180. package/dist/lib/bitcore/xaddress.d.ts +45 -0
  181. package/dist/lib/bitcore/xaddress.d.ts.map +1 -0
  182. package/dist/lib/bitcore/xaddress.js +279 -0
  183. package/dist/lib/rank/api.d.ts +75 -0
  184. package/dist/lib/rank/api.d.ts.map +1 -0
  185. package/dist/lib/rank/api.js +4 -0
  186. package/dist/lib/rank/index.d.ts +127 -0
  187. package/dist/lib/rank/index.d.ts.map +1 -0
  188. package/dist/lib/rank/index.js +421 -0
  189. package/dist/lib/rank/opcode.d.ts +23 -0
  190. package/dist/lib/rank/opcode.d.ts.map +1 -0
  191. package/dist/lib/rank/opcode.js +23 -0
  192. package/dist/lib/rank/script.d.ts +2 -0
  193. package/dist/lib/rank/script.d.ts.map +1 -0
  194. package/dist/lib/rank/script.js +7 -0
  195. package/dist/lib/rank/transaction.d.ts +3 -0
  196. package/dist/lib/rank/transaction.d.ts.map +1 -0
  197. package/dist/lib/rank/transaction.js +12 -0
  198. package/dist/lib/rpc.d.ts +136 -0
  199. package/dist/lib/rpc.d.ts.map +1 -0
  200. package/dist/lib/rpc.js +62 -0
  201. package/dist/utils/constants.d.ts +18 -0
  202. package/dist/utils/constants.d.ts.map +1 -0
  203. package/dist/utils/constants.js +20 -0
  204. package/dist/utils/env.d.ts +3 -0
  205. package/dist/utils/env.d.ts.map +1 -0
  206. package/dist/utils/env.js +8 -0
  207. package/dist/utils/string.d.ts +11 -0
  208. package/dist/utils/string.d.ts.map +1 -0
  209. package/dist/utils/string.js +47 -0
  210. package/dist/utils/types.d.ts +2 -0
  211. package/dist/utils/types.d.ts.map +1 -0
  212. package/dist/utils/types.js +1 -0
  213. package/dist/utils/wallet.d.ts +12 -0
  214. package/dist/utils/wallet.d.ts.map +1 -0
  215. package/dist/utils/wallet.js +28 -0
  216. package/package.json +91 -0
@@ -0,0 +1,29 @@
1
+ import { PublicKey } from '../publickey.js';
2
+ import { PrivateKey } from '../privatekey.js';
3
+ import { Address } from '../address.js';
4
+ import { Script } from '../script.js';
5
+ import { BN, Point } from '../crypto/index.js';
6
+ import { type MuSigKeyAggContext, type MuSigNonce, type MuSigAggregatedNonce } from '../crypto/musig2.js';
7
+ import { type TapNode, type TapLeaf } from '../taproot.js';
8
+ export interface MuSigTaprootKeyResult {
9
+ aggregatedPubKey: PublicKey;
10
+ commitment: PublicKey;
11
+ script: Script;
12
+ keyAggContext: MuSigKeyAggContext;
13
+ merkleRoot: Buffer;
14
+ tweak: Buffer;
15
+ }
16
+ export declare function buildMuSigTaprootKey(signerPubKeys: PublicKey[], state?: Buffer): MuSigTaprootKeyResult;
17
+ export declare function buildMuSigTaprootKeyWithScripts(signerPubKeys: PublicKey[], scriptTree: TapNode, state?: Buffer): MuSigTaprootKeyResult & {
18
+ leaves: TapLeaf[];
19
+ };
20
+ export declare function signTaprootKeyPathWithMuSig2(secretNonce: MuSigNonce, privateKey: PrivateKey, keyAggContext: MuSigKeyAggContext, signerIndex: number, aggregatedNonce: MuSigAggregatedNonce, message: Buffer, tweak: Buffer): BN;
21
+ export declare function verifyTaprootKeyPathMuSigPartial(partialSig: BN, publicNonce: [Point, Point], publicKey: PublicKey, keyAggContext: MuSigKeyAggContext, signerIndex: number, aggregatedNonce: MuSigAggregatedNonce, message: Buffer, tweak: Buffer): boolean;
22
+ export declare function isMuSigTaprootOutput(script: Script): boolean;
23
+ export declare function createMuSigTaprootAddress(signerPubKeys: PublicKey[], network?: string, state?: Buffer): {
24
+ address: Address;
25
+ script: Script;
26
+ commitment: PublicKey;
27
+ keyAggContext: MuSigKeyAggContext;
28
+ };
29
+ //# sourceMappingURL=musig2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"musig2.d.ts","sourceRoot":"","sources":["../../../../lib/bitcore/taproot/musig2.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAQ,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,oBAAoB,EAG1B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAML,KAAK,OAAO,EACZ,KAAK,OAAO,EACb,MAAM,eAAe,CAAA;AAKtB,MAAM,WAAW,qBAAqB;IAEpC,gBAAgB,EAAE,SAAS,CAAA;IAG3B,UAAU,EAAE,SAAS,CAAA;IAGrB,MAAM,EAAE,MAAM,CAAA;IAGd,aAAa,EAAE,kBAAkB,CAAA;IAGjC,UAAU,EAAE,MAAM,CAAA;IAGlB,KAAK,EAAE,MAAM,CAAA;CACd;AAmCD,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,SAAS,EAAE,EAC1B,KAAK,CAAC,EAAE,MAAM,GACb,qBAAqB,CAyBvB;AAqCD,wBAAgB,+BAA+B,CAC7C,aAAa,EAAE,SAAS,EAAE,EAC1B,UAAU,EAAE,OAAO,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,qBAAqB,GAAG;IAAE,MAAM,EAAE,OAAO,EAAE,CAAA;CAAE,CAwB/C;AAyBD,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,UAAU,EACvB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,kBAAkB,EACjC,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,oBAAoB,EACrC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,EAAE,CAyDJ;AAkBD,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,EAAE,EACd,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAC3B,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,kBAAkB,EACjC,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,oBAAoB,EACrC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAmDT;AAYD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAG5D;AAUD,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,SAAS,EAAE,EAC1B,OAAO,GAAE,MAAkB,EAC3B,KAAK,CAAC,EAAE,MAAM,GACb;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,SAAS,CAAA;IACrB,aAAa,EAAE,kBAAkB,CAAA;CAClC,CAYA"}
@@ -0,0 +1,104 @@
1
+ import { Address } from '../address.js';
2
+ import { BN, Point, Hash } from '../crypto/index.js';
3
+ import { musigKeyAgg, musigPartialSign, musigPartialSigVerify, musigTaggedHash, MUSIG_TAG_NONCE_COEFF, } from '../crypto/musig2.js';
4
+ import { buildKeyPathTaproot, buildScriptPathTaproot, calculateTapTweak, tweakPublicKey, } from '../taproot.js';
5
+ export function buildMuSigTaprootKey(signerPubKeys, state) {
6
+ const keyAggContext = musigKeyAgg(signerPubKeys);
7
+ const aggregatedPubKey = keyAggContext.aggregatedPubKey;
8
+ const merkleRoot = Buffer.alloc(32);
9
+ const tweak = calculateTapTweak(aggregatedPubKey, merkleRoot);
10
+ const commitment = tweakPublicKey(aggregatedPubKey, merkleRoot);
11
+ const script = buildKeyPathTaproot(aggregatedPubKey, state);
12
+ return {
13
+ aggregatedPubKey,
14
+ commitment,
15
+ script,
16
+ keyAggContext,
17
+ merkleRoot,
18
+ tweak,
19
+ };
20
+ }
21
+ export function buildMuSigTaprootKeyWithScripts(signerPubKeys, scriptTree, state) {
22
+ const keyAggContext = musigKeyAgg(signerPubKeys);
23
+ const aggregatedPubKey = keyAggContext.aggregatedPubKey;
24
+ const { script, commitment, merkleRoot, leaves } = buildScriptPathTaproot(aggregatedPubKey, scriptTree, state);
25
+ const tweak = calculateTapTweak(aggregatedPubKey, merkleRoot);
26
+ return {
27
+ aggregatedPubKey,
28
+ commitment,
29
+ script,
30
+ keyAggContext,
31
+ merkleRoot,
32
+ tweak,
33
+ leaves,
34
+ };
35
+ }
36
+ export function signTaprootKeyPathWithMuSig2(secretNonce, privateKey, keyAggContext, signerIndex, aggregatedNonce, message, tweak) {
37
+ const n = Point.getN();
38
+ const commitment = keyAggContext.aggregatedPubKey.addScalar(tweak);
39
+ const modifiedKeyAggContext = {
40
+ ...keyAggContext,
41
+ aggregatedPubKey: commitment,
42
+ };
43
+ const partialSig = musigPartialSign(secretNonce, privateKey, modifiedKeyAggContext, signerIndex, aggregatedNonce, message);
44
+ if (signerIndex === 0) {
45
+ const { R1, R2 } = aggregatedNonce;
46
+ const nonceCoefData = Buffer.concat([
47
+ commitment.toBuffer(),
48
+ Point.pointToCompressed(R1),
49
+ Point.pointToCompressed(R2),
50
+ message,
51
+ ]);
52
+ const b = new BN(musigTaggedHash(MUSIG_TAG_NONCE_COEFF, nonceCoefData), 'be');
53
+ const R = R1.add(R2.mul(b));
54
+ const R_x = R.getX().toArrayLike(Buffer, 'be', 32);
55
+ const commitment_compressed = Point.pointToCompressed(commitment.point);
56
+ const challengeData = Buffer.concat([R_x, commitment_compressed, message]);
57
+ const e = new BN(Hash.sha256(challengeData), 'be').umod(n);
58
+ const tweakBN = new BN(tweak, 'be').umod(n);
59
+ const tweakTerm = e.mul(tweakBN).umod(n);
60
+ return partialSig.add(tweakTerm).umod(n);
61
+ }
62
+ return partialSig;
63
+ }
64
+ export function verifyTaprootKeyPathMuSigPartial(partialSig, publicNonce, publicKey, keyAggContext, signerIndex, aggregatedNonce, message, tweak) {
65
+ const n = Point.getN();
66
+ const commitment = keyAggContext.aggregatedPubKey.addScalar(tweak);
67
+ const modifiedKeyAggContext = {
68
+ ...keyAggContext,
69
+ aggregatedPubKey: commitment,
70
+ };
71
+ let adjustedPartialSig = partialSig;
72
+ if (signerIndex === 0) {
73
+ const { R1, R2 } = aggregatedNonce;
74
+ const nonceCoefData = Buffer.concat([
75
+ commitment.toBuffer(),
76
+ Point.pointToCompressed(R1),
77
+ Point.pointToCompressed(R2),
78
+ message,
79
+ ]);
80
+ const b = new BN(musigTaggedHash(MUSIG_TAG_NONCE_COEFF, nonceCoefData), 'be');
81
+ const R = R1.add(R2.mul(b));
82
+ const R_x = R.getX().toArrayLike(Buffer, 'be', 32);
83
+ const commitment_compressed = Point.pointToCompressed(commitment.point);
84
+ const challengeData = Buffer.concat([R_x, commitment_compressed, message]);
85
+ const e = new BN(Hash.sha256(challengeData), 'be').umod(n);
86
+ const tweakBN = new BN(tweak, 'be').umod(n);
87
+ const tweakTerm = e.mul(tweakBN).umod(n);
88
+ adjustedPartialSig = partialSig.sub(tweakTerm).umod(n);
89
+ }
90
+ return musigPartialSigVerify(adjustedPartialSig, publicNonce, publicKey, modifiedKeyAggContext, signerIndex, aggregatedNonce, message);
91
+ }
92
+ export function isMuSigTaprootOutput(script) {
93
+ return script.isPayToTaproot();
94
+ }
95
+ export function createMuSigTaprootAddress(signerPubKeys, network = 'livenet', state) {
96
+ const result = buildMuSigTaprootKey(signerPubKeys, state);
97
+ const address = Address.fromTaprootCommitment(result.commitment, network);
98
+ return {
99
+ address,
100
+ script: result.script,
101
+ commitment: result.commitment,
102
+ keyAggContext: result.keyAggContext,
103
+ };
104
+ }
@@ -0,0 +1,164 @@
1
+ import { PublicKey } from '../publickey.js';
2
+ import { PrivateKey } from '../privatekey.js';
3
+ import { Script } from '../script.js';
4
+ import { type TapNode, type TapLeaf } from '../taproot.js';
5
+ import { Transaction } from '../transaction/transaction.js';
6
+ import { Output } from '../transaction/output.js';
7
+ import { UnspentOutput, UnspentOutputData } from '../transaction/unspentoutput.js';
8
+ import { Address } from '../address.js';
9
+ import { Network } from '../networks.js';
10
+ export interface NFTMetadata {
11
+ name: string;
12
+ description: string;
13
+ image: string;
14
+ attributes?: NFTAttribute[];
15
+ collection?: string;
16
+ creator?: string;
17
+ external_url?: string;
18
+ animation_url?: string;
19
+ background_color?: string;
20
+ }
21
+ export interface NFTAttribute {
22
+ trait_type: string;
23
+ value: string | number;
24
+ display_type?: 'number' | 'boost_percentage' | 'boost_number' | 'date';
25
+ }
26
+ export interface NFTCollectionMetadata {
27
+ name: string;
28
+ description: string;
29
+ totalSupply: number;
30
+ creator: string;
31
+ royalty?: number;
32
+ image?: string;
33
+ external_url?: string;
34
+ }
35
+ export interface NFTData {
36
+ script: Script;
37
+ address: Address;
38
+ metadataHash: Buffer;
39
+ metadata: NFTMetadata;
40
+ satoshis: number;
41
+ txid?: string;
42
+ outputIndex?: number;
43
+ }
44
+ export interface NFTTransfer {
45
+ txid: string;
46
+ from: string | null;
47
+ to: string;
48
+ metadataHash: string;
49
+ timestamp: number;
50
+ blockHeight?: number;
51
+ }
52
+ export interface NFTMintConfig {
53
+ ownerKey: PrivateKey;
54
+ metadata: NFTMetadata;
55
+ satoshis?: number;
56
+ collectionHash?: Buffer;
57
+ network?: Network;
58
+ }
59
+ export interface NFTUtxo {
60
+ txid: string;
61
+ outputIndex: number;
62
+ script: Script;
63
+ satoshis: number;
64
+ }
65
+ export interface NFTTransferConfig {
66
+ currentOwnerKey: PrivateKey;
67
+ newOwnerKey: PublicKey;
68
+ nftUtxo: NFTUtxo;
69
+ metadataHash: Buffer;
70
+ fee?: number;
71
+ }
72
+ export interface NFTWithScriptPath extends NFTData {
73
+ commitment: PublicKey;
74
+ merkleRoot: Buffer;
75
+ leaves: TapLeaf[];
76
+ }
77
+ export interface NFTWithCollection extends NFTData {
78
+ collectionHash: Buffer;
79
+ }
80
+ export interface NFTInfo {
81
+ commitment: PublicKey;
82
+ metadataHash: Buffer;
83
+ address: Address;
84
+ }
85
+ export interface NFTObject {
86
+ script: string;
87
+ address: string;
88
+ metadataHash: string;
89
+ metadata: NFTMetadata;
90
+ satoshis: number;
91
+ txid?: string;
92
+ outputIndex?: number;
93
+ commitment?: string;
94
+ merkleRoot?: string;
95
+ collectionHash?: string;
96
+ }
97
+ export declare class NFT {
98
+ private _script;
99
+ private _address;
100
+ private _metadataHash;
101
+ private _metadata;
102
+ private _satoshis;
103
+ private _txid?;
104
+ private _outputIndex?;
105
+ private _commitment?;
106
+ private _merkleRoot?;
107
+ private _leaves?;
108
+ private _collectionHash?;
109
+ constructor(config: {
110
+ metadata: NFTMetadata;
111
+ ownerKey: PublicKey;
112
+ satoshis?: number;
113
+ network?: Network;
114
+ scriptTree?: TapNode;
115
+ collectionHash?: Buffer;
116
+ txid?: string;
117
+ outputIndex?: number;
118
+ });
119
+ static fromScript(script: Script, metadata: NFTMetadata, satoshis: number, txid?: string, outputIndex?: number): NFT;
120
+ static fromUTXO(utxo: UnspentOutput | NFTUtxo | UnspentOutputData, metadata: NFTMetadata): NFT;
121
+ get script(): Script;
122
+ get address(): Address;
123
+ get metadataHash(): Buffer;
124
+ get metadata(): NFTMetadata;
125
+ get satoshis(): number;
126
+ get txid(): string | undefined;
127
+ get outputIndex(): number | undefined;
128
+ get commitment(): PublicKey | undefined;
129
+ get merkleRoot(): Buffer | undefined;
130
+ get leaves(): TapLeaf[] | undefined;
131
+ get collectionHash(): Buffer | undefined;
132
+ hasScriptTree(): boolean;
133
+ isCollectionNFT(): boolean;
134
+ verifyMetadata(): boolean;
135
+ transfer(newOwnerKey: PublicKey, currentOwnerKey: PrivateKey, fee?: number): Transaction;
136
+ updateUTXO(txid: string, outputIndex: number): void;
137
+ getInfo(): NFTInfo;
138
+ toOutput(): Output;
139
+ toUnspentOutput(): UnspentOutput;
140
+ getUtxo(): NFTUtxo;
141
+ toJSON(): NFTObject;
142
+ toObject(): NFTData;
143
+ toString(): string;
144
+ }
145
+ export declare class NFTUtil {
146
+ static hashMetadata(metadata: NFTMetadata): Buffer;
147
+ static hashCollection(collectionInfo: NFTCollectionMetadata): Buffer;
148
+ static hashCollectionNFT(collectionHash: Buffer, nftMetadata: NFTMetadata): Buffer;
149
+ static verifyMetadata(metadata: NFTMetadata, hash: Buffer): boolean;
150
+ static verifyCollectionNFT(collectionHash: Buffer, nftMetadata: NFTMetadata, hash: Buffer): boolean;
151
+ static extractMetadataHash(script: Script): Buffer | null;
152
+ static createKeyPathNFT(ownerKey: PublicKey, metadata: NFTMetadata, satoshis?: number, network?: Network): NFTData;
153
+ static createScriptPathNFT(ownerKey: PublicKey, metadata: NFTMetadata, scriptTree: TapNode, satoshis?: number, network?: Network): NFTWithScriptPath;
154
+ static createCollectionNFT(ownerKey: PublicKey, collectionHash: Buffer, nftMetadata: NFTMetadata, satoshis?: number, network?: Network): NFTWithCollection;
155
+ static mintNFT(config: NFTMintConfig): Transaction;
156
+ static mintBatch(ownerKey: PrivateKey, nftMetadataList: NFTMetadata[], satoshisPerNFT?: number, network?: Network): Transaction;
157
+ static mintCollection(ownerKey: PrivateKey, collectionInfo: NFTCollectionMetadata, nftMetadataList: NFTMetadata[], satoshisPerNFT?: number, network?: Network): Transaction;
158
+ static transferNFT(config: NFTTransferConfig): Transaction;
159
+ static validateTransfer(inputScript: Script, outputScript: Script): boolean;
160
+ static verifyProvenance(transfers: NFTTransfer[]): boolean;
161
+ static isNFT(script: Script): boolean;
162
+ static getNFTInfo(script: Script): NFTInfo;
163
+ }
164
+ //# sourceMappingURL=nft.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nft.d.ts","sourceRoot":"","sources":["../../../../lib/bitcore/taproot/nft.ts"],"names":[],"mappings":"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"}