Address derivation

Turnkey supports Sui address derivation with ADDRESS_TYPE_SUI. Sui addresses are derived from the Ed25519 curve, which Turnkey fully supports.

Transaction construction and signing

Turnkey supports Sui transaction signing through the core signing capabilities. We provide an example repository that demonstrates how to construct and sign Sui transactions:

Example

Here’s a practical example showing how to integrate Turnkey with the Sui SDK:

import { Turnkey } from "@turnkey/sdk-server";
import {
  Connection,
  JsonRpcProvider,
  Ed25519Keypair,
  RawSigner,
  TransactionBlock,
} from "@mysten/sui.js";

// Custom Turnkey signer for Sui
class TurnkeySuiSigner {
  private turnkeyClient: Turnkey;
  private organizationId: string;
  private suiAddress: string;

  constructor(
    apiPrivateKey: string,
    apiPublicKey: string,
    organizationId: string,
    suiAddress: string
  ) {
    this.turnkeyClient = new Turnkey({
      apiBaseUrl: "https://api.turnkey.com",
      apiPrivateKey,
      apiPublicKey,
      defaultOrganizationId: organizationId,
    });

    this.organizationId = organizationId;
    this.suiAddress = suiAddress;
  }

  // Sign bytes using Turnkey
  async signData(data: Uint8Array): Promise<Uint8Array> {
    const dataToSign = Buffer.from(data).toString("hex");

    const signResult = await this.turnkeyClient.signRawPayload({
      organizationId: this.organizationId,
      signWith: this.suiAddress,
      payload: dataToSign,
      encoding: "hex",
    });

    // Return signature as bytes
    return Buffer.from(signResult.signature, "hex");
  }

  // Get the Sui address associated with this signer
  getAddress(): string {
    return this.suiAddress;
  }
}

// Usage example
async function sendSuiTransaction() {
  // Initialize your Turnkey signer
  const turnkeySigner = new TurnkeySuiSigner(
    process.env.API_PRIVATE_KEY!,
    process.env.API_PUBLIC_KEY!,
    process.env.ORGANIZATION_ID!,
    process.env.SUI_ADDRESS! // Your Sui address in Turnkey
  );

  // Connect to Sui network
  const connection = new Connection({
    fullnode: "https://fullnode.mainnet.sui.io", // Use testnet for development
  });
  const provider = new JsonRpcProvider(connection);

  // Create a keypair that acts as an adapter between our signer and Sui SDK
  // Note: We don't use the actual keypair for signing, only as an adapter
  const dummyKeypair = new Ed25519Keypair();

  // Create a Sui signer that will use our Turnkey signer for actual signing
  const signer = new RawSigner(
    // Override the signData method to use our Turnkey signer
    {
      getPublicKey: async () => {
        return dummyKeypair.getPublicKey();
      },
      signData: async (data: Uint8Array) => {
        return {
          signature: await turnkeySigner.signData(data),
          signatureScheme: dummyKeypair.getKeyScheme(),
        };
      },
    },
    provider
  );

  // Build a transaction
  const tx = new TransactionBlock();

  // Example: Transfer SUI tokens
  tx.transferObjects(
    [
      tx.object("0x..."), // Object ID to transfer
    ],
    tx.pure("0x...")
  ); // Recipient address

  // Sign and execute transaction
  const result = await signer.signAndExecuteTransactionBlock({
    transactionBlock: tx,
  });

  console.log("Transaction executed:", result.digest);
  return result;
}

Sui Network Support

Turnkey supports:

  • Sui Mainnet
  • Sui Testnet
  • Sui Devnet

Key Features for Sui

  • Ed25519 Signing: Turnkey fully supports the Ed25519 curve used by Sui
  • Raw Transaction Signing: Sign any Sui transaction format with Turnkey’s flexible signing API
  • Integration Example: Our example repository provides a reference implementation

Benefits of Using Turnkey with Sui

  • Secure Key Management: Private keys never leave Turnkey’s secure infrastructure
  • Developer Friendly: Integrate with existing Sui development workflows
  • Signing Policies: Apply custom policies to control transaction approvals
  • Multi-user Support: Manage multiple Sui addresses under a single organization

If you’re building on Sui and need assistance with Turnkey integration, feel free to contact us at hello@turnkey.com, on X, or on Slack.