@mayaprotocol/zcash-js
v1.0.7
Published
Zcash JavaScript library for Maya Protocol - Build and sign Zcash transparent transactions with memo support
Readme
@mayaprotocol/zcash-js
A JavaScript/TypeScript library for interacting with Zcash nodes, designed for Maya Protocol integration.
Installation
npm install @mayaprotocol/zcash-jsFeatures
- Build and sign Zcash transparent transactions
- Support for memo fields in transactions
- UTXO management
- Fee calculation
- TypeScript support
- Works with Zcash mainnet and testnet
Usage
Basic Setup
import { Config, buildTx, signAndFinalize, sendRawTransaction, getUTXOS } from '@mayaprotocol/zcash-js';
const config: Config = {
server: {
host: 'http://localhost:8232', // Your Zcash node URL
user: 'your-rpc-user',
password: 'your-rpc-password'
},
mainnet: true // or false for testnet
};Building and Sending a Transaction
// Get UTXOs for the source address
const utxos = await getUTXOS('t1SourceAddress...', config);
// Build the transaction
const tx = await buildTx(
0, // current block height
't1SourceAddress...', // from address
't1DestinationAddress...', // to address
1000000, // amount in satoshis
utxos,
false // is this a memo transaction?
);
// Sign the transaction
const signedTx = await signAndFinalize(
tx.height,
'your-private-key-hex', // private key for source address
tx.inputs,
tx.outputs
);
// Send the transaction
const txid = await sendRawTransaction(signedTx, config);
console.log('Transaction ID:', txid);Sending a Transaction with Memo
const tx = await buildTx(
0,
't1SourceAddress...',
't1DestinationAddress...',
1000000,
utxos,
false,
'swap:cacao:maya1a7gg93dgwlulsrqf6qtage985ujhpu068zllw7' // memo text
);Address Generation
import { pkToAddr, mainnetPrefix, testnetPrefix } from '@mayaprotocol/zcash-js';
// Generate address from public key
const publicKey = Buffer.from('02aa7ef4b1958837763303a675dea8f63eaf264494072f086acdbc78d0decb0d0f', 'hex');
const address = pkToAddr(publicKey, Buffer.from(testnetPrefix));
console.log('Address:', address); // tmUzzEDRjvE3QC8RBUFD7DTi5LLL4zAEvKWAddress Validation
import { isValidAddr, mainnetPrefix, testnetPrefix } from '@mayaprotocol/zcash-js';
// Validate testnet address
const isValid = isValidAddr('tmUzzEDRjvE3QC8RBUFD7DTi5LLL4zAEvKW', Buffer.from(testnetPrefix));
console.log('Is valid testnet address:', isValid); // true
// Validate mainnet address
const isMainnetValid = isValidAddr('t1R97mnhVqcE7Yq8p7yL4E29gy8etq9V9pG', Buffer.from(mainnetPrefix));
console.log('Is valid mainnet address:', isMainnetValid); // trueAPI Reference
Types
Config
interface Config {
server: {
host: string; // Zcash RPC endpoint URL
user: string; // RPC username
password: string; // RPC password
};
mainnet: boolean; // true for mainnet, false for testnet
}UTXO
interface UTXO {
txid: string;
vout: number;
amount: number;
scriptPubKey: {
hex: string;
addresses: string[];
};
confirmations: number;
}Functions
getUTXOS(address: string, config: Config): Promise<UTXO[]>- Get unspent transaction outputs for an addressbuildTx(height: number, from: string, to: string, amount: number, utxos: UTXO[], extraFeeForMemo: boolean, memo?: string): Promise<BuildTxResult>- Build a transactionsignAndFinalize(height: number, privateKey: string, inputs: Input[], outputs: Output[]): Promise<Buffer>- Sign and finalize a transactionsendRawTransaction(txb: Buffer, config: Config): Promise<string>- Send a signed transactionpkToAddr(publicKey: Buffer, prefix: Buffer): string- Generate address from public keyisValidAddr(address: string, prefix: Buffer): boolean- Validate an addresswaitForTransaction(txid: string, config: Config, maxAttempts?: number): Promise<void>- Wait for transaction confirmation
Requirements
- Node.js >= 14
- A running Zcash node with RPC enabled
License
MIT
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Support
For issues and feature requests, please use the GitLab issue tracker.
