Skip to content

The ultimate SDK for building games on SUI. Includes Session Keys, Asset Spawning, and Game State Synchronization.

Notifications You must be signed in to change notification settings

dotandev/sui-game-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 ultimate SDK for building games on SUI. Includes Session Keys, Asset Spawning, and Game State Synchronization.

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •