Shared dWallet
A Shared dWallet is a dWallet where the user's secret share is publicly stored on the network, creating a simplified trust model where the network has full access to both shares.
Need user-controlled signing?
For applications where users should maintain full control over their wallets, use a Zero-Trust dWallet instead, which requires user participation for every signature.
Architecture
The dWallet consists of two cryptographic shares:
- Public User Share: A publicly visible share stored on the network
- Network Share: A share held by the Ika network
Unlike zero-trust dWallets, both shares are accessible to the network, which means you're trusting the network to operate correctly.
When to Use Shared dWallets
Shared dWallets are appropriate when:
- DAOs and Multi-Sig Automation: Enable automated signing for DAO treasuries and governance actions
- Smart Contract-Controlled Wallets: Allow smart contracts to programmatically sign transactions
- Automated Systems: Build systems that need to sign without user interaction (bots, automated traders, etc.)
- Simplified Wallet Management: Applications where you want to delegate signing authority to the network
Important: Shared dWallets require trusting the network to handle signing operations. This is a different security model from zero-trust dWallets, where you maintain signing control. Both have legitimate production use cases depending on your requirements.
Creating a Shared dWallet
Creating a Shared dWallet is simpler than zero-trust since you don't need encryption keys for the user share. The dWallet becomes active immediately after DKG completion.
Basic DKG Creation
DKG Creation with Immediate Signing
This example shows how to create a shared dWallet and sign a message in a single transaction during the DKG process.
Signing a Message
Signing with a shared dWallet is simpler than zero-trust since you don't need to provide the encrypted user share - the network already has access to the public user share.
Future Signing
Future signing with shared dWallets follows a two-step process similar to zero-trust dWallets, but without the need to handle encrypted user shares.
Creating a Partial User Signature
To initiate a future sign with a shared dWallet, call requestFutureSign without providing an encrypted user secret key share. The network will automatically use the public share.
Completing the Signature
To finalize a future sign, call futureSign with the partial user signature cap and the message approval.
Converting from Zero-Trust to Shared
You can convert a zero-trust dWallet to a shared dWallet by making the user secret key share public. This operation is irreversible.
Warning: This operation fundamentally changes the trust model of the dWallet. By making the user secret share public, you are sharing the secret with the network, which means you must now trust the network rather than relying on the zero-trust 2PC model.