Smart Contracts
Complete reference for all Defactor smart contracts deployed on-chain. Includes function signatures, event definitions, and deployment information for each supported network. AI agents can interact with these contracts directly via ethers.js or through the SDK.
ERC20CollateralPool
Custom (Solidity ^0.8.20)Core lending pool contract. Manages collateralized lending with ERC-20 tokens. Supports multiple collateral types per pool, configurable interest rates, and automated liquidation.
Features
Key Functions
| Function | Returns | Description |
|---|---|---|
| getTotalPools() | uint256 | Total number of pools |
| getPools(uint256 offset, uint256 limit) | Pool[] | Paginated pool list |
| lend(uint256 poolId, uint256 amount) | void | Supply capital to pool |
| borrow(uint256 poolId, uint256 amount) | void | Borrow from pool |
| repay(uint256 poolId, uint256 amount) | void | Repay borrowed amount |
| collectPool(uint256 poolId) | void | Collect returns after deadline |
| liquidatePool(uint256 poolId) | void | Liquidate under-collateralized pool |
Events
PoolCreated(uint256 indexed poolId, address creator)Lent(uint256 indexed poolId, address lender, uint256 amount)Borrowed(uint256 indexed poolId, address borrower, uint256 amount)Repaid(uint256 indexed poolId, address borrower, uint256 amount)PoolCollected(uint256 indexed poolId, address lender, uint256 amount)PoolLiquidated(uint256 indexed poolId)ERC-20 Token Factory
ERC-20 (OpenZeppelin)Factory contract for deploying standard ERC-20 tokens representing tokenized real-world assets. Supports customizable supply, decimals, and metadata.
Features
Key Functions
| Function | Returns | Description |
|---|---|---|
| deploy(string name, string symbol, uint256 supply) | address | Deploy new ERC-20 token |
| mint(address to, uint256 amount) | void | Mint new tokens (owner only) |
| burn(uint256 amount) | void | Burn tokens from caller |
| transfer(address to, uint256 amount) | bool | Transfer tokens |
| approve(address spender, uint256 amount) | bool | Approve spending |
Events
Transfer(address indexed from, address indexed to, uint256 value)Approval(address indexed owner, address indexed spender, uint256 value)ERC-3643 (T-REX)
ERC-3643 / T-REXCompliant security token standard with built-in identity registry and transfer restrictions. Used for regulated real-world asset tokens that require KYC/AML compliance.
Features
Key Functions
| Function | Returns | Description |
|---|---|---|
| isVerified(address) | bool | Check if address has valid identity |
| identityRegistry() | address | Get identity registry contract |
| compliance() | address | Get compliance contract |
| transfer(address to, uint256 amount) | bool | Compliant transfer (checks identity) |
| forcedTransfer(address from, address to, uint256 amount) | void | Regulatory forced transfer |
| freeze(address account) | void | Freeze account (regulatory) |
| unfreeze(address account) | void | Unfreeze account |
Events
Transfer(address indexed from, address indexed to, uint256 value)IdentityVerified(address indexed account)AccountFrozen(address indexed account)AccountUnfrozen(address indexed account)Engage (Staking & Governance)
Custom (Solidity ^0.8.20)Combined staking and governance contract for the FACTR token. Manages staking plans with configurable lock periods, reward distribution, and on-chain governance voting.
Features
Key Functions
| Function | Returns | Description |
|---|---|---|
| getStakingPlans() | Plan[] | List all staking plans |
| stake(uint256 planId, uint256 amount) | void | Stake FACTR tokens |
| unstake(uint256 planId) | void | Unstake after lock period |
| claimRewards(uint256 planId) | void | Claim staking rewards |
| vote(uint256 proposalId, bool support) | void | Vote on proposal |
| createProposal(string title, string desc, bytes[] actions) | uint256 | Create governance proposal |
Events
Staked(address indexed user, uint256 planId, uint256 amount)Unstaked(address indexed user, uint256 planId, uint256 amount)RewardsClaimed(address indexed user, uint256 amount)ProposalCreated(uint256 indexed proposalId, address proposer)Voted(uint256 indexed proposalId, address voter, bool support)CounterpartyPool
Custom (Solidity ^0.8.20)Bilateral lending pool contract for private agreements between two specific parties. Supports custom terms, collateral requirements, and dispute resolution.
Features
Key Functions
| Function | Returns | Description |
|---|---|---|
| createPool(address counterparty, ...params) | uint256 | Create bilateral pool |
| acceptPool(uint256 poolId) | void | Counterparty accepts terms |
| depositCollateral(uint256 poolId, uint256 amount) | void | Deposit collateral |
| withdraw(uint256 poolId) | void | Withdraw after settlement |
Events
PoolCreated(uint256 indexed poolId, address creator, address counterparty)PoolAccepted(uint256 indexed poolId)CollateralDeposited(uint256 indexed poolId, uint256 amount)PoolSettled(uint256 indexed poolId)Direct ABI Interaction
For agents that prefer direct contract interaction without the SDK:
1// Loading Contract ABI for Direct Interaction2import { ethers } from 'ethers'34// The SDK includes ABIs, but for direct interaction:5const ERC20_COLLATERAL_POOL_ABI = [6 "function getTotalPools() view returns (uint256)",7 "function getPools(uint256 offset, uint256 limit) view returns (tuple[])",8 "function lend(uint256 poolId, uint256 amount)",9 "function borrow(uint256 poolId, uint256 amount)",10 "function repay(uint256 poolId, uint256 amount)",11 "function collectPool(uint256 poolId)",12 "function liquidatePool(uint256 poolId)",13 "event Lent(uint256 indexed poolId, address lender, uint256 amount)",14 "event Borrowed(uint256 indexed poolId, address borrower, uint256 amount)"15]1617// Create contract instance18const provider = new ethers.JsonRpcProvider('https://polygon-rpc.com')19const wallet = new ethers.Wallet(PRIVATE_KEY, provider)20const pool = new ethers.Contract(POOL_ADDRESS, ERC20_COLLATERAL_POOL_ABI, wallet)2122// Direct interaction23const totalPools = await pool.getTotalPools()24console.log('Total pools:', totalPools.toString())2526// Listen for events27pool.on('Lent', (poolId, lender, amount) => {28 console.log(`Pool ${poolId}: ${lender} lent ${ethers.formatEther(amount)}`)29})Event Monitoring for Agents
AI agents can subscribe to on-chain events to trigger automated responses. Use WebSocket providers for real-time event streaming.
1// Event Monitoring for AI Agents2// Listen for on-chain events to trigger automated responses34import { ethers } from 'ethers'56const provider = new ethers.WebSocketProvider('wss://polygon-rpc.com')7const pool = new ethers.Contract(POOL_ADDRESS, ABI, provider)89// Monitor new lending activity10pool.on('Lent', async (poolId, lender, amount) => {11 console.log(`[Event] New lend: Pool ${poolId}, Amount: ${ethers.formatEther(amount)}`)1213 // Agent can react to events14 const poolDetails = await pool.getPoolDetails(poolId)15 if (poolDetails.totalLent >= poolDetails.softCap) {16 console.log('[Agent] Pool reached soft cap, considering borrowing')17 }18})1920// Monitor liquidation opportunities21pool.on('Borrowed', async (poolId, borrower, amount) => {22 const details = await pool.getPoolDetails(poolId)23 const healthFactor = Number(details.healthFactor)2425 if (healthFactor < 12000) { // Below 120%26 console.log(`[Agent] Pool ${poolId} health factor low: ${healthFactor/100}%`)27 console.log('[Agent] Monitoring for liquidation opportunity')28 }29})