Library for eCash transaction building
npm install ecash-libLibrary for eCash 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
This library works for both browser and NodeJS.
npm install --save ecash-lib
Here's how to sign your first transaction:
``ts
import {
Ecc,
P2PKHSignatory,
Script,
TxBuilder,
fromHex,
shaRmd160,
toHex,
ALL_BIP143,
} from 'ecash-lib';
const walletSk = fromHex(
'e6ae1669c47d092eff3eb652bea535331c338e29f34be709bc4055655cd0e950',
);
const walletPk = new 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: {
sats: 1000n,
outputScript: walletP2pkh,
},
},
signatory: P2PKHSignatory(walletSk, walletPk, ALL_BIP143),
},
],
outputs: [
{
sats: 0n,
script: new Script(fromHex('6a68656c6c6f')),
},
walletP2pkh,
],
});
const tx = txBuild.sign({ feePerKb: 1000n, dustSats: 546n });
const rawTx = tx.ser();
console.log(toHex(rawTx));
`
- 0.1.1 - Validation that feePerKb is an integer
- 0.1.2 - Upgrade dependencies D16373
- 0.1.3 - Export slpAmount function D16379Script.fromAddress
- 0.2.0 - Add method to convert cashaddr addresses to ScriptGenesisInfo
- 0.2.1 - Fix fee estimation for signatories that depend on tx outputs D16673
- 1.0.0 - (Breaking change) Modify so that auth and data types match D17194ecashaddrjs
- 1.0.1 - Include and chronik-client installations from npmjs instead of local, to prevent need for peer dependencies D17215Address
- 1.1.0 - Add support for the original pre-UAHF Bitcoin signatures, so we can sign transactions for other blockchains like BTC/DOGE/... D17255
- 1.2.0 - Add class for cashaddr and legacy addresses. D17269toHex()
- 1.2.1 - Patch type check causing txBuilder txs using change to fail in NodeJS environments D17461
- 1.3.0 - Add method to Script to allow simple conversion to hex string D17527HdNode
- 1.4.0 - Add , entropyToMnemonic, mnemonicToEntropy and mnemonicToSeed to complete wallet functionality D17619mnemonic.ts
- 1.4.1 - Patch import in D17621Address.withPrefix()
- 1.5.0 - Support custom WASM URL and module D17622
- 1.5.1 - returns same prefix if unchanged (instead of throwing an error) D17623initWasm
- 2.0.0 - Remove , auto-load the WebAssembly instead. Remove unneeded ecc parameters, esp. in TxBuilder.sign and HdNode.fromSeed D17639 D17640signRecoverable
- 2.1.0 - Add and recoverSig to Ecc D17667ecash-wallet
- 3.0.0 - Improve types and shapes in line with chronik proto updates D17650
- 3.1.0 - Add methods for signing and verifying messages D17778
- 3.2.0 - Add method for parsing pushes from an EMPP OP_RETURN D18057
- 4.0.0 - Add constants and types to support D17822parse
- 4.1.0 - Add Tx deserialization methods D18393
- 4.2.0 - Add Tx.txid() method to compute the TxId of a transaction D18394
- 4.3.0 - Export a Tx.toHex() method D18396
- 4.3.1 - Modify union type of payment outputs to include ecash-wallet template OP_RETURN D18403
- 4.3.2 - Export additional token types D18548
- 4.3.3 - Modify payment.GenesisAction to support minting NFTs (SLP_TOKEN_TYPE_NFT1_CHILD genesis txs) D18557
- 4.4.0 - Add methods to support parsing of OP_RETURN outputScript strings as returned by chronik-client D18659fromTx
- 4.5.0 - Add method to support creating a TxBuilder from a Tx, useful for creating a TxBuilder from a serialized partially-signed Tx in order to add postage and broadcast D18838testRunner
- 4.5.1 - Add updated to support CI builds of monorepo apps that rely on this from the published version, e.g. ecash-agora D18844ecash-wallet
- 4.5.2 - Export constants used in to calculate chained XEC-only txs for txs that would otherwise exceed MAX_TX_SERSIZE. There is no change in behavior. D18918xpub
- 4.6.0 - Support for in hdwallet.ts` D19406
- 4.7.0 - Support for custom prefix in all static Address constructors D19441