
Security News
Deno 2.2 Improves Dependency Management and Expands Node.js Compatibility
Deno 2.2 enhances Node.js compatibility, improves dependency management, adds OpenTelemetry support, and expands linting and task automation for developers.
:warning: This is pre-alpha software and not suitable for production apps yet.
An instant, self-custodial Bitcoin wallet for JS devs.
This Typescript library offers JS developers a way to incorporate an on-chain, self-custodial Bitcoin wallet into their projects.
# Using Yarn
yarn add beignet
# Or, using NPM
npm i -S beignet
git clone git@github.com:synonymdev/beignet.git && cd beignet
npm i && npm run build
npm run test
npm run example
import { Wallet, generateMnemonic } from 'beignet';
// Generate a mnemonic phrase
const mnemonic = generateMnemonic();
// Create a wallet instance
const createWalletRes = await Wallet.create({ mnemonic });
if (createWalletRes.isErr()) return;
const wallet = createWalletRes.value;
// View wallet data (addresses, indexes, utxos, transactions, etc.)
const walletData = wallet.data;
// Get receiving address
const address = await wallet.getAddress();
// Get address balance
const addressBalanceRes = await wallet.getAddressBalance(address);
if (addressBalance.isErr()) return;
const addressBalance = addressBalanceRes.value;
// Get wallet balance
const walletBalance = wallet.getBalance();
// Refresh Wallet
const walletRefresh = await wallet.refreshWallet();
// Get fee information to perform a transaction.
const feeInfo = wallet.getFeeInfo();
// Send sats
const sendRes = await wallet.send({ address: 'address to send sats to', amount: 1000, satPerByte: 2 });
// Send all sats to an address
const sendMaxRes = await wallet.sendMax({ address: 'address to send sats to', satPerByte: 2 });
import { Wallet, generateMnemonic } from 'beignet';
import net from 'net'
import tls from 'tls'
import { TStorage } from './wallet';
import { ECoinSelectPreference } from "./transaction";
// Generate a mnemonic phrase
const mnemonic = generateMnemonic();
// Add a bip39 passphrase
const passphrase = 'passphrase';
// Connect to custom electrum server
const servers: TServer = {
host: '35.233.47.252',
ssl: 18484,
tcp: 18483,
protocol: EProtocol.ssl,
};
// Use a specific network (Defaults to mainnet)
const network = ENetworks.mainnet;
// Use a specific address type. (Defaults to EAddressType.p2wpkh)
const addressType = EAddressType.p2tr;
// Monitor certain address types. (Defaults to Object.values(EAddressType))
const addressTypesToMonitor = [EAddressType.p2tr, EAddressType.p2wpkh];
// Subscribe to server messages (TOnMessage)
const onMessage: TOnMessage = (id, data) => {
console.log(id);
console.dir(data, { depth: null });
}
// Disable startup messages. Messages resume once startup is complete. (Defaults to false)
const disableMessagesOnCreate = true;
// Persist sessions by getting and setting data from storage
const storage: TStorage = {
async getData<K extends keyof IWalletData>(
key: string
): Promise<Result<IWalletData[K]>> {
// Add your logic here
},
async setData<K extends keyof IWalletData>(
key: string,
value: IWalletData[K]
): Promise<Result<boolean>> {
// Add your logic here
}
};
// Set the auto coin selection preference. (Defaults to ECoinSelectPreference.consolidate)
const coinSelectPreference = ECoinSelectPreference.small;
// Create a wallet instance
const createWalletRes = await Wallet.create({
mnemonic,
passphrase,
electrumOptions: {
servers,
net,
tls
},
network,
onMessage,
storage,
addressType,
addressTypesToMonitor,
disableMessagesOnCreate,
coinSelectPreference
});
if (createWalletRes.isErr()) return;
const wallet = createWalletRes.value;
// List UTXO's
const utxos = wallet.listUtxos();
// Send sats to multiple outputs
const txs = [
{ address: 'address1', amount: 1000 },
{ address: 'address2', amount: 2000 },
{ address: 'address3', amount: 3000 },
];
const sendManyRes = await wallet.sendMany({ txs });
// Sweep from a private key
const sweepPrivateKeyRes = await wallet.sweepPrivateKey({
privateKey: 'privateKey',
toAddress: 'toAddress',
satsPerByte: 5,
broadcast: false
});
// Get tx history for a given address. { tx_hash: string; height: number; }[]
const history = await wallet.getAddressHistory('address');
// Get transaction details for a given transaction id. TTxDetails
const txDetails = await wallet.getTransactionDetails('txid');
You can use react-native-tcp-socket
as a drop in replacement for net
& tls
in a react-native environment. In package.json
:
"react-native": {
"net": "react-native-tcp-socket",
"tls": "react-native-tcp-socket"
}
If you are experiencing any problems, please open an issue or reach out to us on Telegram.
FAQs
A self-custodial, JS Bitcoin wallet management library.
The npm package beignet receives a total of 162 weekly downloads. As such, beignet popularity was classified as not popular.
We found that beignet demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Deno 2.2 enhances Node.js compatibility, improves dependency management, adds OpenTelemetry support, and expands linting and task automation for developers.
Security News
React's CRA deprecation announcement sparked community criticism over framework recommendations, leading to quick updates acknowledging build tools like Vite as valid alternatives.
Security News
Ransomware payment rates hit an all-time low in 2024 as law enforcement crackdowns, stronger defenses, and shifting policies make attacks riskier and less profitable.