ecash-lib 1.5.2-rc → 2.0.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 +4 -40
- package/dist/address/legacyaddr.d.ts +1 -1
- package/dist/ecc.d.ts +3 -25
- package/dist/ecc.d.ts.map +1 -1
- package/dist/ecc.js +29 -57
- package/dist/ecc.js.map +1 -1
- package/dist/ffi/ecash_lib_wasm_bg_browser.d.ts +1 -0
- package/dist/ffi/ecash_lib_wasm_bg_browser.js +1571 -0
- package/dist/ffi/ecash_lib_wasm_bg_browser.wasm +0 -0
- package/dist/ffi/ecash_lib_wasm_bg_nodejs.wasm +0 -0
- package/dist/hash.d.ts +6 -16
- package/dist/hash.d.ts.map +1 -1
- package/dist/hash.js +18 -18
- package/dist/hash.js.map +1 -1
- package/dist/hdwallet.d.ts +2 -4
- package/dist/hdwallet.d.ts.map +1 -1
- package/dist/hdwallet.js +6 -7
- package/dist/hdwallet.js.map +1 -1
- package/dist/hmac.js +3 -3
- package/dist/hmac.js.map +1 -1
- package/dist/initBrowser.d.ts +1 -11
- package/dist/initBrowser.d.ts.map +1 -1
- package/dist/initBrowser.js +21 -41
- package/dist/initBrowser.js.map +1 -1
- package/dist/initNodeJs.d.ts +1 -2
- package/dist/initNodeJs.d.ts.map +1 -1
- package/dist/initNodeJs.js +16 -30
- package/dist/initNodeJs.js.map +1 -1
- package/dist/io/bytes.js +2 -2
- package/dist/io/bytes.js.map +1 -1
- package/dist/io/hex.js +5 -4
- package/dist/io/hex.js.map +1 -1
- package/dist/io/str.js +3 -2
- package/dist/io/str.js.map +1 -1
- package/dist/io/varsize.js +3 -2
- package/dist/io/varsize.js.map +1 -1
- package/dist/mnemonic.js +4 -3
- package/dist/mnemonic.js.map +1 -1
- package/dist/op.js +6 -5
- package/dist/op.js.map +1 -1
- package/dist/pbkdf2.js +2 -1
- package/dist/pbkdf2.js.map +1 -1
- package/dist/test/testRunner.d.ts +1 -2
- package/dist/test/testRunner.d.ts.map +1 -1
- package/dist/test/testRunner.js +10 -23
- package/dist/test/testRunner.js.map +1 -1
- package/dist/token/alp.d.ts +1 -1
- package/dist/token/alp.d.ts.map +1 -1
- package/dist/token/alp.js +5 -5
- package/dist/token/alp.js.map +1 -1
- package/dist/token/common.d.ts +4 -4
- package/dist/token/common.d.ts.map +1 -1
- package/dist/token/empp.js +2 -1
- package/dist/token/empp.js.map +1 -1
- package/dist/token/slp.d.ts +1 -1
- package/dist/token/slp.d.ts.map +1 -1
- package/dist/token/slp.js +7 -7
- package/dist/token/slp.js.map +1 -1
- package/dist/tx.js +7 -7
- package/dist/tx.js.map +1 -1
- package/dist/txBuilder.d.ts +5 -1
- package/dist/txBuilder.d.ts.map +1 -1
- package/dist/txBuilder.js +12 -11
- package/dist/txBuilder.js.map +1 -1
- package/package.json +1 -1
- package/src/ecc.ts +27 -61
- package/src/ffi/ecash_lib_wasm_bg_browser.d.ts +1 -0
- package/src/ffi/ecash_lib_wasm_bg_browser.js +1571 -0
- package/src/ffi/ecash_lib_wasm_bg_browser.wasm +0 -0
- package/src/ffi/ecash_lib_wasm_bg_nodejs.wasm +0 -0
- package/src/hash.ts +19 -38
- package/src/hdwallet.ts +4 -8
- package/src/initBrowser.ts +18 -25
- package/src/initNodeJs.ts +9 -12
- package/src/test/testRunner.ts +3 -11
- package/src/txBuilder.ts +12 -7
- package/.nyc_output/0fc40ca6-d52c-45eb-b31b-2601ce70b887.json +0 -1
- package/.nyc_output/ac5be6db-4e40-41f8-8b84-7598d4747e57.json +0 -1
- package/.nyc_output/b316d46f-5ea0-4e98-884a-bfbf9cc1d0f8.json +0 -1
- package/.nyc_output/f965566b-9422-4874-b45e-9eefda9c769c.json +0 -1
- package/.nyc_output/processinfo/0fc40ca6-d52c-45eb-b31b-2601ce70b887.json +0 -1
- package/.nyc_output/processinfo/ac5be6db-4e40-41f8-8b84-7598d4747e57.json +0 -1
- package/.nyc_output/processinfo/b316d46f-5ea0-4e98-884a-bfbf9cc1d0f8.json +0 -1
- package/.nyc_output/processinfo/f965566b-9422-4874-b45e-9eefda9c769c.json +0 -1
- package/.nyc_output/processinfo/index.json +0 -1
- package/dist/address/cashaddr.d.ts +0 -78
- package/dist/address/cashaddr.d.ts.map +0 -1
- package/dist/address/cashaddr.js +0 -543
- package/dist/address/cashaddr.js.map +0 -1
- package/dist/cashaddr/cashaddr.d.ts +0 -23
- package/dist/cashaddr/cashaddr.d.ts.map +0 -1
- package/dist/cashaddr/cashaddr.js +0 -325
- package/dist/cashaddr/cashaddr.js.map +0 -1
- package/test.log +0 -82
package/dist/txBuilder.js
CHANGED
|
@@ -3,10 +3,7 @@
|
|
|
3
3
|
// Distributed under the MIT software license, see the accompanying
|
|
4
4
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.P2PKSignatory = exports.P2PKHSignatory = exports.TxBuilder = void 0;
|
|
7
|
-
exports.calcTxFee = calcTxFee;
|
|
8
|
-
exports.flagSignature = flagSignature;
|
|
9
|
-
exports.signWithSigHash = signWithSigHash;
|
|
6
|
+
exports.P2PKSignatory = exports.P2PKHSignatory = exports.signWithSigHash = exports.flagSignature = exports.calcTxFee = exports.TxBuilder = void 0;
|
|
10
7
|
const ecc_js_1 = require("./ecc.js");
|
|
11
8
|
const hash_js_1 = require("./hash.js");
|
|
12
9
|
const writerbytes_js_1 = require("./io/writerbytes.js");
|
|
@@ -61,7 +58,8 @@ class TxBuilder {
|
|
|
61
58
|
return { fixedOutputSum, leftoverIdx, outputs };
|
|
62
59
|
}
|
|
63
60
|
/** Sign the tx built by this builder and return a Tx */
|
|
64
|
-
sign(
|
|
61
|
+
sign(params) {
|
|
62
|
+
const ecc = params?.ecc ?? new ecc_js_1.Ecc();
|
|
65
63
|
const { fixedOutputSum, leftoverIdx, outputs } = this.prepareOutputs();
|
|
66
64
|
const inputs = this.inputs.map(input => (0, tx_js_1.copyTxInput)(input.input));
|
|
67
65
|
const updateSignatories = (ecc, unsignedTx) => {
|
|
@@ -81,13 +79,13 @@ class TxBuilder {
|
|
|
81
79
|
if (inputSum === undefined) {
|
|
82
80
|
throw new Error('Using a leftover output requires setting SignData.value for all inputs');
|
|
83
81
|
}
|
|
84
|
-
if (feePerKb === undefined) {
|
|
82
|
+
if (params?.feePerKb === undefined) {
|
|
85
83
|
throw new Error('Using a leftover output requires setting feePerKb');
|
|
86
84
|
}
|
|
87
|
-
if (!Number.isInteger(feePerKb)) {
|
|
85
|
+
if (!Number.isInteger(params.feePerKb)) {
|
|
88
86
|
throw new Error('feePerKb must be an integer');
|
|
89
87
|
}
|
|
90
|
-
if (dustLimit === undefined) {
|
|
88
|
+
if (params?.dustLimit === undefined) {
|
|
91
89
|
throw new Error('Using a leftover output requires setting dustLimit');
|
|
92
90
|
}
|
|
93
91
|
const dummyUnsignedTx = unsignedTx_js_1.UnsignedTx.dummyFromTx(new tx_js_1.Tx({
|
|
@@ -99,16 +97,16 @@ class TxBuilder {
|
|
|
99
97
|
// Must use dummy here because ECDSA sigs could be too small for fee calc
|
|
100
98
|
updateSignatories(new ecc_js_1.EccDummy(), dummyUnsignedTx);
|
|
101
99
|
let txSize = dummyUnsignedTx.tx.serSize();
|
|
102
|
-
let txFee = calcTxFee(txSize, feePerKb);
|
|
100
|
+
let txFee = calcTxFee(txSize, params.feePerKb);
|
|
103
101
|
const leftoverValue = inputSum - (fixedOutputSum + txFee);
|
|
104
|
-
if (leftoverValue < dustLimit) {
|
|
102
|
+
if (leftoverValue < params.dustLimit) {
|
|
105
103
|
// inputs cannot pay for a dust leftover -> remove & recalc
|
|
106
104
|
outputs.splice(leftoverIdx, 1);
|
|
107
105
|
dummyUnsignedTx.tx.outputs = outputs;
|
|
108
106
|
// Must update signatories again as they might depend on outputs
|
|
109
107
|
updateSignatories(new ecc_js_1.EccDummy(), dummyUnsignedTx);
|
|
110
108
|
txSize = dummyUnsignedTx.tx.serSize();
|
|
111
|
-
txFee = calcTxFee(txSize, feePerKb);
|
|
109
|
+
txFee = calcTxFee(txSize, params.feePerKb);
|
|
112
110
|
}
|
|
113
111
|
else {
|
|
114
112
|
outputs[leftoverIdx].value = leftoverValue;
|
|
@@ -133,6 +131,7 @@ exports.TxBuilder = TxBuilder;
|
|
|
133
131
|
function calcTxFee(txSize, feePerKb) {
|
|
134
132
|
return (BigInt(txSize) * BigInt(feePerKb) + 999n) / 1000n;
|
|
135
133
|
}
|
|
134
|
+
exports.calcTxFee = calcTxFee;
|
|
136
135
|
/** Append the sighash flags to the signature */
|
|
137
136
|
function flagSignature(sig, sigHashFlags) {
|
|
138
137
|
const writer = new writerbytes_js_1.WriterBytes(sig.length + 1);
|
|
@@ -140,6 +139,7 @@ function flagSignature(sig, sigHashFlags) {
|
|
|
140
139
|
writer.putU8(sigHashFlags.toInt() & 0xff);
|
|
141
140
|
return writer.data;
|
|
142
141
|
}
|
|
142
|
+
exports.flagSignature = flagSignature;
|
|
143
143
|
/**
|
|
144
144
|
* Sign the sighash using Schnorr for BIP143 signatures and ECDSA for Legacy
|
|
145
145
|
* signatures, and then flags the signature correctly
|
|
@@ -150,6 +150,7 @@ function signWithSigHash(ecc, sk, sigHash, sigHashType) {
|
|
|
150
150
|
: ecc.schnorrSign(sk, sigHash);
|
|
151
151
|
return flagSignature(sig, sigHashType);
|
|
152
152
|
}
|
|
153
|
+
exports.signWithSigHash = signWithSigHash;
|
|
153
154
|
/** Signatory for a P2PKH input. Always uses Schnorr signatures */
|
|
154
155
|
const P2PKHSignatory = (sk, pk, sigHashType) => {
|
|
155
156
|
return (ecc, input) => {
|
package/dist/txBuilder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"txBuilder.js","sourceRoot":"","sources":["../src/txBuilder.ts"],"names":[],"mappings":";AAAA,4CAA4C;AAC5C,mEAAmE;AACnE,sEAAsE;;;
|
|
1
|
+
{"version":3,"file":"txBuilder.js","sourceRoot":"","sources":["../src/txBuilder.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/ecc.ts
CHANGED
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
// Distributed under the MIT software license, see the accompanying
|
|
3
3
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
4
4
|
|
|
5
|
-
import { GlobalThisExt } from './hash';
|
|
6
|
-
|
|
7
5
|
/** Interface to abstract over Elliptic Curve Cryptography */
|
|
8
6
|
export interface Ecc {
|
|
9
7
|
/** Derive a public key from secret key. */
|
|
@@ -55,75 +53,43 @@ export class EccDummy implements Ecc {
|
|
|
55
53
|
}
|
|
56
54
|
}
|
|
57
55
|
|
|
58
|
-
|
|
59
|
-
class EccUninitialized implements Ecc {
|
|
60
|
-
constructor() {
|
|
61
|
-
if (!Ecc.prototype.derivePubkey) {
|
|
62
|
-
throw new Error('Ecc not initialized. Call initWasm first.');
|
|
63
|
-
}
|
|
64
|
-
}
|
|
56
|
+
const ECC: { ecc?: Ecc } = {};
|
|
65
57
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
58
|
+
export function __setEcc(ecc: Ecc) {
|
|
59
|
+
ECC.ecc = ecc;
|
|
60
|
+
}
|
|
69
61
|
|
|
70
|
-
|
|
71
|
-
|
|
62
|
+
export class Ecc implements Ecc {
|
|
63
|
+
/** Derive a public key from secret key. */
|
|
64
|
+
derivePubkey(seckey: Uint8Array): Uint8Array {
|
|
65
|
+
return ECC.ecc!.derivePubkey(seckey);
|
|
72
66
|
}
|
|
73
67
|
|
|
74
|
-
|
|
75
|
-
|
|
68
|
+
/** Sign an ECDSA signature. msg needs to be a 32-byte hash */
|
|
69
|
+
ecdsaSign(seckey: Uint8Array, msg: Uint8Array): Uint8Array {
|
|
70
|
+
return ECC.ecc!.ecdsaSign(seckey, msg);
|
|
76
71
|
}
|
|
77
72
|
|
|
78
|
-
|
|
79
|
-
|
|
73
|
+
/** Sign a Schnorr signature. msg needs to be a 32-byte hash */
|
|
74
|
+
schnorrSign(seckey: Uint8Array, msg: Uint8Array): Uint8Array {
|
|
75
|
+
return ECC.ecc!.schnorrSign(seckey, msg);
|
|
80
76
|
}
|
|
81
77
|
|
|
82
|
-
|
|
83
|
-
|
|
78
|
+
/**
|
|
79
|
+
* Return whether the given secret key is valid, i.e. whether is of correct
|
|
80
|
+
* length (32 bytes) and is on the curve.
|
|
81
|
+
*/
|
|
82
|
+
isValidSeckey(seckey: Uint8Array): boolean {
|
|
83
|
+
return ECC.ecc!.isValidSeckey(seckey);
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
/** Add a scalar to a secret key */
|
|
87
|
+
seckeyAdd(a: Uint8Array, b: Uint8Array): Uint8Array {
|
|
88
|
+
return ECC.ecc!.seckeyAdd(a, b);
|
|
88
89
|
}
|
|
89
|
-
}
|
|
90
90
|
|
|
91
|
-
/**
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
* - AppOne has ecash-lib as a dependency
|
|
96
|
-
* - AppTwo has ecash-lib as a dependency
|
|
97
|
-
* - AppOne has AppTwo as a dependency
|
|
98
|
-
*
|
|
99
|
-
* So, we expect AppOne to use AppTwo methods that need initWasm()
|
|
100
|
-
* However, if we initWasm() in AppOne, these methods are not available in AppTwo
|
|
101
|
-
*
|
|
102
|
-
* We can get them into the globalThis with initWasm, but we still need Ecc to dynamically
|
|
103
|
-
* check the globalThis and realize it is there --- to preserve lib syntax
|
|
104
|
-
*
|
|
105
|
-
* In this way, users can still call "new Ecc()"
|
|
106
|
-
*
|
|
107
|
-
* With just globalThis, users must call "new (globalThis as unknown as GlobalThis).ecashlib.Ecc()"
|
|
108
|
-
*
|
|
109
|
-
* Note that we "redefine" EccUninitialized in the implementation, because we do not want
|
|
110
|
-
* console.log(Ecc) to give "EccUnitialized" even when it works; "EccProxy" is more accurate
|
|
111
|
-
*/
|
|
112
|
-
|
|
113
|
-
export const Ecc: new () => Ecc = function () {
|
|
114
|
-
const currentEcc =
|
|
115
|
-
'ecashlib' in globalThis &&
|
|
116
|
-
'Ecc' in (globalThis as unknown as GlobalThisExt).ecashlib
|
|
117
|
-
? (globalThis as unknown as GlobalThisExt).ecashlib.Ecc
|
|
118
|
-
: EccUninitialized;
|
|
119
|
-
return new currentEcc();
|
|
120
|
-
} as unknown as { new (): Ecc };
|
|
121
|
-
|
|
122
|
-
export function __setEcc(ecc: { new (): Ecc }) {
|
|
123
|
-
Object.assign(globalThis, {
|
|
124
|
-
ecashlib: {
|
|
125
|
-
...((globalThis as Record<string, any>).ecashlib || {}),
|
|
126
|
-
Ecc: ecc,
|
|
127
|
-
},
|
|
128
|
-
} as Partial<GlobalThisExt>);
|
|
91
|
+
/** Add a scalar to a public key (adding G*b) */
|
|
92
|
+
pubkeyAdd(a: Uint8Array, b: Uint8Array): Uint8Array {
|
|
93
|
+
return ECC.ecc!.pubkeyAdd(a, b);
|
|
94
|
+
}
|
|
129
95
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const ECASH_LIB_WASM_BASE64: string;
|