UNPKG

@ecash/lib

Version:

Library for eCash transaction building

105 lines (88 loc) 4.33 kB
# ecash-lib Library for [eCash](https://e.cash) transaction building. - Compatible: Works on the browser using webpack, on NodeJS, jest etc. - Fast: Accelerated using the highly optimized secp256k1 library compiled to WebAssembly - Simple to use: Describe the tx to build in one TxBuilder object, and build the tx with just one `sign` call - SLP/ALP enabled: Functions to build the SLP/ALP eMPP scripts - Flexible: The "Signatory" mechanism can accommodate anything from simple wallet transfers to complex Script covenants, e.g. eCash Agora - Schnorr: eCash lib supports Schnorr and ECDSA signatures - Precise leftover ("change") computation: The tx size estimator will be exact for Schnorr signatures and very close for ECDSA signatures, even for complex scripts ## Usage This library works for both browser and NodeJS. ### Installation `npm install --save ecash-lib` ### Setup To sign signatures, you need an "Ecc" instance: ```ts import { Ecc } from 'ecash-lib'; const ecc = new Ecc(); ``` **Note: You should only call this function once, as it's fairly expensive to setup, it internally precomputes some elliptic curve field elements, which takes some time** ### Usage Now you're ready to sign your first transactions: ```ts import { Ecc, P2PKHSignatory, Script, TxBuilder, fromHex, shaRmd160, toHex, ALL_BIP143, } from 'ecash-lib'; // Build a signature context for elliptic curve cryptography (ECC) const ecc = new Ecc(); const walletSk = fromHex( 'e6ae1669c47d092eff3eb652bea535331c338e29f34be709bc4055655cd0e950', ); const walletPk = ecc.derivePubkey(walletSk); const walletPkh = shaRmd160(walletPk); const walletP2pkh = Script.p2pkh(walletPkh); // TxId with unspent funds for the above wallet const walletUtxo = { txid: '0000000000000000000000000000000000000000000000000000000000000000', outIdx: 0, }; // Tx builder const txBuild = new TxBuilder({ inputs: [ { input: { prevOut: walletUtxo, signData: { value: 1000, outputScript: walletP2pkh, }, }, signatory: P2PKHSignatory(walletSk, walletPk, ALL_BIP143), }, ], outputs: [ { value: 0, script: new Script(fromHex('6a68656c6c6f')), }, walletP2pkh, ], }); const tx = txBuild.sign(ecc, 1000, 546); const rawTx = tx.ser(); console.log(toHex(rawTx)); ``` ## Changelog - 0.1.1 - Validation that feePerKb is an integer - 0.1.2 - Upgrade dependencies [D16373](https://reviews.bitcoinabc.org/D16373) - 0.1.3 - Export `slpAmount` function [D16379](https://reviews.bitcoinabc.org/D16379) - 0.2.0 - Add `Script.fromAddress` method to convert cashaddr addresses to `Script` - 0.2.1 - Fix fee estimation for signatories that depend on tx outputs [D16673](https://reviews.bitcoinabc.org/D16673) - 1.0.0 - **(Breaking change)** Modify `GenesisInfo` so that `auth` and `data` types match [D17194](https://reviews.bitcoinabc.org/D17194) - 1.0.1 - Include `ecashaddrjs` and `chronik-client` installations from `npmjs` instead of local, to prevent need for peer dependencies [D17215](https://reviews.bitcoinabc.org/D17215) - 1.1.0 - Add support for the original pre-UAHF Bitcoin signatures, so we can sign transactions for other blockchains like BTC/DOGE/... [D17255](https://reviews.bitcoinabc.org/D17255) - 1.2.0 - Add `Address` class for cashaddr and legacy addresses. [D17269](https://reviews.bitcoinabc.org/D17269) - 1.2.1 - Patch type check causing txBuilder txs using change to fail in NodeJS environments [D17461](https://reviews.bitcoinabc.org/D17461) - 1.3.0 - Add `toHex()` method to `Script` to allow simple conversion to hex string [D17527](https://reviews.bitcoinabc.org/D17527) - 1.4.0 - Add `HdNode`, `entropyToMnemonic`, `mnemonicToEntropy` and `mnemonicToSeed` to complete wallet functionality [D17619](https://reviews.bitcoinabc.org/D17619) - 1.4.1 - Patch import in `mnemonic.ts` [D17621](https://reviews.bitcoinabc.org/D17621) - 1.5.0 - Support custom WASM URL and module [D17622](https://reviews.bitcoinabc.org/D17622) - 1.5.1 - `Address.withPrefix()` returns same prefix if unchanged (instead of throwing an error) [D17623](https://reviews.bitcoinabc.org/D17623)