Skip to content

The production-grade, all-in-one SDK for SUI blockchain development. Designed to solve common developer pain points: pagination, name resolution, argument wrapping, and complex standard interactions (Kiosk, Display).

Notifications You must be signed in to change notification settings

dotandev/sui-easy-sdk

Repository files navigation

SUI Easy SDK

The production-grade, all-in-one SDK for SUI blockchain development. Designed to solve common developer pain points: pagination, name resolution, argument wrapping, and complex standard interactions (Kiosk, Display).

Installation

npm install sui-easy-sdk @mysten/sui @mysten/bcs
-->

Core Features

1. Universal Naming

Every method that accepts an address also accepts a .sui name.

const objects = await client.getAllOwnedObjects('demo.sui');

2. Auto-Pagination

Never write a while(hasNextPage) loop again.

const allCoins = await CoinUtils.selectCoins(client, 'demo.sui', 500n, '0x...::type', 'all');

3. Fluent Transaction Builder

Auto-wraps number -> u64, string -> Pure or Object, performs async name resolution.

await builder.moveCallWithResolving(client, 'pkg::mod::fn', ['friend.sui', 100]);

API Reference

SuiEasyClient

Extends SuiClient (official SDK).

  • constructor(options: SuiClientOptions): Standard initialization.
  • async resolveAddress(addressOrName: string): Promise<string>:
    • Resolves .sui name to 0x address. Returns input if already address.
  • async getAllOwnedObjects(addressOrName: string, typeFilter?: string):
    • Fetches ALL pages of owned objects.
    • Auto-resolves owner name.
  • parseError(error: any): string:
    • Extracts Move Abort codes from RPC errors.

AdvancedTxBuilder

Wraps Transaction.

  • tx: Access the underlying Transaction object.
  • moveCall(target, args, typeArgs):
    • Adds a MoveCall command.
    • Auto-wraps JS types (number->u64, boolean->bool).
    • Treats hex-strings (0x...) as Objects by default.
  • async moveCallWithResolving(client, target, args, typeArgs):
    • Resolves any string args ending in .sui to addresses before adding the command.
  • transferObjects(objects, recipient):
    • Recipient can be a name or address (if resolved beforehand, otherwise use moveCall variants).
  • splitCoins(coin, amounts): Wrapper for tx.splitCoins.
  • mergeCoins(dest, sources): Wrapper for tx.mergeCoins.

CoinUtils

  • static async selectCoins(client, ownerOrName, amount, coinType, strategy):
    • strategy: 'biggest-first' (gas opt), 'exact-match' (payment), or 'all'.
    • Returns { selectedCoins, totalAmount }.
  • static createCoinInput(tx, coins, amount, coinType):
    • Returns a coin object ready for use (merges inputs if needed, then splits).

KioskUtils

  • createKiosk(tx): Returns [kiosk, kioskOwnerCap].
  • place(tx, kiosk, cap, item, itemType): Places item.
  • withdraw(tx, kiosk, cap, itemId, itemType): Withdraws item.

ObjectDisplayUtils

  • getDisplays(objectIds):
    • Returns map of { [id]: DisplayFields }.
    • Uses multiGetObjects for efficiency.
  • static resolveImageUrl(display):
    • Sanitizes IPFS URLs.

DataUtils

  • stringToVectorU8(str): Encodes string to vector<u8>.
  • vectorU8ToString(bytes): Decodes bytes.
  • toHex(bytes), fromHex(str): Hex utils.
  • normalizeAddress(addr): 0x-padding.
  • formatAddress(addr): Truncates for display (e.g. 0x12...34).
  • isValidStructTag(str): Validates struct format.

Example Scenarios

Buying an NFT with Kiosk and Names

See examples/showcase.ts for the full code.

const { selectedCoins } = await CoinUtils.selectCoins(client, 'buyer.sui', price);
const [payment] = CoinUtils.createCoinInput(builder.tx, selectedCoins, price, SUI_TYPE);

await builder.moveCallWithResolving(client, 'mkt::buy', ['kiosk.sui', payment]);

About

The production-grade, all-in-one SDK for SUI blockchain development. Designed to solve common developer pain points: pagination, name resolution, argument wrapping, and complex standard interactions (Kiosk, Display).

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •