ecash-lib 2.1.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -3
- package/dist/consts.d.ts +2 -2
- package/dist/consts.d.ts.map +1 -1
- package/dist/consts.js +3 -3
- package/dist/consts.js.map +1 -1
- package/dist/ecc.d.ts +18 -1
- package/dist/ecc.d.ts.map +1 -1
- package/dist/ecc.js +29 -0
- package/dist/ecc.js.map +1 -1
- package/dist/ffi/ecash_lib_wasm_bg_browser.js +1743 -1679
- package/dist/ffi/ecash_lib_wasm_bg_browser.wasm +0 -0
- package/dist/ffi/ecash_lib_wasm_bg_browser.wasm.d.ts +13 -11
- package/dist/ffi/ecash_lib_wasm_bg_nodejs.wasm +0 -0
- package/dist/ffi/ecash_lib_wasm_bg_nodejs.wasm.d.ts +13 -11
- package/dist/ffi/ecash_lib_wasm_browser.d.ts +27 -11
- package/dist/ffi/ecash_lib_wasm_browser.js +64 -14
- package/dist/ffi/ecash_lib_wasm_nodejs.d.ts +14 -0
- package/dist/ffi/ecash_lib_wasm_nodejs.js +64 -14
- package/dist/hdwallet.d.ts.map +1 -1
- package/dist/hdwallet.js +1 -0
- package/dist/hdwallet.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/messages.d.ts +32 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +102 -0
- package/dist/messages.js.map +1 -0
- package/dist/op.d.ts.map +1 -1
- package/dist/op.js +4 -3
- package/dist/op.js.map +1 -1
- package/dist/sigHashType.js.map +1 -1
- package/dist/test/testRunner.d.ts +2 -2
- package/dist/test/testRunner.d.ts.map +1 -1
- package/dist/test/testRunner.js +13 -10
- package/dist/test/testRunner.js.map +1 -1
- package/dist/token/alp.d.ts +6 -6
- package/dist/token/alp.d.ts.map +1 -1
- package/dist/token/alp.js +13 -13
- package/dist/token/alp.js.map +1 -1
- package/dist/token/common.d.ts +0 -1
- package/dist/token/common.d.ts.map +1 -1
- package/dist/token/common.js.map +1 -1
- package/dist/token/slp.d.ts +7 -7
- package/dist/token/slp.d.ts.map +1 -1
- package/dist/token/slp.js +25 -25
- package/dist/token/slp.js.map +1 -1
- package/dist/tx.d.ts +2 -2
- package/dist/tx.d.ts.map +1 -1
- package/dist/tx.js +5 -5
- package/dist/tx.js.map +1 -1
- package/dist/txBuilder.d.ts +3 -3
- package/dist/txBuilder.d.ts.map +1 -1
- package/dist/txBuilder.js +13 -13
- package/dist/txBuilder.js.map +1 -1
- package/dist/unsignedTx.js +2 -2
- package/dist/unsignedTx.js.map +1 -1
- package/package.json +5 -7
- package/src/consts.ts +2 -2
- package/src/ecc.ts +54 -2
- package/src/ffi/ecash_lib_wasm_bg_browser.js +1743 -1679
- package/src/ffi/ecash_lib_wasm_bg_browser.wasm +0 -0
- package/src/ffi/ecash_lib_wasm_bg_browser.wasm.d.ts +13 -11
- package/src/ffi/ecash_lib_wasm_bg_nodejs.wasm +0 -0
- package/src/ffi/ecash_lib_wasm_bg_nodejs.wasm.d.ts +13 -11
- package/src/ffi/ecash_lib_wasm_browser.d.ts +27 -11
- package/src/ffi/ecash_lib_wasm_browser.js +64 -14
- package/src/ffi/ecash_lib_wasm_nodejs.d.ts +14 -0
- package/src/ffi/ecash_lib_wasm_nodejs.js +64 -14
- package/src/hdwallet.ts +1 -0
- package/src/index.ts +1 -0
- package/src/messages.ts +125 -0
- package/src/op.ts +5 -3
- package/src/sigHashType.ts +2 -2
- package/src/test/testRunner.ts +15 -13
- package/src/token/alp.ts +17 -17
- package/src/token/common.ts +0 -2
- package/src/token/slp.ts +27 -27
- package/src/tx.ts +7 -7
- package/src/txBuilder.ts +16 -16
- package/src/unsignedTx.ts +2 -2
- package/.eslintignore +0 -8
- package/eslint.config.js +0 -16
package/README.md
CHANGED
|
@@ -52,7 +52,7 @@ const txBuild = new TxBuilder({
|
|
|
52
52
|
input: {
|
|
53
53
|
prevOut: walletUtxo,
|
|
54
54
|
signData: {
|
|
55
|
-
|
|
55
|
+
sats: 1000n,
|
|
56
56
|
outputScript: walletP2pkh,
|
|
57
57
|
},
|
|
58
58
|
},
|
|
@@ -61,13 +61,13 @@ const txBuild = new TxBuilder({
|
|
|
61
61
|
],
|
|
62
62
|
outputs: [
|
|
63
63
|
{
|
|
64
|
-
|
|
64
|
+
sats: 0n,
|
|
65
65
|
script: new Script(fromHex('6a68656c6c6f')),
|
|
66
66
|
},
|
|
67
67
|
walletP2pkh,
|
|
68
68
|
],
|
|
69
69
|
});
|
|
70
|
-
const tx = txBuild.sign({ feePerKb:
|
|
70
|
+
const tx = txBuild.sign({ feePerKb: 1000n, dustSats: 546n });
|
|
71
71
|
const rawTx = tx.ser();
|
|
72
72
|
console.log(toHex(rawTx));
|
|
73
73
|
```
|
|
@@ -91,3 +91,5 @@ console.log(toHex(rawTx));
|
|
|
91
91
|
- 1.5.1 - `Address.withPrefix()` returns same prefix if unchanged (instead of throwing an error) [D17623](https://reviews.bitcoinabc.org/D17623)
|
|
92
92
|
- 2.0.0 - Remove `initWasm`, auto-load the WebAssembly instead. Remove unneeded `ecc` parameters, esp. in `TxBuilder.sign` and `HdNode.fromSeed` [D17639](https://reviews.bitcoinabc.org/D17639) [D17640](https://reviews.bitcoinabc.org/D17640)
|
|
93
93
|
- 2.1.0 - Add `signRecoverable` and `recoverSig` to `Ecc` [D17667](https://reviews.bitcoinabc.org/D17667)
|
|
94
|
+
- 3.0.0 - Improve types and shapes in line with chronik proto updates [D17650](https://reviews.bitcoinabc.org/D17650)
|
|
95
|
+
- 3.1.0 - Add methods for signing and verifying messages [D17778](https://reviews.bitcoinabc.org/D17778)
|
package/dist/consts.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Default dust limit on the eCash network. */
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const DEFAULT_DUST_SATS = 546n;
|
|
3
3
|
/** Default fee per kB on the eCash network. */
|
|
4
|
-
export declare const
|
|
4
|
+
export declare const DEFAULT_FEE_SATS_PER_KB = 1000n;
|
|
5
5
|
//# sourceMappingURL=consts.d.ts.map
|
package/dist/consts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AAIA,+CAA+C;AAC/C,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AAIA,+CAA+C;AAC/C,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,+CAA+C;AAC/C,eAAO,MAAM,uBAAuB,QAAQ,CAAC"}
|
package/dist/consts.js
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
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.
|
|
6
|
+
exports.DEFAULT_FEE_SATS_PER_KB = exports.DEFAULT_DUST_SATS = void 0;
|
|
7
7
|
/** Default dust limit on the eCash network. */
|
|
8
|
-
exports.
|
|
8
|
+
exports.DEFAULT_DUST_SATS = 546n;
|
|
9
9
|
/** Default fee per kB on the eCash network. */
|
|
10
|
-
exports.
|
|
10
|
+
exports.DEFAULT_FEE_SATS_PER_KB = 1000n;
|
|
11
11
|
//# sourceMappingURL=consts.js.map
|
package/dist/consts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":";AAAA,4CAA4C;AAC5C,mEAAmE;AACnE,sEAAsE;;;AAEtE,+CAA+C;AAClC,QAAA,
|
|
1
|
+
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":";AAAA,4CAA4C;AAC5C,mEAAmE;AACnE,sEAAsE;;;AAEtE,+CAA+C;AAClC,QAAA,iBAAiB,GAAG,IAAI,CAAC;AACtC,+CAA+C;AAClC,QAAA,uBAAuB,GAAG,KAAK,CAAC"}
|
package/dist/ecc.d.ts
CHANGED
|
@@ -4,8 +4,18 @@ export interface Ecc {
|
|
|
4
4
|
derivePubkey(seckey: Uint8Array): Uint8Array;
|
|
5
5
|
/** Sign an ECDSA signature. msg needs to be a 32-byte hash */
|
|
6
6
|
ecdsaSign(seckey: Uint8Array, msg: Uint8Array): Uint8Array;
|
|
7
|
+
/**
|
|
8
|
+
* Verify an ECDSA signature. msg needs to be a 32-byte hash.
|
|
9
|
+
* Throws an exception if the signature is invalid.
|
|
10
|
+
**/
|
|
11
|
+
ecdsaVerify(sig: Uint8Array, msg: Uint8Array, pk: Uint8Array): void;
|
|
7
12
|
/** Sign a Schnorr signature. msg needs to be a 32-byte hash */
|
|
8
13
|
schnorrSign(seckey: Uint8Array, msg: Uint8Array): Uint8Array;
|
|
14
|
+
/**
|
|
15
|
+
* Verify a Schnorr signature. msg needs to be a 32-byte hash.
|
|
16
|
+
* Throws an exception if the signature is invalid.
|
|
17
|
+
**/
|
|
18
|
+
schnorrVerify(sig: Uint8Array, msg: Uint8Array, pk: Uint8Array): void;
|
|
9
19
|
/**
|
|
10
20
|
* Return whether the given secret key is valid, i.e. whether is of correct
|
|
11
21
|
* length (32 bytes) and is on the curve.
|
|
@@ -19,19 +29,26 @@ export interface Ecc {
|
|
|
19
29
|
signRecoverable(seckey: Uint8Array, msg: Uint8Array): Uint8Array;
|
|
20
30
|
/** Recover the public key of an ECDSA signed signature (with recovery ID) */
|
|
21
31
|
recoverSig(sig: Uint8Array, msg: Uint8Array): Uint8Array;
|
|
32
|
+
/** Compress an uncompressed public key (must start with 0x04) */
|
|
33
|
+
compressPk(pk: Uint8Array): Uint8Array;
|
|
22
34
|
}
|
|
23
35
|
/** Dummy Ecc impl that always returns 0, useful for measuring tx size */
|
|
24
36
|
export declare class EccDummy implements Ecc {
|
|
25
37
|
derivePubkey(_seckey: Uint8Array): Uint8Array;
|
|
26
38
|
ecdsaSign(_seckey: Uint8Array, _msg: Uint8Array): Uint8Array;
|
|
39
|
+
ecdsaVerify(_sig: Uint8Array, _msg: Uint8Array, _pk: Uint8Array): void;
|
|
27
40
|
schnorrSign(_seckey: Uint8Array, _msg: Uint8Array): Uint8Array;
|
|
41
|
+
schnorrVerify(_sig: Uint8Array, _msg: Uint8Array, _pk: Uint8Array): void;
|
|
28
42
|
isValidSeckey(_seckey: Uint8Array): boolean;
|
|
29
43
|
seckeyAdd(_a: Uint8Array, _b: Uint8Array): Uint8Array;
|
|
30
44
|
pubkeyAdd(_a: Uint8Array, _b: Uint8Array): Uint8Array;
|
|
31
45
|
signRecoverable(_seckey: Uint8Array, _msg: Uint8Array): Uint8Array;
|
|
32
46
|
recoverSig(_sig: Uint8Array, _msg: Uint8Array): Uint8Array;
|
|
47
|
+
compressPk(_pk: Uint8Array): Uint8Array;
|
|
33
48
|
}
|
|
34
|
-
|
|
49
|
+
type FfiEcc = Omit<Ecc, 'compressPk'>;
|
|
50
|
+
export declare function __setEcc(ecc: FfiEcc): void;
|
|
35
51
|
export declare class Ecc implements Ecc {
|
|
36
52
|
}
|
|
53
|
+
export {};
|
|
37
54
|
//# sourceMappingURL=ecc.d.ts.map
|
package/dist/ecc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecc.d.ts","sourceRoot":"","sources":["../src/ecc.ts"],"names":[],"mappings":"AAIA,6DAA6D;
|
|
1
|
+
{"version":3,"file":"ecc.d.ts","sourceRoot":"","sources":["../src/ecc.ts"],"names":[],"mappings":"AAIA,6DAA6D;AAE7D,MAAM,WAAW,GAAG;IAChB,2CAA2C;IAC3C,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;IAE7C,8DAA8D;IAC9D,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAAC;IAE3D;;;QAGI;IACJ,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,GAAG,IAAI,CAAC;IAEpE,+DAA+D;IAC/D,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAAC;IAE7D;;;QAGI;IACJ,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,GAAG,IAAI,CAAC;IAEtE;;;OAGG;IACH,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;IAE3C,mCAAmC;IACnC,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IAEpD,gDAAgD;IAChD,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IAEpD,mEAAmE;IACnE,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAAC;IAEjE,6EAA6E;IAC7E,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAAC;IAEzD,iEAAiE;IACjE,UAAU,CAAC,EAAE,EAAE,UAAU,GAAG,UAAU,CAAC;CAC1C;AAED,yEAAyE;AACzE,qBAAa,QAAS,YAAW,GAAG;IAChC,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU;IAI7C,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU;IAI5D,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI;IAEtE,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU;IAI9D,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI;IAExE,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO;IAI3C,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,GAAG,UAAU;IAIrD,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,GAAG,UAAU;IAIrD,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU;IAIlE,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU;IAI1D,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU;CAG1C;AAED,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AAGtC,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,QAEnC;AAGD,qBAAa,GAAI,YAAW,GAAG;CAmE9B"}
|
package/dist/ecc.js
CHANGED
|
@@ -12,9 +12,11 @@ class EccDummy {
|
|
|
12
12
|
ecdsaSign(_seckey, _msg) {
|
|
13
13
|
return new Uint8Array(73);
|
|
14
14
|
}
|
|
15
|
+
ecdsaVerify(_sig, _msg, _pk) { }
|
|
15
16
|
schnorrSign(_seckey, _msg) {
|
|
16
17
|
return new Uint8Array(64);
|
|
17
18
|
}
|
|
19
|
+
schnorrVerify(_sig, _msg, _pk) { }
|
|
18
20
|
isValidSeckey(_seckey) {
|
|
19
21
|
return false;
|
|
20
22
|
}
|
|
@@ -30,6 +32,9 @@ class EccDummy {
|
|
|
30
32
|
recoverSig(_sig, _msg) {
|
|
31
33
|
return new Uint8Array(33);
|
|
32
34
|
}
|
|
35
|
+
compressPk(_pk) {
|
|
36
|
+
return new Uint8Array(33);
|
|
37
|
+
}
|
|
33
38
|
}
|
|
34
39
|
exports.EccDummy = EccDummy;
|
|
35
40
|
const ECC = {};
|
|
@@ -37,6 +42,7 @@ function __setEcc(ecc) {
|
|
|
37
42
|
ECC.ecc = ecc;
|
|
38
43
|
}
|
|
39
44
|
exports.__setEcc = __setEcc;
|
|
45
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging
|
|
40
46
|
class Ecc {
|
|
41
47
|
/** Derive a public key from secret key. */
|
|
42
48
|
derivePubkey(seckey) {
|
|
@@ -46,10 +52,24 @@ class Ecc {
|
|
|
46
52
|
ecdsaSign(seckey, msg) {
|
|
47
53
|
return ECC.ecc.ecdsaSign(seckey, msg);
|
|
48
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Verify an ECDSA signature. msg needs to be a 32-byte hash.
|
|
57
|
+
* Throws an exception if the signature is invalid.
|
|
58
|
+
**/
|
|
59
|
+
ecdsaVerify(sig, msg, pk) {
|
|
60
|
+
ECC.ecc?.ecdsaVerify(sig, msg, pk);
|
|
61
|
+
}
|
|
49
62
|
/** Sign a Schnorr signature. msg needs to be a 32-byte hash */
|
|
50
63
|
schnorrSign(seckey, msg) {
|
|
51
64
|
return ECC.ecc.schnorrSign(seckey, msg);
|
|
52
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Verify a Schnorr signature. msg needs to be a 32-byte hash.
|
|
68
|
+
* Throws an exception if the signature is invalid.
|
|
69
|
+
**/
|
|
70
|
+
schnorrVerify(sig, msg, pk) {
|
|
71
|
+
ECC.ecc?.schnorrVerify(sig, msg, pk);
|
|
72
|
+
}
|
|
53
73
|
/**
|
|
54
74
|
* Return whether the given secret key is valid, i.e. whether is of correct
|
|
55
75
|
* length (32 bytes) and is on the curve.
|
|
@@ -71,6 +91,15 @@ class Ecc {
|
|
|
71
91
|
recoverSig(sig, msg) {
|
|
72
92
|
return ECC.ecc.recoverSig(sig, msg);
|
|
73
93
|
}
|
|
94
|
+
compressPk(pk) {
|
|
95
|
+
if (pk[0] != 0x04) {
|
|
96
|
+
throw new Error('Uncompressed pubkey must start with 0x04');
|
|
97
|
+
}
|
|
98
|
+
const compressedPk = new Uint8Array(33);
|
|
99
|
+
compressedPk[0] = 0x02 | (pk[64] & 0x01);
|
|
100
|
+
compressedPk.set(pk.slice(1, 33), 1);
|
|
101
|
+
return compressedPk;
|
|
102
|
+
}
|
|
74
103
|
}
|
|
75
104
|
exports.Ecc = Ecc;
|
|
76
105
|
//# sourceMappingURL=ecc.js.map
|
package/dist/ecc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecc.js","sourceRoot":"","sources":["../src/ecc.ts"],"names":[],"mappings":";AAAA,4CAA4C;AAC5C,mEAAmE;AACnE,sEAAsE;;;
|
|
1
|
+
{"version":3,"file":"ecc.js","sourceRoot":"","sources":["../src/ecc.ts"],"names":[],"mappings":"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"}
|