SolanaSolana support coming soon. dWallets are expanding to Solana for native cross-chain signing.
Ika LogoIka Docs

Move Contract Integration

Build Move smart contracts that integrate with Ika's distributed wallet (dWallet) protocol to enable programmable, decentralized signing for cross-chain operations.

What is Move Integration?

Move integration allows you to embed dWallet functionality directly into your Sui Move smart contracts. This enables:

  • Programmable Signing: Define custom logic that controls when and how signatures are created
  • Cross-Chain Operations: Sign transactions for Bitcoin, Ethereum, and other chains from Sui contracts
  • Decentralized Custody: Build DAOs, treasuries, and governance systems with distributed key management
  • Automated Workflows: Create smart contracts that can sign without user interaction (using shared dWallets)

Architecture Overview

Architecture Overview

Your Move Contract
DWalletCap
(stored)
Presigns
(pooled)
Business Logic
(governance, approvals)
DWalletCoordinator
DKG
Protocol
Presign
Protocol
Sign
Protocol
Future Sign
Protocol
Ika Network
(2PC-MPC Protocol Execution)

When to Use Move Integration

Use Move Integration When:

  • Building DAOs or treasuries that need distributed signing authority
  • Creating governance systems with approval workflows before signing
  • Implementing multi-signature wallets with custom voting logic
  • Building automated trading bots or DeFi protocols that sign on other chains
  • Developing custody solutions with programmable access controls

Use SDK-Only When:

  • Building user-facing wallets where users hold their own keys
  • Creating simple signing flows without on-chain logic
  • Prototyping before committing to on-chain architecture

Key Concepts

ConceptDescription
DWalletCoordinatorThe shared object that manages all dWallet operations on Ika
DWalletCapCapability object that authorizes signing operations for a dWallet
PresignPre-computed cryptographic material required before signing
MessageApprovalAuthorization for signing a specific message
SessionIdentifierUnique identifier for each protocol operation

Protocol Lifecycle

Protocol Lifecycle

DKG
Create dWallet and receive DWalletCap
DWalletCap
(store permanently)
PRESIGN
Pre-compute cryptographic material for signing
UnverifiedPresignCap
(store in pool)
VerifiedPresignCap
(ready to use)
Signing Options
SIGN
(Direct signing)
approve_message()
request_sign()
FUTURE SIGN
(Two-phase signing)
Phase 1: Commit
Phase 2: Execute

Quick Example

Here's a minimal example of a contract that creates a shared dWallet:

module my_protocol::treasury;
 
use ika::ika::IKA;
use ika_dwallet_2pc_mpc::{
    coordinator::DWalletCoordinator,
    coordinator_inner::{DWalletCap, UnverifiedPresignCap},
    sessions_manager::SessionIdentifier
};
use sui::{balance::Balance, coin::Coin, sui::SUI};
 
public struct Treasury has key, store {
    id: UID,
    dwallet_cap: DWalletCap,
    presigns: vector<UnverifiedPresignCap>,
    ika_balance: Balance<IKA>,
    sui_balance: Balance<SUI>,
}

Documentation Structure

  • Getting Started - Set up your Move project with Ika dependencies
  • Core Concepts - Understand the coordinator, capabilities, and payments
  • Protocols - Deep dive into DKG, presigning, signing, and future signing
  • Integration Patterns - Common patterns for building with Ika
  • Examples - Full example walkthroughs including Bitcoin multisig

Next Steps

  1. Start with Getting Started to set up your project
  2. Read Core Concepts to understand the building blocks
  3. Follow the Protocols guides for each operation type
  4. Check Examples for complete implementations

On this page