cashscript 0.6.4 → 0.7.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/dist/main/Argument.d.ts +2 -2
- package/dist/main/Argument.js +19 -19
- package/dist/main/Contract.d.ts +4 -4
- package/dist/main/Contract.js +15 -15
- package/dist/main/Errors.d.ts +6 -2
- package/dist/main/Errors.js +10 -2
- package/dist/main/SignatureTemplate.d.ts +1 -1
- package/dist/main/SignatureTemplate.js +3 -3
- package/dist/main/Transaction.d.ts +3 -3
- package/dist/main/Transaction.js +40 -42
- package/dist/main/index.d.ts +7 -7
- package/dist/main/index.js +22 -14
- package/dist/main/interfaces.d.ts +2 -1
- package/dist/main/interfaces.js +1 -0
- package/dist/main/network/BitboxNetworkProvider.d.ts +2 -2
- package/dist/main/network/BitcoinRpcNetworkProvider.d.ts +2 -2
- package/dist/main/network/ElectrumNetworkProvider.d.ts +2 -2
- package/dist/main/network/ElectrumNetworkProvider.js +13 -9
- package/dist/main/network/FullStackNetworkProvider.d.ts +2 -2
- package/dist/main/network/NetworkProvider.d.ts +1 -1
- package/dist/main/network/index.d.ts +5 -5
- package/dist/main/network/index.js +8 -8
- package/dist/main/utils.d.ts +3 -2
- package/dist/main/utils.js +40 -31
- package/dist/module/Argument.d.ts +2 -2
- package/dist/module/Argument.js +9 -9
- package/dist/module/Contract.d.ts +4 -4
- package/dist/module/Contract.js +5 -5
- package/dist/module/Errors.d.ts +6 -2
- package/dist/module/Errors.js +8 -1
- package/dist/module/SignatureTemplate.d.ts +1 -1
- package/dist/module/SignatureTemplate.js +1 -1
- package/dist/module/Transaction.d.ts +3 -3
- package/dist/module/Transaction.js +11 -13
- package/dist/module/index.d.ts +7 -7
- package/dist/module/index.js +6 -6
- package/dist/module/interfaces.d.ts +2 -1
- package/dist/module/interfaces.js +1 -0
- package/dist/module/network/BitboxNetworkProvider.d.ts +2 -2
- package/dist/module/network/BitcoinRpcNetworkProvider.d.ts +2 -2
- package/dist/module/network/ElectrumNetworkProvider.d.ts +2 -2
- package/dist/module/network/ElectrumNetworkProvider.js +7 -3
- package/dist/module/network/FullStackNetworkProvider.d.ts +2 -2
- package/dist/module/network/NetworkProvider.d.ts +1 -1
- package/dist/module/network/index.d.ts +5 -5
- package/dist/module/network/index.js +4 -4
- package/dist/module/utils.d.ts +3 -2
- package/dist/module/utils.js +11 -3
- package/package.json +3 -3
|
@@ -12,10 +12,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
const libauth_1 = require("@bitauth/libauth");
|
|
13
13
|
const utils_1 = require("@cashscript/utils");
|
|
14
14
|
const electrum_cash_1 = require("electrum-cash");
|
|
15
|
-
const
|
|
16
|
-
const
|
|
15
|
+
const interfaces_js_1 = require("../interfaces.js");
|
|
16
|
+
const utils_js_1 = require("../utils.js");
|
|
17
17
|
class ElectrumNetworkProvider {
|
|
18
|
-
constructor(network =
|
|
18
|
+
constructor(network = interfaces_js_1.Network.MAINNET, electrum, manualConnectionManagement) {
|
|
19
19
|
this.network = network;
|
|
20
20
|
this.manualConnectionManagement = manualConnectionManagement;
|
|
21
21
|
this.concurrentRequests = 0;
|
|
@@ -24,7 +24,7 @@ class ElectrumNetworkProvider {
|
|
|
24
24
|
this.electrum = electrum;
|
|
25
25
|
return;
|
|
26
26
|
}
|
|
27
|
-
if (network ===
|
|
27
|
+
if (network === interfaces_js_1.Network.MAINNET) {
|
|
28
28
|
// Initialise a 2-of-3 Electrum Cluster with 6 reliable hardcoded servers
|
|
29
29
|
// using the first three servers as "priority" servers
|
|
30
30
|
this.electrum = new electrum_cash_1.ElectrumCluster('CashScript Application', '1.4.1', 2, 3, electrum_cash_1.ClusterOrder.PRIORITY);
|
|
@@ -35,14 +35,18 @@ class ElectrumNetworkProvider {
|
|
|
35
35
|
this.electrum.addServer('bch.loping.net', 50004, electrum_cash_1.ElectrumTransport.WSS.Scheme, false);
|
|
36
36
|
this.electrum.addServer('electrum.imaginary.cash', 50004, electrum_cash_1.ElectrumTransport.WSS.Scheme, false);
|
|
37
37
|
}
|
|
38
|
-
else if (network ===
|
|
38
|
+
else if (network === interfaces_js_1.Network.TESTNET) {
|
|
39
39
|
// Initialise a 1-of-2 Electrum Cluster with 2 hardcoded servers
|
|
40
|
-
this.electrum = new electrum_cash_1.ElectrumCluster('CashScript Application', '1.4.1', 1, 2);
|
|
40
|
+
this.electrum = new electrum_cash_1.ElectrumCluster('CashScript Application', '1.4.1', 1, 2, electrum_cash_1.ClusterOrder.PRIORITY);
|
|
41
41
|
this.electrum.addServer('blackie.c3-soft.com', 60004, electrum_cash_1.ElectrumTransport.WSS.Scheme, false);
|
|
42
42
|
this.electrum.addServer('electroncash.de', 60004, electrum_cash_1.ElectrumTransport.WSS.Scheme, false);
|
|
43
43
|
// this.electrum.addServer('bch.loping.net', 60004, ElectrumTransport.WSS.Scheme, false);
|
|
44
44
|
// this.electrum.addServer('testnet.imaginary.cash', 50004, ElectrumTransport.WSS.Scheme);
|
|
45
45
|
}
|
|
46
|
+
else if (network === interfaces_js_1.Network.STAGING) {
|
|
47
|
+
this.electrum = new electrum_cash_1.ElectrumCluster('CashScript Application', '1.4.1', 1, 1, electrum_cash_1.ClusterOrder.PRIORITY);
|
|
48
|
+
this.electrum.addServer('testnet4.imaginary.cash', 50004, electrum_cash_1.ElectrumTransport.WSS.Scheme, false);
|
|
49
|
+
}
|
|
46
50
|
else {
|
|
47
51
|
throw new Error(`Tried to instantiate an ElectrumNetworkProvider for unsupported network ${network}`);
|
|
48
52
|
}
|
|
@@ -143,12 +147,12 @@ exports.default = ElectrumNetworkProvider;
|
|
|
143
147
|
*/
|
|
144
148
|
function addressToElectrumScriptHash(address) {
|
|
145
149
|
// Retrieve locking script
|
|
146
|
-
const lockScript =
|
|
150
|
+
const lockScript = (0, utils_js_1.addressToLockScript)(address);
|
|
147
151
|
// Hash locking script
|
|
148
|
-
const scriptHash = utils_1.sha256(lockScript);
|
|
152
|
+
const scriptHash = (0, utils_1.sha256)(lockScript);
|
|
149
153
|
// Reverse scripthash
|
|
150
154
|
scriptHash.reverse();
|
|
151
155
|
// Return scripthash as a hex string
|
|
152
|
-
return libauth_1.binToHex(scriptHash);
|
|
156
|
+
return (0, libauth_1.binToHex)(scriptHash);
|
|
153
157
|
}
|
|
154
158
|
//# sourceMappingURL=ElectrumNetworkProvider.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Utxo, Network } from '../interfaces';
|
|
2
|
-
import NetworkProvider from './NetworkProvider';
|
|
1
|
+
import { Utxo, Network } from '../interfaces.js';
|
|
2
|
+
import NetworkProvider from './NetworkProvider.js';
|
|
3
3
|
export default class FullStackNetworkProvider implements NetworkProvider {
|
|
4
4
|
network: Network;
|
|
5
5
|
private bchjs;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { default as NetworkProvider } from './NetworkProvider';
|
|
2
|
-
export { default as BitboxNetworkProvider } from './BitboxNetworkProvider';
|
|
3
|
-
export { default as BitcoinRpcNetworkProvider } from './BitcoinRpcNetworkProvider';
|
|
4
|
-
export { default as ElectrumNetworkProvider } from './ElectrumNetworkProvider';
|
|
5
|
-
export { default as FullStackNetworkProvider } from './FullStackNetworkProvider';
|
|
1
|
+
export { default as NetworkProvider } from './NetworkProvider.js';
|
|
2
|
+
export { default as BitboxNetworkProvider } from './BitboxNetworkProvider.js';
|
|
3
|
+
export { default as BitcoinRpcNetworkProvider } from './BitcoinRpcNetworkProvider.js';
|
|
4
|
+
export { default as ElectrumNetworkProvider } from './ElectrumNetworkProvider.js';
|
|
5
|
+
export { default as FullStackNetworkProvider } from './FullStackNetworkProvider.js';
|
|
@@ -4,12 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.FullStackNetworkProvider = exports.ElectrumNetworkProvider = exports.BitcoinRpcNetworkProvider = exports.BitboxNetworkProvider = void 0;
|
|
7
|
-
var
|
|
8
|
-
Object.defineProperty(exports, "BitboxNetworkProvider", { enumerable: true, get: function () { return __importDefault(
|
|
9
|
-
var
|
|
10
|
-
Object.defineProperty(exports, "BitcoinRpcNetworkProvider", { enumerable: true, get: function () { return __importDefault(
|
|
11
|
-
var
|
|
12
|
-
Object.defineProperty(exports, "ElectrumNetworkProvider", { enumerable: true, get: function () { return __importDefault(
|
|
13
|
-
var
|
|
14
|
-
Object.defineProperty(exports, "FullStackNetworkProvider", { enumerable: true, get: function () { return __importDefault(
|
|
7
|
+
var BitboxNetworkProvider_js_1 = require("./BitboxNetworkProvider.js");
|
|
8
|
+
Object.defineProperty(exports, "BitboxNetworkProvider", { enumerable: true, get: function () { return __importDefault(BitboxNetworkProvider_js_1).default; } });
|
|
9
|
+
var BitcoinRpcNetworkProvider_js_1 = require("./BitcoinRpcNetworkProvider.js");
|
|
10
|
+
Object.defineProperty(exports, "BitcoinRpcNetworkProvider", { enumerable: true, get: function () { return __importDefault(BitcoinRpcNetworkProvider_js_1).default; } });
|
|
11
|
+
var ElectrumNetworkProvider_js_1 = require("./ElectrumNetworkProvider.js");
|
|
12
|
+
Object.defineProperty(exports, "ElectrumNetworkProvider", { enumerable: true, get: function () { return __importDefault(ElectrumNetworkProvider_js_1).default; } });
|
|
13
|
+
var FullStackNetworkProvider_js_1 = require("./FullStackNetworkProvider.js");
|
|
14
|
+
Object.defineProperty(exports, "FullStackNetworkProvider", { enumerable: true, get: function () { return __importDefault(FullStackNetworkProvider_js_1).default; } });
|
|
15
15
|
//# sourceMappingURL=index.js.map
|
package/dist/main/utils.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Transaction } from '@bitauth/libauth';
|
|
2
2
|
import { Script } from '@cashscript/utils';
|
|
3
|
-
import { Utxo, Output } from './interfaces';
|
|
4
|
-
import { FailedTransactionError } from './Errors';
|
|
3
|
+
import { Utxo, Output, Recipient } from './interfaces.js';
|
|
4
|
+
import { FailedTransactionError } from './Errors.js';
|
|
5
|
+
export declare function validateRecipient(recipient: Recipient): void;
|
|
5
6
|
export declare function getInputSize(inputScript: Uint8Array): number;
|
|
6
7
|
export declare function getPreimageSize(script: Uint8Array): number;
|
|
7
8
|
export declare function getTxSizeWithoutInputs(outputs: Output[]): number;
|
package/dist/main/utils.js
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getNetworkPrefix = exports.addressToLockScript = exports.scriptToLockingBytecode = exports.scriptToAddress = exports.meep = exports.buildError = exports.createSighashPreimage = exports.createOpReturnOutput = exports.createInputScript = exports.getTxSizeWithoutInputs = exports.getPreimageSize = exports.getInputSize = void 0;
|
|
3
|
+
exports.getNetworkPrefix = exports.addressToLockScript = exports.scriptToLockingBytecode = exports.scriptToAddress = exports.meep = exports.buildError = exports.createSighashPreimage = exports.createOpReturnOutput = exports.createInputScript = exports.getTxSizeWithoutInputs = exports.getPreimageSize = exports.getInputSize = exports.validateRecipient = void 0;
|
|
4
4
|
const libauth_1 = require("@bitauth/libauth");
|
|
5
5
|
const utils_1 = require("@cashscript/utils");
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
6
|
+
const interfaces_js_1 = require("./interfaces.js");
|
|
7
|
+
const constants_js_1 = require("./constants.js");
|
|
8
|
+
const Errors_js_1 = require("./Errors.js");
|
|
9
|
+
// ////////// PARAMETER VALIDATION ////////////////////////////////////////////
|
|
10
|
+
function validateRecipient(recipient) {
|
|
11
|
+
if (recipient.amount < constants_js_1.DUST_LIMIT) {
|
|
12
|
+
throw new Errors_js_1.OutputSatoshisTooSmallError(recipient.amount);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.validateRecipient = validateRecipient;
|
|
9
16
|
// ////////// SIZE CALCULATIONS ///////////////////////////////////////////////
|
|
10
17
|
function getInputSize(inputScript) {
|
|
11
18
|
const scriptSize = inputScript.byteLength;
|
|
@@ -34,16 +41,16 @@ function getTxSizeWithoutInputs(outputs) {
|
|
|
34
41
|
// Script Length(1 ~ 9B)*
|
|
35
42
|
// Script (?)*
|
|
36
43
|
// LockTime (4B)
|
|
37
|
-
let size =
|
|
44
|
+
let size = constants_js_1.VERSION_SIZE + constants_js_1.LOCKTIME_SIZE;
|
|
38
45
|
size += outputs.reduce((acc, output) => {
|
|
39
46
|
if (typeof output.to === 'string') {
|
|
40
|
-
return acc +
|
|
47
|
+
return acc + constants_js_1.P2PKH_OUTPUT_SIZE;
|
|
41
48
|
}
|
|
42
49
|
// Size of an OP_RETURN output = byteLength + 8 (amount) + 2 (scriptSize)
|
|
43
50
|
return acc + output.to.byteLength + 8 + 2;
|
|
44
51
|
}, 0);
|
|
45
52
|
// Add tx-out count (accounting for a potential change output)
|
|
46
|
-
size += utils_1.encodeInt(outputs.length + 1).byteLength;
|
|
53
|
+
size += (0, utils_1.encodeInt)(outputs.length + 1).byteLength;
|
|
47
54
|
return size;
|
|
48
55
|
}
|
|
49
56
|
exports.getTxSizeWithoutInputs = getTxSizeWithoutInputs;
|
|
@@ -54,10 +61,10 @@ function createInputScript(redeemScript, encodedArgs, selector, preimage) {
|
|
|
54
61
|
if (preimage !== undefined)
|
|
55
62
|
unlockScript.push(preimage);
|
|
56
63
|
if (selector !== undefined)
|
|
57
|
-
unlockScript.push(utils_1.encodeInt(selector));
|
|
64
|
+
unlockScript.push((0, utils_1.encodeInt)(selector));
|
|
58
65
|
// Create input script and compile it to bytecode
|
|
59
|
-
const inputScript = [...unlockScript, utils_1.scriptToBytecode(redeemScript)];
|
|
60
|
-
return utils_1.scriptToBytecode(inputScript);
|
|
66
|
+
const inputScript = [...unlockScript, (0, utils_1.scriptToBytecode)(redeemScript)];
|
|
67
|
+
return (0, utils_1.scriptToBytecode)(inputScript);
|
|
61
68
|
}
|
|
62
69
|
exports.createInputScript = createInputScript;
|
|
63
70
|
function createOpReturnOutput(opReturnData) {
|
|
@@ -74,12 +81,12 @@ function toBin(output) {
|
|
|
74
81
|
return encode(data);
|
|
75
82
|
}
|
|
76
83
|
function createSighashPreimage(transaction, input, inputIndex, coveredBytecode, hashtype) {
|
|
77
|
-
const state = libauth_1.createTransactionContextCommon({
|
|
84
|
+
const state = (0, libauth_1.createTransactionContextCommon)({
|
|
78
85
|
inputIndex,
|
|
79
|
-
sourceOutput: { satoshis: libauth_1.bigIntToBinUint64LE(BigInt(input.satoshis)) },
|
|
86
|
+
sourceOutput: { satoshis: (0, libauth_1.bigIntToBinUint64LE)(BigInt(input.satoshis)) },
|
|
80
87
|
spendingTransaction: transaction,
|
|
81
88
|
});
|
|
82
|
-
const sighashPreimage = libauth_1.generateSigningSerializationBCH({
|
|
89
|
+
const sighashPreimage = (0, libauth_1.generateSigningSerializationBCH)({
|
|
83
90
|
correspondingOutput: state.correspondingOutput,
|
|
84
91
|
coveredBytecode,
|
|
85
92
|
forkId: new Uint8Array([0, 0, 0]),
|
|
@@ -100,24 +107,24 @@ function createSighashPreimage(transaction, input, inputIndex, coveredBytecode,
|
|
|
100
107
|
exports.createSighashPreimage = createSighashPreimage;
|
|
101
108
|
function buildError(reason, meepStr) {
|
|
102
109
|
const require = [
|
|
103
|
-
|
|
104
|
-
|
|
110
|
+
Errors_js_1.Reason.EVAL_FALSE, Errors_js_1.Reason.VERIFY, Errors_js_1.Reason.EQUALVERIFY, Errors_js_1.Reason.CHECKMULTISIGVERIFY,
|
|
111
|
+
Errors_js_1.Reason.CHECKSIGVERIFY, Errors_js_1.Reason.CHECKDATASIGVERIFY, Errors_js_1.Reason.NUMEQUALVERIFY,
|
|
105
112
|
];
|
|
106
|
-
const timeCheck = [
|
|
113
|
+
const timeCheck = [Errors_js_1.Reason.NEGATIVE_LOCKTIME, Errors_js_1.Reason.UNSATISFIED_LOCKTIME];
|
|
107
114
|
const sigCheck = [
|
|
108
|
-
|
|
109
|
-
|
|
115
|
+
Errors_js_1.Reason.SIG_COUNT, Errors_js_1.Reason.PUBKEY_COUNT, Errors_js_1.Reason.SIG_HASHTYPE, Errors_js_1.Reason.SIG_DER,
|
|
116
|
+
Errors_js_1.Reason.SIG_HIGH_S, Errors_js_1.Reason.SIG_NULLFAIL, Errors_js_1.Reason.SIG_BADLENGTH, Errors_js_1.Reason.SIG_NONSCHNORR,
|
|
110
117
|
];
|
|
111
118
|
if (toRegExp(require).test(reason)) {
|
|
112
|
-
return new
|
|
119
|
+
return new Errors_js_1.FailedRequireError(reason, meepStr);
|
|
113
120
|
}
|
|
114
121
|
if (toRegExp(timeCheck).test(reason)) {
|
|
115
|
-
return new
|
|
122
|
+
return new Errors_js_1.FailedTimeCheckError(reason, meepStr);
|
|
116
123
|
}
|
|
117
124
|
if (toRegExp(sigCheck).test(reason)) {
|
|
118
|
-
return new
|
|
125
|
+
return new Errors_js_1.FailedSigCheckError(reason, meepStr);
|
|
119
126
|
}
|
|
120
|
-
return new
|
|
127
|
+
return new Errors_js_1.FailedTransactionError(reason, meepStr);
|
|
121
128
|
}
|
|
122
129
|
exports.buildError = buildError;
|
|
123
130
|
function toRegExp(reasons) {
|
|
@@ -125,21 +132,21 @@ function toRegExp(reasons) {
|
|
|
125
132
|
}
|
|
126
133
|
// ////////// MISC ////////////////////////////////////////////////////////////
|
|
127
134
|
function meep(tx, utxos, script) {
|
|
128
|
-
const scriptPubkey = libauth_1.binToHex(scriptToLockingBytecode(script));
|
|
135
|
+
const scriptPubkey = (0, libauth_1.binToHex)(scriptToLockingBytecode(script));
|
|
129
136
|
return `meep debug --tx=${tx} --idx=0 --amt=${utxos[0].satoshis} --pkscript=${scriptPubkey}`;
|
|
130
137
|
}
|
|
131
138
|
exports.meep = meep;
|
|
132
139
|
function scriptToAddress(script, network) {
|
|
133
140
|
const lockingBytecode = scriptToLockingBytecode(script);
|
|
134
141
|
const prefix = getNetworkPrefix(network);
|
|
135
|
-
const address = libauth_1.lockingBytecodeToCashAddress(lockingBytecode, prefix);
|
|
142
|
+
const address = (0, libauth_1.lockingBytecodeToCashAddress)(lockingBytecode, prefix);
|
|
136
143
|
return address;
|
|
137
144
|
}
|
|
138
145
|
exports.scriptToAddress = scriptToAddress;
|
|
139
146
|
function scriptToLockingBytecode(script) {
|
|
140
|
-
const scriptHash = utils_1.hash160(utils_1.scriptToBytecode(script));
|
|
147
|
+
const scriptHash = (0, utils_1.hash160)((0, utils_1.scriptToBytecode)(script));
|
|
141
148
|
const addressContents = { payload: scriptHash, type: libauth_1.AddressType.p2sh };
|
|
142
|
-
const lockingBytecode = libauth_1.addressContentsToLockingBytecode(addressContents);
|
|
149
|
+
const lockingBytecode = (0, libauth_1.addressContentsToLockingBytecode)(addressContents);
|
|
143
150
|
return lockingBytecode;
|
|
144
151
|
}
|
|
145
152
|
exports.scriptToLockingBytecode = scriptToLockingBytecode;
|
|
@@ -151,7 +158,7 @@ exports.scriptToLockingBytecode = scriptToLockingBytecode;
|
|
|
151
158
|
* @returns a locking script corresponding to the passed address
|
|
152
159
|
*/
|
|
153
160
|
function addressToLockScript(address) {
|
|
154
|
-
const result = libauth_1.cashAddressToLockingBytecode(address);
|
|
161
|
+
const result = (0, libauth_1.cashAddressToLockingBytecode)(address);
|
|
155
162
|
if (typeof result === 'string')
|
|
156
163
|
throw new Error(result);
|
|
157
164
|
return result.bytecode;
|
|
@@ -159,11 +166,13 @@ function addressToLockScript(address) {
|
|
|
159
166
|
exports.addressToLockScript = addressToLockScript;
|
|
160
167
|
function getNetworkPrefix(network) {
|
|
161
168
|
switch (network) {
|
|
162
|
-
case
|
|
169
|
+
case interfaces_js_1.Network.MAINNET:
|
|
163
170
|
return 'bitcoincash';
|
|
164
|
-
case
|
|
171
|
+
case interfaces_js_1.Network.STAGING:
|
|
172
|
+
return 'bchtest';
|
|
173
|
+
case interfaces_js_1.Network.TESTNET:
|
|
165
174
|
return 'bchtest';
|
|
166
|
-
case
|
|
175
|
+
case interfaces_js_1.Network.REGTEST:
|
|
167
176
|
return 'bchreg';
|
|
168
177
|
default:
|
|
169
178
|
return 'bitcoincash';
|
|
@@ -173,7 +182,7 @@ exports.getNetworkPrefix = getNetworkPrefix;
|
|
|
173
182
|
// ////////////////////////////////////////////////////////////////////////////
|
|
174
183
|
// For encoding OP_RETURN data (doesn't require BIP62.3 / MINIMALDATA)
|
|
175
184
|
function encodeNullDataScript(chunks) {
|
|
176
|
-
return libauth_1.flattenBinArray(chunks.map((chunk) => {
|
|
185
|
+
return (0, libauth_1.flattenBinArray)(chunks.map((chunk) => {
|
|
177
186
|
if (typeof chunk === 'number') {
|
|
178
187
|
return new Uint8Array([chunk]);
|
|
179
188
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import SignatureTemplate from './SignatureTemplate';
|
|
2
|
-
export declare type Argument = number | boolean | string | Uint8Array | SignatureTemplate;
|
|
1
|
+
import SignatureTemplate from './SignatureTemplate.js';
|
|
2
|
+
export declare type Argument = number | bigint | boolean | string | Uint8Array | SignatureTemplate;
|
|
3
3
|
export declare function encodeArgument(argument: Argument, typeStr: string): Uint8Array | SignatureTemplate;
|
package/dist/module/Argument.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { hexToBin } from '@bitauth/libauth';
|
|
2
2
|
import { BytesType, encodeBool, encodeInt, encodeString, parseType, PrimitiveType, } from '@cashscript/utils';
|
|
3
|
-
import { TypeError } from './Errors';
|
|
4
|
-
import SignatureTemplate from './SignatureTemplate';
|
|
3
|
+
import { TypeError } from './Errors.js';
|
|
4
|
+
import SignatureTemplate from './SignatureTemplate.js';
|
|
5
5
|
export function encodeArgument(argument, typeStr) {
|
|
6
6
|
let type = parseType(typeStr);
|
|
7
7
|
if (type === PrimitiveType.BOOL) {
|
|
@@ -11,7 +11,7 @@ export function encodeArgument(argument, typeStr) {
|
|
|
11
11
|
return encodeBool(argument);
|
|
12
12
|
}
|
|
13
13
|
if (type === PrimitiveType.INT) {
|
|
14
|
-
if (typeof argument !== 'number') {
|
|
14
|
+
if (typeof argument !== 'number' && typeof argument !== 'bigint') {
|
|
15
15
|
throw new TypeError(typeof argument, type);
|
|
16
16
|
}
|
|
17
17
|
return encodeInt(argument);
|
|
@@ -36,14 +36,14 @@ export function encodeArgument(argument, typeStr) {
|
|
|
36
36
|
}
|
|
37
37
|
// Redefine SIG as a bytes65 so it is included in the size checks below
|
|
38
38
|
// Note that ONLY Schnorr signatures are accepted
|
|
39
|
-
if (type === PrimitiveType.SIG) {
|
|
39
|
+
if (type === PrimitiveType.SIG && argument.byteLength !== 0) {
|
|
40
40
|
type = new BytesType(65);
|
|
41
41
|
}
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
// Redefine SIG as a bytes64 so it is included in the size checks below
|
|
43
|
+
// Note that ONLY Schnorr signatures are accepted
|
|
44
|
+
if (type === PrimitiveType.DATASIG && argument.byteLength !== 0) {
|
|
45
|
+
type = new BytesType(64);
|
|
46
|
+
}
|
|
47
47
|
// Bounded bytes types require a correctly sized argument
|
|
48
48
|
if (type instanceof BytesType && type.bound && argument.byteLength !== type.bound) {
|
|
49
49
|
throw new TypeError(`bytes${argument.byteLength}`, type);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Artifact } from '@cashscript/utils';
|
|
2
|
-
import { Transaction } from './Transaction';
|
|
3
|
-
import { Argument } from './Argument';
|
|
4
|
-
import { Utxo } from './interfaces';
|
|
5
|
-
import NetworkProvider from './network/NetworkProvider';
|
|
2
|
+
import { Transaction } from './Transaction.js';
|
|
3
|
+
import { Argument } from './Argument.js';
|
|
4
|
+
import { Utxo } from './interfaces.js';
|
|
5
|
+
import NetworkProvider from './network/NetworkProvider.js';
|
|
6
6
|
export declare class Contract {
|
|
7
7
|
private artifact;
|
|
8
8
|
private provider;
|
package/dist/module/Contract.js
CHANGED
|
@@ -9,11 +9,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import { binToHex } from '@bitauth/libauth';
|
|
11
11
|
import { asmToScript, calculateBytesize, countOpcodes, generateRedeemScript, scriptToBytecode, } from '@cashscript/utils';
|
|
12
|
-
import { Transaction } from './Transaction';
|
|
13
|
-
import { encodeArgument } from './Argument';
|
|
14
|
-
import { scriptToAddress, } from './utils';
|
|
15
|
-
import SignatureTemplate from './SignatureTemplate';
|
|
16
|
-
import { ElectrumNetworkProvider } from './network';
|
|
12
|
+
import { Transaction } from './Transaction.js';
|
|
13
|
+
import { encodeArgument } from './Argument.js';
|
|
14
|
+
import { scriptToAddress, } from './utils.js';
|
|
15
|
+
import SignatureTemplate from './SignatureTemplate.js';
|
|
16
|
+
import { ElectrumNetworkProvider } from './network/index.js';
|
|
17
17
|
export class Contract {
|
|
18
18
|
constructor(artifact, constructorArgs, provider = new ElectrumNetworkProvider()) {
|
|
19
19
|
this.artifact = artifact;
|
package/dist/module/Errors.d.ts
CHANGED
|
@@ -2,6 +2,9 @@ import { Type } from '@cashscript/utils';
|
|
|
2
2
|
export declare class TypeError extends Error {
|
|
3
3
|
constructor(actual: string, expected: Type);
|
|
4
4
|
}
|
|
5
|
+
export declare class OutputSatoshisTooSmallError extends Error {
|
|
6
|
+
constructor(satoshis: number);
|
|
7
|
+
}
|
|
5
8
|
export declare class FailedTransactionError extends Error {
|
|
6
9
|
reason: string;
|
|
7
10
|
meep: string;
|
|
@@ -28,7 +31,7 @@ export declare enum Reason {
|
|
|
28
31
|
SIG_COUNT = "Signature count negative or greater than pubkey count",
|
|
29
32
|
PUBKEY_COUNT = "Pubkey count negative or limit exceeded",
|
|
30
33
|
INVALID_OPERAND_SIZE = "Invalid operand size",
|
|
31
|
-
INVALID_NUMBER_RANGE = "Given operand is not a number within the valid range
|
|
34
|
+
INVALID_NUMBER_RANGE = "Given operand is not a number within the valid range",
|
|
32
35
|
IMPOSSIBLE_ENCODING = "The requested encoding is impossible to satisfy",
|
|
33
36
|
INVALID_SPLIT_RANGE = "Invalid OP_SPLIT range",
|
|
34
37
|
INVALID_BIT_COUNT = "Invalid number of bit set in OP_CHECKMULTISIG",
|
|
@@ -58,5 +61,6 @@ export declare enum Reason {
|
|
|
58
61
|
CLEANSTACK = "Script did not clean its stack",
|
|
59
62
|
NONCOMPRESSED_PUBKEY = "Using non-compressed public key",
|
|
60
63
|
ILLEGAL_FORKID = "Illegal use of SIGHASH_FORKID",
|
|
61
|
-
MUST_USE_FORKID = "Signature must use SIGHASH_FORKID"
|
|
64
|
+
MUST_USE_FORKID = "Signature must use SIGHASH_FORKID",
|
|
65
|
+
UNKNOWN = "unknown error"
|
|
62
66
|
}
|
package/dist/module/Errors.js
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
+
import { DUST_LIMIT } from './constants.js';
|
|
1
2
|
export class TypeError extends Error {
|
|
2
3
|
constructor(actual, expected) {
|
|
3
4
|
super(`Found type '${actual}' where type '${expected.toString()}' was expected`);
|
|
4
5
|
}
|
|
5
6
|
}
|
|
7
|
+
export class OutputSatoshisTooSmallError extends Error {
|
|
8
|
+
constructor(satoshis) {
|
|
9
|
+
super(`Tried to add an output with ${satoshis} satoshis, which is less than the DUST limit (${DUST_LIMIT})`);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
6
12
|
export class FailedTransactionError extends Error {
|
|
7
13
|
constructor(reason, meep) {
|
|
8
14
|
super(`Transaction failed with reason: ${reason}\n${meep}`);
|
|
@@ -33,7 +39,7 @@ export var Reason;
|
|
|
33
39
|
Reason["SIG_COUNT"] = "Signature count negative or greater than pubkey count";
|
|
34
40
|
Reason["PUBKEY_COUNT"] = "Pubkey count negative or limit exceeded";
|
|
35
41
|
Reason["INVALID_OPERAND_SIZE"] = "Invalid operand size";
|
|
36
|
-
Reason["INVALID_NUMBER_RANGE"] = "Given operand is not a number within the valid range
|
|
42
|
+
Reason["INVALID_NUMBER_RANGE"] = "Given operand is not a number within the valid range";
|
|
37
43
|
Reason["IMPOSSIBLE_ENCODING"] = "The requested encoding is impossible to satisfy";
|
|
38
44
|
Reason["INVALID_SPLIT_RANGE"] = "Invalid OP_SPLIT range";
|
|
39
45
|
Reason["INVALID_BIT_COUNT"] = "Invalid number of bit set in OP_CHECKMULTISIG";
|
|
@@ -64,5 +70,6 @@ export var Reason;
|
|
|
64
70
|
Reason["NONCOMPRESSED_PUBKEY"] = "Using non-compressed public key";
|
|
65
71
|
Reason["ILLEGAL_FORKID"] = "Illegal use of SIGHASH_FORKID";
|
|
66
72
|
Reason["MUST_USE_FORKID"] = "Signature must use SIGHASH_FORKID";
|
|
73
|
+
Reason["UNKNOWN"] = "unknown error";
|
|
67
74
|
})(Reason || (Reason = {}));
|
|
68
75
|
//# sourceMappingURL=Errors.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { decodePrivateKeyWif, SigningSerializationFlag } from '@bitauth/libauth';
|
|
2
2
|
import { sha256 } from '@cashscript/utils';
|
|
3
|
-
import { HashType } from './interfaces';
|
|
3
|
+
import { HashType } from './interfaces.js';
|
|
4
4
|
export default class SignatureTemplate {
|
|
5
5
|
constructor(signer, hashtype = HashType.SIGHASH_ALL) {
|
|
6
6
|
this.hashtype = hashtype;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AbiFunction, Script } from '@cashscript/utils';
|
|
2
|
-
import { Utxo, Recipient, TransactionDetails } from './interfaces';
|
|
3
|
-
import NetworkProvider from './network/NetworkProvider';
|
|
4
|
-
import SignatureTemplate from './SignatureTemplate';
|
|
2
|
+
import { Utxo, Recipient, TransactionDetails } from './interfaces.js';
|
|
3
|
+
import NetworkProvider from './network/NetworkProvider.js';
|
|
4
|
+
import SignatureTemplate from './SignatureTemplate.js';
|
|
5
5
|
export declare class Transaction {
|
|
6
6
|
private address;
|
|
7
7
|
private provider;
|
|
@@ -10,10 +10,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import { bigIntToBinUint64LE, hexToBin, binToHex, encodeTransaction, addressContentsToLockingBytecode, AddressType, decodeTransaction, instantiateSecp256k1, } from '@bitauth/libauth';
|
|
11
11
|
import delay from 'delay';
|
|
12
12
|
import { hash160, hash256, placeholder, scriptToBytecode, } from '@cashscript/utils';
|
|
13
|
-
import { isSignableUtxo, } from './interfaces';
|
|
14
|
-
import { meep, createInputScript, getInputSize, createOpReturnOutput, getTxSizeWithoutInputs, getPreimageSize, buildError, addressToLockScript, createSighashPreimage, } from './utils';
|
|
15
|
-
import { P2SH_OUTPUT_SIZE, DUST_LIMIT } from './constants';
|
|
16
|
-
import SignatureTemplate from './SignatureTemplate';
|
|
13
|
+
import { isSignableUtxo, } from './interfaces.js';
|
|
14
|
+
import { meep, createInputScript, getInputSize, createOpReturnOutput, getTxSizeWithoutInputs, getPreimageSize, buildError, addressToLockScript, createSighashPreimage, validateRecipient, } from './utils.js';
|
|
15
|
+
import { P2SH_OUTPUT_SIZE, DUST_LIMIT } from './constants.js';
|
|
16
|
+
import SignatureTemplate from './SignatureTemplate.js';
|
|
17
17
|
const bip68 = require('bip68');
|
|
18
18
|
export class Transaction {
|
|
19
19
|
constructor(address, provider, redeemScript, abiFunction, args, selector) {
|
|
@@ -46,15 +46,14 @@ export class Transaction {
|
|
|
46
46
|
}
|
|
47
47
|
to(toOrOutputs, amount) {
|
|
48
48
|
if (typeof toOrOutputs === 'string' && typeof amount === 'number') {
|
|
49
|
-
this.
|
|
49
|
+
return this.to([{ to: toOrOutputs, amount }]);
|
|
50
50
|
}
|
|
51
|
-
|
|
51
|
+
if (Array.isArray(toOrOutputs) && amount === undefined) {
|
|
52
|
+
toOrOutputs.forEach(validateRecipient);
|
|
52
53
|
this.outputs = this.outputs.concat(toOrOutputs);
|
|
54
|
+
return this;
|
|
53
55
|
}
|
|
54
|
-
|
|
55
|
-
throw new Error('Incorrect arguments passed to function \'to\'');
|
|
56
|
-
}
|
|
57
|
-
return this;
|
|
56
|
+
throw new Error('Incorrect arguments passed to function \'to\'');
|
|
58
57
|
}
|
|
59
58
|
withOpReturn(chunks) {
|
|
60
59
|
this.outputs.push(createOpReturnOutput(chunks));
|
|
@@ -188,6 +187,7 @@ export class Transaction {
|
|
|
188
187
|
});
|
|
189
188
|
}
|
|
190
189
|
setInputsAndOutputs() {
|
|
190
|
+
var _a;
|
|
191
191
|
return __awaiter(this, void 0, void 0, function* () {
|
|
192
192
|
if (this.outputs.length === 0) {
|
|
193
193
|
throw Error('Attempted to build a transaction without outputs');
|
|
@@ -205,9 +205,7 @@ export class Transaction {
|
|
|
205
205
|
const inputSize = getInputSize(placeholderScript) + 1;
|
|
206
206
|
// Calculate amount to send and base fee (excluding additional fees per UTXO)
|
|
207
207
|
const amount = this.outputs.reduce((acc, output) => acc + output.amount, 0);
|
|
208
|
-
let fee = this.hardcodedFee
|
|
209
|
-
? this.hardcodedFee
|
|
210
|
-
: getTxSizeWithoutInputs(this.outputs) * this.feePerByte;
|
|
208
|
+
let fee = (_a = this.hardcodedFee) !== null && _a !== void 0 ? _a : getTxSizeWithoutInputs(this.outputs) * this.feePerByte;
|
|
211
209
|
// Select and gather UTXOs and calculate fees and available funds
|
|
212
210
|
let satsAvailable = 0;
|
|
213
211
|
if (this.inputs.length > 0) {
|
package/dist/module/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { Contract } from './Contract';
|
|
2
|
-
export { Transaction } from './Transaction';
|
|
3
|
-
export { Argument } from './Argument';
|
|
4
|
-
export { default as SignatureTemplate } from './SignatureTemplate';
|
|
1
|
+
export { Contract } from './Contract.js';
|
|
2
|
+
export { Transaction } from './Transaction.js';
|
|
3
|
+
export { Argument } from './Argument.js';
|
|
4
|
+
export { default as SignatureTemplate } from './SignatureTemplate.js';
|
|
5
5
|
export { Artifact, AbiFunction, AbiInput } from '@cashscript/utils';
|
|
6
6
|
export * as utils from '@cashscript/utils';
|
|
7
|
-
export { Utxo, Recipient, SignatureAlgorithm, HashType, Network, } from './interfaces';
|
|
8
|
-
export * from './Errors';
|
|
9
|
-
export
|
|
7
|
+
export { Utxo, Recipient, SignatureAlgorithm, HashType, Network, } from './interfaces.js';
|
|
8
|
+
export * from './Errors.js';
|
|
9
|
+
export { NetworkProvider, BitboxNetworkProvider, BitcoinRpcNetworkProvider, ElectrumNetworkProvider, FullStackNetworkProvider, } from './network/index.js';
|
package/dist/module/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { Contract } from './Contract';
|
|
2
|
-
export { Transaction } from './Transaction';
|
|
3
|
-
export { default as SignatureTemplate } from './SignatureTemplate';
|
|
1
|
+
export { Contract } from './Contract.js';
|
|
2
|
+
export { Transaction } from './Transaction.js';
|
|
3
|
+
export { default as SignatureTemplate } from './SignatureTemplate.js';
|
|
4
4
|
import * as utils_1 from '@cashscript/utils';
|
|
5
5
|
export { utils_1 as utils };
|
|
6
|
-
export { SignatureAlgorithm, HashType, Network, } from './interfaces';
|
|
7
|
-
export * from './Errors';
|
|
8
|
-
export
|
|
6
|
+
export { SignatureAlgorithm, HashType, Network, } from './interfaces.js';
|
|
7
|
+
export * from './Errors.js';
|
|
8
|
+
export { BitboxNetworkProvider, BitcoinRpcNetworkProvider, ElectrumNetworkProvider, FullStackNetworkProvider, } from './network/index.js';
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Transaction } from '@bitauth/libauth';
|
|
2
|
-
import SignatureTemplate from './SignatureTemplate';
|
|
2
|
+
import type SignatureTemplate from './SignatureTemplate.js';
|
|
3
3
|
export interface Utxo {
|
|
4
4
|
txid: string;
|
|
5
5
|
vout: number;
|
|
@@ -30,6 +30,7 @@ export declare enum HashType {
|
|
|
30
30
|
export declare const Network: {
|
|
31
31
|
MAINNET: "mainnet";
|
|
32
32
|
TESTNET: "testnet";
|
|
33
|
+
STAGING: "staging";
|
|
33
34
|
REGTEST: "regtest";
|
|
34
35
|
};
|
|
35
36
|
export declare type Network = (typeof Network)[keyof typeof Network];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Utxo, Network } from '../interfaces';
|
|
2
|
-
import NetworkProvider from './NetworkProvider';
|
|
1
|
+
import { Utxo, Network } from '../interfaces.js';
|
|
2
|
+
import NetworkProvider from './NetworkProvider.js';
|
|
3
3
|
export default class BitboxNetworkProvider implements NetworkProvider {
|
|
4
4
|
network: Network;
|
|
5
5
|
private bitbox;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Utxo, Network } from '../interfaces';
|
|
2
|
-
import NetworkProvider from './NetworkProvider';
|
|
1
|
+
import { Utxo, Network } from '../interfaces.js';
|
|
2
|
+
import NetworkProvider from './NetworkProvider.js';
|
|
3
3
|
declare const RpcClientRetry: any;
|
|
4
4
|
export default class BitcoinRpcNetworkProvider implements NetworkProvider {
|
|
5
5
|
network: Network;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ElectrumCluster } from 'electrum-cash';
|
|
2
|
-
import { Utxo, Network } from '../interfaces';
|
|
3
|
-
import NetworkProvider from './NetworkProvider';
|
|
2
|
+
import { Utxo, Network } from '../interfaces.js';
|
|
3
|
+
import NetworkProvider from './NetworkProvider.js';
|
|
4
4
|
export default class ElectrumNetworkProvider implements NetworkProvider {
|
|
5
5
|
network: Network;
|
|
6
6
|
private manualConnectionManagement?;
|