@zubari/sdk 0.1.21 → 0.1.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/PayoutsProtocol-BFrXok86.d.ts +181 -0
- package/dist/PayoutsProtocol-Q3wZHcaf.d.mts +181 -0
- package/dist/{WalletManager-wRV8RrnE.d.ts → WalletManager-9bC646Ax.d.ts} +49 -141
- package/dist/{WalletManager-bdFpa_yr.d.mts → WalletManager-B4Ag188W.d.mts} +49 -141
- package/dist/{index-C4wdFOtM.d.mts → index-C4SuAZP4.d.ts} +3 -2
- package/dist/{index-DhluuR9H.d.mts → index-D9vwxETQ.d.mts} +17 -1
- package/dist/{index-DhluuR9H.d.ts → index-D9vwxETQ.d.ts} +17 -1
- package/dist/{index-Cq024jR8.d.ts → index-DkB0ouBN.d.mts} +3 -2
- package/dist/index.d.mts +5 -6
- package/dist/index.d.ts +5 -6
- package/dist/index.js +22 -57
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +16 -51
- package/dist/index.mjs.map +1 -1
- package/dist/protocols/index.d.mts +149 -171
- package/dist/protocols/index.d.ts +149 -171
- package/dist/protocols/index.js +889 -0
- package/dist/protocols/index.js.map +1 -1
- package/dist/protocols/index.mjs +889 -1
- package/dist/protocols/index.mjs.map +1 -1
- package/dist/react/index.d.mts +4 -5
- package/dist/react/index.d.ts +4 -5
- package/dist/react/index.js +15 -54
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +9 -48
- package/dist/react/index.mjs.map +1 -1
- package/dist/services/index.d.mts +1 -1
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.js +16 -12
- package/dist/services/index.js.map +1 -1
- package/dist/services/index.mjs +10 -6
- package/dist/services/index.mjs.map +1 -1
- package/dist/wallet/index.d.mts +4 -5
- package/dist/wallet/index.d.ts +4 -5
- package/dist/wallet/index.js +22 -57
- package/dist/wallet/index.js.map +1 -1
- package/dist/wallet/index.mjs +16 -51
- package/dist/wallet/index.mjs.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/config/contracts.ts","../../src/protocols/NFTProtocol.ts","../../src/protocols/TipsProtocol.ts","../../src/protocols/SubscriptionProtocol.ts","../../src/protocols/PayoutsProtocol.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["// Contract addresses for Zubari ecosystem\nexport interface ContractAddresses {\n registry: string;\n nft: string;\n marketplace: string;\n tips: string;\n subscriptions: string;\n payouts: string;\n entryPoint: string;\n paymaster: string;\n accountFactory: string;\n usdt: string;\n weth: string;\n}\n\n// Placeholder addresses - will be updated after deployment\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';\n\nexport const ZUBARI_CONTRACTS: Record<'testnet' | 'mainnet', ContractAddresses> = {\n testnet: {\n // Ethereum Sepolia (11155111) - Deployed 2024-12-09\n registry: '0xEdDf443D48832f23D4A0bED4C4c5eF200B38A7d3',\n nft: '0xdc37e25650D685e4c38124aC314477Ea5f508a9e',\n marketplace: ZERO_ADDRESS, // Not yet deployed\n tips: '0xFDc353edC63Cd3D4bba35bB43861369516a9Dc85',\n subscriptions: '0x8C05F8aD2F295fB7f3596043a7c37C98A5F7fAB8',\n payouts: '0x804Fe503936E8b8d3D5Dbb62AF4fB6Fe7265Fb2c',\n entryPoint: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',\n paymaster: ZERO_ADDRESS, // Not yet deployed\n accountFactory: ZERO_ADDRESS, // Not yet deployed\n usdt: '0xaA8E23Fb1079EA71e0a56F48a2aA51851D8433D0', // USDT on Sepolia\n weth: '0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14',\n },\n mainnet: {\n // Ethereum Mainnet (1)\n registry: ZERO_ADDRESS,\n nft: ZERO_ADDRESS,\n marketplace: ZERO_ADDRESS,\n tips: ZERO_ADDRESS,\n subscriptions: ZERO_ADDRESS,\n payouts: ZERO_ADDRESS,\n entryPoint: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',\n paymaster: ZERO_ADDRESS,\n accountFactory: ZERO_ADDRESS,\n usdt: '0xdAC17F958D2ee523a2206206994597C13D831ec7', // USDT on Ethereum\n weth: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n },\n};\n\n// Platform configuration\nexport const PLATFORM_CONFIG = {\n // Platform fee in basis points (300 = 3%)\n tipFeeBps: 300,\n // Maximum royalty in basis points (1000 = 10%)\n maxRoyaltyBps: 1000,\n // Default slippage tolerance for swaps (50 = 0.5%)\n defaultSlippageBps: 50,\n // Voucher validity in seconds (30 days)\n voucherValiditySecs: 30 * 24 * 60 * 60,\n // Swap deadline in seconds (30 minutes)\n swapDeadlineSecs: 30 * 60,\n} as const;\n\n// EIP-712 Domain for lazy minting\nexport const NFT_VOUCHER_DOMAIN = {\n name: 'ZubariNFT',\n version: '1',\n} as const;\n\nexport const NFT_VOUCHER_TYPES = {\n NFTVoucher: [\n { name: 'tokenId', type: 'bytes32' },\n { name: 'uri', type: 'string' },\n { name: 'creator', type: 'address' },\n { name: 'royaltyBps', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n} as const;\n\nexport function getContractAddresses(network: 'testnet' | 'mainnet'): ContractAddresses {\n return ZUBARI_CONTRACTS[network];\n}\n","import type {\n NFTMetadata,\n LazyMintVoucher,\n NFT,\n ListingParams,\n TxResult,\n} from '../types';\nimport { PLATFORM_CONFIG, NFT_VOUCHER_DOMAIN, NFT_VOUCHER_TYPES } from '../config/contracts';\n\n/**\n * ZubariNFTProtocol - NFT creation and marketplace operations\n *\n * Handles lazy minting via EIP-712 signatures, NFT listing,\n * and marketplace operations on Ethereum network.\n */\nexport class ZubariNFTProtocol {\n private readonly contractAddress: string;\n private readonly _marketplaceAddress: string;\n private readonly chainId: number;\n\n constructor(\n contractAddress: string,\n marketplaceAddress: string,\n chainId: number\n ) {\n this.contractAddress = contractAddress;\n this._marketplaceAddress = marketplaceAddress;\n this.chainId = chainId;\n }\n\n /**\n * Create a lazy mint voucher for off-chain NFT creation\n * The voucher can be redeemed on-chain when purchased\n */\n async createLazyMintVoucher(\n metadata: NFTMetadata,\n creatorAddress: string,\n signer: { signTypedData: (domain: object, types: object, value: object) => Promise<string> }\n ): Promise<LazyMintVoucher> {\n // Validate royalty\n if (metadata.royaltyBps > PLATFORM_CONFIG.maxRoyaltyBps) {\n throw new Error(`Royalty cannot exceed ${PLATFORM_CONFIG.maxRoyaltyBps / 100}%`);\n }\n\n // Generate random tokenId\n const tokenId = this.generateTokenId();\n\n // Calculate deadline (30 days from now)\n const deadline = Math.floor(Date.now() / 1000) + PLATFORM_CONFIG.voucherValiditySecs;\n\n // Build voucher data\n const voucherData = {\n tokenId,\n uri: metadata.image, // Will be IPFS URI\n creator: creatorAddress,\n royaltyBps: metadata.royaltyBps,\n deadline,\n };\n\n // Create EIP-712 domain\n const domain = {\n ...NFT_VOUCHER_DOMAIN,\n chainId: this.chainId,\n verifyingContract: this.contractAddress,\n };\n\n // Sign the voucher\n const signature = await signer.signTypedData(domain, NFT_VOUCHER_TYPES, voucherData);\n\n return {\n ...voucherData,\n signature,\n };\n }\n\n /**\n * Redeem a lazy mint voucher to mint the NFT on-chain\n */\n async redeemVoucher(voucher: LazyMintVoucher, _buyerAddress: string): Promise<TxResult> {\n // Validate voucher deadline\n if (voucher.deadline < Math.floor(Date.now() / 1000)) {\n throw new Error('Voucher has expired');\n }\n\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * List an NFT for sale on the marketplace\n */\n async listForSale(_params: ListingParams): Promise<TxResult> {\n // Placeholder - will approve and list\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Buy an NFT from the marketplace\n */\n async buyNFT(_listingId: string, _price: bigint): Promise<TxResult> {\n // Placeholder - will call marketplace contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Transfer an NFT to another address\n */\n async transfer(_tokenId: string, _to: string): Promise<TxResult> {\n // Placeholder - will call NFT contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Get NFTs owned by an address\n */\n async getOwnedNFTs(_address: string): Promise<NFT[]> {\n // Placeholder - will query contract/indexer\n return [];\n }\n\n /**\n * Generate a random tokenId (32 bytes hex)\n */\n private generateTokenId(): string {\n const bytes = new Uint8Array(32);\n crypto.getRandomValues(bytes);\n return '0x' + Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('');\n }\n}\n","import type { TipData, TipResult, TipStats, TxResult } from '../types';\nimport { PLATFORM_CONFIG } from '../config/contracts';\n\n/**\n * ZubariTipsProtocol - Micropayment tips for creators\n *\n * Handles ETH and ERC-20 token tips with platform fee distribution.\n * Supports gasless tips via ERC-4337 when enabled.\n */\nexport class ZubariTipsProtocol {\n private readonly contractAddress: string;\n private readonly chainId: number;\n private readonly gaslessEnabled: boolean;\n\n constructor(contractAddress: string, chainId: number, gaslessEnabled: boolean = false) {\n this.contractAddress = contractAddress;\n this.chainId = chainId;\n this.gaslessEnabled = gaslessEnabled;\n }\n\n /**\n * Send a tip to a creator\n */\n async sendTip(tip: TipData): Promise<TipResult> {\n const { recipient, amount, token, message } = tip;\n\n // Calculate platform fee (3%)\n const platformFee = (amount * BigInt(PLATFORM_CONFIG.tipFeeBps)) / BigInt(10000);\n const creatorAmount = amount - platformFee;\n\n // Validate amount\n if (amount <= 0n) {\n throw new Error('Tip amount must be greater than 0');\n }\n\n // Placeholder - will call contract\n const txResult: TxResult = {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n\n return {\n txHash: txResult.hash,\n tipId: '', // Will be returned from contract event\n recipient,\n amount: creatorAmount,\n platformFee,\n timestamp: Math.floor(Date.now() / 1000),\n };\n }\n\n /**\n * Send tips to multiple creators in a single transaction\n */\n async sendBatchTips(tips: TipData[]): Promise<TipResult[]> {\n if (tips.length === 0) {\n throw new Error('At least one tip is required');\n }\n\n // Calculate total amount needed\n const totalAmount = tips.reduce((sum, tip) => sum + tip.amount, BigInt(0));\n\n // Placeholder - will call batch function\n return tips.map(tip => ({\n txHash: '',\n tipId: '',\n recipient: tip.recipient,\n amount: tip.amount - (tip.amount * BigInt(PLATFORM_CONFIG.tipFeeBps)) / BigInt(10000),\n platformFee: (tip.amount * BigInt(PLATFORM_CONFIG.tipFeeBps)) / BigInt(10000),\n timestamp: Math.floor(Date.now() / 1000),\n }));\n }\n\n /**\n * Get tips received by an address\n */\n async getTipsReceived(address: string): Promise<TipResult[]> {\n // Placeholder - will query indexer\n return [];\n }\n\n /**\n * Get tips sent by an address\n */\n async getTipsSent(address: string): Promise<TipResult[]> {\n // Placeholder - will query indexer\n return [];\n }\n\n /**\n * Get tip statistics for a creator\n */\n async getCreatorTipStats(creator: string): Promise<TipStats> {\n // Placeholder - will query indexer/contract\n return {\n totalReceived: BigInt(0),\n tipCount: 0,\n uniqueTippers: 0,\n };\n }\n\n /**\n * Get platform fee in basis points\n */\n getPlatformFeeBps(): number {\n return PLATFORM_CONFIG.tipFeeBps;\n }\n}\n","import type { SubscriptionPlan, Subscription, TxResult } from '../types';\n\n/**\n * ZubariSubscriptionProtocol - Recurring subscription payments\n *\n * Handles subscription plan creation, subscription management,\n * and verification of active subscriptions.\n */\nexport class ZubariSubscriptionProtocol {\n private readonly contractAddress: string;\n private readonly chainId: number;\n\n constructor(contractAddress: string, chainId: number) {\n this.contractAddress = contractAddress;\n this.chainId = chainId;\n }\n\n /**\n * Create a new subscription plan\n */\n async createPlan(plan: SubscriptionPlan): Promise<string> {\n // Validate plan\n if (!plan.name || plan.name.length === 0) {\n throw new Error('Plan name is required');\n }\n if (plan.price <= 0n) {\n throw new Error('Plan price must be greater than 0');\n }\n if (plan.duration <= 0) {\n throw new Error('Plan duration must be greater than 0');\n }\n\n // Generate planId based on creator + name hash\n const planId = this.generatePlanId(plan.name);\n\n // Placeholder - will call contract\n return planId;\n }\n\n /**\n * Update an existing subscription plan\n */\n async updatePlan(planId: string, updates: Partial<SubscriptionPlan>): Promise<TxResult> {\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Subscribe to a creator's plan\n */\n async subscribe(\n creator: string,\n planId: string,\n months: number = 1\n ): Promise<Subscription> {\n if (months <= 0) {\n throw new Error('Subscription duration must be at least 1 month');\n }\n\n const now = Math.floor(Date.now() / 1000);\n const durationSeconds = months * 30 * 24 * 60 * 60; // 30 days per month\n\n // Placeholder - will call contract\n return {\n subscriptionId: '',\n planId,\n creator,\n subscriber: '', // Current user address\n startTime: now,\n endTime: now + durationSeconds,\n autoRenew: false,\n status: 'active',\n };\n }\n\n /**\n * Cancel an active subscription\n */\n async cancel(subscriptionId: string): Promise<TxResult> {\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Check if an address is subscribed to a creator\n */\n async isSubscribed(creator: string, subscriber?: string): Promise<boolean> {\n // Placeholder - will call contract view function\n return false;\n }\n\n /**\n * Get active subscriptions for a subscriber\n */\n async getActiveSubscriptions(subscriber?: string): Promise<Subscription[]> {\n // Placeholder - will query contract/indexer\n return [];\n }\n\n /**\n * Get all subscribers for a creator\n */\n async getSubscribers(creator: string): Promise<Subscription[]> {\n // Placeholder - will query contract/indexer\n return [];\n }\n\n /**\n * Get a specific plan by ID\n */\n async getPlan(planId: string): Promise<SubscriptionPlan | null> {\n // Placeholder - will query contract\n return null;\n }\n\n /**\n * Get all plans for a creator\n */\n async getCreatorPlans(creator: string): Promise<SubscriptionPlan[]> {\n // Placeholder - will query contract/indexer\n return [];\n }\n\n /**\n * Generate a unique plan ID\n */\n private generatePlanId(name: string): string {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n return '0x' + Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('');\n }\n}\n","import type { EarningsBreakdown, RevenueSplit, TxResult } from '../types';\n\n/**\n * ZubariPayoutsProtocol - Creator earnings management\n *\n * Handles earnings tracking, claiming, revenue splits,\n * and conversion to stablecoins.\n */\nexport class ZubariPayoutsProtocol {\n private readonly contractAddress: string;\n private readonly chainId: number;\n\n constructor(contractAddress: string, chainId: number) {\n this.contractAddress = contractAddress;\n this.chainId = chainId;\n }\n\n /**\n * Get pending earnings breakdown for the current user\n */\n async getPendingEarnings(): Promise<EarningsBreakdown> {\n // Placeholder - will call contract\n return {\n tips: BigInt(0),\n subscriptions: BigInt(0),\n nftSales: BigInt(0),\n royalties: BigInt(0),\n total: BigInt(0),\n };\n }\n\n /**\n * Get historical earnings for a time period\n */\n async getEarningsHistory(\n period: 'day' | 'week' | 'month' | 'all' = 'all'\n ): Promise<EarningsBreakdown[]> {\n // Placeholder - will query indexer\n return [];\n }\n\n /**\n * Claim all pending earnings\n */\n async claimEarnings(): Promise<TxResult> {\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Claim specific amount of earnings\n */\n async claimPartialEarnings(amount: bigint): Promise<TxResult> {\n if (amount <= 0n) {\n throw new Error('Amount must be greater than 0');\n }\n\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Setup revenue split with collaborators\n * Basis points must sum to 10000 (100%)\n */\n async setupRevenueSplit(splits: RevenueSplit[]): Promise<TxResult> {\n // Validate that basis points sum to 100%\n const totalBps = splits.reduce((sum, split) => sum + split.basisPoints, 0);\n if (totalBps !== 10000) {\n throw new Error('Revenue splits must sum to 100% (10000 basis points)');\n }\n\n // Validate each split\n for (const split of splits) {\n if (split.basisPoints <= 0) {\n throw new Error('Each split must have positive basis points');\n }\n if (!split.recipient || split.recipient.length === 0) {\n throw new Error('Each split must have a valid recipient address');\n }\n }\n\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Get current revenue split configuration\n */\n async getRevenueSplit(): Promise<RevenueSplit[]> {\n // Placeholder - will query contract\n return [];\n }\n\n /**\n * Remove revenue split (creator gets 100%)\n */\n async removeRevenueSplit(): Promise<TxResult> {\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Convert earnings to stablecoin (USDT)\n */\n async convertToStable(token: string, amount: bigint): Promise<TxResult> {\n if (amount <= 0n) {\n throw new Error('Amount must be greater than 0');\n }\n\n // Placeholder - will use swap protocol\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/config/contracts.ts","../../src/protocols/NFTProtocol.ts","../../src/abi/ZubariMarket.json","../../src/protocols/MarketProtocol.ts","../../src/protocols/TipsProtocol.ts","../../src/protocols/SubscriptionProtocol.ts","../../src/protocols/PayoutsProtocol.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["// Contract addresses for Zubari ecosystem\nexport interface ContractAddresses {\n registry: string;\n nft: string;\n marketplace: string;\n tips: string;\n subscriptions: string;\n payouts: string;\n entryPoint: string;\n paymaster: string;\n accountFactory: string;\n usdc: string;\n usdt: string;\n weth: string;\n}\n\n// Placeholder addresses - will be updated after deployment\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';\n\nexport const ZUBARI_CONTRACTS: Record<'testnet' | 'mainnet', ContractAddresses> = {\n testnet: {\n // Ethereum Sepolia (11155111) - Deployed 2024-12-09\n registry: '0xEdDf443D48832f23D4A0bED4C4c5eF200B38A7d3',\n nft: '0xdc37e25650D685e4c38124aC314477Ea5f508a9e',\n marketplace: '0x48D0F3b6552A8CcDA7528db5aE8be004fCC3D3D9', // ZubariMarket deployed 2024-12-22\n tips: '0xFDc353edC63Cd3D4bba35bB43861369516a9Dc85',\n subscriptions: '0x8C05F8aD2F295fB7f3596043a7c37C98A5F7fAB8',\n payouts: '0x804Fe503936E8b8d3D5Dbb62AF4fB6Fe7265Fb2c',\n entryPoint: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',\n paymaster: ZERO_ADDRESS, // Deploy with: npx hardhat run deploy/deploy.ts --network ethereum-sepolia\n accountFactory: ZERO_ADDRESS, // Not yet deployed\n usdc: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238', // USDC on Sepolia\n usdt: '0xaA8E23Fb1079EA71e0a56F48a2aA51851D8433D0', // USDT on Sepolia\n weth: '0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14',\n },\n mainnet: {\n // Ethereum Mainnet (1)\n registry: ZERO_ADDRESS,\n nft: ZERO_ADDRESS,\n marketplace: ZERO_ADDRESS,\n tips: ZERO_ADDRESS,\n subscriptions: ZERO_ADDRESS,\n payouts: ZERO_ADDRESS,\n entryPoint: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',\n paymaster: ZERO_ADDRESS,\n accountFactory: ZERO_ADDRESS,\n usdc: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC on Ethereum\n usdt: '0xdAC17F958D2ee523a2206206994597C13D831ec7', // USDT on Ethereum\n weth: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n },\n};\n\n// Platform configuration\nexport const PLATFORM_CONFIG = {\n // Platform fee in basis points (300 = 3%)\n tipFeeBps: 300,\n // Maximum royalty in basis points (1000 = 10%)\n maxRoyaltyBps: 1000,\n // Default slippage tolerance for swaps (50 = 0.5%)\n defaultSlippageBps: 50,\n // Voucher validity in seconds (30 days)\n voucherValiditySecs: 30 * 24 * 60 * 60,\n // Swap deadline in seconds (30 minutes)\n swapDeadlineSecs: 30 * 60,\n} as const;\n\n// EIP-712 Domain for lazy minting\nexport const NFT_VOUCHER_DOMAIN = {\n name: 'ZubariNFT',\n version: '1',\n} as const;\n\nexport const NFT_VOUCHER_TYPES = {\n NFTVoucher: [\n { name: 'tokenId', type: 'bytes32' },\n { name: 'uri', type: 'string' },\n { name: 'creator', type: 'address' },\n { name: 'royaltyBps', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n} as const;\n\nexport function getContractAddresses(network: 'testnet' | 'mainnet'): ContractAddresses {\n return ZUBARI_CONTRACTS[network];\n}\n","import type {\n NFTMetadata,\n LazyMintVoucher,\n NFT,\n ListingParams,\n TxResult,\n} from '../types';\nimport { PLATFORM_CONFIG, NFT_VOUCHER_DOMAIN, NFT_VOUCHER_TYPES } from '../config/contracts';\n\n/**\n * ZubariNFTProtocol - NFT creation and marketplace operations\n *\n * Handles lazy minting via EIP-712 signatures, NFT listing,\n * and marketplace operations on Ethereum network.\n */\nexport class ZubariNFTProtocol {\n private readonly contractAddress: string;\n private readonly _marketplaceAddress: string;\n private readonly chainId: number;\n\n constructor(\n contractAddress: string,\n marketplaceAddress: string,\n chainId: number\n ) {\n this.contractAddress = contractAddress;\n this._marketplaceAddress = marketplaceAddress;\n this.chainId = chainId;\n }\n\n /**\n * Create a lazy mint voucher for off-chain NFT creation\n * The voucher can be redeemed on-chain when purchased\n */\n async createLazyMintVoucher(\n metadata: NFTMetadata,\n creatorAddress: string,\n signer: { signTypedData: (domain: object, types: object, value: object) => Promise<string> }\n ): Promise<LazyMintVoucher> {\n // Validate royalty\n if (metadata.royaltyBps > PLATFORM_CONFIG.maxRoyaltyBps) {\n throw new Error(`Royalty cannot exceed ${PLATFORM_CONFIG.maxRoyaltyBps / 100}%`);\n }\n\n // Generate random tokenId\n const tokenId = this.generateTokenId();\n\n // Calculate deadline (30 days from now)\n const deadline = Math.floor(Date.now() / 1000) + PLATFORM_CONFIG.voucherValiditySecs;\n\n // Build voucher data\n const voucherData = {\n tokenId,\n uri: metadata.image, // Will be IPFS URI\n creator: creatorAddress,\n royaltyBps: metadata.royaltyBps,\n deadline,\n };\n\n // Create EIP-712 domain\n const domain = {\n ...NFT_VOUCHER_DOMAIN,\n chainId: this.chainId,\n verifyingContract: this.contractAddress,\n };\n\n // Sign the voucher\n const signature = await signer.signTypedData(domain, NFT_VOUCHER_TYPES, voucherData);\n\n return {\n ...voucherData,\n signature,\n };\n }\n\n /**\n * Redeem a lazy mint voucher to mint the NFT on-chain\n */\n async redeemVoucher(voucher: LazyMintVoucher, _buyerAddress: string): Promise<TxResult> {\n // Validate voucher deadline\n if (voucher.deadline < Math.floor(Date.now() / 1000)) {\n throw new Error('Voucher has expired');\n }\n\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * List an NFT for sale on the marketplace\n */\n async listForSale(_params: ListingParams): Promise<TxResult> {\n // Placeholder - will approve and list\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Buy an NFT from the marketplace\n */\n async buyNFT(_listingId: string, _price: bigint): Promise<TxResult> {\n // Placeholder - will call marketplace contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Transfer an NFT to another address\n */\n async transfer(_tokenId: string, _to: string): Promise<TxResult> {\n // Placeholder - will call NFT contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Get NFTs owned by an address\n */\n async getOwnedNFTs(_address: string): Promise<NFT[]> {\n // Placeholder - will query contract/indexer\n return [];\n }\n\n /**\n * Generate a random tokenId (32 bytes hex)\n */\n private generateTokenId(): string {\n const bytes = new Uint8Array(32);\n crypto.getRandomValues(bytes);\n return '0x' + Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('');\n }\n}\n","[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_treasury\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_platformFeeBps\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"EnforcedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ExpectedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InsufficientPayment\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidAddress\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidDuration\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidFee\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidPrice\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ListingExpired\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ListingNotActive\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NotApproved\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NotSeller\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NotTokenOwner\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnableInvalidOwner\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnableUnauthorizedAccount\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ReentrancyGuardReentrantCall\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"SafeERC20FailedOperation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"TransferFailed\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"UnsupportedPaymentToken\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"listingId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"nftContract\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"seller\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"price\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"paymentToken\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"expiresAt\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Listed\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"listingId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ListingCancelled\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"listingId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"newPrice\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ListingUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Paused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bool\",\n \"name\": \"supported\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"PaymentTokenUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"listingId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"buyer\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"price\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"royaltyAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"platformFee\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Sale\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Unpaused\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"listingId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"buyItem\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"listingId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"cancelListing\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"listingId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getListing\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"listingId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"nftContract\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"seller\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"price\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"paymentToken\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"expiresAt\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"isActive\",\n \"type\": \"bool\"\n }\n ],\n \"internalType\": \"struct ZubariMarket.Listing\",\n \"name\": \"\",\n \"type\": \"tuple\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"listingId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"isListingValid\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"nftContract\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"price\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"paymentToken\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"duration\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"listItem\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"listingCounter\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"listings\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"listingId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"nftContract\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"tokenId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"seller\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"price\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"paymentToken\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"expiresAt\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"isActive\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"paused\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"platformFeeBps\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_feeBps\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setPlatformFee\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"supported\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"setSupportedToken\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_treasury\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setTreasury\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"supportedTokens\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"tokenListings\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"treasury\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"unpause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"listingId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"newPrice\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"updatePrice\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n","import type {\n ListingParams,\n Listing,\n BuyParams,\n TxResult,\n} from '../types';\nimport { PLATFORM_CONFIG } from '../config/contracts';\n\n// Import ABI\nimport ZubariMarketAbi from '../abi/ZubariMarket.json';\n\n/**\n * ZubariMarketProtocol - NFT Marketplace operations\n *\n * Handles NFT listings, purchases, and marketplace management\n * with support for ETH and ERC-20 payment tokens.\n */\nexport class ZubariMarketProtocol {\n private readonly contractAddress: string;\n private readonly chainId: number;\n private readonly abi = ZubariMarketAbi;\n\n constructor(contractAddress: string, chainId: number) {\n this.contractAddress = contractAddress;\n this.chainId = chainId;\n }\n\n /**\n * Get the contract ABI\n */\n getAbi() {\n return this.abi;\n }\n\n /**\n * Get the contract address\n */\n getAddress(): string {\n return this.contractAddress;\n }\n\n /**\n * List an NFT for sale\n * @param params Listing parameters\n * @param signer Wallet signer with sendTransaction method\n */\n async listItem(\n params: ListingParams,\n signer: { sendTransaction: (tx: object) => Promise<{ hash: string }> }\n ): Promise<TxResult> {\n // Validate price\n if (params.price <= 0n) {\n throw new Error('Price must be greater than 0');\n }\n\n // Validate duration\n if (params.duration <= 0) {\n throw new Error('Duration must be greater than 0');\n }\n\n // Encode function data\n const iface = new (await import('ethers')).Interface(this.abi);\n const data = iface.encodeFunctionData('listItem', [\n params.nftContract,\n params.tokenId,\n params.price,\n params.paymentToken,\n params.duration,\n ]);\n\n const result = await signer.sendTransaction({\n to: this.contractAddress,\n value: 0n,\n data,\n });\n\n return {\n hash: result.hash,\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Buy an NFT from a listing\n * @param params Buy parameters\n * @param signer Wallet signer\n */\n async buyItem(\n params: BuyParams,\n signer: { sendTransaction: (tx: object) => Promise<{ hash: string }> }\n ): Promise<TxResult> {\n const iface = new (await import('ethers')).Interface(this.abi);\n const data = iface.encodeFunctionData('buyItem', [params.listingId]);\n\n // If paying with ETH (zero address), include value\n const isEthPayment = params.paymentToken === '0x0000000000000000000000000000000000000000';\n\n const result = await signer.sendTransaction({\n to: this.contractAddress,\n value: isEthPayment ? params.price : 0n,\n data,\n });\n\n return {\n hash: result.hash,\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Cancel a listing\n * @param listingId The listing ID to cancel\n * @param signer Wallet signer\n */\n async cancelListing(\n listingId: string,\n signer: { sendTransaction: (tx: object) => Promise<{ hash: string }> }\n ): Promise<TxResult> {\n const iface = new (await import('ethers')).Interface(this.abi);\n const data = iface.encodeFunctionData('cancelListing', [listingId]);\n\n const result = await signer.sendTransaction({\n to: this.contractAddress,\n value: 0n,\n data,\n });\n\n return {\n hash: result.hash,\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Update listing price\n * @param listingId The listing ID\n * @param newPrice New price\n * @param signer Wallet signer\n */\n async updatePrice(\n listingId: string,\n newPrice: bigint,\n signer: { sendTransaction: (tx: object) => Promise<{ hash: string }> }\n ): Promise<TxResult> {\n if (newPrice <= 0n) {\n throw new Error('Price must be greater than 0');\n }\n\n const iface = new (await import('ethers')).Interface(this.abi);\n const data = iface.encodeFunctionData('updatePrice', [listingId, newPrice]);\n\n const result = await signer.sendTransaction({\n to: this.contractAddress,\n value: 0n,\n data,\n });\n\n return {\n hash: result.hash,\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Get listing details\n * @param listingId The listing ID\n * @param provider JSON-RPC provider\n */\n async getListing(\n listingId: string,\n provider: { call: (tx: object) => Promise<string> }\n ): Promise<Listing | null> {\n const iface = new (await import('ethers')).Interface(this.abi);\n const data = iface.encodeFunctionData('getListing', [listingId]);\n\n try {\n const result = await provider.call({\n to: this.contractAddress,\n data,\n });\n\n const decoded = iface.decodeFunctionResult('getListing', result);\n const listing = decoded[0];\n\n return {\n listingId,\n nftContract: listing.nftContract,\n tokenId: listing.tokenId.toString(),\n seller: listing.seller,\n price: listing.price,\n paymentToken: listing.paymentToken,\n expiresAt: Number(listing.expiresAt),\n isActive: listing.isActive,\n };\n } catch {\n return null;\n }\n }\n\n /**\n * Check if a payment token is supported\n * @param token Token address\n * @param provider JSON-RPC provider\n */\n async isTokenSupported(\n token: string,\n provider: { call: (tx: object) => Promise<string> }\n ): Promise<boolean> {\n const iface = new (await import('ethers')).Interface(this.abi);\n const data = iface.encodeFunctionData('supportedTokens', [token]);\n\n try {\n const result = await provider.call({\n to: this.contractAddress,\n data,\n });\n\n const decoded = iface.decodeFunctionResult('supportedTokens', result);\n return decoded[0];\n } catch {\n return false;\n }\n }\n\n /**\n * Calculate platform fee for a given price\n * @param price The sale price\n */\n calculateFee(price: bigint): { fee: bigint; sellerAmount: bigint } {\n const fee = (price * BigInt(PLATFORM_CONFIG.tipFeeBps)) / 10000n;\n return {\n fee,\n sellerAmount: price - fee,\n };\n }\n}\n","import type { TipData, TipResult, TipStats, TxResult } from '../types';\nimport { PLATFORM_CONFIG } from '../config/contracts';\n\n/**\n * ZubariTipsProtocol - Micropayment tips for creators\n *\n * Handles ETH and ERC-20 token tips with platform fee distribution.\n * Supports gasless tips via ERC-4337 when enabled.\n */\nexport class ZubariTipsProtocol {\n private readonly contractAddress: string;\n private readonly chainId: number;\n private readonly gaslessEnabled: boolean;\n\n constructor(contractAddress: string, chainId: number, gaslessEnabled: boolean = false) {\n this.contractAddress = contractAddress;\n this.chainId = chainId;\n this.gaslessEnabled = gaslessEnabled;\n }\n\n /**\n * Send a tip to a creator\n */\n async sendTip(tip: TipData): Promise<TipResult> {\n const { recipient, amount, token, message } = tip;\n\n // Calculate platform fee (3%)\n const platformFee = (amount * BigInt(PLATFORM_CONFIG.tipFeeBps)) / BigInt(10000);\n const creatorAmount = amount - platformFee;\n\n // Validate amount\n if (amount <= 0n) {\n throw new Error('Tip amount must be greater than 0');\n }\n\n // Placeholder - will call contract\n const txResult: TxResult = {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n\n return {\n txHash: txResult.hash,\n tipId: '', // Will be returned from contract event\n recipient,\n amount: creatorAmount,\n platformFee,\n timestamp: Math.floor(Date.now() / 1000),\n };\n }\n\n /**\n * Send tips to multiple creators in a single transaction\n */\n async sendBatchTips(tips: TipData[]): Promise<TipResult[]> {\n if (tips.length === 0) {\n throw new Error('At least one tip is required');\n }\n\n // Calculate total amount needed\n const totalAmount = tips.reduce((sum, tip) => sum + tip.amount, BigInt(0));\n\n // Placeholder - will call batch function\n return tips.map(tip => ({\n txHash: '',\n tipId: '',\n recipient: tip.recipient,\n amount: tip.amount - (tip.amount * BigInt(PLATFORM_CONFIG.tipFeeBps)) / BigInt(10000),\n platformFee: (tip.amount * BigInt(PLATFORM_CONFIG.tipFeeBps)) / BigInt(10000),\n timestamp: Math.floor(Date.now() / 1000),\n }));\n }\n\n /**\n * Get tips received by an address\n */\n async getTipsReceived(address: string): Promise<TipResult[]> {\n // Placeholder - will query indexer\n return [];\n }\n\n /**\n * Get tips sent by an address\n */\n async getTipsSent(address: string): Promise<TipResult[]> {\n // Placeholder - will query indexer\n return [];\n }\n\n /**\n * Get tip statistics for a creator\n */\n async getCreatorTipStats(creator: string): Promise<TipStats> {\n // Placeholder - will query indexer/contract\n return {\n totalReceived: BigInt(0),\n tipCount: 0,\n uniqueTippers: 0,\n };\n }\n\n /**\n * Get platform fee in basis points\n */\n getPlatformFeeBps(): number {\n return PLATFORM_CONFIG.tipFeeBps;\n }\n}\n","import type { SubscriptionPlan, Subscription, TxResult } from '../types';\n\n/**\n * ZubariSubscriptionProtocol - Recurring subscription payments\n *\n * Handles subscription plan creation, subscription management,\n * and verification of active subscriptions.\n */\nexport class ZubariSubscriptionProtocol {\n private readonly contractAddress: string;\n private readonly chainId: number;\n\n constructor(contractAddress: string, chainId: number) {\n this.contractAddress = contractAddress;\n this.chainId = chainId;\n }\n\n /**\n * Create a new subscription plan\n */\n async createPlan(plan: SubscriptionPlan): Promise<string> {\n // Validate plan\n if (!plan.name || plan.name.length === 0) {\n throw new Error('Plan name is required');\n }\n if (plan.price <= 0n) {\n throw new Error('Plan price must be greater than 0');\n }\n if (plan.duration <= 0) {\n throw new Error('Plan duration must be greater than 0');\n }\n\n // Generate planId based on creator + name hash\n const planId = this.generatePlanId(plan.name);\n\n // Placeholder - will call contract\n return planId;\n }\n\n /**\n * Update an existing subscription plan\n */\n async updatePlan(planId: string, updates: Partial<SubscriptionPlan>): Promise<TxResult> {\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Subscribe to a creator's plan\n */\n async subscribe(\n creator: string,\n planId: string,\n months: number = 1\n ): Promise<Subscription> {\n if (months <= 0) {\n throw new Error('Subscription duration must be at least 1 month');\n }\n\n const now = Math.floor(Date.now() / 1000);\n const durationSeconds = months * 30 * 24 * 60 * 60; // 30 days per month\n\n // Placeholder - will call contract\n return {\n subscriptionId: '',\n planId,\n creator,\n subscriber: '', // Current user address\n startTime: now,\n endTime: now + durationSeconds,\n autoRenew: false,\n status: 'active',\n };\n }\n\n /**\n * Cancel an active subscription\n */\n async cancel(subscriptionId: string): Promise<TxResult> {\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Check if an address is subscribed to a creator\n */\n async isSubscribed(creator: string, subscriber?: string): Promise<boolean> {\n // Placeholder - will call contract view function\n return false;\n }\n\n /**\n * Get active subscriptions for a subscriber\n */\n async getActiveSubscriptions(subscriber?: string): Promise<Subscription[]> {\n // Placeholder - will query contract/indexer\n return [];\n }\n\n /**\n * Get all subscribers for a creator\n */\n async getSubscribers(creator: string): Promise<Subscription[]> {\n // Placeholder - will query contract/indexer\n return [];\n }\n\n /**\n * Get a specific plan by ID\n */\n async getPlan(planId: string): Promise<SubscriptionPlan | null> {\n // Placeholder - will query contract\n return null;\n }\n\n /**\n * Get all plans for a creator\n */\n async getCreatorPlans(creator: string): Promise<SubscriptionPlan[]> {\n // Placeholder - will query contract/indexer\n return [];\n }\n\n /**\n * Generate a unique plan ID\n */\n private generatePlanId(name: string): string {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n return '0x' + Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('');\n }\n}\n","import type { EarningsBreakdown, RevenueSplit, TxResult } from '../types';\n\n/**\n * ZubariPayoutsProtocol - Creator earnings management\n *\n * Handles earnings tracking, claiming, revenue splits,\n * and conversion to stablecoins.\n */\nexport class ZubariPayoutsProtocol {\n private readonly contractAddress: string;\n private readonly chainId: number;\n\n constructor(contractAddress: string, chainId: number) {\n this.contractAddress = contractAddress;\n this.chainId = chainId;\n }\n\n /**\n * Get pending earnings breakdown for the current user\n */\n async getPendingEarnings(): Promise<EarningsBreakdown> {\n // Placeholder - will call contract\n return {\n tips: BigInt(0),\n subscriptions: BigInt(0),\n nftSales: BigInt(0),\n royalties: BigInt(0),\n total: BigInt(0),\n };\n }\n\n /**\n * Get historical earnings for a time period\n */\n async getEarningsHistory(\n period: 'day' | 'week' | 'month' | 'all' = 'all'\n ): Promise<EarningsBreakdown[]> {\n // Placeholder - will query indexer\n return [];\n }\n\n /**\n * Claim all pending earnings\n */\n async claimEarnings(): Promise<TxResult> {\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Claim specific amount of earnings\n */\n async claimPartialEarnings(amount: bigint): Promise<TxResult> {\n if (amount <= 0n) {\n throw new Error('Amount must be greater than 0');\n }\n\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Setup revenue split with collaborators\n * Basis points must sum to 10000 (100%)\n */\n async setupRevenueSplit(splits: RevenueSplit[]): Promise<TxResult> {\n // Validate that basis points sum to 100%\n const totalBps = splits.reduce((sum, split) => sum + split.basisPoints, 0);\n if (totalBps !== 10000) {\n throw new Error('Revenue splits must sum to 100% (10000 basis points)');\n }\n\n // Validate each split\n for (const split of splits) {\n if (split.basisPoints <= 0) {\n throw new Error('Each split must have positive basis points');\n }\n if (!split.recipient || split.recipient.length === 0) {\n throw new Error('Each split must have a valid recipient address');\n }\n }\n\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Get current revenue split configuration\n */\n async getRevenueSplit(): Promise<RevenueSplit[]> {\n // Placeholder - will query contract\n return [];\n }\n\n /**\n * Remove revenue split (creator gets 100%)\n */\n async removeRevenueSplit(): Promise<TxResult> {\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Convert earnings to stablecoin (USDT)\n */\n async convertToStable(token: string, amount: bigint): Promise<TxResult> {\n if (amount <= 0n) {\n throw new Error('Amount must be greater than 0');\n }\n\n // Placeholder - will use swap protocol\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n}\n"]}
|