sui_scallop_sdk 1.3.0 copy "sui_scallop_sdk: ^1.3.0" to clipboard
sui_scallop_sdk: ^1.3.0 copied to clipboard

A Dart SDK for the Scallop lending protocol on Sui - market data, obligations, spools, lending/borrowing actions, and naming.

Sui Scallop SDK (Dart) #

A fully featured Dart toolkit for interacting with the Scallop lending protocol on the Sui network. It wraps Scallop's on-chain Move contracts, off-chain indexer APIs, price oracles, and transaction builders so you can build lending apps, portfolio dashboards, and automation in pure Dart.

Features #

  • Unified Scallop client that exposes builders, queries, utilities, and constants behind a single initialization step.
  • Read market state from on-chain RPC and the Scallop indexer, with automatic fallback to on-chain reads when the indexer is unavailable.
  • Transaction builders for the core lending flows (obligation management, supply, borrow, repay, stake/unstake, claim, loyalty programs, xOracle updates, etc.).
  • Utilities for Scallop metadata (addresses, whitelists, decimals), coin selection/merging, and price feeds from Pyth, Switchboard, and the Scallop price service.
  • Portfolio helpers that aggregate user positions, TVL, borrow limits, rewards, and staking data.
  • Built on sui_kit, so you can plug in any signer, key-derivation path, or full-node rotation strategy SuiKit supports.

Installation #

dart pub add sui_scallop_sdk

Or add it to your pubspec.yaml:

dependencies:
  sui_scallop_sdk: ^1.0.4

Then run dart pub get (or flutter pub get).

Platform support: this package uses gRPC (dart:io) and supports the native platforms (Android, iOS, Linux, macOS, and Windows). Web/WASM is not supported.

Quick Start #

The SDK is composed of a few building blocks, all reachable from a single Scallop instance:

  • Scallop: the entry point. Construct it, call await init() once, then read the sub-models from its getters.
  • scallop.constants: the canonical package/object IDs, coin metadata, and whitelists.
  • scallop.indexer: Scallop's REST indexer for cached market data.
  • scallop.utils: helpers (coin parsing, price feeds, coin selection).
  • scallop.query: read APIs across market, spool, loyalty, veSCA, and oracle contracts.
  • scallop.builder: enhances Sui transaction blocks with Scallop-specific Move calls.
  • scallop.client: high-level methods that build, sign, and submit transactions.

Bootstrap the client #

import 'dart:io';
import 'package:sui_kit/sui_kit.dart';
import 'package:sui_scallop_sdk/sui_scallop_sdk.dart';

Future<Scallop> createScallop() async {
  final scallop = Scallop(
    networkType: NetworkType.mainnet,
    // A secret key is only needed to sign transactions; omit it for read-only use.
    secretKey: Platform.environment['PRIVATE_KEY'],
    // Optional overrides: addressId, indexerApiUrl, pythEndpoints, tokensPerSecond, ...
  );

  // Fetches addresses/metadata and wires up the query/builder/client stack.
  // Must be awaited before accessing any of the getters below.
  await scallop.init();
  return scallop;
}

Querying market data #

final scallop = await createScallop();
final query = scallop.query;

// Fetch pools (indexer first, fallback to RPC if needed).
final market = await query.getMarketPools(['sui', 'wusdc']);
final suiPool = market.pools['sui'];
print('SUI supply APY: ${suiPool?.supplyApy}');

// Inspect user balances and obligations.
final balances = await query.getCoinAmounts(['sui', 'wusdc']);
final obligations = await query.getObligations();

// Portfolio helper with staking and incentive data.
final lendings = await query.getLendings(poolCoinNames: ['sui', 'wusdc']);

// Protocol-wide totals.
final tvl = await query.getTvl();

Most query methods accept an indexer: true flag. When set, the SDK tries the REST API first and silently falls back to direct on-chain reads if the request fails.

Submitting transactions #

final scallop = await createScallop();
final client = scallop.client;

// Deposit 1 SUI (amounts are in the coin's smallest unit; 1 SUI = 1e9 MIST).
final response = await client.deposit('sui', BigInt.from(1000000000));
print('Tx digest: ${response.txResponse?.digest}');

// Build an unsigned borrow transaction for sponsorship or custom signing.
final obligations = await client.getObligations();
final obligation = obligations.first;
final borrow = await client.borrow(
  'wusdc',
  BigInt.from(5000000),
  obligationId: obligation.id,
  obligationKey: obligation.keyId,
  sign: false,
);
final txBlock = borrow.txBlock; // hand off to your own signing flow

ScallopClient covers the common flows (openObligation, deposit, depositAndStake, withdraw, borrow, repay, flashLoan, stake, unstake, claim, mintSCoin, burnSCoin, etc.). Each method supports sign: false so you can compose, sponsor, or inspect transactions before submitting. For lower-level control, use scallop.builder and work with the Move helpers it exposes.

Utility helpers #

final scallop = await createScallop();
final utils = scallop.utils;

final coinType = utils.parseCoinType('wusdc');
final sCoinName = utils.parseMarketCoinName('sui'); // -> 'ssui'
final prices = await utils.getCoinPrices();
final selection = await utils.selectCoins(
  BigInt.from(5000000000),
  coinType: coinType,
  ownerAddress: utils.walletAddress,
);

Configuration #

Scallop's constructor accepts these optional parameters:

  • networkType: target Sui network (defaults to mainnet). Switch full nodes at runtime via scallop.utils.scallopSuiKit.switchFullNodes([...]).
  • secretKey / walletAddress: the signer used for transactions and owner-scoped queries.
  • addressId: the Scallop address record to load (override to test against forks or specific deployments).
  • indexerApiUrl / baseUrl / defaultHeaders / timeout: point the REST indexer / HTTP client at custom endpoints.
  • pythEndpoints / pythTimeoutMs / usePythPullModel / sponsoredFeeds: configure Pyth price-feed resolution. Builders for xOracle and Switchboard updates live under lib/src/builders/oracles.
  • tokensPerSecond: throttle RPC calls via the built-in rate limiter.

Testing & Examples #

A runnable example lives in example/sui_scallop_sdk_example.dart:

dart run example/sui_scallop_sdk_example.dart

The repository also includes integration tests that exercise the query and builder surfaces. They expect a .env file with PRIVATE_KEY=<hex_or_bech32_key>:

dart test

Troubleshooting #

  • Ensure your wallet has the required coins before submitting transactions. The SDK surfaces the underlying Sui RPC errors when a balance is insufficient.
  • The SDK targets Sui mainnet. Override addressId or indexerApiUrl only if you point at a custom mainnet deployment or a self-hosted indexer.
  • Large portfolio queries aggregate many RPC requests; raise your test Timeout or lower tokensPerSecond if you regularly hit rate limits.

Contributing #

Issues and pull requests are welcome. Please run dart format ., dart analyze, and the test suite before submitting changes.

License #

Licensed under the Apache 2.0 license.

0
likes
160
points
672
downloads

Documentation

API reference

Publisher

verified publisherscallop.io

Weekly Downloads

A Dart SDK for the Scallop lending protocol on Sui - market data, obligations, spools, lending/borrowing actions, and naming.

Repository (GitHub)
View/report issues

Topics

#sui #scallop #defi #lending #blockchain

License

Apache-2.0 (license)

Dependencies

bcs_dart, collection, decimal, freezed_annotation, http, json_annotation, meta, pyth_sui_dart, riverpod, riverpod_annotation, sui_dart, sui_kit

More

Packages that depend on sui_scallop_sdk