Advanced Examples

Advanced examples and patterns for Azoth SDK

Gas Optimization

Batching Transactions

If you need to perform multiple operations, consider batching them to minimize gas costs:

import { ethers } from 'ethers';
import { AzothSDK } from '@azothpay/sdk';

async function optimizedOperations(signer: ethers.Signer) {
  const azoth = AzothSDK.create(signer, 'polygon', 'USDT');
  
  // Instead of multiple separate transactions:
  // await azoth.deposit(100);
  // await azoth.subscribe(creator1, 10);
  // await azoth.subscribe(creator2, 5);
  
  // Batch the operations in your UI/UX flow
  // First deposit enough tokens for everything
  const depositTx = await azoth.deposit(115); // 100 + 10 + 5
  await depositTx.wait();
  
  // Then do the subscriptions
  const [tx1, tx2] = await Promise.all([
    azoth.subscribe(creator1, 10),
    azoth.subscribe(creator2, 5)
  ]);
  
  await Promise.all([tx1.wait(), tx2.wait()]);
}

Using Permit2 for Deposits

The Azoth SDK supports using Permit2 for approving and depositing tokens in a single transaction, which saves gas:

Working with Custom Contract Versions

The Azoth SDK supports multiple contract versions for each network and token.

Specifying a Contract Version

Working with Custom Contracts

You can also specify custom contract and token addresses:

Multiple Network Support

Working with Multiple Networks Simultaneously

For applications that need to work with multiple networks, you can create multiple SDK instances:

Dynamically Switching Networks

For applications that need to switch networks dynamically:

Relayer Services

To fully leverage BySig methods, you'll need a relayer service to submit the signed transactions to the blockchain.

Building a Simple Relayer

Here's a basic example of how to build a simple relayer service using Node.js and Express:

Error Handling and Recovery

Common Errors and Solutions

Error
Potential Cause
Solution

"Insufficient allowance"

Token approval needed

Call the token's approve method before depositing

"Insufficient balance"

User doesn't have enough tokens

Inform user to get more tokens

"Transaction underpriced"

Gas price too low

Increase gas price or wait for network congestion to decrease

"Nonce too low"

Transaction with same nonce already processed

Reset nonce or use the next available nonce

"Deadline expired"

BySig transaction submitted after deadline

Generate a new signature with a future deadline

Implementing Robust Error Handling

Transaction Monitoring and Recovery

For critical operations, implement transaction monitoring and recovery:

Performance Optimization

Caching Strategies

These advanced techniques will help you build robust applications that leverage the full power of the Azoth SDK while ensuring optimal performance and user experience.

Last updated