Architecture

The AttestProtocol TypeScript SDK implements a multi-chain abstraction layer using the Abstract Factory pattern. It provides a unified interface for blockchain-based attestation infrastructure while maintaining chain-specific optimizations.

Design Patterns

These patterns ensure consistent behavior across all supported blockchains while maintaining flexibility for chain-specific optimizations.

Abstract Factory Pattern

Static factory methods create blockchain-specific instances.
export class AttestSDK {
  static async initializeStellar(config: StellarConfig): Promise<StellarAttestSDK>
  static async initializeSolana(config: SolanaConfig): Promise<SolanaAttestSDK>
}

Template Method Pattern

The AttestSDKBase abstract class defines the unified interface.
export abstract class AttestSDKBase {
  abstract initialize(): Promise<void | AttestSDKResponse<void>>
  abstract fetchAuthority(): Promise<AttestSDKResponse<...>>
  abstract registerAuthority(): Promise<AttestSDKResponse<...>>
  abstract fetchSchema(schemaUID: ...): Promise<AttestSDKResponse<...>>
  abstract createSchema(config: ...): Promise<AttestSDKResponse<...>>
  abstract fetchAttestation(attestation: ...): Promise<AttestSDKResponse<...>>
  abstract attest(config: ...): Promise<AttestSDKResponse<...>>
  abstract revokeAttestation(props: ...): Promise<AttestSDKResponse<...>>
}

Response Wrapper Pattern

Consistent error handling across all operations.
export type AttestSDKResponse<T = undefined> =
  | { data: T; error?: undefined }
  | { data?: undefined; error: any }

Chain Support

Starknet support is planned but not yet implemented. Current production support includes Stellar and Solana.
ChainStatusImplementationFactory Method
StellarActiveStellarAttestSDKinitializeStellar()
SolanaActiveSolanaAttestSDKinitializeSolana()
StarknetPlannedStarknetAttestSDKinitializeStarknet()

Chain-Specific Features

Stellar/Soroban

  • Contract System: Protocol and Authority contracts
  • Transaction UIDs: Schema UIDs are transaction hashes
  • Custom Signers: Flexible wallet integration
  • Network: Testnet only
  • Unique Features: ScVal conversion, simulation-based reads

Solana/Anchor

  • Program Architecture: Single program with multiple instructions
  • PDA Management: Program Derived Addresses for state
  • Token Support: SPL token integration for levies
  • Networks: Devnet, Testnet, Mainnet
  • Unique Features: Cross-program invocations, rent exemption

Module Structure

packages/sdk/src/
├── index.ts              # Factory class and exports
├── core/
│   ├── base.ts          # Abstract base class (51 lines)
│   ├── types.ts         # Type definitions (191 lines)
│   ├── stellar.ts       # Stellar implementation (771 lines)
│   ├── solana.ts        # Solana implementation (279 lines)
│   └── starknet.ts      # Placeholder (52 lines)

Export Structure

// Factory
export { AttestSDK }

// Chain implementations
export { StellarAttestSDK, SolanaAttestSDK }

// All types
export * from './core/types'

Configuration Architecture

Base Configuration

interface ChainConfig {
  url?: string  // RPC endpoint
}

Chain-Specific Extensions

interface StellarConfig extends ChainConfig {
  secretKeyOrCustomSigner: string | StellarCustomSigner
  publicKey: string
}

interface SolanaConfig extends ChainConfig {
  walletOrSecretKey: number[] | anchor.Wallet
  programId?: string
}

Performance Characteristics

Network Operations

OperationStellarSolanaDescription
Authority Registration1 tx1 txCreates authority record
Schema Creation1 tx1 txRegisters new schema
Attestation Creation1 tx1 txCreates attestation
Attestation Fetch1 read1 readRetrieves attestation data
Schema Fetch1-2 reads1 readGets schema definition
Revocation1 tx1 txRevokes attestation

Transaction Costs

Stellar (XLM):
  • Base fee: ~0.00001 XLM per operation
  • Contract execution: Additional compute costs
  • Account reserves: ~2.5 XLM minimum balance
Solana (SOL):
  • Transaction fee: ~0.000005 SOL
  • Account rent: ~0.00203928 SOL per account
  • Program execution: Additional compute units

Security Model

Key Management

// Stellar - Flexible signing
interface StellarConfig {
  secretKeyOrCustomSigner: string | StellarCustomSigner
  publicKey: string
}

// Solana - Direct or wallet integration
interface SolanaConfig {
  walletOrSecretKey: number[] | anchor.Wallet
}

Authority System

  1. Registration: Wallets register as authorities
  2. Schema Creation: Only authorities can create schemas
  3. Attestation: Only authorities can issue attestations
  4. Revocation: Only original attester can revoke
  5. Access Control: Built-in authorization checks

Error Handling

Error Categories

// Network-level errors
- Connection timeouts
- RPC endpoint failures
- Rate limiting

// Blockchain-specific errors
- Insufficient balance
- Invalid signatures
- Transaction failures

// Contract/Program errors
- Invalid parameters
- Authorization failures
- Contract execution errors

Error Propagation

All methods return the consistent AttestSDKResponse<T> wrapper, eliminating the need for try-catch blocks in most cases.

Build System

Module Formats

FormatPathUsage
CommonJSdist/main/index.jsNode.js
ES Modulesdist/module/index.jsModern bundlers
UMDdist/umd/attestprotocol.jsBrowser/CDN
TypeScriptdist/index.d.tsType definitions

Tree Shaking

The SDK supports tree shaking, allowing bundlers to include only the blockchain implementations you use.
// Only imports Stellar implementation
import { AttestSDK, StellarConfig } from '@attestprotocol/sdk';

Extension Points

Adding New Chains

  1. Create implementation extending AttestSDKBase
  2. Add chain-specific configuration interface
  3. Implement all abstract methods
  4. Add factory method to AttestSDK
  5. Export types and implementation
// Example implementation structure
export class NewChainAttestSDK extends AttestSDKBase {
  async initialize(): Promise<AttestSDKResponse<void>> {
    // Chain-specific initialization
  }
  
  // Implement all abstract methods
}

Custom Implementations

The abstract base class enables custom implementations for specific use cases while maintaining interface compatibility.

Contract Information

Stellar Testnet

Protocol Contract: CBPL7XR7NNPTNSIIFWQMWLSCX3B3MM36UYX4TW3QXJKTIEA6KDLRYAQPAuthority Contract: CDQREK6BTPEVD4O56XR6TKLEEMNYTRJUG466J2ERNE5POIEKN2N6O7ELNetwork: Soroban Testnet

Solana Devnet

Program ID: BMr9aui54YuxtpBzWXiFNmnr2iH6etRu7rMFJnKxjtpYNetwork: Solana DevnetRPC Endpoint: https://api.devnet.solana.com

API Stability

  • Current Version: 1.x - Stable API
  • Backward Compatibility: Maintained within major versions
  • Breaking Changes: Only in major version updates
  • Deprecation Process: 6-month notice for API changes

Integration Patterns

Multi-Chain Applications

interface SDKInstances {
  stellar?: StellarAttestSDK;
  solana?: SolanaAttestSDK;
}

async function initializeSDKs(): Promise<SDKInstances> {
  const sdks: SDKInstances = {};
  
  if (config.stellar) {
    sdks.stellar = await AttestSDK.initializeStellar(config.stellar);
  }
  
  if (config.solana) {
    sdks.solana = await AttestSDK.initializeSolana(config.solana);
  }
  
  return sdks;
}

Framework Integration

The SDK integrates seamlessly with popular frameworks:
  • Express.js: Server-side attestation APIs
  • React: Client-side attestation interfaces
  • Next.js: Full-stack attestation applications
  • Node.js: Backend attestation services