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.
- package/LICENSE +21 -0
- package/README.md +516 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/lib/bitcore/address.d.ts +66 -0
- package/dist/lib/bitcore/address.d.ts.map +1 -0
- package/dist/lib/bitcore/address.js +407 -0
- package/dist/lib/bitcore/block/block.d.ts +57 -0
- package/dist/lib/bitcore/block/block.d.ts.map +1 -0
- package/dist/lib/bitcore/block/block.js +233 -0
- package/dist/lib/bitcore/block/blockheader.d.ts +82 -0
- package/dist/lib/bitcore/block/blockheader.d.ts.map +1 -0
- package/dist/lib/bitcore/block/blockheader.js +323 -0
- package/dist/lib/bitcore/block/index.d.ts +5 -0
- package/dist/lib/bitcore/block/index.d.ts.map +1 -0
- package/dist/lib/bitcore/block/index.js +2 -0
- package/dist/lib/bitcore/chunk.d.ts +22 -0
- package/dist/lib/bitcore/chunk.d.ts.map +1 -0
- package/dist/lib/bitcore/chunk.js +46 -0
- package/dist/lib/bitcore/crypto/bn.d.ts +53 -0
- package/dist/lib/bitcore/crypto/bn.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/bn.js +238 -0
- package/dist/lib/bitcore/crypto/ecdsa.d.ts +46 -0
- package/dist/lib/bitcore/crypto/ecdsa.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/ecdsa.js +247 -0
- package/dist/lib/bitcore/crypto/hash.d.ts +16 -0
- package/dist/lib/bitcore/crypto/hash.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/hash.js +87 -0
- package/dist/lib/bitcore/crypto/index.d.ts +9 -0
- package/dist/lib/bitcore/crypto/index.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/index.js +8 -0
- package/dist/lib/bitcore/crypto/musig2.d.ts +40 -0
- package/dist/lib/bitcore/crypto/musig2.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/musig2.js +236 -0
- package/dist/lib/bitcore/crypto/point.d.ts +20 -0
- package/dist/lib/bitcore/crypto/point.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/point.js +133 -0
- package/dist/lib/bitcore/crypto/random.d.ts +7 -0
- package/dist/lib/bitcore/crypto/random.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/random.js +30 -0
- package/dist/lib/bitcore/crypto/schnorr.d.ts +40 -0
- package/dist/lib/bitcore/crypto/schnorr.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/schnorr.js +185 -0
- package/dist/lib/bitcore/crypto/signature.d.ts +53 -0
- package/dist/lib/bitcore/crypto/signature.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/signature.js +300 -0
- package/dist/lib/bitcore/crypto/sigtype.d.ts +5 -0
- package/dist/lib/bitcore/crypto/sigtype.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/sigtype.js +18 -0
- package/dist/lib/bitcore/encoding/base58.d.ts +16 -0
- package/dist/lib/bitcore/encoding/base58.d.ts.map +1 -0
- package/dist/lib/bitcore/encoding/base58.js +55 -0
- package/dist/lib/bitcore/encoding/base58check.d.ts +9 -0
- package/dist/lib/bitcore/encoding/base58check.d.ts.map +1 -0
- package/dist/lib/bitcore/encoding/base58check.js +82 -0
- package/dist/lib/bitcore/encoding/bufferreader.d.ts +34 -0
- package/dist/lib/bitcore/encoding/bufferreader.d.ts.map +1 -0
- package/dist/lib/bitcore/encoding/bufferreader.js +198 -0
- package/dist/lib/bitcore/encoding/bufferwriter.d.ts +36 -0
- package/dist/lib/bitcore/encoding/bufferwriter.d.ts.map +1 -0
- package/dist/lib/bitcore/encoding/bufferwriter.js +189 -0
- package/dist/lib/bitcore/encoding/varint.d.ts +20 -0
- package/dist/lib/bitcore/encoding/varint.d.ts.map +1 -0
- package/dist/lib/bitcore/encoding/varint.js +61 -0
- package/dist/lib/bitcore/errors.d.ts +28 -0
- package/dist/lib/bitcore/errors.d.ts.map +1 -0
- package/dist/lib/bitcore/errors.js +325 -0
- package/dist/lib/bitcore/hdprivatekey.d.ts +78 -0
- package/dist/lib/bitcore/hdprivatekey.d.ts.map +1 -0
- package/dist/lib/bitcore/hdprivatekey.js +381 -0
- package/dist/lib/bitcore/hdpublickey.d.ts +98 -0
- package/dist/lib/bitcore/hdpublickey.d.ts.map +1 -0
- package/dist/lib/bitcore/hdpublickey.js +416 -0
- package/dist/lib/bitcore/index.d.ts +60 -0
- package/dist/lib/bitcore/index.d.ts.map +1 -0
- package/dist/lib/bitcore/index.js +44 -0
- package/dist/lib/bitcore/message.d.ts +23 -0
- package/dist/lib/bitcore/message.d.ts.map +1 -0
- package/dist/lib/bitcore/message.js +112 -0
- package/dist/lib/bitcore/mnemonic/errors.d.ts +7 -0
- package/dist/lib/bitcore/mnemonic/errors.d.ts.map +1 -0
- package/dist/lib/bitcore/mnemonic/errors.js +20 -0
- package/dist/lib/bitcore/mnemonic/index.d.ts +5 -0
- package/dist/lib/bitcore/mnemonic/index.d.ts.map +1 -0
- package/dist/lib/bitcore/mnemonic/index.js +4 -0
- package/dist/lib/bitcore/mnemonic/mnemonic.d.ts +23 -0
- package/dist/lib/bitcore/mnemonic/mnemonic.d.ts.map +1 -0
- package/dist/lib/bitcore/mnemonic/mnemonic.js +164 -0
- package/dist/lib/bitcore/mnemonic/pbkdf2.d.ts +2 -0
- package/dist/lib/bitcore/mnemonic/pbkdf2.d.ts.map +1 -0
- package/dist/lib/bitcore/mnemonic/pbkdf2.js +25 -0
- package/dist/lib/bitcore/mnemonic/words/english.d.ts +2 -0
- package/dist/lib/bitcore/mnemonic/words/english.d.ts.map +1 -0
- package/dist/lib/bitcore/mnemonic/words/english.js +2050 -0
- package/dist/lib/bitcore/mnemonic/words/index.d.ts +4 -0
- package/dist/lib/bitcore/mnemonic/words/index.d.ts.map +1 -0
- package/dist/lib/bitcore/mnemonic/words/index.js +4 -0
- package/dist/lib/bitcore/musig2/index.d.ts +3 -0
- package/dist/lib/bitcore/musig2/index.d.ts.map +1 -0
- package/dist/lib/bitcore/musig2/index.js +2 -0
- package/dist/lib/bitcore/musig2/session.d.ts +79 -0
- package/dist/lib/bitcore/musig2/session.d.ts.map +1 -0
- package/dist/lib/bitcore/musig2/session.js +346 -0
- package/dist/lib/bitcore/musig2/signer.d.ts +61 -0
- package/dist/lib/bitcore/musig2/signer.d.ts.map +1 -0
- package/dist/lib/bitcore/musig2/signer.js +146 -0
- package/dist/lib/bitcore/networks.d.ts +53 -0
- package/dist/lib/bitcore/networks.d.ts.map +1 -0
- package/dist/lib/bitcore/networks.js +150 -0
- package/dist/lib/bitcore/opcode.d.ts +250 -0
- package/dist/lib/bitcore/opcode.d.ts.map +1 -0
- package/dist/lib/bitcore/opcode.js +270 -0
- package/dist/lib/bitcore/privatekey.d.ts +56 -0
- package/dist/lib/bitcore/privatekey.d.ts.map +1 -0
- package/dist/lib/bitcore/privatekey.js +237 -0
- package/dist/lib/bitcore/publickey.d.ts +59 -0
- package/dist/lib/bitcore/publickey.d.ts.map +1 -0
- package/dist/lib/bitcore/publickey.js +263 -0
- package/dist/lib/bitcore/script/interpreter.d.ts +98 -0
- package/dist/lib/bitcore/script/interpreter.d.ts.map +1 -0
- package/dist/lib/bitcore/script/interpreter.js +1704 -0
- package/dist/lib/bitcore/script.d.ts +111 -0
- package/dist/lib/bitcore/script.d.ts.map +1 -0
- package/dist/lib/bitcore/script.js +1112 -0
- package/dist/lib/bitcore/taproot/musig2.d.ts +29 -0
- package/dist/lib/bitcore/taproot/musig2.d.ts.map +1 -0
- package/dist/lib/bitcore/taproot/musig2.js +104 -0
- package/dist/lib/bitcore/taproot/nft.d.ts +164 -0
- package/dist/lib/bitcore/taproot/nft.d.ts.map +1 -0
- package/dist/lib/bitcore/taproot/nft.js +407 -0
- package/dist/lib/bitcore/taproot.d.ts +65 -0
- package/dist/lib/bitcore/taproot.d.ts.map +1 -0
- package/dist/lib/bitcore/taproot.js +288 -0
- package/dist/lib/bitcore/transaction/index.d.ts +12 -0
- package/dist/lib/bitcore/transaction/index.d.ts.map +1 -0
- package/dist/lib/bitcore/transaction/index.js +6 -0
- package/dist/lib/bitcore/transaction/input.d.ts +202 -0
- package/dist/lib/bitcore/transaction/input.d.ts.map +1 -0
- package/dist/lib/bitcore/transaction/input.js +911 -0
- package/dist/lib/bitcore/transaction/output.d.ts +48 -0
- package/dist/lib/bitcore/transaction/output.d.ts.map +1 -0
- package/dist/lib/bitcore/transaction/output.js +231 -0
- package/dist/lib/bitcore/transaction/sighash.d.ts +32 -0
- package/dist/lib/bitcore/transaction/sighash.d.ts.map +1 -0
- package/dist/lib/bitcore/transaction/sighash.js +335 -0
- package/dist/lib/bitcore/transaction/signature.d.ts +36 -0
- package/dist/lib/bitcore/transaction/signature.d.ts.map +1 -0
- package/dist/lib/bitcore/transaction/signature.js +130 -0
- package/dist/lib/bitcore/transaction/transaction.d.ts +164 -0
- package/dist/lib/bitcore/transaction/transaction.d.ts.map +1 -0
- package/dist/lib/bitcore/transaction/transaction.js +1016 -0
- package/dist/lib/bitcore/transaction/unspentoutput.d.ts +58 -0
- package/dist/lib/bitcore/transaction/unspentoutput.d.ts.map +1 -0
- package/dist/lib/bitcore/transaction/unspentoutput.js +167 -0
- package/dist/lib/bitcore/unit.d.ts +44 -0
- package/dist/lib/bitcore/unit.d.ts.map +1 -0
- package/dist/lib/bitcore/unit.js +106 -0
- package/dist/lib/bitcore/uri.d.ts +29 -0
- package/dist/lib/bitcore/uri.d.ts.map +1 -0
- package/dist/lib/bitcore/uri.js +163 -0
- package/dist/lib/bitcore/util/base32.d.ts +5 -0
- package/dist/lib/bitcore/util/base32.d.ts.map +1 -0
- package/dist/lib/bitcore/util/base32.js +58 -0
- package/dist/lib/bitcore/util/buffer.d.ts +18 -0
- package/dist/lib/bitcore/util/buffer.d.ts.map +1 -0
- package/dist/lib/bitcore/util/buffer.js +76 -0
- package/dist/lib/bitcore/util/convertBits.d.ts +2 -0
- package/dist/lib/bitcore/util/convertBits.d.ts.map +1 -0
- package/dist/lib/bitcore/util/convertBits.js +26 -0
- package/dist/lib/bitcore/util/js.d.ts +9 -0
- package/dist/lib/bitcore/util/js.d.ts.map +1 -0
- package/dist/lib/bitcore/util/js.js +45 -0
- package/dist/lib/bitcore/util/preconditions.d.ts +6 -0
- package/dist/lib/bitcore/util/preconditions.d.ts.map +1 -0
- package/dist/lib/bitcore/util/preconditions.js +31 -0
- package/dist/lib/bitcore/util.d.ts +14 -0
- package/dist/lib/bitcore/util.d.ts.map +1 -0
- package/dist/lib/bitcore/util.js +13 -0
- package/dist/lib/bitcore/xaddress.d.ts +45 -0
- package/dist/lib/bitcore/xaddress.d.ts.map +1 -0
- package/dist/lib/bitcore/xaddress.js +279 -0
- package/dist/lib/rank/api.d.ts +75 -0
- package/dist/lib/rank/api.d.ts.map +1 -0
- package/dist/lib/rank/api.js +4 -0
- package/dist/lib/rank/index.d.ts +127 -0
- package/dist/lib/rank/index.d.ts.map +1 -0
- package/dist/lib/rank/index.js +421 -0
- package/dist/lib/rank/opcode.d.ts +23 -0
- package/dist/lib/rank/opcode.d.ts.map +1 -0
- package/dist/lib/rank/opcode.js +23 -0
- package/dist/lib/rank/script.d.ts +2 -0
- package/dist/lib/rank/script.d.ts.map +1 -0
- package/dist/lib/rank/script.js +7 -0
- package/dist/lib/rank/transaction.d.ts +3 -0
- package/dist/lib/rank/transaction.d.ts.map +1 -0
- package/dist/lib/rank/transaction.js +12 -0
- package/dist/lib/rpc.d.ts +136 -0
- package/dist/lib/rpc.d.ts.map +1 -0
- package/dist/lib/rpc.js +62 -0
- package/dist/utils/constants.d.ts +18 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +20 -0
- package/dist/utils/env.d.ts +3 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +8 -0
- package/dist/utils/string.d.ts +11 -0
- package/dist/utils/string.d.ts.map +1 -0
- package/dist/utils/string.js +47 -0
- package/dist/utils/types.d.ts +2 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/types.js +1 -0
- package/dist/utils/wallet.d.ts +12 -0
- package/dist/utils/wallet.d.ts.map +1 -0
- package/dist/utils/wallet.js +28 -0
- 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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"}
|