Sullend SDK

live TypeScript / EVM

A typed SDK for interacting with EVM-compatible protocols. Built for developers integrating lending, governance, or liquidity contracts into applications, scripts, and automated systems.

The SDK abstracts away the mechanical overhead of EVM interaction — ABI management, multicall batching, provider configuration, and error normalization — without hiding what's happening underneath. You can drop down to raw contract calls at any point. Nothing is locked behind a black box.

Multicall3 batching is applied automatically when you read multiple values in a single SDK call. What would otherwise be forty sequential RPC requests becomes one. The performance difference is material in any latency-sensitive context: dashboards, liquidation bots, arbitrage scripts, real-time monitoring.

TypeScript types are generated at build time from the contract ABIs. There is no manual type maintenance. When a contract is updated and new types are generated, TypeScript surfaces any integration incompatibilities before you run a single line of code. The compiler does the diff for you.

The SDK is provider-agnostic by design. Pass a viem public client, an ethers.js v6 provider, or any object that satisfies the minimal read interface. We do not take a position on which provider library you use. The SDK adapts to your stack, not the other way around.

Features

  • Full TypeScript types generated from ABIs at build time
  • Multicall3 batching applied automatically on multi-read calls
  • Provider-agnostic: ethers.js v6, viem, web3.js
  • Tree-shakeable ESM + CJS dual builds
  • Normalised error types across all contract interactions
  • Zero peer dependencies beyond your provider of choice
  • CoreLend and Govern modules built in
  • Docs at docs.sullendlabs.xyz/sdk

Compatible with

  • Ethereum mainnet and all EVM-compatible L2s
  • Any EIP-1193 compliant provider
  • Node.js 18+ and all modern browsers
  • CommonJS and ES module environments

Design rationale

Most EVM SDKs are wrappers around a single provider library. When that library changes a major version, the SDK breaks. Sullend SDK inverts this: the provider is a dependency you inject, not a dependency we take. Version upgrades on your end never require changes to your SDK integration code.

What it is not

The SDK does not abstract away blockchain semantics. It does not manage wallets, private keys, or transaction signing. It does not make assumptions about gas pricing strategy. Those concerns belong in your application layer. The SDK handles protocol interaction; you handle everything above it.

CoreLend Protocol

beta Solidity / EVM

A modular lending protocol for EVM chains. Deploy isolated lending pools with configurable collateral factors, interest rate models, and liquidation parameters — without inheriting the architectural decisions of protocols designed for a different era.

CoreLend is not a fork. The architecture separates pool state, interest accrual, oracle resolution, and liquidation into independent contracts with narrow interfaces between them. Each component can be upgraded or replaced without redeploying the system. An oracle migration does not require a pool migration. A rate model update does not require touching position state.

Pool isolation is a first-class design principle. Each asset pair operates in its own pool with its own parameters. A bad debt event in one pool cannot propagate to others. Risk is bounded by construction, not by operational procedure.

The interest rate models are pluggable. The linear model suits stable or low-utilization pools. The kinked model replicates the utilization kink behavior common in established lending protocols, providing a higher-slope region above the kink to discourage over-utilization. Custom rate models can be deployed and registered without modifying the core contracts.

Flash loans are supported natively via EIP-3156. The receiver interface is standard. Any protocol that implements ERC-3156 can execute flash loans against CoreLend pools without custom integration work.

Features

  • Isolated lending pools per asset pair
  • Configurable collateral factors and liquidation thresholds
  • Pluggable interest rate models (linear, kinked)
  • Oracle-agnostic: Chainlink, Pyth, custom adapters
  • Flash loan support (EIP-3156 standard interface)
  • Bad debt isolation at the pool level
  • Formal specification in progress
  • Third-party audit in progress

Current status

  • Live on Sepolia testnet
  • Audit in progress — report will be published pre-mainnet
  • No mainnet deployment until audit completes
  • Accepts testnet feedback and bug reports

Why not fork Compound v2

Compound v2 couples pool logic, governance, and interest accrual in ways that make isolated reasoning difficult. Its architecture was designed for a single deployment on a single chain, controlled by a single governance system. CoreLend is designed for teams deploying on chains where Compound doesn't exist, with governance requirements that differ from the original. A fork carries the complexity without inheriting the security track record.

Audit policy

Every financial contract we deploy to mainnet carries a completed, publicly available audit report. The report is committed to the repository alongside the contracts it covers. We do not ship under a "audit in progress" caveat on mainnet. If the audit isn't done, the contract isn't on mainnet. No exceptions for any reason, including timeline pressure.

Govern

in dev Solidity + TypeScript / EVM

A minimal DAO governance toolkit. On-chain proposals, token-weighted voting, timelock execution, and a treasury module — all in under 800 lines of Solidity. Built for teams that need governance to function as infrastructure, not as a political process.

Govern is designed for teams that need governance without adopting a monolithic framework. Import only the modules you need. The voting contract is standalone. The treasury is standalone. Wire them together or deploy them independently. There is no hidden coupling between components.

Voting uses a snapshot-at-proposal model. Voting power is recorded at the block the proposal is created, not the block each vote is cast. This eliminates the flash loan voting attack vector that snapshot-at-vote systems are vulnerable to, without requiring token locking or a separate voting escrow contract.

The timelock implementation is interface-compatible with OpenZeppelin's TimelockController. Any frontend or tooling built for OZ governance works with Govern's timelock out of the box. We do not introduce incompatible extensions without a corresponding migration path.

The treasury module accepts ETH and ERC-20 assets. Withdrawals require a passed and executed proposal. The module is intentionally minimal — it is not a DeFi strategy manager. It holds funds and executes transfers only when governance approves. Complexity can be layered on top; the base module stays simple.

Features

  • ERC-20 token-weighted voting with delegation
  • Snapshot-at-proposal voting power (flash-loan resistant)
  • Configurable quorum and approval threshold
  • Timelock controller (OZ-compatible interface)
  • Treasury: receive, hold, and execute via proposal gate
  • TypeScript SDK integration via Sullend SDK
  • Under 800 lines of Solidity total across all modules

Roadmap

  • Target release: Q3 2025
  • Third-party audit scheduled post code-freeze
  • SDK module shipping alongside contracts
  • Frontend reference implementation planned

Why not use OpenZeppelin Governor

OpenZeppelin Governor is a solid implementation for teams that want a full governance stack with minimal customization. Govern targets a different use case: teams that need specific combinations of modules, want to understand every line of governance code they're deploying, or are operating on chains where existing governor deployments don't exist. We don't claim Govern is better — we claim it's smaller and easier to audit.

What's out of scope

Govern does not include veToken mechanics, gauge systems, vote delegation markets, or cross-chain voting. Those are legitimate features that add significant complexity and attack surface. Teams that need them should evaluate frameworks designed specifically for that use case. Govern is governance for protocols that want governance, not governance as a token distribution mechanism.