@opcat-labs/scrypt-ts-opcat 2.1.0 → 2.1.1
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/assets/smart-contract/builtin-libs/backtrace.scrypt +13 -13
- package/assets/smart-contract/builtin-libs/byteStringReader.scrypt +5 -5
- package/assets/smart-contract/builtin-libs/byteStringWriter.scrypt +6 -6
- package/assets/smart-contract/builtin-libs/contextUtils.scrypt +16 -16
- package/assets/smart-contract/builtin-libs/genesis.scrypt +8 -8
- package/assets/smart-contract/builtin-libs/p2pk.scrypt +1 -1
- package/assets/smart-contract/builtin-libs/p2pkh.scrypt +1 -1
- package/assets/smart-contract/builtin-libs/stateLib.scrypt +1 -1
- package/assets/smart-contract/builtin-libs/stateUtils.scrypt +1 -1
- package/assets/smart-contract/builtin-libs/stdUtils.scrypt +12 -12
- package/assets/smart-contract/builtin-libs/txHashPreimageUtils.scrypt +7 -7
- package/assets/smart-contract/builtin-libs/txUtils.scrypt +12 -12
- package/assets/smart-contract/types/structs.scrypt +8 -8
- package/dist/cjs/providers/mempoolProvider.cjs +57 -25
- package/dist/cjs/providers/mempoolProvider.js.map +1 -1
- package/dist/cjs/providers/utxoProvider.js.map +1 -1
- package/dist/esm/providers/mempoolProvider.js +57 -25
- package/dist/esm/providers/mempoolProvider.js.map +1 -1
- package/dist/esm/providers/utxoProvider.js.map +1 -1
- package/dist/types/providers/mempoolProvider.d.ts +1 -0
- package/dist/types/providers/mempoolProvider.d.ts.map +1 -1
- package/dist/types/providers/utxoProvider.d.ts +0 -4
- package/dist/types/providers/utxoProvider.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -6,37 +6,37 @@ import "stdUtils.scrypt";
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
struct
|
|
9
|
+
struct _opcat_labs_scrypt_ts_opcat_2_1_1__rs__ChainTxVerifyResponse {
|
|
10
10
|
bytes prevPrevScript;
|
|
11
11
|
bytes prevPrevOutpoint;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
library
|
|
14
|
+
library _opcat_labs_scrypt_ts_opcat_2_1_1__rs__Backtrace {
|
|
15
15
|
static const bytes GENESIS_SCRIPT_HASH = b'8f6157664f8f7cd43e6bba7f3209bb803d4d0fb2fb6e59fdc548989ed3901f15';
|
|
16
|
-
static function checkPrevTxHashPreimage(
|
|
17
|
-
bytes txHash =
|
|
16
|
+
static function checkPrevTxHashPreimage(_opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxHashPreimage txHashPreimage, bytes t_prevouts, int t_inputIndex) : bool {
|
|
17
|
+
bytes txHash = _opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxHashPreimageUtils.getTxHashFromTxHashPreimage(txHashPreimage);
|
|
18
18
|
require(txHash == t_prevouts[t_inputIndex * 36 : t_inputIndex * 36 + 32]);
|
|
19
19
|
return true;
|
|
20
20
|
}
|
|
21
|
-
static function verifyFromOutpoint(
|
|
22
|
-
|
|
21
|
+
static function verifyFromOutpoint(_opcat_labs_scrypt_ts_opcat_2_1_1__rs__BacktraceInfo backtraceInfo, bytes t_genesisOutpoint, bytes t_selfScript, bytes t_prevTxInputList) : bool {
|
|
22
|
+
_opcat_labs_scrypt_ts_opcat_2_1_1__rs__ChainTxVerifyResponse res = _opcat_labs_scrypt_ts_opcat_2_1_1__rs__Backtrace.verifyChainTxs(backtraceInfo, t_prevTxInputList);
|
|
23
23
|
if(res.prevPrevOutpoint == t_genesisOutpoint) {
|
|
24
|
-
require(res.prevPrevScript ==
|
|
24
|
+
require(res.prevPrevScript == _opcat_labs_scrypt_ts_opcat_2_1_1__rs__Backtrace.GENESIS_SCRIPT_HASH);
|
|
25
25
|
}
|
|
26
26
|
require(res.prevPrevOutpoint == t_genesisOutpoint || res.prevPrevScript == t_selfScript);
|
|
27
27
|
return true;
|
|
28
28
|
}
|
|
29
|
-
static function verifyFromScript(
|
|
30
|
-
|
|
29
|
+
static function verifyFromScript(_opcat_labs_scrypt_ts_opcat_2_1_1__rs__BacktraceInfo backtraceInfo, bytes t_genesisScript, bytes t_selfScript, bytes t_prevTxInputList) : bool {
|
|
30
|
+
_opcat_labs_scrypt_ts_opcat_2_1_1__rs__ChainTxVerifyResponse res = _opcat_labs_scrypt_ts_opcat_2_1_1__rs__Backtrace.verifyChainTxs(backtraceInfo, t_prevTxInputList);
|
|
31
31
|
require(res.prevPrevScript == t_genesisScript || res.prevPrevScript == t_selfScript);
|
|
32
32
|
return true;
|
|
33
33
|
}
|
|
34
|
-
static function verifyChainTxs(
|
|
35
|
-
require(t_prevTxInputList[backtraceInfo.prevTxInputIndex * 72 : (backtraceInfo.prevTxInputIndex + 1) * 72] ==
|
|
34
|
+
static function verifyChainTxs(_opcat_labs_scrypt_ts_opcat_2_1_1__rs__BacktraceInfo backtraceInfo, bytes t_prevTxInputList) : _opcat_labs_scrypt_ts_opcat_2_1_1__rs__ChainTxVerifyResponse {
|
|
35
|
+
require(t_prevTxInputList[backtraceInfo.prevTxInputIndex * 72 : (backtraceInfo.prevTxInputIndex + 1) * 72] == _opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxUtils.mergeInput(backtraceInfo.prevTxInput));
|
|
36
36
|
bytes prevPrevTxHash = backtraceInfo.prevTxInput.prevTxHash;
|
|
37
|
-
require(prevPrevTxHash ==
|
|
37
|
+
require(prevPrevTxHash == _opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxHashPreimageUtils.getTxHashFromTxHashPreimage(backtraceInfo.prevPrevTxPreimage));
|
|
38
38
|
bytes prevPrevScript = backtraceInfo.prevPrevTxPreimage.outputList[backtraceInfo.prevTxInput.prevOutputIndex * 72 + 8 : (backtraceInfo.prevTxInput.prevOutputIndex) * 72 + 8 + 32];
|
|
39
|
-
bytes prevPrevOutpoint = prevPrevTxHash +
|
|
39
|
+
bytes prevPrevOutpoint = prevPrevTxHash + _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.uint32ToByteString(backtraceInfo.prevTxInput.prevOutputIndex);
|
|
40
40
|
return {prevPrevScript, prevPrevOutpoint};
|
|
41
41
|
}
|
|
42
42
|
}
|
|
@@ -3,7 +3,7 @@ import "stdUtils.scrypt";
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
library
|
|
6
|
+
library _opcat_labs_scrypt_ts_opcat_2_1_1__rs__ByteStringReader {
|
|
7
7
|
bytes buf;
|
|
8
8
|
int pos;
|
|
9
9
|
constructor(bytes buf) {
|
|
@@ -23,15 +23,15 @@ library _opcat_labs_scrypt_ts_opcat_2_1_0__rs__ByteStringReader {
|
|
|
23
23
|
l = header;
|
|
24
24
|
ret = buf[this.pos : this.pos + l];
|
|
25
25
|
} else if(header == 0x4c) {
|
|
26
|
-
l =
|
|
26
|
+
l = _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.fromLEUnsigned(buf[this.pos : this.pos + 1]);
|
|
27
27
|
this.pos += 1;
|
|
28
28
|
ret = this.buf[this.pos : this.pos + l];
|
|
29
29
|
} else if(header == 0x4d) {
|
|
30
|
-
l =
|
|
30
|
+
l = _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.fromLEUnsigned(this.buf[this.pos : this.pos + 2]);
|
|
31
31
|
this.pos += 2;
|
|
32
32
|
ret = this.buf[this.pos : this.pos + l];
|
|
33
33
|
} else if(header == 0x4e) {
|
|
34
|
-
l =
|
|
34
|
+
l = _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.fromLEUnsigned(this.buf[this.pos : this.pos + 4]);
|
|
35
35
|
this.pos += 4;
|
|
36
36
|
ret = this.buf[this.pos : this.pos + l];
|
|
37
37
|
} else {
|
|
@@ -61,6 +61,6 @@ library _opcat_labs_scrypt_ts_opcat_2_1_0__rs__ByteStringReader {
|
|
|
61
61
|
} else {
|
|
62
62
|
ret = header;
|
|
63
63
|
}
|
|
64
|
-
return
|
|
64
|
+
return _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.fromLEUnsigned(ret);
|
|
65
65
|
}
|
|
66
66
|
}
|
|
@@ -3,7 +3,7 @@ import "stdUtils.scrypt";
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
library
|
|
6
|
+
library _opcat_labs_scrypt_ts_opcat_2_1_1__rs__ByteStringWriter {
|
|
7
7
|
bytes buf;
|
|
8
8
|
constructor() {
|
|
9
9
|
this.buf = b'';
|
|
@@ -12,13 +12,13 @@ library _opcat_labs_scrypt_ts_opcat_2_1_0__rs__ByteStringWriter {
|
|
|
12
12
|
int n = len(buf);
|
|
13
13
|
bytes header = b'';
|
|
14
14
|
if(n < 0x4c) {
|
|
15
|
-
header =
|
|
15
|
+
header = _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.toLEUnsigned(n, 1);
|
|
16
16
|
} else if(n < 0x100) {
|
|
17
|
-
header = b'4c' +
|
|
17
|
+
header = b'4c' + _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.toLEUnsigned(n, 1);
|
|
18
18
|
} else if(n < 0x10000) {
|
|
19
|
-
header = b'4d' +
|
|
19
|
+
header = b'4d' + _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.toLEUnsigned(n, 2);
|
|
20
20
|
} else if(n < 0x100000000) {
|
|
21
|
-
header = b'4e' +
|
|
21
|
+
header = b'4e' + _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.toLEUnsigned(n, 4);
|
|
22
22
|
} else {
|
|
23
23
|
require(false);
|
|
24
24
|
}
|
|
@@ -44,7 +44,7 @@ library _opcat_labs_scrypt_ts_opcat_2_1_0__rs__ByteStringWriter {
|
|
|
44
44
|
size = 8;
|
|
45
45
|
this.buf += b'ff';
|
|
46
46
|
}
|
|
47
|
-
this.buf +=
|
|
47
|
+
this.buf += _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.toLEUnsigned(x, size);
|
|
48
48
|
return true;
|
|
49
49
|
}
|
|
50
50
|
}
|
|
@@ -5,7 +5,7 @@ import "stdUtils.scrypt";
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
library
|
|
8
|
+
library _opcat_labs_scrypt_ts_opcat_2_1_1__rs__ContextUtils {
|
|
9
9
|
static const PrivKey privKey = PrivKey(0x26f00fe2340a84335ebdf30f57e9bb58487117b29355718f5e46bf5168d7df97);
|
|
10
10
|
static const PubKey pubKey = PubKey(b'02ba79df5f8ae7604a9830f03c7933028186aede0675a16f025dc4f8be8eec0382');
|
|
11
11
|
static const int invK = 0xc8ffdbaa05d93aa4ede79ec58f06a72562048b775a3507c2bf44bde4f007c40a;
|
|
@@ -18,7 +18,7 @@ library _opcat_labs_scrypt_ts_opcat_2_1_0__rs__ContextUtils {
|
|
|
18
18
|
static function sign(int h, PrivKey privKey, int inverseK, int r, bytes rBigEndian, bytes sigHashType) : Sig {
|
|
19
19
|
int s = inverseK * (h + r * privKey);
|
|
20
20
|
|
|
21
|
-
s =
|
|
21
|
+
s = _opcat_labs_scrypt_ts_opcat_2_1_1__rs__ContextUtils.normalize(s, 115792089237316195423570985008687907852837564279074904382605163141518161494337);
|
|
22
22
|
if(s > 115792089237316195423570985008687907852837564279074904382605163141518161494337 / 2) {
|
|
23
23
|
s = 115792089237316195423570985008687907852837564279074904382605163141518161494337 - s;
|
|
24
24
|
}
|
|
@@ -32,13 +32,13 @@ library _opcat_labs_scrypt_ts_opcat_2_1_0__rs__ContextUtils {
|
|
|
32
32
|
static function fromBEUnsigned(bytes b) : int {
|
|
33
33
|
return unpack(reverseBytes(b, 32) + b'00');
|
|
34
34
|
}
|
|
35
|
-
static function checkSHPreimage(
|
|
36
|
-
SigHashPreimage preimage =
|
|
35
|
+
static function checkSHPreimage(_opcat_labs_scrypt_ts_opcat_2_1_1__rs__SHPreimage shPreimage, bytes sigHashType) : Sig {
|
|
36
|
+
SigHashPreimage preimage = _opcat_labs_scrypt_ts_opcat_2_1_1__rs__ContextUtils.serializeSHPreimage(shPreimage);
|
|
37
37
|
bytes h = hash256(preimage);
|
|
38
|
-
Sig sig =
|
|
38
|
+
Sig sig = _opcat_labs_scrypt_ts_opcat_2_1_1__rs__ContextUtils.sign(_opcat_labs_scrypt_ts_opcat_2_1_1__rs__ContextUtils.fromBEUnsigned(h), _opcat_labs_scrypt_ts_opcat_2_1_1__rs__ContextUtils.privKey, 90914631784428570546048907090666684794265392153046400654824470772421497439242, 7252565254521500021189571868467740368187828957595681190666767817830690399852, _opcat_labs_scrypt_ts_opcat_2_1_1__rs__ContextUtils.rBigEndian, sigHashType);
|
|
39
39
|
return sig;
|
|
40
40
|
}
|
|
41
|
-
static function serializeSHPreimage(
|
|
41
|
+
static function serializeSHPreimage(_opcat_labs_scrypt_ts_opcat_2_1_1__rs__SHPreimage shPreimage) : SigHashPreimage {
|
|
42
42
|
require(len(shPreimage.nVersion) == 4);
|
|
43
43
|
require(len(shPreimage.hashPrevouts) == 32);
|
|
44
44
|
require(len(shPreimage.spentScriptHash) == 32);
|
|
@@ -53,41 +53,41 @@ library _opcat_labs_scrypt_ts_opcat_2_1_0__rs__ContextUtils {
|
|
|
53
53
|
require(shPreimage.inputIndex >= 0);
|
|
54
54
|
require(shPreimage.nLockTime >= 0);
|
|
55
55
|
require(shPreimage.sigHashType == 1 || shPreimage.sigHashType == 2 || shPreimage.sigHashType == 3 || shPreimage.sigHashType == 0x81 || shPreimage.sigHashType == 0x82 || shPreimage.sigHashType == 0x83);
|
|
56
|
-
bytes preimage = shPreimage.nVersion + shPreimage.hashPrevouts + shPreimage.spentScriptHash + shPreimage.spentDataHash +
|
|
56
|
+
bytes preimage = shPreimage.nVersion + shPreimage.hashPrevouts + shPreimage.spentScriptHash + shPreimage.spentDataHash + _opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxUtils.satoshisToByteString(shPreimage.value) + shPreimage.nSequence + shPreimage.hashSpentAmounts + shPreimage.hashSpentScriptHashes + shPreimage.hashSpentDataHashes + shPreimage.hashSequences + shPreimage.hashOutputs + _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.toLEUnsigned(shPreimage.inputIndex, 4) + _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.toLEUnsigned(shPreimage.nLockTime, 4) + num2bin(shPreimage.sigHashType, 4);
|
|
57
57
|
return SigHashPreimage(preimage);
|
|
58
58
|
}
|
|
59
|
-
static function checkPrevouts(bytes prevouts, bytes t_hashPrevouts, int t_inputIndex, int t_inputCount) :
|
|
59
|
+
static function checkPrevouts(bytes prevouts, bytes t_hashPrevouts, int t_inputIndex, int t_inputCount) : _opcat_labs_scrypt_ts_opcat_2_1_1__rs__Outpoint {
|
|
60
60
|
require(hash256(prevouts) == t_hashPrevouts);
|
|
61
61
|
require(t_inputIndex < t_inputCount);
|
|
62
|
-
require(t_inputCount ==
|
|
62
|
+
require(t_inputCount == _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.checkLenDivisibleBy(prevouts, 36));
|
|
63
63
|
bytes b = prevouts[t_inputIndex * 36 : (t_inputIndex + 1) * 36];
|
|
64
|
-
return {b[0 : 32],
|
|
64
|
+
return {b[0 : 32], _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.byteStringToUInt32(b[32 : 36])};
|
|
65
65
|
}
|
|
66
66
|
static function checkSpentScripts(bytes spentScriptHashes, bytes t_hashSpentScripts, int t_inputCount) : bool {
|
|
67
67
|
require(hash256(spentScriptHashes) == t_hashSpentScripts);
|
|
68
|
-
require(t_inputCount ==
|
|
68
|
+
require(t_inputCount == _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.checkLenDivisibleBy(spentScriptHashes, 32));
|
|
69
69
|
return true;
|
|
70
70
|
}
|
|
71
71
|
static function checkSpentAmounts(bytes spentAmounts, bytes hashSpentAmounts) : int {
|
|
72
72
|
require(hash256(spentAmounts) == hashSpentAmounts);
|
|
73
|
-
return
|
|
73
|
+
return _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.checkLenDivisibleBy(spentAmounts, 8);
|
|
74
74
|
}
|
|
75
75
|
static function checkSpentDataHashes(bytes spentDataHashes, bytes hashSpentDataHashes, int inputCount) : bool {
|
|
76
76
|
require(hash256(spentDataHashes) == hashSpentDataHashes);
|
|
77
|
-
require(inputCount ==
|
|
77
|
+
require(inputCount == _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.checkLenDivisibleBy(spentDataHashes, 32));
|
|
78
78
|
return true;
|
|
79
79
|
}
|
|
80
80
|
static function getSpentScriptHash(bytes spentScriptHashes, int inputIndex) : bytes {
|
|
81
81
|
return spentScriptHashes[inputIndex * 32 : (inputIndex + 1) * 32];
|
|
82
82
|
}
|
|
83
83
|
static function getSpentAmount(bytes spentAmounts, int inputIndex) : int {
|
|
84
|
-
return
|
|
84
|
+
return _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.fromLEUnsigned(spentAmounts[inputIndex * 8 : (inputIndex + 1) * 8]);
|
|
85
85
|
}
|
|
86
86
|
static function getSpentDataHash(bytes spentDataHashes, int inputIndex) : bytes {
|
|
87
87
|
return spentDataHashes[inputIndex * 32 : (inputIndex + 1) * 32];
|
|
88
88
|
}
|
|
89
|
-
static function checknLockTime(
|
|
90
|
-
int nSequence =
|
|
89
|
+
static function checknLockTime(_opcat_labs_scrypt_ts_opcat_2_1_1__rs__SHPreimage shPreimage, int nlockTime) : bool {
|
|
90
|
+
int nSequence = _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.fromLEUnsigned(shPreimage.nSequence);
|
|
91
91
|
return (nSequence < 4294967295 && (nlockTime < 500000000 ? shPreimage.nLockTime < 500000000 : true) && shPreimage.nLockTime >= nlockTime);
|
|
92
92
|
}
|
|
93
93
|
}
|
|
@@ -8,15 +8,15 @@ import "contextUtils.scrypt";
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
contract
|
|
11
|
+
contract _opcat_labs_scrypt_ts_opcat_2_1_1__rs__Genesis {
|
|
12
12
|
constructor() {
|
|
13
13
|
}
|
|
14
|
-
public function checkDeploy(
|
|
15
|
-
require(Tx.checkPreimageSigHashType(
|
|
14
|
+
public function checkDeploy(_opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxOut[6] outputs, int outputCount, _opcat_labs_scrypt_ts_opcat_2_1_1__rs__SHPreimage __scrypt_ts_shPreimage, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentScriptHashes) {
|
|
15
|
+
require(Tx.checkPreimageSigHashType(_opcat_labs_scrypt_ts_opcat_2_1_1__rs__ContextUtils.serializeSHPreimage(__scrypt_ts_shPreimage), SigHash.ALL));
|
|
16
16
|
|
|
17
|
-
int __scrypt_ts_inputCount =
|
|
17
|
+
int __scrypt_ts_inputCount = _opcat_labs_scrypt_ts_opcat_2_1_1__rs__ContextUtils.checkSpentAmounts(__scrypt_ts_spentAmounts, __scrypt_ts_shPreimage.hashSpentAmounts);
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
_opcat_labs_scrypt_ts_opcat_2_1_1__rs__ContextUtils.checkSpentScripts(__scrypt_ts_spentScriptHashes, __scrypt_ts_shPreimage.hashSpentScriptHashes, __scrypt_ts_inputCount);
|
|
20
20
|
|
|
21
21
|
require(__scrypt_ts_shPreimage.inputIndex == 0);
|
|
22
22
|
require(__scrypt_ts_inputCount <= (6));
|
|
@@ -24,10 +24,10 @@ contract _opcat_labs_scrypt_ts_opcat_2_1_0__rs__Genesis {
|
|
|
24
24
|
bytes output0ScriptHash = outputs[0].scriptHash;
|
|
25
25
|
bytes outputBytes = b'';
|
|
26
26
|
loop (6) : index {
|
|
27
|
-
|
|
27
|
+
_opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxOut _output = outputs[index];
|
|
28
28
|
if(index < outputCount) {
|
|
29
29
|
require(len(_output.scriptHash) > 0);
|
|
30
|
-
outputBytes +=
|
|
30
|
+
outputBytes += _opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxUtils.buildDataOutput(_output.scriptHash, _output.satoshis, _output.dataHash);
|
|
31
31
|
if(index > 0) {
|
|
32
32
|
require(output0ScriptHash != _output.scriptHash);
|
|
33
33
|
}
|
|
@@ -35,7 +35,7 @@ contract _opcat_labs_scrypt_ts_opcat_2_1_0__rs__Genesis {
|
|
|
35
35
|
}
|
|
36
36
|
loop (6) : index {
|
|
37
37
|
if(index < __scrypt_ts_inputCount) {
|
|
38
|
-
bytes inputScriptHash =
|
|
38
|
+
bytes inputScriptHash = _opcat_labs_scrypt_ts_opcat_2_1_1__rs__ContextUtils.getSpentScriptHash(__scrypt_ts_spentScriptHashes, (index));
|
|
39
39
|
require(output0ScriptHash != inputScriptHash);
|
|
40
40
|
}
|
|
41
41
|
}
|
|
@@ -4,7 +4,7 @@ import "contextUtils.scrypt";
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
contract
|
|
7
|
+
contract _opcat_labs_scrypt_ts_opcat_2_1_1__rs__P2PKH {
|
|
8
8
|
const Ripemd160 addr;
|
|
9
9
|
public function unlock(Sig sig, PubKey pubkey) {
|
|
10
10
|
require(hash160(pubkey) == this.addr);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
library
|
|
4
|
+
library _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StateUtils {
|
|
5
5
|
static function checkInputState(int t_inputIndex, bytes stateHash, bytes t_spentDataHashes) : bool {
|
|
6
6
|
require(t_spentDataHashes[t_inputIndex * 32 : (t_inputIndex + 1) * 32] == stateHash);
|
|
7
7
|
return true;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
struct
|
|
4
|
+
struct _opcat_labs_scrypt_ts_opcat_2_1_1__rs__ReadVarintResult {
|
|
5
5
|
bytes data;
|
|
6
6
|
int nextPos;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
library
|
|
9
|
+
library _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils {
|
|
10
10
|
static function checkLenDivisibleBy(bytes b, int n) : int {
|
|
11
11
|
int l = len(b);
|
|
12
12
|
require(l % n == 0);
|
|
@@ -14,15 +14,15 @@ library _opcat_labs_scrypt_ts_opcat_2_1_0__rs__StdUtils {
|
|
|
14
14
|
}
|
|
15
15
|
static function uint64ToByteString(int n) : bytes {
|
|
16
16
|
require(n >= 0 && n <= 18446744073709551615);
|
|
17
|
-
return
|
|
17
|
+
return _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.toLEUnsigned(n, 8);
|
|
18
18
|
}
|
|
19
19
|
static function uint32ToByteString(int n) : bytes {
|
|
20
20
|
require(n >= 0 && n <= 4294967295);
|
|
21
|
-
return
|
|
21
|
+
return _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.toLEUnsigned(n, 4);
|
|
22
22
|
}
|
|
23
23
|
static function byteStringToUInt32(bytes b) : int {
|
|
24
24
|
require(len(b) == 4);
|
|
25
|
-
return
|
|
25
|
+
return _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.fromLEUnsigned(b);
|
|
26
26
|
}
|
|
27
27
|
static function toLEUnsigned(int n, int l) : bytes {
|
|
28
28
|
bytes m = num2bin(n, l + 1);
|
|
@@ -46,7 +46,7 @@ library _opcat_labs_scrypt_ts_opcat_2_1_0__rs__StdUtils {
|
|
|
46
46
|
b = b'ff';
|
|
47
47
|
size = 8;
|
|
48
48
|
}
|
|
49
|
-
return b +
|
|
49
|
+
return b + _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.toLEUnsigned(n, size);
|
|
50
50
|
}
|
|
51
51
|
static function pushData(bytes buf) : bytes {
|
|
52
52
|
int n = len(buf);
|
|
@@ -67,27 +67,27 @@ library _opcat_labs_scrypt_ts_opcat_2_1_0__rs__StdUtils {
|
|
|
67
67
|
} else {
|
|
68
68
|
require(false);
|
|
69
69
|
}
|
|
70
|
-
return header +
|
|
70
|
+
return header + _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.toLEUnsigned(n, size);
|
|
71
71
|
}
|
|
72
|
-
static function readVarint(bytes buf, int pos) :
|
|
72
|
+
static function readVarint(bytes buf, int pos) : _opcat_labs_scrypt_ts_opcat_2_1_1__rs__ReadVarintResult {
|
|
73
73
|
int l = 0;
|
|
74
74
|
bytes ret = b'';
|
|
75
75
|
int nextPos = pos;
|
|
76
76
|
bytes header = buf[pos : pos + 1];
|
|
77
77
|
if(header == b'fd') {
|
|
78
|
-
l =
|
|
78
|
+
l = _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.fromLEUnsigned(buf[pos + 1 : pos + 3]);
|
|
79
79
|
ret = buf[3 : 3 + l];
|
|
80
80
|
nextPos = pos + 3 + l;
|
|
81
81
|
} else if(header == b'fe') {
|
|
82
|
-
l =
|
|
82
|
+
l = _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.fromLEUnsigned(buf[pos + 1 : pos + 5]);
|
|
83
83
|
ret = buf[pos + 5 : pos + 5 + l];
|
|
84
84
|
nextPos = pos + 5 + l;
|
|
85
85
|
} else if(header == b'ff') {
|
|
86
|
-
l =
|
|
86
|
+
l = _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.fromLEUnsigned(buf[pos + 1 : pos + 9]);
|
|
87
87
|
ret = buf[pos + 9 : pos + 9 + l];
|
|
88
88
|
nextPos = pos + 9 + l;
|
|
89
89
|
} else {
|
|
90
|
-
l =
|
|
90
|
+
l = _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.fromLEUnsigned(buf[pos : pos + 1]);
|
|
91
91
|
ret = buf[pos + 1 : pos + 1 + l];
|
|
92
92
|
nextPos = pos + 1 + l;
|
|
93
93
|
}
|
|
@@ -4,17 +4,17 @@ import "stdUtils.scrypt";
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
library
|
|
8
|
-
static function getTxHashFromTxHashPreimage(
|
|
7
|
+
library _opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxHashPreimageUtils {
|
|
8
|
+
static function getTxHashFromTxHashPreimage(_opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxHashPreimage txHashPreimage) : bytes {
|
|
9
9
|
require(len(txHashPreimage.version) == 4);
|
|
10
|
-
int inputCount =
|
|
11
|
-
int outputCount =
|
|
12
|
-
return hash256(txHashPreimage.version +
|
|
10
|
+
int inputCount = _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.checkLenDivisibleBy(txHashPreimage.inputList, 72);
|
|
11
|
+
int outputCount = _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.checkLenDivisibleBy(txHashPreimage.outputList, 72);
|
|
12
|
+
return hash256(txHashPreimage.version + _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.writeVarInt(inputCount) + txHashPreimage.inputList + _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.writeVarInt(outputCount) + txHashPreimage.outputList + txHashPreimage.nLockTime);
|
|
13
13
|
}
|
|
14
|
-
static function getInputByteString(
|
|
14
|
+
static function getInputByteString(_opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxHashPreimage txHashPreimage, int inputIndex) : bytes {
|
|
15
15
|
return txHashPreimage.inputList[inputIndex * 72 : (inputIndex + 1) * 72];
|
|
16
16
|
}
|
|
17
|
-
static function getOutputByteString(
|
|
17
|
+
static function getOutputByteString(_opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxHashPreimage txHashPreimage, int outputIndex) : bytes {
|
|
18
18
|
return txHashPreimage.outputList[outputIndex * 72 : (outputIndex + 1) * 72];
|
|
19
19
|
}
|
|
20
20
|
}
|
|
@@ -4,10 +4,10 @@ import "stdUtils.scrypt";
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
library
|
|
7
|
+
library _opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxUtils {
|
|
8
8
|
static const int ZERO_SATS = 0;
|
|
9
9
|
static function buildOutput(bytes scriptHash, int satoshis) : bytes {
|
|
10
|
-
return
|
|
10
|
+
return _opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxUtils.buildDataOutput(scriptHash, satoshis, sha256(b''));
|
|
11
11
|
}
|
|
12
12
|
static function buildDataOutput(bytes scriptHash, int satoshis, bytes dataHash) : bytes {
|
|
13
13
|
int scriptHashLen = len(scriptHash);
|
|
@@ -15,34 +15,34 @@ library _opcat_labs_scrypt_ts_opcat_2_1_0__rs__TxUtils {
|
|
|
15
15
|
require(scriptHashLen == 32);
|
|
16
16
|
require(dataHashLen == 32);
|
|
17
17
|
require(satoshis >= 0);
|
|
18
|
-
return
|
|
18
|
+
return _opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxUtils.satoshisToByteString(satoshis) + scriptHash + dataHash;
|
|
19
19
|
}
|
|
20
|
-
static function buildChangeOutput(
|
|
21
|
-
return change.satoshis > 0 ?
|
|
20
|
+
static function buildChangeOutput(_opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxOut change) : bytes {
|
|
21
|
+
return change.satoshis > 0 ? _opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxUtils.buildDataOutput(change.scriptHash, change.satoshis, change.dataHash) : b'';
|
|
22
22
|
}
|
|
23
|
-
static function mergeInput(
|
|
23
|
+
static function mergeInput(_opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxIn txInput) : bytes {
|
|
24
24
|
require(len(txInput.prevTxHash) == 32);
|
|
25
25
|
require(len(txInput.scriptHash) == 32);
|
|
26
|
-
return (txInput.prevTxHash +
|
|
26
|
+
return (txInput.prevTxHash + _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.uint32ToByteString(txInput.prevOutputIndex) + txInput.scriptHash + _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.uint32ToByteString(txInput.sequence));
|
|
27
27
|
}
|
|
28
28
|
static function buildOpReturnOutput(bytes data) : bytes {
|
|
29
29
|
bytes script = b'6a' + pack(len(data)) + data;
|
|
30
|
-
return
|
|
30
|
+
return _opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxUtils.satoshisToByteString(0) + sha256(script) + sha256(b'');
|
|
31
31
|
}
|
|
32
32
|
static function buildP2PKHScript(Ripemd160 addr) : bytes {
|
|
33
33
|
return (OpCode.OP_DUP + OpCode.OP_HASH160 + pack(20) + addr + OpCode.OP_EQUALVERIFY + OpCode.OP_CHECKSIG);
|
|
34
34
|
}
|
|
35
35
|
static function buildP2PKHOutput(int amount, Ripemd160 addr) : bytes {
|
|
36
|
-
return
|
|
36
|
+
return _opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxUtils.buildDataOutput(sha256(_opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxUtils.buildP2PKHScript(addr)), amount, sha256(b''));
|
|
37
37
|
}
|
|
38
38
|
static function buildOpreturnScript(bytes data) : bytes {
|
|
39
|
-
return OpCode.OP_FALSE + OpCode.OP_RETURN +
|
|
39
|
+
return OpCode.OP_FALSE + OpCode.OP_RETURN + _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.pushData(data);
|
|
40
40
|
}
|
|
41
41
|
static function satoshisToByteString(int n) : bytes {
|
|
42
|
-
return
|
|
42
|
+
return _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.uint64ToByteString(n);
|
|
43
43
|
}
|
|
44
44
|
static function byteStringToSatoshis(bytes bs) : int {
|
|
45
45
|
require(len(bs) == 8);
|
|
46
|
-
return
|
|
46
|
+
return _opcat_labs_scrypt_ts_opcat_2_1_1__rs__StdUtils.fromLEUnsigned(bs);
|
|
47
47
|
}
|
|
48
48
|
}
|
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
struct
|
|
4
|
+
struct _opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxOut {
|
|
5
5
|
bytes scriptHash;
|
|
6
6
|
bytes dataHash;
|
|
7
7
|
int satoshis;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
struct
|
|
10
|
+
struct _opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxIn {
|
|
11
11
|
bytes prevTxHash;
|
|
12
12
|
int prevOutputIndex;
|
|
13
13
|
int sequence;
|
|
14
14
|
bytes scriptHash;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
struct
|
|
17
|
+
struct _opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxHashPreimage {
|
|
18
18
|
bytes version;
|
|
19
19
|
bytes inputList;
|
|
20
20
|
bytes outputList;
|
|
21
21
|
bytes nLockTime;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
struct
|
|
25
|
-
|
|
24
|
+
struct _opcat_labs_scrypt_ts_opcat_2_1_1__rs__BacktraceInfo {
|
|
25
|
+
_opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxIn prevTxInput;
|
|
26
26
|
int prevTxInputIndex;
|
|
27
|
-
|
|
27
|
+
_opcat_labs_scrypt_ts_opcat_2_1_1__rs__TxHashPreimage prevPrevTxPreimage;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
struct
|
|
30
|
+
struct _opcat_labs_scrypt_ts_opcat_2_1_1__rs__SHPreimage {
|
|
31
31
|
bytes nVersion;
|
|
32
32
|
bytes hashPrevouts;
|
|
33
33
|
bytes spentScriptHash;
|
|
@@ -44,7 +44,7 @@ struct _opcat_labs_scrypt_ts_opcat_2_1_0__rs__SHPreimage {
|
|
|
44
44
|
int sigHashType;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
struct
|
|
47
|
+
struct _opcat_labs_scrypt_ts_opcat_2_1_1__rs__Outpoint {
|
|
48
48
|
bytes txHash;
|
|
49
49
|
int outputIndex;
|
|
50
50
|
}
|
|
@@ -37,34 +37,48 @@ class MempoolProvider {
|
|
|
37
37
|
async getUtxos(address, _options) {
|
|
38
38
|
const script = (0, common_js_1.uint8ArrayToHex)(opcat_1.Script.fromAddress(address).toBuffer());
|
|
39
39
|
const url = `${this.getMempoolApiHost()}/api/address/${address}/utxo`;
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
const requiredSat = _options?.unspentValue || 0; // 0 means fetch all utxos
|
|
41
|
+
let totalUtxos = [];
|
|
42
|
+
const limit = 50;
|
|
43
|
+
let after_txid;
|
|
44
|
+
let after_vout;
|
|
45
|
+
while (true) {
|
|
46
|
+
const query = after_txid ? `?max_utxos=${limit}&after_txid=${after_txid}&after_vout=${after_vout}` : `?max_utxos=${limit}`;
|
|
47
|
+
const resp = await (0, cross_fetch_1.default)(url + query);
|
|
48
|
+
const contentType = resp.headers.get('content-type');
|
|
43
49
|
if (contentType.includes('json')) {
|
|
44
|
-
|
|
50
|
+
const res = await resp.json();
|
|
51
|
+
if (res['error'])
|
|
52
|
+
throw new Error(res['error']);
|
|
53
|
+
const utxos = res.map(utxo => ({
|
|
54
|
+
txId: utxo.txid,
|
|
55
|
+
outputIndex: utxo.vout,
|
|
56
|
+
script: utxo.script || script,
|
|
57
|
+
satoshis: utxo.value,
|
|
58
|
+
data: utxo.data || ''
|
|
59
|
+
}));
|
|
60
|
+
totalUtxos = [...totalUtxos, ...utxos]
|
|
61
|
+
.concat(Array.from(this.newUTXOs.values()))
|
|
62
|
+
.filter((utxo) => this.isUnSpent(utxo.txId, utxo.outputIndex))
|
|
63
|
+
.filter((0, common_js_1.duplicateFilter)((utxo) => `${utxo.txId}:${utxo.outputIndex}`))
|
|
64
|
+
.filter(utxo => utxo.script === script)
|
|
65
|
+
.sort((a, b) => a.satoshis - b.satoshis);
|
|
66
|
+
const lastUtxo = utxos.at(-1);
|
|
67
|
+
if (lastUtxo) {
|
|
68
|
+
after_txid = lastUtxo.txId;
|
|
69
|
+
after_vout = lastUtxo.outputIndex;
|
|
70
|
+
}
|
|
71
|
+
if (utxos.length < limit)
|
|
72
|
+
break;
|
|
73
|
+
const totalSatoshis = totalUtxos.reduce((total, utxo) => total + utxo.satoshis, 0);
|
|
74
|
+
if (requiredSat > 0 && totalSatoshis >= requiredSat)
|
|
75
|
+
break;
|
|
45
76
|
}
|
|
46
77
|
else {
|
|
47
|
-
throw new Error(`invalid http content type : ${contentType}, status: ${
|
|
78
|
+
throw new Error(`invalid http content type : ${contentType}, status: ${resp.status}`);
|
|
48
79
|
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
return {
|
|
52
|
-
txId: utxo.txid,
|
|
53
|
-
outputIndex: utxo.vout,
|
|
54
|
-
script: utxo.script || script,
|
|
55
|
-
satoshis: utxo.value,
|
|
56
|
-
data: utxo.data || '',
|
|
57
|
-
};
|
|
58
|
-
}))
|
|
59
|
-
.catch((_e) => {
|
|
60
|
-
return [];
|
|
61
|
-
});
|
|
62
|
-
return utxos
|
|
63
|
-
.concat(Array.from(this.newUTXOs.values()))
|
|
64
|
-
.filter((utxo) => this.isUnSpent(utxo.txId, utxo.outputIndex))
|
|
65
|
-
.filter((0, common_js_1.duplicateFilter)((utxo) => `${utxo.txId}:${utxo.outputIndex}`))
|
|
66
|
-
.filter(utxo => utxo.script === script)
|
|
67
|
-
.sort((a, b) => a.satoshis - b.satoshis);
|
|
80
|
+
}
|
|
81
|
+
return totalUtxos;
|
|
68
82
|
}
|
|
69
83
|
isUnSpent(txId, vout) {
|
|
70
84
|
const key = `${txId}:${vout}`;
|
|
@@ -139,7 +153,22 @@ class MempoolProvider {
|
|
|
139
153
|
return e;
|
|
140
154
|
});
|
|
141
155
|
}
|
|
156
|
+
async _getTipHeight() {
|
|
157
|
+
const tipHeightUrl = `${this.getMempoolApiHost()}/api/blocks/tip/height`;
|
|
158
|
+
const tipHeight = await (0, cross_fetch_1.default)(tipHeightUrl, {})
|
|
159
|
+
.then((res) => {
|
|
160
|
+
if (res.status !== 200) {
|
|
161
|
+
throw new Error(`invalid http response code: ${res.status}`);
|
|
162
|
+
}
|
|
163
|
+
return res.text();
|
|
164
|
+
})
|
|
165
|
+
.catch((e) => {
|
|
166
|
+
throw new Error(`Failed to get tip block hash: ${e.message}`);
|
|
167
|
+
});
|
|
168
|
+
return Number(tipHeight);
|
|
169
|
+
}
|
|
142
170
|
async _getConfirmations(txid) {
|
|
171
|
+
const tipHeight = await this._getTipHeight();
|
|
143
172
|
const url = `${this.getMempoolApiHost()}/api/tx/${txid}/status`;
|
|
144
173
|
return (0, cross_fetch_1.default)(url, {})
|
|
145
174
|
.then(async (res) => {
|
|
@@ -153,9 +182,12 @@ class MempoolProvider {
|
|
|
153
182
|
})
|
|
154
183
|
.then(async (data) => {
|
|
155
184
|
if (typeof data === 'object') {
|
|
185
|
+
if (data['error']) {
|
|
186
|
+
throw new Error(data['error']);
|
|
187
|
+
}
|
|
156
188
|
return {
|
|
157
189
|
blockhash: data['block_hash'],
|
|
158
|
-
confirmations: data['confirmed'] ? 1 : -1,
|
|
190
|
+
confirmations: data['confirmed'] ? tipHeight - data['block_height'] + 1 : -1,
|
|
159
191
|
};
|
|
160
192
|
}
|
|
161
193
|
else if (typeof data === 'string') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mempoolProvider.js","sourceRoot":"","sources":["../../../src/providers/mempoolProvider.ts"],"names":[],"mappings":";;;;;;AAEA,8DAAgC;AAChC,uDAA+E;AAC/E,kDAAsE;AACtE,6CAA2C;AAC3C,mDAA6C;AAE7C;;;GAGG;AACH,MAAa,eAAe;IAM1B,YAA4B,OAAyB;QAAzB,YAAO,GAAP,OAAO,CAAkB;QAL7C,mBAAc,GAAwB,IAAI,GAAG,EAAE,CAAC;QAChD,eAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,aAAQ,GAAG,IAAI,GAAG,EAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"mempoolProvider.js","sourceRoot":"","sources":["../../../src/providers/mempoolProvider.ts"],"names":[],"mappings":";;;;;;AAEA,8DAAgC;AAChC,uDAA+E;AAC/E,kDAAsE;AACtE,6CAA2C;AAC3C,mDAA6C;AAE7C;;;GAGG;AACH,MAAa,eAAe;IAM1B,YAA4B,OAAyB;QAAzB,YAAO,GAAP,OAAO,CAAkB;QAL7C,mBAAc,GAAwB,IAAI,GAAG,EAAE,CAAC;QAChD,eAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,aAAQ,GAAG,IAAI,GAAG,EAAgB,CAAC;QAgGnC,sBAAiB,GAAG,GAAG,EAAE;YAC/B,IAAI,IAAI,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;gBACrC,OAAO,8BAA8B,CAAC;YACxC,CAAC;iBAAM,IAAI,IAAI,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;gBAC5C,OAAO,8BAA8B,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC,CAAC;IAtGsD,CAAC;IAEzD,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe,EAAE,QAA2B;QACzD,MAAM,MAAM,GAAG,IAAA,2BAAe,EAAC,cAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEvE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,OAAO,OAAO,CAAC;QACtE,MAAM,WAAW,GAAG,QAAQ,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC,0BAA0B;QAC3E,IAAI,UAAU,GAAW,EAAE,CAAA;QAE3B,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,IAAI,UAAkB,CAAA;QACtB,IAAI,UAAkB,CAAA;QACtB,OAAM,IAAI,EAAE,CAAC;YACX,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,cAAc,KAAK,eAAe,UAAU,eAAe,UAAU,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,EAAE,CAAA;YAC1H,MAAM,IAAI,GAAG,MAAM,IAAA,qBAAK,EAAC,GAAG,GAAG,KAAK,CAAC,CAAC;YACtC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;YACpD,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC9B,IAAI,GAAG,CAAC,OAAO,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;gBAChD,MAAM,KAAK,GAAW,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACrC,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,WAAW,EAAE,IAAI,CAAC,IAAI;oBACtB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM;oBAC7B,QAAQ,EAAE,IAAI,CAAC,KAAK;oBACpB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;iBACtB,CAAC,CAAC,CAAA;gBACH,UAAU,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,KAAK,CAAC;qBACnC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;qBAC1C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;qBAC7D,MAAM,CAAC,IAAA,2BAAe,EAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;qBACrE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;qBACtC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC7B,IAAI,QAAQ,EAAE,CAAC;oBACb,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAA;oBAC1B,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAA;gBACnC,CAAC;gBACD,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK;oBAAE,MAAM;gBAChC,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;gBAClF,IAAI,WAAW,GAAG,CAAC,IAAI,aAAa,IAAI,WAAW;oBAAE,MAAM;YAC7D,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,+BAA+B,WAAW,aAAa,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,SAAS,CAAC,IAAY,EAAE,IAAY;QAC1C,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,IAAY;QAClC,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IACD,UAAU,CAAC,IAAU;QACnB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAA,4BAAU,EAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,UAAU;QACR,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAE,0BAA0B,CAAC;QAClE,OAAO,IAAA,qBAAK,EAAC,GAAG,EAAE,EAAE,CAAC;aAClB,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACZ,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACpD,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;YACpB,CAAC;QACH,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACb,OAAO,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;QAC9B,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE;YAClB,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACP,CAAC;IACD,KAAK,CAAC,gBAAgB,CAAC,IAAY;QACjC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,GAAG,CAAC,aAAa,CAAC;IAC3B,CAAC;IAYO,KAAK,CAAC,UAAU,CAAC,KAAa;QACpC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC;QACjD,OAAO,IAAA,qBAAK,EAAC,GAAG,EAAE;YAChB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,KAAK;SACZ,CAAC;aACC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAClB,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACpD,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;YACpB,CAAC;QACH,CAAC,CAAC;aACD,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACnB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;gBACnD,OAAO,IAAI,CAAC;YACd,CAAC;iBAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YACxC,CAAC;iBAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;YAClC,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACX,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,aAAa;QAEzB,MAAM,YAAY,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;QACzE,MAAM,SAAS,GAAG,MAAM,IAAA,qBAAK,EAAC,YAAY,EAAE,EAAE,CAAC;aAC5C,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACZ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QACL,OAAO,MAAM,CAAC,SAAS,CAAC,CAAA;IAC1B,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,IAAY;QAO1C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAA;QAC5C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAE,WAAW,IAAI,SAAS,CAAC;QAChE,OAAO,IAAA,qBAAK,EAAC,GAAG,EAAE,EAAE,CAAC;aAClB,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAClB,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACpD,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;YACpB,CAAC;QACH,CAAC,CAAC;aACD,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACnB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBAClB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;gBAChC,CAAC;gBACD,OAAO;oBACL,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;oBAC7B,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC7E,CAAC;YACJ,CAAC;iBAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;YAClC,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACX,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa;QAC3B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YACzB,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACpC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,UAAkB,EAAE,QAAkC;QACxE,MAAM,IAAI,GAAG,oBAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,IAAY;QAClC,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAEhD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CACb,+BAA+B,IAAI,uDAAuD,CAC3F,CAAC;YACJ,CAAC;YACD,KAAK,GAAG,GAAG,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,IAAY;QAC3C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAE,WAAW,IAAI,MAAM,CAAC;QAC7D,OAAO,IAAA,qBAAK,EAAC,GAAG,EAAE,EAAE,CAAC;aAClB,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACZ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,KAAa,EAAE,EAAE;YACtB,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;aAED,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE;YAClB,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,+BAA+B;QAC/B,MAAM,UAAU,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;QACrE,MAAM,OAAO,GAAG,MAAM,IAAA,qBAAK,EAAC,UAAU,EAAE,EAAE,CAAC;aACxC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACZ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEL,gDAAgD;QAChD,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAE,cAAc,OAAO,EAAE,CAAC;QACpE,OAAO,IAAA,qBAAK,EAAC,QAAQ,EAAE,EAAE,CAAC;aACvB,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACZ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/D,CAAC;YACD,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACpD,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,8BAA8B,WAAW,EAAE,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,SAAc,EAAE,EAAE;YACvB,IAAI,OAAO,SAAS,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,SAAS,CAAC,UAAU,CAAC;QAC9B,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACP,CAAC;CACF;AAxRD,0CAwRC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utxoProvider.js","sourceRoot":"","sources":["../../../src/providers/utxoProvider.ts"],"names":[],"mappings":";;;AACA,kDAA6C;
|
|
1
|
+
{"version":3,"file":"utxoProvider.js","sourceRoot":"","sources":["../../../src/providers/utxoProvider.ts"],"names":[],"mappings":";;;AACA,kDAA6C;AAuC7C;;;;GAIG;AACH,SAAgB,SAAS,CAAC,YAA0B,EAAE,EAAe;IACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3B,YAAY,CAAC,SAAS,CAAC,IAAA,mBAAO,EAAC,KAAK,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AALD,8BAKC;AAED,cAAc;AACd,SAAgB,uBAAuB,CAAC,YAA0B,EAAE,IAAa;IAC/E,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;IACxC,IAAI,UAAU,EAAE,CAAC;QACf,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AALD,0DAKC;AAED,cAAc;AACd,SAAgB,UAAU,CAAC,IAAU;IACnC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5C,CAAC;AAFD,gCAEC"}
|
|
@@ -31,34 +31,48 @@ export class MempoolProvider {
|
|
|
31
31
|
async getUtxos(address, _options) {
|
|
32
32
|
const script = uint8ArrayToHex(Script.fromAddress(address).toBuffer());
|
|
33
33
|
const url = `${this.getMempoolApiHost()}/api/address/${address}/utxo`;
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
const requiredSat = _options?.unspentValue || 0; // 0 means fetch all utxos
|
|
35
|
+
let totalUtxos = [];
|
|
36
|
+
const limit = 50;
|
|
37
|
+
let after_txid;
|
|
38
|
+
let after_vout;
|
|
39
|
+
while (true) {
|
|
40
|
+
const query = after_txid ? `?max_utxos=${limit}&after_txid=${after_txid}&after_vout=${after_vout}` : `?max_utxos=${limit}`;
|
|
41
|
+
const resp = await fetch(url + query);
|
|
42
|
+
const contentType = resp.headers.get('content-type');
|
|
37
43
|
if (contentType.includes('json')) {
|
|
38
|
-
|
|
44
|
+
const res = await resp.json();
|
|
45
|
+
if (res['error'])
|
|
46
|
+
throw new Error(res['error']);
|
|
47
|
+
const utxos = res.map(utxo => ({
|
|
48
|
+
txId: utxo.txid,
|
|
49
|
+
outputIndex: utxo.vout,
|
|
50
|
+
script: utxo.script || script,
|
|
51
|
+
satoshis: utxo.value,
|
|
52
|
+
data: utxo.data || ''
|
|
53
|
+
}));
|
|
54
|
+
totalUtxos = [...totalUtxos, ...utxos]
|
|
55
|
+
.concat(Array.from(this.newUTXOs.values()))
|
|
56
|
+
.filter((utxo) => this.isUnSpent(utxo.txId, utxo.outputIndex))
|
|
57
|
+
.filter(duplicateFilter((utxo) => `${utxo.txId}:${utxo.outputIndex}`))
|
|
58
|
+
.filter(utxo => utxo.script === script)
|
|
59
|
+
.sort((a, b) => a.satoshis - b.satoshis);
|
|
60
|
+
const lastUtxo = utxos.at(-1);
|
|
61
|
+
if (lastUtxo) {
|
|
62
|
+
after_txid = lastUtxo.txId;
|
|
63
|
+
after_vout = lastUtxo.outputIndex;
|
|
64
|
+
}
|
|
65
|
+
if (utxos.length < limit)
|
|
66
|
+
break;
|
|
67
|
+
const totalSatoshis = totalUtxos.reduce((total, utxo) => total + utxo.satoshis, 0);
|
|
68
|
+
if (requiredSat > 0 && totalSatoshis >= requiredSat)
|
|
69
|
+
break;
|
|
39
70
|
}
|
|
40
71
|
else {
|
|
41
|
-
throw new Error(`invalid http content type : ${contentType}, status: ${
|
|
72
|
+
throw new Error(`invalid http content type : ${contentType}, status: ${resp.status}`);
|
|
42
73
|
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return {
|
|
46
|
-
txId: utxo.txid,
|
|
47
|
-
outputIndex: utxo.vout,
|
|
48
|
-
script: utxo.script || script,
|
|
49
|
-
satoshis: utxo.value,
|
|
50
|
-
data: utxo.data || '',
|
|
51
|
-
};
|
|
52
|
-
}))
|
|
53
|
-
.catch((_e) => {
|
|
54
|
-
return [];
|
|
55
|
-
});
|
|
56
|
-
return utxos
|
|
57
|
-
.concat(Array.from(this.newUTXOs.values()))
|
|
58
|
-
.filter((utxo) => this.isUnSpent(utxo.txId, utxo.outputIndex))
|
|
59
|
-
.filter(duplicateFilter((utxo) => `${utxo.txId}:${utxo.outputIndex}`))
|
|
60
|
-
.filter(utxo => utxo.script === script)
|
|
61
|
-
.sort((a, b) => a.satoshis - b.satoshis);
|
|
74
|
+
}
|
|
75
|
+
return totalUtxos;
|
|
62
76
|
}
|
|
63
77
|
isUnSpent(txId, vout) {
|
|
64
78
|
const key = `${txId}:${vout}`;
|
|
@@ -133,7 +147,22 @@ export class MempoolProvider {
|
|
|
133
147
|
return e;
|
|
134
148
|
});
|
|
135
149
|
}
|
|
150
|
+
async _getTipHeight() {
|
|
151
|
+
const tipHeightUrl = `${this.getMempoolApiHost()}/api/blocks/tip/height`;
|
|
152
|
+
const tipHeight = await fetch(tipHeightUrl, {})
|
|
153
|
+
.then((res) => {
|
|
154
|
+
if (res.status !== 200) {
|
|
155
|
+
throw new Error(`invalid http response code: ${res.status}`);
|
|
156
|
+
}
|
|
157
|
+
return res.text();
|
|
158
|
+
})
|
|
159
|
+
.catch((e) => {
|
|
160
|
+
throw new Error(`Failed to get tip block hash: ${e.message}`);
|
|
161
|
+
});
|
|
162
|
+
return Number(tipHeight);
|
|
163
|
+
}
|
|
136
164
|
async _getConfirmations(txid) {
|
|
165
|
+
const tipHeight = await this._getTipHeight();
|
|
137
166
|
const url = `${this.getMempoolApiHost()}/api/tx/${txid}/status`;
|
|
138
167
|
return fetch(url, {})
|
|
139
168
|
.then(async (res) => {
|
|
@@ -147,9 +176,12 @@ export class MempoolProvider {
|
|
|
147
176
|
})
|
|
148
177
|
.then(async (data) => {
|
|
149
178
|
if (typeof data === 'object') {
|
|
179
|
+
if (data['error']) {
|
|
180
|
+
throw new Error(data['error']);
|
|
181
|
+
}
|
|
150
182
|
return {
|
|
151
183
|
blockhash: data['block_hash'],
|
|
152
|
-
confirmations: data['confirmed'] ? 1 : -1,
|
|
184
|
+
confirmations: data['confirmed'] ? tipHeight - data['block_height'] + 1 : -1,
|
|
153
185
|
};
|
|
154
186
|
}
|
|
155
187
|
else if (typeof data === 'string') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mempoolProvider.js","sourceRoot":"","sources":["../../../src/providers/mempoolProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,EAAkC,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C;;;GAGG;AACH,MAAM,OAAO,eAAe;IAM1B,YAA4B,OAAyB;QAAzB,YAAO,GAAP,OAAO,CAAkB;QAL7C,mBAAc,GAAwB,IAAI,GAAG,EAAE,CAAC;QAChD,eAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,aAAQ,GAAG,IAAI,GAAG,EAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"mempoolProvider.js","sourceRoot":"","sources":["../../../src/providers/mempoolProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utxoProvider.js","sourceRoot":"","sources":["../../../src/providers/utxoProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"utxoProvider.js","sourceRoot":"","sources":["../../../src/providers/utxoProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAuC7C;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,YAA0B,EAAE,EAAe;IACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3B,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,cAAc;AACd,MAAM,UAAU,uBAAuB,CAAC,YAA0B,EAAE,IAAa;IAC/E,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;IACxC,IAAI,UAAU,EAAE,CAAC;QACf,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,cAAc;AACd,MAAM,UAAU,UAAU,CAAC,IAAU;IACnC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5C,CAAC"}
|
|
@@ -20,6 +20,7 @@ export declare class MempoolProvider implements ChainProvider, UtxoProvider {
|
|
|
20
20
|
getConfirmations(txId: string): Promise<number>;
|
|
21
21
|
private getMempoolApiHost;
|
|
22
22
|
private _broadcast;
|
|
23
|
+
private _getTipHeight;
|
|
23
24
|
private _getConfirmations;
|
|
24
25
|
broadcast(txHex: string): Promise<TxId>;
|
|
25
26
|
broadcastPsbt(psbtBase64: string, metadata?: Record<string, unknown>): Promise<TxId>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mempoolProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/mempoolProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAc,MAAM,mBAAmB,CAAC;AAK/E;;;GAGG;AACH,qBAAa,eAAgB,YAAW,aAAa,EAAE,YAAY;aAMrC,OAAO,EAAE,gBAAgB;IALrD,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,UAAU,CAAqB;IAEvC,OAAO,CAAC,QAAQ,CAA2B;gBAEf,OAAO,EAAE,gBAAgB;IAE/C,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAIvC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"mempoolProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/mempoolProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAc,MAAM,mBAAmB,CAAC;AAK/E;;;GAGG;AACH,qBAAa,eAAgB,YAAW,aAAa,EAAE,YAAY;aAMrC,OAAO,EAAE,gBAAgB;IALrD,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,UAAU,CAAqB;IAEvC,OAAO,CAAC,QAAQ,CAA2B;gBAEf,OAAO,EAAE,gBAAgB;IAE/C,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAIvC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IA6C7E,OAAO,CAAC,SAAS;IAKjB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAOpC,UAAU,CAAC,IAAI,EAAE,IAAI;IAIrB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAkBvB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASrD,OAAO,CAAC,iBAAiB,CAQvB;YAEY,UAAU;YA8BV,aAAa;YAgBb,iBAAiB;IAsCzB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASvC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpF,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAexC,kBAAkB;IAkB1B,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;CAsCvC"}
|
|
@@ -7,10 +7,6 @@ import { ExtPsbt } from '../psbt/extPsbt.js';
|
|
|
7
7
|
*/
|
|
8
8
|
export interface UtxoQueryOptions {
|
|
9
9
|
unspentValue: number;
|
|
10
|
-
estimateSize: number;
|
|
11
|
-
feePerKb: number;
|
|
12
|
-
additional?: number;
|
|
13
|
-
stateProvable?: boolean;
|
|
14
10
|
}
|
|
15
11
|
/**
|
|
16
12
|
* a Provider used to query UTXO related to the address
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utxoProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/utxoProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C;;;GAGG;AACH,MAAM,WAAW,gBAAgB;
|
|
1
|
+
{"version":3,"file":"utxoProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/utxoProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAE/B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,YAAY,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,QAKpE;AAED,cAAc;AACd,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,QAKhF;AAED,cAAc;AACd,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,UAEpC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opcat-labs/scrypt-ts-opcat",
|
|
3
3
|
"description": "A TypeScript library for building OPCAT smart contracts with sCrypt.",
|
|
4
|
-
"version": "2.1.
|
|
4
|
+
"version": "2.1.1",
|
|
5
5
|
"author": "OP_CAT Labs",
|
|
6
6
|
"main": "./dist/cjs/index.cjs",
|
|
7
7
|
"module": "./dist/esm/index.js",
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
},
|
|
69
69
|
"dependencies": {
|
|
70
70
|
"@noble/curves": "^1.8.1",
|
|
71
|
-
"@opcat-labs/opcat": "2.1.
|
|
71
|
+
"@opcat-labs/opcat": "2.1.1",
|
|
72
72
|
"bip174": "^3.0.0-rc.1",
|
|
73
73
|
"cbor2": "^2.0.1",
|
|
74
74
|
"cross-fetch": "^4.1.0",
|