The Catalabs deposit widget provides several ways to help manage a Crosscats deposit address.
Generating an address consists of two parts:
- Generating a 3 word order slug
- Generating a date string for the current date
These two pieces of information paired with a users VM private key allow Bitcoin deposit addresses to be generated in a recoverable way. The two pieces of information and utilized in a disclaimer indicating to the user to keep the information to recover this address. The order slug, date string, and disclaimer are then used to generate a signature that serves as the seed for the Bitcoin wallet private key.
- Creating Order Slugs
- Creating Date Strings
- Formatting Disclaimer Text
- Creating BIP21 Bitcoin Links
- Scannable Bitcoin QR Code
- Generating ECPair, Address, and Bitcoin Wallet
- Querying Bitcoin address balance
- Sending Bitcoin
- Creating Bitcoin Wallets from WIF, Signatures, or Private Keys
A minimal example of how to create a Deposit Widget is provided in an Example. This example only shows how to provide a signing function to generate a Bitcoin wallet. The QR code is available stand alone or with an address displayed.
async function signData(
dataStruct: DataStruct,
value: OrderAttestationValue,
): Promise<string> {
return ethers.signTypedData(
{
name: "Catalabs Widget Example",
},
dataStruct,
value,
);
}
const { wallet, address } = await generateKeyPair({ signData });
The generated wallet can then be used to utilie the Bitcoin QR Component or with the Deposit Widget.
The Bitcoin Wallet has three functions:
- Get Balance
- Send
- Send All
When monitoring addresses, the getBalance
method may be polled to determin whene a generated address has any inputs (including unconfirmed inputs).
Coins can then be moved by using send
or sendAll
- these functions will utilize unconfirmed inputs as well, allowing coins to immediately be sent when balance is detected.
Any wallet can be recovered by reproducing the steps laid out above. It is important as stated in the disclaimer that users should capture their date string and order slug should they wish to recover their wallet in the case of any issue - assuming this information is not stored by the part implementing the wallet.