tbc-tx-parser 0.1.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/README.md +214 -0
- package/dist/adapters/partial-sha256.d.ts +2 -0
- package/dist/adapters/partial-sha256.d.ts.map +1 -0
- package/dist/adapters/partial-sha256.js +5 -0
- package/dist/adapters/partial-sha256.js.map +1 -0
- package/dist/adapters/tbc-lib.d.ts +4 -0
- package/dist/adapters/tbc-lib.d.ts.map +1 -0
- package/dist/adapters/tbc-lib.js +4 -0
- package/dist/adapters/tbc-lib.js.map +1 -0
- package/dist/constants/chain.d.ts +4 -0
- package/dist/constants/chain.d.ts.map +1 -0
- package/dist/constants/chain.js +7 -0
- package/dist/constants/chain.js.map +1 -0
- package/dist/core/chain.d.ts +10 -0
- package/dist/core/chain.d.ts.map +1 -0
- package/dist/core/chain.js +41 -0
- package/dist/core/chain.js.map +1 -0
- package/dist/core/input-utxos.d.ts +3 -0
- package/dist/core/input-utxos.d.ts.map +1 -0
- package/dist/core/input-utxos.js +69 -0
- package/dist/core/input-utxos.js.map +1 -0
- package/dist/core/public-chain-compression.d.ts +4 -0
- package/dist/core/public-chain-compression.d.ts.map +1 -0
- package/dist/core/public-chain-compression.js +87 -0
- package/dist/core/public-chain-compression.js.map +1 -0
- package/dist/core/public-script.d.ts +4 -0
- package/dist/core/public-script.d.ts.map +1 -0
- package/dist/core/public-script.js +94 -0
- package/dist/core/public-script.js.map +1 -0
- package/dist/decode-tx-raw.d.ts +3 -0
- package/dist/decode-tx-raw.d.ts.map +1 -0
- package/dist/decode-tx-raw.js +350 -0
- package/dist/decode-tx-raw.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/protocols/ft/index.d.ts +7 -0
- package/dist/protocols/ft/index.d.ts.map +1 -0
- package/dist/protocols/ft/index.js +393 -0
- package/dist/protocols/ft/index.js.map +1 -0
- package/dist/protocols/index.d.ts +5 -0
- package/dist/protocols/index.d.ts.map +1 -0
- package/dist/protocols/index.js +61 -0
- package/dist/protocols/index.js.map +1 -0
- package/dist/protocols/nft/index.d.ts +8 -0
- package/dist/protocols/nft/index.d.ts.map +1 -0
- package/dist/protocols/nft/index.js +335 -0
- package/dist/protocols/nft/index.js.map +1 -0
- package/dist/protocols/nft/media.js.map +1 -0
- package/dist/protocols/order-book/actions.d.ts +7 -0
- package/dist/protocols/order-book/actions.d.ts.map +1 -0
- package/dist/protocols/order-book/actions.js +102 -0
- package/dist/protocols/order-book/actions.js.map +1 -0
- package/dist/protocols/order-book/facts.d.ts +7 -0
- package/dist/protocols/order-book/facts.d.ts.map +1 -0
- package/dist/protocols/order-book/facts.js +81 -0
- package/dist/protocols/order-book/facts.js.map +1 -0
- package/dist/protocols/order-book/identity.d.ts +3 -0
- package/dist/protocols/order-book/identity.d.ts.map +1 -0
- package/dist/protocols/order-book/identity.js +46 -0
- package/dist/protocols/order-book/identity.js.map +1 -0
- package/dist/protocols/order-book/index.d.ts +12 -0
- package/dist/protocols/order-book/index.d.ts.map +1 -0
- package/dist/protocols/order-book/index.js +34 -0
- package/dist/protocols/order-book/index.js.map +1 -0
- package/dist/protocols/order-book/settlement.d.ts +10 -0
- package/dist/protocols/order-book/settlement.d.ts.map +1 -0
- package/dist/protocols/order-book/settlement.js +318 -0
- package/dist/protocols/order-book/settlement.js.map +1 -0
- package/dist/protocols/order-book/types.d.ts +101 -0
- package/dist/protocols/order-book/types.d.ts.map +1 -0
- package/dist/protocols/order-book/types.js +2 -0
- package/dist/protocols/order-book/types.js.map +1 -0
- package/dist/protocols/piggy-bank/index.d.ts +7 -0
- package/dist/protocols/piggy-bank/index.d.ts.map +1 -0
- package/dist/protocols/piggy-bank/index.js +91 -0
- package/dist/protocols/piggy-bank/index.js.map +1 -0
- package/dist/protocols/pool-nft/actions.d.ts +15 -0
- package/dist/protocols/pool-nft/actions.d.ts.map +1 -0
- package/dist/protocols/pool-nft/actions.js +90 -0
- package/dist/protocols/pool-nft/actions.js.map +1 -0
- package/dist/protocols/pool-nft/amounts.d.ts +10 -0
- package/dist/protocols/pool-nft/amounts.d.ts.map +1 -0
- package/dist/protocols/pool-nft/amounts.js +45 -0
- package/dist/protocols/pool-nft/amounts.js.map +1 -0
- package/dist/protocols/pool-nft/constants.d.ts +15 -0
- package/dist/protocols/pool-nft/constants.d.ts.map +1 -0
- package/dist/protocols/pool-nft/constants.js +27 -0
- package/dist/protocols/pool-nft/constants.js.map +1 -0
- package/dist/protocols/pool-nft/facts.d.ts +11 -0
- package/dist/protocols/pool-nft/facts.d.ts.map +1 -0
- package/dist/protocols/pool-nft/facts.js +113 -0
- package/dist/protocols/pool-nft/facts.js.map +1 -0
- package/dist/protocols/pool-nft/fees.d.ts +14 -0
- package/dist/protocols/pool-nft/fees.d.ts.map +1 -0
- package/dist/protocols/pool-nft/fees.js +161 -0
- package/dist/protocols/pool-nft/fees.js.map +1 -0
- package/dist/protocols/pool-nft/index.d.ts +4 -0
- package/dist/protocols/pool-nft/index.d.ts.map +1 -0
- package/dist/protocols/pool-nft/index.js +19 -0
- package/dist/protocols/pool-nft/index.js.map +1 -0
- package/dist/protocols/pool-nft/movements.d.ts +5 -0
- package/dist/protocols/pool-nft/movements.d.ts.map +1 -0
- package/dist/protocols/pool-nft/movements.js +804 -0
- package/dist/protocols/pool-nft/movements.js.map +1 -0
- package/dist/protocols/pool-nft/selectors.d.ts +40 -0
- package/dist/protocols/pool-nft/selectors.d.ts.map +1 -0
- package/dist/protocols/pool-nft/selectors.js +173 -0
- package/dist/protocols/pool-nft/selectors.js.map +1 -0
- package/dist/protocols/pool-nft/types.d.ts +34 -0
- package/dist/protocols/pool-nft/types.d.ts.map +1 -0
- package/dist/protocols/pool-nft/types.js +2 -0
- package/dist/protocols/pool-nft/types.js.map +1 -0
- package/dist/protocols/tbc/index.d.ts +3 -0
- package/dist/protocols/tbc/index.d.ts.map +1 -0
- package/dist/protocols/tbc/index.js +21 -0
- package/dist/protocols/tbc/index.js.map +1 -0
- package/dist/protocols/types.d.ts +15 -0
- package/dist/protocols/types.d.ts.map +1 -0
- package/dist/protocols/types.js +2 -0
- package/dist/protocols/types.js.map +1 -0
- package/dist/result/index.d.ts +7 -0
- package/dist/result/index.d.ts.map +1 -0
- package/dist/result/index.js +869 -0
- package/dist/result/index.js.map +1 -0
- package/dist/result/semantic.d.ts +6 -0
- package/dist/result/semantic.d.ts.map +1 -0
- package/dist/result/semantic.js +950 -0
- package/dist/result/semantic.js.map +1 -0
- package/dist/script-parser/contracts.d.ts +7 -0
- package/dist/script-parser/contracts.d.ts.map +1 -0
- package/dist/script-parser/contracts.js +104 -0
- package/dist/script-parser/contracts.js.map +1 -0
- package/dist/script-parser/op-return.d.ts +8 -0
- package/dist/script-parser/op-return.d.ts.map +1 -0
- package/dist/script-parser/op-return.js +315 -0
- package/dist/script-parser/op-return.js.map +1 -0
- package/dist/script-parser/origin.d.ts +6 -0
- package/dist/script-parser/origin.d.ts.map +1 -0
- package/dist/script-parser/origin.js +68 -0
- package/dist/script-parser/origin.js.map +1 -0
- package/dist/script-parser.d.ts +3 -0
- package/dist/script-parser.d.ts.map +1 -0
- package/dist/script-parser.js +183 -0
- package/dist/script-parser.js.map +1 -0
- package/dist/types/protocol.d.ts +175 -0
- package/dist/types/protocol.d.ts.map +1 -0
- package/dist/types/protocol.js +2 -0
- package/dist/types/protocol.js.map +1 -0
- package/dist/types/result.d.ts +167 -0
- package/dist/types/result.d.ts.map +1 -0
- package/dist/types/result.js +2 -0
- package/dist/types/result.js.map +1 -0
- package/dist/types/script.d.ts +180 -0
- package/dist/types/script.d.ts.map +1 -0
- package/dist/types/script.js +9 -0
- package/dist/types/script.js.map +1 -0
- package/dist/types/semantic.d.ts +94 -0
- package/dist/types/semantic.d.ts.map +1 -0
- package/dist/types/semantic.js +2 -0
- package/dist/types/semantic.js.map +1 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/asm-converter.d.ts +7 -0
- package/dist/utils/asm-converter.d.ts.map +1 -0
- package/dist/utils/asm-converter.js +105 -0
- package/dist/utils/asm-converter.js.map +1 -0
- package/dist/utils/binary.d.ts +3 -0
- package/dist/utils/binary.d.ts.map +1 -0
- package/dist/utils/binary.js +17 -0
- package/dist/utils/binary.js.map +1 -0
- package/dist/utils/multi-sig.d.ts +9 -0
- package/dist/utils/multi-sig.d.ts.map +1 -0
- package/dist/utils/multi-sig.js +125 -0
- package/dist/utils/multi-sig.js.map +1 -0
- package/dist/utils/token-amount.d.ts +3 -0
- package/dist/utils/token-amount.d.ts.map +1 -0
- package/dist/utils/token-amount.js +37 -0
- package/dist/utils/token-amount.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import type { OrderBookData, PiggyBankData, PoolNftTapeData } from './protocol.js';
|
|
2
|
+
export declare const ScriptType: {
|
|
3
|
+
readonly P2PKH: "P2PKH";
|
|
4
|
+
readonly P2PK: "P2PK";
|
|
5
|
+
readonly P2SH: "P2SH";
|
|
6
|
+
readonly MULTISIG: "MULTISIG";
|
|
7
|
+
readonly OP_RETURN: "OP_RETURN";
|
|
8
|
+
readonly UNKNOWN: "UNKNOWN";
|
|
9
|
+
};
|
|
10
|
+
export type ScriptType = (typeof ScriptType)[keyof typeof ScriptType];
|
|
11
|
+
export interface NftTapeData {
|
|
12
|
+
nftName?: string;
|
|
13
|
+
symbol?: string;
|
|
14
|
+
file?: string;
|
|
15
|
+
description?: string;
|
|
16
|
+
attributes?: string;
|
|
17
|
+
collectionId?: string;
|
|
18
|
+
collectionIndex?: number;
|
|
19
|
+
[key: string]: unknown;
|
|
20
|
+
}
|
|
21
|
+
export interface CollectionTapeData {
|
|
22
|
+
collectionName: string;
|
|
23
|
+
description?: string;
|
|
24
|
+
supply: number;
|
|
25
|
+
[key: string]: unknown;
|
|
26
|
+
}
|
|
27
|
+
export interface ScriptOpReturnData {
|
|
28
|
+
type?: string;
|
|
29
|
+
publicKeyHash?: string;
|
|
30
|
+
address?: string;
|
|
31
|
+
hash?: string;
|
|
32
|
+
flag?: 'address' | 'hash' | 'unknown';
|
|
33
|
+
codeType?: string;
|
|
34
|
+
ftTape?: {
|
|
35
|
+
name: string;
|
|
36
|
+
symbol: string;
|
|
37
|
+
amount: number;
|
|
38
|
+
displayAmount: string;
|
|
39
|
+
rawAmount: string;
|
|
40
|
+
amountSlots: string[];
|
|
41
|
+
decimal: number;
|
|
42
|
+
lockTime?: number;
|
|
43
|
+
isStableCoin?: boolean;
|
|
44
|
+
};
|
|
45
|
+
nftTape?: NftTapeData;
|
|
46
|
+
collectionTape?: CollectionTapeData;
|
|
47
|
+
nftHoldType?: 'mint' | 'current';
|
|
48
|
+
nftHoldLabel?: string;
|
|
49
|
+
poolNft?: PoolNftTapeData;
|
|
50
|
+
orderBook?: OrderBookData;
|
|
51
|
+
piggyBank?: PiggyBankData;
|
|
52
|
+
hexParts?: string[];
|
|
53
|
+
asciiParts?: string[];
|
|
54
|
+
}
|
|
55
|
+
export interface ScriptDetail {
|
|
56
|
+
asm: string;
|
|
57
|
+
hex?: string;
|
|
58
|
+
type?: ScriptType;
|
|
59
|
+
address?: string;
|
|
60
|
+
data?: ScriptOpReturnData;
|
|
61
|
+
originUtxo?: {
|
|
62
|
+
txid: string;
|
|
63
|
+
vout: number;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export interface CompactPublicAsm {
|
|
67
|
+
byteLength: number;
|
|
68
|
+
prefix: string;
|
|
69
|
+
suffix: string;
|
|
70
|
+
}
|
|
71
|
+
export interface PublicScriptHex {
|
|
72
|
+
value?: string;
|
|
73
|
+
byteLength: number;
|
|
74
|
+
scriptHash: string;
|
|
75
|
+
}
|
|
76
|
+
export type CompactPublicHex = Omit<PublicScriptHex, 'value'>;
|
|
77
|
+
export type PublicNftTapeData = Omit<NonNullable<ScriptOpReturnData['nftTape']>, 'file' | 'media' | 'image'>;
|
|
78
|
+
export type PublicCollectionTapeData = Pick<CollectionTapeData, 'collectionName' | 'description' | 'supply'>;
|
|
79
|
+
export type PublicScriptOpReturnData = Omit<ScriptOpReturnData, 'nftTape' | 'collectionTape' | 'nftHoldLabel' | 'nftHoldType'> & {
|
|
80
|
+
nftTape?: PublicNftTapeData;
|
|
81
|
+
collectionTape?: PublicCollectionTapeData;
|
|
82
|
+
};
|
|
83
|
+
export interface PublicScriptDetail extends Omit<ScriptDetail, 'asm' | 'hex' | 'data'> {
|
|
84
|
+
asm: string | CompactPublicAsm;
|
|
85
|
+
hex?: PublicScriptHex;
|
|
86
|
+
data?: PublicScriptOpReturnData;
|
|
87
|
+
}
|
|
88
|
+
export interface ParsedAssociatedInputUtxo {
|
|
89
|
+
txid: string;
|
|
90
|
+
outputIndex: number;
|
|
91
|
+
script: ScriptDetail;
|
|
92
|
+
address?: string;
|
|
93
|
+
satoshis: number;
|
|
94
|
+
}
|
|
95
|
+
export interface InputUTXODetail {
|
|
96
|
+
script: ScriptDetail;
|
|
97
|
+
address?: string;
|
|
98
|
+
hash?: string;
|
|
99
|
+
satoshis?: number;
|
|
100
|
+
error?: string;
|
|
101
|
+
contractId?: string;
|
|
102
|
+
associatedTape?: ParsedAssociatedInputUtxo;
|
|
103
|
+
associatedOrigin?: ParsedAssociatedInputUtxo;
|
|
104
|
+
}
|
|
105
|
+
export interface PublicParsedAssociatedInputUtxo extends Omit<ParsedAssociatedInputUtxo, 'script'> {
|
|
106
|
+
script: PublicScriptDetail;
|
|
107
|
+
}
|
|
108
|
+
export interface PublicInputUTXODetail extends Omit<InputUTXODetail, 'script' | 'associatedTape' | 'associatedOrigin'> {
|
|
109
|
+
script: PublicScriptDetail;
|
|
110
|
+
associatedTape?: PublicParsedAssociatedInputUtxo;
|
|
111
|
+
associatedOrigin?: PublicParsedAssociatedInputUtxo;
|
|
112
|
+
}
|
|
113
|
+
export interface AssociatedDecodeInputUtxo {
|
|
114
|
+
txid: string;
|
|
115
|
+
outputIndex: number;
|
|
116
|
+
satoshis: number;
|
|
117
|
+
lockingScript: string;
|
|
118
|
+
}
|
|
119
|
+
export interface DecodeInputUtxo {
|
|
120
|
+
inputIndex?: number;
|
|
121
|
+
txid?: string;
|
|
122
|
+
outputIndex?: number;
|
|
123
|
+
satoshis: number;
|
|
124
|
+
lockingScript: string;
|
|
125
|
+
contractId?: string;
|
|
126
|
+
associatedTape?: AssociatedDecodeInputUtxo;
|
|
127
|
+
associatedOrigin?: AssociatedDecodeInputUtxo;
|
|
128
|
+
}
|
|
129
|
+
export interface DecodedInput {
|
|
130
|
+
index: number;
|
|
131
|
+
prevTxid: string;
|
|
132
|
+
vout: number;
|
|
133
|
+
sequence: number;
|
|
134
|
+
unlockingScript: ScriptDetail;
|
|
135
|
+
prevout?: InputUTXODetail;
|
|
136
|
+
}
|
|
137
|
+
export interface CompressionRange {
|
|
138
|
+
from: number;
|
|
139
|
+
to: number;
|
|
140
|
+
}
|
|
141
|
+
export interface TbcInputCompression {
|
|
142
|
+
type: 'tbcInputs';
|
|
143
|
+
count: number;
|
|
144
|
+
indexRange: CompressionRange;
|
|
145
|
+
prevTxid: string;
|
|
146
|
+
voutRange: CompressionRange;
|
|
147
|
+
satoshisPerInput: number;
|
|
148
|
+
totalSatoshis: number;
|
|
149
|
+
}
|
|
150
|
+
export type PublicDecodedInput = Omit<DecodedInput, 'unlockingScript' | 'prevout'> & {
|
|
151
|
+
prevout?: PublicInputUTXODetail;
|
|
152
|
+
compression?: TbcInputCompression;
|
|
153
|
+
};
|
|
154
|
+
export type ScriptKind = 'p2pkh' | 'multisig' | 'op_return' | 'contract' | 'unrecognized';
|
|
155
|
+
export interface NftMintSlotsCompression {
|
|
156
|
+
type: 'nftMintSlots';
|
|
157
|
+
count: number;
|
|
158
|
+
indexRange: CompressionRange;
|
|
159
|
+
satoshisPerOutput: number;
|
|
160
|
+
}
|
|
161
|
+
export interface TbcOutputCompression {
|
|
162
|
+
type: 'tbcOutputs';
|
|
163
|
+
count: number;
|
|
164
|
+
indexRange: CompressionRange;
|
|
165
|
+
satoshisPerOutput: number;
|
|
166
|
+
totalSatoshis: number;
|
|
167
|
+
}
|
|
168
|
+
export type OutputCompression = NftMintSlotsCompression | TbcOutputCompression;
|
|
169
|
+
export interface DecodedOutput {
|
|
170
|
+
index: number;
|
|
171
|
+
satoshis: number;
|
|
172
|
+
script: ScriptDetail;
|
|
173
|
+
address?: string;
|
|
174
|
+
scriptKind: ScriptKind;
|
|
175
|
+
compression?: OutputCompression;
|
|
176
|
+
}
|
|
177
|
+
export type PublicDecodedOutput = Omit<DecodedOutput, 'scriptKind' | 'script'> & {
|
|
178
|
+
script: PublicScriptDetail;
|
|
179
|
+
};
|
|
180
|
+
//# sourceMappingURL=script.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script.d.ts","sourceRoot":"","sources":["../../src/types/script.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script.js","sourceRoot":"","sources":["../../src/types/script.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;CACV,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
export type SemanticConfidence = 'exact' | 'heuristic' | 'partial';
|
|
2
|
+
export type SemanticPartyRole = 'creator' | 'sender' | 'receiver' | 'buyer' | 'seller' | 'miner' | 'feeCollector' | 'self' | 'orderHolder' | 'pool' | 'burn' | 'unknown';
|
|
3
|
+
export interface SemanticParty {
|
|
4
|
+
role: SemanticPartyRole;
|
|
5
|
+
address?: string;
|
|
6
|
+
hash?: string;
|
|
7
|
+
inputIndex?: number;
|
|
8
|
+
outputIndex?: number;
|
|
9
|
+
label?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface PoolNftAssetMetadata {
|
|
12
|
+
version: 1 | 2;
|
|
13
|
+
serviceFeeRate?: number;
|
|
14
|
+
lpPlan?: number;
|
|
15
|
+
withLock?: boolean;
|
|
16
|
+
withLockTime?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export type SemanticAsset = {
|
|
19
|
+
type: 'native';
|
|
20
|
+
symbol: 'TBC';
|
|
21
|
+
} | {
|
|
22
|
+
type: 'ft' | 'stablecoin';
|
|
23
|
+
symbol: string;
|
|
24
|
+
name?: string;
|
|
25
|
+
contractId?: string;
|
|
26
|
+
decimal?: number;
|
|
27
|
+
} | {
|
|
28
|
+
type: 'nft';
|
|
29
|
+
subtype?: never;
|
|
30
|
+
symbol?: string;
|
|
31
|
+
name?: string;
|
|
32
|
+
collectionId?: string;
|
|
33
|
+
contractId?: string;
|
|
34
|
+
poolNft?: never;
|
|
35
|
+
} | {
|
|
36
|
+
type: 'nft';
|
|
37
|
+
subtype: 'poolNft';
|
|
38
|
+
contractId: string;
|
|
39
|
+
poolNft: PoolNftAssetMetadata;
|
|
40
|
+
symbol?: never;
|
|
41
|
+
name?: never;
|
|
42
|
+
collectionId?: never;
|
|
43
|
+
} | {
|
|
44
|
+
type: 'nftCollection';
|
|
45
|
+
symbol?: never;
|
|
46
|
+
name?: string;
|
|
47
|
+
collectionId: string;
|
|
48
|
+
contractId: string;
|
|
49
|
+
};
|
|
50
|
+
export interface SemanticAmount {
|
|
51
|
+
satoshis?: number;
|
|
52
|
+
rawAmount?: string;
|
|
53
|
+
displayAmount?: string;
|
|
54
|
+
decimal?: number;
|
|
55
|
+
}
|
|
56
|
+
export type SemanticEffectKind = 'transfer' | 'self' | 'fee' | 'mint' | 'burn' | 'state' | 'orderLock' | 'orderRelease';
|
|
57
|
+
export interface SemanticEffect {
|
|
58
|
+
kind: SemanticEffectKind;
|
|
59
|
+
asset: SemanticAsset;
|
|
60
|
+
amount: SemanticAmount;
|
|
61
|
+
from?: SemanticParty;
|
|
62
|
+
to?: SemanticParty;
|
|
63
|
+
inputIndex?: number;
|
|
64
|
+
outputIndex?: number;
|
|
65
|
+
tapeOutputIndex?: number;
|
|
66
|
+
movementIndex?: number;
|
|
67
|
+
source: 'decoded' | 'derived';
|
|
68
|
+
}
|
|
69
|
+
export type SemanticRelationKind = 'nativeCoinbase' | 'nativeTransfer' | 'ftTransfer' | 'stablecoinTransfer' | 'nftCollectionMint' | 'nftMint' | 'nftTransfer' | 'nftBurn' | 'orderBookOrder' | 'orderBookCancel' | 'orderBookMatch' | 'orderBookUpdate' | 'poolNftAction';
|
|
70
|
+
export interface SemanticRelation {
|
|
71
|
+
kind: SemanticRelationKind;
|
|
72
|
+
confidence: SemanticConfidence;
|
|
73
|
+
inputIndexes?: number[];
|
|
74
|
+
outputIndexes?: number[];
|
|
75
|
+
movementIndexes?: number[];
|
|
76
|
+
orderIndexes?: number[];
|
|
77
|
+
buyOrderIndex?: number;
|
|
78
|
+
sellOrderIndex?: number;
|
|
79
|
+
remainingOrderIndexes?: number[];
|
|
80
|
+
oldOrderIndex?: number;
|
|
81
|
+
newOrderIndex?: number;
|
|
82
|
+
changedFields?: string[];
|
|
83
|
+
priceRaw?: string;
|
|
84
|
+
matchedSatoshis?: number;
|
|
85
|
+
}
|
|
86
|
+
export interface TransactionSemantic {
|
|
87
|
+
type: string;
|
|
88
|
+
confidence: SemanticConfidence;
|
|
89
|
+
actors: SemanticParty[];
|
|
90
|
+
effects: SemanticEffect[];
|
|
91
|
+
relations: SemanticRelation[];
|
|
92
|
+
notes?: string[];
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=semantic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../src/types/semantic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../src/types/semantic.ts"],"names":[],"mappings":""}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { SATOSHIS_PER_TBC, TBC_DECIMALS, TBC_SYMBOL } from './constants/chain.js';
|
|
2
|
+
export * from './types/script.js';
|
|
3
|
+
export type { AssetFlow, AssetFlowContext, AssetFlowDirection, AssetFlowEndpoint, AssetFlowPurpose, ChainLayer, DecodeTxRawOptions, DecodeTxRawResult, ProtocolDetails, ProtocolLayer, TransactionAmount, TransactionAsset, UnsupportedProtocol, } from './types/result.js';
|
|
4
|
+
export type { FungibleTokenMovement, NftMovement, OrderBookData, OrderBookOrder, PiggyBankData, PiggyBankMovement, PoolNftMovement, PoolNftTapeData, } from './types/protocol.js';
|
|
5
|
+
export type { SemanticAmount, SemanticAsset, SemanticConfidence, SemanticEffect, SemanticEffectKind, SemanticParty, SemanticPartyRole, SemanticRelation, SemanticRelationKind, TransactionSemantic, } from './types/semantic.js';
|
|
6
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClF,cAAc,mBAAmB,CAAC;AAElC,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EACV,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClF,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function convertNodeAsmToSdkAsm(nodeAsm: string): string;
|
|
2
|
+
export declare function convertSdkAsmToNodeAsm(sdkAsm: string): string;
|
|
3
|
+
export declare function convertHexToSdkAsm(hex: string): string;
|
|
4
|
+
export declare function convertSdkAsmToHex(sdkAsm: string): string;
|
|
5
|
+
export declare function convertHexToNodeAsm(hex: string): string;
|
|
6
|
+
export declare function convertNodeAsmToHex(nodeAsm: string): string;
|
|
7
|
+
//# sourceMappingURL=asm-converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asm-converter.d.ts","sourceRoot":"","sources":["../../src/utils/asm-converter.ts"],"names":[],"mappings":"AAGA,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAoC9D;AAGD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAkC7D;AAGD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgBtD;AAGD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAWzD;AAGD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG3D"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { tbc } from '../adapters/tbc-lib.js';
|
|
2
|
+
// Convert numeric opcodes from node ASM into the OP_N form accepted by the TBC SDK.
|
|
3
|
+
export function convertNodeAsmToSdkAsm(nodeAsm) {
|
|
4
|
+
if (!nodeAsm || typeof nodeAsm !== 'string') {
|
|
5
|
+
return nodeAsm;
|
|
6
|
+
}
|
|
7
|
+
return nodeAsm
|
|
8
|
+
.split(/\s+/)
|
|
9
|
+
.map((token) => {
|
|
10
|
+
if (!token.trim()) {
|
|
11
|
+
return token;
|
|
12
|
+
}
|
|
13
|
+
if (/^[0-9a-fA-F]+$/.test(token) && token.length > 6) {
|
|
14
|
+
return token;
|
|
15
|
+
}
|
|
16
|
+
if (/^\d+$/.test(token)) {
|
|
17
|
+
const num = parseInt(token, 10);
|
|
18
|
+
if (num >= 0 && num <= 16) {
|
|
19
|
+
return `OP_${num}`;
|
|
20
|
+
}
|
|
21
|
+
if (num > 16 && num <= 16777215) {
|
|
22
|
+
return num.toString(16);
|
|
23
|
+
}
|
|
24
|
+
if (num > 16777215) {
|
|
25
|
+
return num.toString(16);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (/^[0-9a-fA-F]+$/.test(token) && token.length <= 6 && /[a-fA-F]/.test(token)) {
|
|
29
|
+
return token;
|
|
30
|
+
}
|
|
31
|
+
return token;
|
|
32
|
+
})
|
|
33
|
+
.join(' ');
|
|
34
|
+
}
|
|
35
|
+
// Convert SDK OP_N output back to the numeric opcode form commonly returned by nodes.
|
|
36
|
+
export function convertSdkAsmToNodeAsm(sdkAsm) {
|
|
37
|
+
if (!sdkAsm || typeof sdkAsm !== 'string') {
|
|
38
|
+
return sdkAsm;
|
|
39
|
+
}
|
|
40
|
+
return sdkAsm
|
|
41
|
+
.split(/\s+/)
|
|
42
|
+
.map((token) => {
|
|
43
|
+
if (!token.trim()) {
|
|
44
|
+
return token;
|
|
45
|
+
}
|
|
46
|
+
const opMatch = token.match(/^OP_(\d+)$/);
|
|
47
|
+
if (opMatch && opMatch[1]) {
|
|
48
|
+
const num = parseInt(opMatch[1], 10);
|
|
49
|
+
if (num >= 0 && num <= 16) {
|
|
50
|
+
return num.toString();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (/^[0-9a-fA-F]+$/.test(token)) {
|
|
54
|
+
if (token.length > 6) {
|
|
55
|
+
return token;
|
|
56
|
+
}
|
|
57
|
+
const num = parseInt(token, 16);
|
|
58
|
+
if (num > 16 && num <= 16777215) {
|
|
59
|
+
return num.toString();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return token;
|
|
63
|
+
})
|
|
64
|
+
.join(' ');
|
|
65
|
+
}
|
|
66
|
+
// Use tbc.Script for all hex/SDK-ASM conversion instead of maintaining custom opcode codecs.
|
|
67
|
+
export function convertHexToSdkAsm(hex) {
|
|
68
|
+
if (!hex || typeof hex !== 'string') {
|
|
69
|
+
throw new Error('Invalid HEX input');
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
const sanitizedHex = hex.replace(/\s+/g, '').toLowerCase();
|
|
73
|
+
if (!/^[0-9a-f]+$/.test(sanitizedHex)) {
|
|
74
|
+
throw new Error('Invalid HEX format');
|
|
75
|
+
}
|
|
76
|
+
const script = tbc.Script.fromString(sanitizedHex);
|
|
77
|
+
return script.toASM();
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
throw new Error(`Failed to convert HEX to SDK ASM: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Convert SDK ASM back to hex for script editing, debugging, and fixture reproduction.
|
|
84
|
+
export function convertSdkAsmToHex(sdkAsm) {
|
|
85
|
+
if (!sdkAsm || typeof sdkAsm !== 'string') {
|
|
86
|
+
throw new Error('Invalid SDK ASM input');
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
const script = tbc.Script.fromASM(sdkAsm.trim());
|
|
90
|
+
return script.toHex();
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
throw new Error(`Failed to convert SDK ASM to HEX: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Provide a convenient public conversion entry point using node-style ASM.
|
|
97
|
+
export function convertHexToNodeAsm(hex) {
|
|
98
|
+
const sdkAsm = convertHexToSdkAsm(hex);
|
|
99
|
+
return convertSdkAsmToNodeAsm(sdkAsm);
|
|
100
|
+
}
|
|
101
|
+
export function convertNodeAsmToHex(nodeAsm) {
|
|
102
|
+
const sdkAsm = convertNodeAsmToSdkAsm(nodeAsm);
|
|
103
|
+
return convertSdkAsmToHex(sdkAsm);
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=asm-converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asm-converter.js","sourceRoot":"","sources":["../../src/utils/asm-converter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../../src/utils/binary.ts"],"names":[],"mappings":"AACA,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMzD;AAGD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMvF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Binary readers for protocol amount and fee-rate fields, which are commonly little-endian uint64 values.
|
|
2
|
+
export function readUInt64LEBigInt(buffer) {
|
|
3
|
+
let result = BigInt(0);
|
|
4
|
+
for (let i = 0; i < buffer.length; i++) {
|
|
5
|
+
result += BigInt(buffer[i] ?? 0) << BigInt(8 * i);
|
|
6
|
+
}
|
|
7
|
+
return result;
|
|
8
|
+
}
|
|
9
|
+
// Read a complete eight-byte uint64 at an offset, returning undefined for truncated data.
|
|
10
|
+
export function readUInt64LEBigIntAt(buffer, offset) {
|
|
11
|
+
const slice = buffer.subarray(offset, offset + 8);
|
|
12
|
+
if (slice.length !== 8) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
return readUInt64LEBigInt(slice);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=binary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary.js","sourceRoot":"","sources":["../../src/utils/binary.ts"],"names":[],"mappings":"AAAA,0GAA0G;AAC1G,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,oBAAoB,CAAC,MAAc,EAAE,MAAc;IACjE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function getMultiSigAddress(pubKeys: string[], signatureCount: number, publicKeyCount: number): string;
|
|
2
|
+
export declare function getSignatureAndPublicKeyCount(address: string): {
|
|
3
|
+
signatureCount: number;
|
|
4
|
+
publicKeyCount: number;
|
|
5
|
+
};
|
|
6
|
+
export declare function getMultiSigLockScript(address: string): string;
|
|
7
|
+
export declare function getCombineHash(address: string): string;
|
|
8
|
+
export declare function parseMultiSigAddressFromASM(asm: string): string | null;
|
|
9
|
+
//# sourceMappingURL=multi-sig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-sig.d.ts","sourceRoot":"","sources":["../../src/utils/multi-sig.ts"],"names":[],"mappings":"AAUA,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,MAAM,EAAE,EACjB,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,GACpB,MAAM,CAiBR;AAGD,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG;IAC/D,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACvB,CAYA;AAGD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAoC7D;AAGD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQtD;AAGD,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA8CtE"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { tbc } from '../adapters/tbc-lib.js';
|
|
2
|
+
// TBC MultiSig addresses encode a hash of concatenated public keys with an m/n prefix; they are not standard P2SH.
|
|
3
|
+
function getHash(pubKeys) {
|
|
4
|
+
const pubKeyBuffers = pubKeys.map(pubKey => Buffer.from(pubKey, 'hex'));
|
|
5
|
+
const combined = Buffer.concat(pubKeyBuffers);
|
|
6
|
+
return tbc.crypto.Hash.sha256ripemd160(combined);
|
|
7
|
+
}
|
|
8
|
+
// Build a TBC MultiSig address whose first byte encodes both required signatures and public-key count.
|
|
9
|
+
export function getMultiSigAddress(pubKeys, signatureCount, publicKeyCount) {
|
|
10
|
+
if (signatureCount < 1 || signatureCount > 6) {
|
|
11
|
+
throw new Error('Invalid signatureCount.');
|
|
12
|
+
}
|
|
13
|
+
else if (publicKeyCount < 3 || publicKeyCount > 10) {
|
|
14
|
+
throw new Error('Invalid publicKeyCount.');
|
|
15
|
+
}
|
|
16
|
+
else if (signatureCount > publicKeyCount) {
|
|
17
|
+
throw new Error('SignatureCount must be less than publicKeyCount.');
|
|
18
|
+
}
|
|
19
|
+
const hash = getHash(pubKeys);
|
|
20
|
+
const prefix = (signatureCount << 4) | (publicKeyCount & 0x0f);
|
|
21
|
+
const versionBuffer = Buffer.from([prefix]);
|
|
22
|
+
const addressBuffer = Buffer.concat([versionBuffer, hash]);
|
|
23
|
+
const addressHash = tbc.crypto.Hash.sha256sha256(addressBuffer);
|
|
24
|
+
const checksum = addressHash.subarray(0, 4);
|
|
25
|
+
const addressWithChecksum = Buffer.concat([addressBuffer, checksum]);
|
|
26
|
+
return tbc.encoding.Base58.encode(addressWithChecksum);
|
|
27
|
+
}
|
|
28
|
+
// Decode m/n parameters from the first address byte for locking-script reconstruction and display.
|
|
29
|
+
export function getSignatureAndPublicKeyCount(address) {
|
|
30
|
+
const buf = Buffer.from(tbc.encoding.Base58.decode(address));
|
|
31
|
+
if (buf.length === 0) {
|
|
32
|
+
throw new Error('Invalid address: empty buffer');
|
|
33
|
+
}
|
|
34
|
+
const prefix = buf[0];
|
|
35
|
+
if (prefix === undefined) {
|
|
36
|
+
throw new Error('Invalid address: prefix is undefined');
|
|
37
|
+
}
|
|
38
|
+
const signatureCount = (prefix >> 4) & 0x0f;
|
|
39
|
+
const publicKeyCount = prefix & 0x0f;
|
|
40
|
+
return { signatureCount, publicKeyCount };
|
|
41
|
+
}
|
|
42
|
+
// Rebuild locking-script ASM under TBC MultiSig conventions for combine-hash calculation and debugging.
|
|
43
|
+
export function getMultiSigLockScript(address) {
|
|
44
|
+
const buf = Buffer.from(tbc.encoding.Base58.decode(address));
|
|
45
|
+
if (buf.length < 21) {
|
|
46
|
+
throw new Error('Invalid address: buffer too short');
|
|
47
|
+
}
|
|
48
|
+
const { signatureCount, publicKeyCount } = getSignatureAndPublicKeyCount(address);
|
|
49
|
+
if (signatureCount < 1 || signatureCount > 6) {
|
|
50
|
+
throw new Error('Invalid signatureCount.');
|
|
51
|
+
}
|
|
52
|
+
else if (publicKeyCount < 3 || publicKeyCount > 10) {
|
|
53
|
+
throw new Error('Invalid publicKeyCount.');
|
|
54
|
+
}
|
|
55
|
+
else if (signatureCount > publicKeyCount) {
|
|
56
|
+
throw new Error('SignatureCount must be less than publicKeyCount.');
|
|
57
|
+
}
|
|
58
|
+
const hash = Buffer.from(buf.subarray(1, 21)).toString('hex');
|
|
59
|
+
let lockScriptPrefix = '';
|
|
60
|
+
for (let i = 0; i < publicKeyCount - 1; i++) {
|
|
61
|
+
lockScriptPrefix = lockScriptPrefix + '21 OP_SPLIT ';
|
|
62
|
+
}
|
|
63
|
+
for (let i = 0; i < publicKeyCount; i++) {
|
|
64
|
+
lockScriptPrefix = lockScriptPrefix + `OP_${publicKeyCount - 1} OP_PICK `;
|
|
65
|
+
}
|
|
66
|
+
for (let i = 0; i < publicKeyCount - 1; i++) {
|
|
67
|
+
lockScriptPrefix = lockScriptPrefix + 'OP_CAT ';
|
|
68
|
+
}
|
|
69
|
+
const script_asm = `OP_${signatureCount} OP_SWAP ` +
|
|
70
|
+
lockScriptPrefix +
|
|
71
|
+
`OP_HASH160 ${hash} OP_EQUALVERIFY OP_${publicKeyCount} OP_CHECKMULTISIG`;
|
|
72
|
+
return script_asm;
|
|
73
|
+
}
|
|
74
|
+
// A MultiSig combine hash is the locking-script hash with a trailing 01 protocol marker.
|
|
75
|
+
export function getCombineHash(address) {
|
|
76
|
+
const combine_hash = tbc.crypto.Hash.sha256ripemd160(tbc.crypto.Hash.sha256(tbc.Script.fromASM(getMultiSigLockScript(address)).toBuffer())).toString('hex') + '01';
|
|
77
|
+
return combine_hash;
|
|
78
|
+
}
|
|
79
|
+
// Extract MultiSig m/n and hash160 from script ASM and recover the project's MultiSig address form.
|
|
80
|
+
export function parseMultiSigAddressFromASM(asm) {
|
|
81
|
+
try {
|
|
82
|
+
const parts = asm.split(/\s+/).filter(p => p.length > 0);
|
|
83
|
+
if (!parts.includes('OP_CHECKMULTISIG')) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
const hash160Index = parts.indexOf('OP_HASH160');
|
|
87
|
+
if (hash160Index !== -1 && hash160Index + 1 < parts.length) {
|
|
88
|
+
const hash = parts[hash160Index + 1];
|
|
89
|
+
if (hash && typeof hash === 'string' && /^[0-9a-fA-F]{40}$/.test(hash)) {
|
|
90
|
+
const equalVerifyIndex = parts.indexOf('OP_EQUALVERIFY');
|
|
91
|
+
if (equalVerifyIndex !== -1 && equalVerifyIndex + 1 < parts.length) {
|
|
92
|
+
const opN = parts[equalVerifyIndex + 1];
|
|
93
|
+
if (opN) {
|
|
94
|
+
const nMatch = opN.match(/^OP_(\d+)$/);
|
|
95
|
+
if (nMatch && nMatch[1]) {
|
|
96
|
+
const publicKeyCount = parseInt(nMatch[1], 10);
|
|
97
|
+
const opM = parts[0];
|
|
98
|
+
if (opM) {
|
|
99
|
+
const mMatch = opM.match(/^OP_(\d+)$/);
|
|
100
|
+
if (mMatch && mMatch[1]) {
|
|
101
|
+
const signatureCount = parseInt(mMatch[1], 10);
|
|
102
|
+
if (typeof hash === 'string') {
|
|
103
|
+
const prefix = (signatureCount << 4) | (publicKeyCount & 0x0f);
|
|
104
|
+
const versionBuffer = Buffer.from([prefix]);
|
|
105
|
+
const hashBuffer = Buffer.from(hash, 'hex');
|
|
106
|
+
const addressBuffer = Buffer.concat([versionBuffer, hashBuffer]);
|
|
107
|
+
const addressHash = tbc.crypto.Hash.sha256sha256(addressBuffer);
|
|
108
|
+
const checksum = addressHash.subarray(0, 4);
|
|
109
|
+
const addressWithChecksum = Buffer.concat([addressBuffer, checksum]);
|
|
110
|
+
return tbc.encoding.Base58.encode(addressWithChecksum);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=multi-sig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-sig.js","sourceRoot":"","sources":["../../src/utils/multi-sig.ts"],"names":[],"mappings":"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"}
|