Sign on every chain.
From one API.

MPCKit is the signing API your wallet, exchange, or app calls to send funds across chains. Bitcoin, Ethereum, Solana, Sui, and every chain those four curves cover, from one HTTP call. We never hold your users' keys. Neither do you.

  • Curves4SECP256K1, ED25519, SECP256R1, RISTRETTO
  • Settled onSuimainnet
  • Holds your key?No.Neither do we.
The cryptography

2PC-MPC. The user is part of the math.

Every signature needs both your user and the Ika network to cooperate. Neither side ever sees the full key. Compromise our servers and your users are still safe. Compromise the user, and the network alone cannot sign. The full key never gets reassembled.

Client
User share
In your app
Cooperate
Signature
Produced on demand
Network
Threshold share
Held by Ika validators
Read the protocol
UC-secure
Universal composability
Identifiable abort
Misbehavior is named
Public verifiability
Any third party can audit
Constant-round
User-side flow
Single API

One call. Every chain that matters.

Sign Bitcoin, Ethereum, Solana, Sui, and every chain in between with the same code. Pick a chain, pass a message, ship.

SECP256K1BTC, ETH, all EVMs, Cosmos
ED25519Solana, Sui, Aptos, NEAR
SECP256R1WebAuthn, niche enterprise
RISTRETTOSubstrate, zk uses
Anchored on

Every signature lives on Sui.

Every signature is recorded on Sui mainnet. Public, ordered, signed by validators. If we go offline, your wallets are still there.

How dWallets work
Pricing

Pay per signature.
Pennies, not negotiations.

Pay per op in microUSD. A signature is 10,000 µ$ ($0.01) at the default rate. Top up by depositing an accepted Sui-side coin and declaring the tx digest.

sign10,000 µ$dwallet.dkg50,000 µ$encryption-key1,000 µ$
Built for engineers

Same calls, three languages.

Drop into TypeScript, React, or Rust. Same names, same shapes, same docs. Pick the one your team already ships in.

TSTSXRSnpm · cargo
// any chain, any runtime
use mpckit::{MPCKit, Curve};

let api = MPCKit::builder()
  .api_key(key)
  .network(Network::Mainnet)
  .build()?;

let sig = api.sign(args).await?;
MPCKit

Ship a signature this afternoon.

Grab a key, install the SDK, sign your first message. The docs walk you through every step.