Examples Overview
Complete working examples demonstrating Bako Safe SDK integration patterns.
Example Categories
Contract Interaction
Call smart contract methods from a multi-signature vault with proper approval flow.
Token Transfers
Send native assets and tokens between addresses with multi-sig security.
Prerequisites
All examples require:
npm install bakosafe fuelsEnvironment variables:
# .env
BAKO_API_TOKEN=your_api_token
NEXT_PUBLIC_FUEL_NETWORK_URL=https://mainnet.fuel.network/v1/graphqlExample Structure
Each example follows this pattern:
import { BakoProvider, Vault } from 'bakosafe';
import { Provider } from 'fuels';
async function main() {
// 1. Setup provider
const fuelProvider = new Provider(process.env.NEXT_PUBLIC_FUEL_NETWORK_URL!);
const provider = await BakoProvider.create(
process.env.NEXT_PUBLIC_FUEL_NETWORK_URL!,
{ apiToken: process.env.BAKO_API_TOKEN }
);
// 2. Load or create vault
const vault = await Vault.fromAddress(vaultAddress, provider);
// 3. Create transaction
const { tx, hashTxId } = await vault.transaction(/* params */);
// 4. Sign and send
// ...
}
main().catch(console.error);Running Examples
From Repository
Clone the examples repository:
git clone https://github.com/guimroque/bako-wallet-snippet
cd bako-wallet-snippet
npm installConfigure environment:
cp .env.example .env
# Edit .env with your credentialsRun specific example:
npx ts-node examples/contract-call.tsIn Your Project
- Install dependencies
- Copy example code
- Configure environment variables
- Run with ts-node or compile
Common Patterns
Error Handling
try {
const { tx } = await vault.transaction(params);
} catch (error) {
if (error.message.includes('Insufficient')) {
console.error('Not enough balance');
} else if (error.message.includes('credentials')) {
console.error('Authentication required');
} else {
throw error;
}
}Transaction Monitoring
const { tx, hashTxId } = await vault.transaction(params);
// Poll for status updates
const checkStatus = async () => {
const details = await provider.service.getTransaction(hashTxId);
console.log('Status:', details.status);
return details.status;
};Multi-Signer Flow
// Signer 1: Create and sign
const { tx, hashTxId } = await vault.transaction(params);
await vault.sign(hashTxId);
// Signer 2: Load and sign
const vault2 = await Vault.fromAddress(vaultAddress, provider2);
const pending = await provider2.service.getTransaction(hashTxId);
await vault2.sign(hashTxId);
// After threshold met: Send
await vault.send(hashTxId);