@bigmi/core
Version:
TypeScript library for Bitcoin apps.
143 lines (102 loc) • 4.51 kB
Markdown
<div align="center">
<h1 align="center">Bigmi</h1>
<p align="center"><strong>TypeScript library and reactive primitives for Bitcoin apps.</strong></p>
[](/LICENSE.md)
[](https://www.npmjs.com/package/@bigmi/core)
[](https://www.npmjs.com/package/@bigmi/core)
</div>
**Bigmi** (short for *Bitcoin Is Gonna Make It*) is a TypeScript library that provides reactive primitives for building Bitcoin applications. Bigmi simplifies Bitcoin app development by offering:
- Abstractions over the [Bitcoin JSON-RPC API](https://developer.bitcoin.org/reference/rpc/)
- First-class APIs for interacting with the [Bitcoin](https://bitcoin.design/) network, including sending transactions and tracking with [Replace-By-Fee (RBF)](https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki) support
- Connectors for popular Bitcoin wallet extensions
- TypeScript support
Whether you're building a Node.js application or a client-side app, Bigmi provides the tools you need to interact with the Bitcoin.
### Packages
Bigmi is modularized into several packages, each suited to different use cases:
- [/core](https://www.npmjs.com/package/@bigmi/core) - Actions, transports, utilities, and other core primitives for Node.js or client-side applications.
- [/react](https://www.npmjs.com/package/@bigmi/react) - Hooks, providers, and other useful primitives for React applications.
- [/client](https://www.npmjs.com/package/@bigmi/client) - Wallet connectors and other tools to connect wallet extensions with Bitcoin applications.
## Installation
```sh
pnpm add /react
```
```sh
pnpm add /core
```
```sh
pnpm add /client
```
## Getting Started
Here is an example of a basic usage:
```tsx
import { useConfig } from '/react'
import {
type UTXOSchema,
bitcoin,
getBalance,
getBlockCount,
sendUTXOTransaction,
waitForTransaction,
createClient,
fallback,
rpcSchema
ankr,
blockchair,
blockcypher,
mempool
} from '/core'
import { useAccount } from '/react'
// Create a public client for interactions with the Bitcoin
const publicClient = createClient({
chain: bitcoin,
rpcSchema: rpcSchema<UTXOSchema>(),
transport: fallback([
blockchair(),
ankr({apiKey: 'YOUR_ANKR_API_KEY'}),
blockcypher(),
mempool(),
]),
})
// Define the Bitcoin address you're working with
const address = 'BITCOIN_ADDRESS';
// Fetch the balance of the address
const balance = await getBalance(publicClient, { address });
console.log(`Balance for ${address}:`, balance);
// Fetch the current block count (height)
const blockCount = await getBlockCount(publicClient);
console.log('Current block count:', blockCount);
// Prepare the transaction hex (as a string)
const txHex = 'TRANSACTION_HEX';
// Send the transaction to the network
const txId = await sendUTXOTransaction(publicClient, { hex: txHex });
console.log('Transaction sent with ID:', txId);
// Wait for the transaction to be confirmed
const transaction = await waitForTransaction(publicClient, {
txId,
txHex,
senderAddress: address,
onReplaced: (response) => {
console.log('Transaction replaced due to:', response.reason);
},
});
console.log('Transaction confirmed:', transaction);
// Getting account information inside the React application
const bigmiConfig = useConfig()
const account = useAccount()
console.log('Bitcoin account address:', account.address);
```
## Examples
We are working on more examples to showcase Bigmi's capabilities. Stay tuned!
In the meantime, explore the [LI.FI Widget](https://github.com/lifinance/widget) and [LI.FI SDK](https://github.com/lifinance/sdk) for inspiration.
## Documentation
Detailed documentation is coming soon. For now, refer to the source code and type definitions for guidance.
## Support
If you encounter any issues or have questions, please open an issue.
## Contributing
We welcome contributions from the community!
## Changelog
The [changelog](/CHANGELOG.md) is regularly updated to reflect what's changed in each new release.
## License
This project is licensed under the terms of the [MIT License](/LICENSE.md).
## Acknowledgments
Bigmi is inspired by the [wevm](https://github.com/wevm) stack. We appreciate the open-source community's contributions to advancing blockchain development.