BitGo Wallet Types

Overview

Within your BitGo enterprise, you can create an unlimited number of segregated wallets for each asset. If supported by the asset, you can create an unlimited number of receive addresses for each wallet.

BitGo offers the following on-chain wallet types that utilize 2-of-3 keys for transaction signing:

Multisig ColdMultisig HotMPC ColdMPC Hot
Custody
Self-Custody

Special Wallet Types

In addition to the wallet types listed above, BitGo offers the following:

  • Go Account - An omnibus, custody cold wallet that leverages an off-chain ledger.
  • Lightning Wallets - Single-signature custody hot wallet for the Bitcoin Lightning Network.
  • Advanced Wallets - Self-custody cold wallets that leverage a secure subnet for key management.

Signature Schemes

BitGo wallets support both multisignature and multi-party computation (MPC) signature schemes. The specific implementation that BitGo uses for MPC is threshold signature schemes (TSS). Whether a wallet is multisignature or MPC is dependent on its blockchain. Some native-MPC assets can support both signature schemes using smart-contracts. Functionally, both signature schemas offer the same level of security and 2-of-3 signing by multiple co-signers, but their integrations differ.

The differences between multisignature and MPC a explained in greater detail below.

Keys

All on-chain BitGo wallets utilize the following 3 keys:

  1. User key
  2. Backup key
  3. BitGo key

The following table identifies who creates the private keys for each wallet type:

Wallet TypeUser KeyBackup KeyBitGo Key
Custody Multisig🄱🄱🄱
Custody MPC🄱🄱🄱
Self-Custody Multisig Cold👤👤🄱
Self-Custody Multisig Hot👤👤🄱
Self-Custody MPC Cold👤👤🄱
Self-Custody MPC Hot👤👤🄱

Integration Flows

Every wallet type at BitGo has unique features and functionality that determine the integration flows for wallet creation and transacting. To learn more about the different flows and see how they compare, see Wallets Overview and Withdraw Overview.

Custody

Custody wallets are the most secure wallets of all the BitGo wallet types. As a regulated custodian, BitGo spreads the key material for custody wallets across multiple bank-grade physical Class 3 vaults. Like self-custody wallets, BitGo encrypts each of the three keys with a unique password. BitGo Bank & Trust divides these keys among different owners, so no one person controls more than one key for a given wallet.

Custody wallets at BitGo are all cold wallets. For both multisignature and MPC, custody-wallet users can initiate transactions, programmatically or through the BitGo web application. However, custody-wallet users don't sign transactions themselves. Instead, BitGo signs transactions with the user key after video ID verification with a BitGo Bank & Trust operator. Afterwards, a different BitGo Bank & Trust operator downloads and signs the transaction in the BitGo Offline Vault Console (OVC) using the BitGo key. BitGo then uploads and broadcasts the transaction.

Custody wallets are, however, the least flexible wallet type if you're sending assets frequently. BitGo has a service-level agreement (SLA) to complete on-chain withdrawals from custody wallets within 24 hours. However, you can configure policies that remove the requirement for video ID verification under specific conditions that you define. To learn more, see Policies Overview.

Note: The requirement for video ID verification is applicable within testnet too. However, BitGo doesn't monitor pending custody withdrawals in testnet. If you need to conduct a video ID verification in testnet, schedule one by contacting [email protected].

Self-Custody

Transacting from self-custody multisignature cold wallets entails downloading unsigned transactions and then signing them in the OVC using your user key (encrypted by your BitGo or wallet password). You then upload the half-signed transaction to BitGo and BitGo signs using the BitGo key. BitGo then uploads and broadcasts the transaction.

Self-custody multisignature cold wallets enable the most control and privacy of all the supported BitGo wallet types.

Go Account

A Go Account is an omnibus custody wallet that enables you to hold multiple assets, including fiat. Your Go Account enables interacting with the Go Network, where you can make multi-asset trades and settlements with other connected enterprises and platforms.

Go Accounts are the only wallet type at BitGo that leverage an off-chain ledger and a single key, instead of three. Deposits into your Go Account are available within minutes. BitGo has a service-level agreement (SLA) to complete on-chain withdrawals from custody wallets within 24 hours. However, Go Account withdrawals typically complete on chain within a few hours.

Programmatically, Go Accounts function similar to other BitGo wallet types, and even have a wallet ID. Go Accounts can have multiple receive addresses (when supported by the asset). However, each enterprise can have only one Go Account.

Note: You may encounter parts of the API and SDK that reference trading wallets or trading accounts. These are now Go Accounts.


Legacy Wallet Types

Note: Don't create new wallets using legacy wallet types. If you have a legacy wallet type, BitGo recommends that you upgrade to a current type for enhanced security and functionality.

The following are legacy wallet types:

  • Custody Paired - The original custody wallet at BitGo. This wallet worked similar to a hot wallet, but each was linked to a BitGo-managed parent wallet that approved all outgoing transactions.
  • V1 - The original self-custody wallet at BitGo. This wallet was limited to Bitcoin.

Multisignature Vs MPC

BitGo offers two advanced security protocols for digital asset protection:

  1. Multisignature - Pioneered by BitGo in 2013, initially for Bitcoin and later expanded to other assets. Multisignature wallets sign transactions using 2-of-3 keys.
  2. Multi-party computation (MPC) - A newer protocol that uses threshold signature schemes (TSS). MPC wallets sign transactions using 2-of-3 keyshares.

Asset Support

Most UTXO-based blockchains, such as Bitcoin, natively support multisignature wallets. Cardano is a notable exception, because although it's a UTXO asset, it supports MPC instead of multisignature.

Account-based blockchains, such as Ethereum, all support MPC. In addition to MPC, BitGo enables some account-based blockchains to also use multisignature wallets by means of smart contracts (described in greater detail below).

You can see which wallet types are available for each asset on the Coins and Tokens table.

Security

Both signature schemes provide enterprise-grade security by requiring multiple signatures to authorize transactions.

  • Multisignature - On-chain cryptography.
  • MPC - Off-chain cryptography.

Keys

Both wallet types require transactions to obtain signatures from 2-of-3 keys (user, backup, or BitGo).

  • Multisignature - Each key is independent, having its own unique public and private key material.
  • MPC - Private keys for an MPC wallet are never fully created or exposed. Instead, they're formed through mathematical operations using private key shares, which are independently generated by each party involved in signing (user, backup, and BitGo). Each party has an encrypted portion of the private key, ensuring that no party ever has access to the complete private key. All parties share a common public key derived from their private keyshares. In addition, you can shard each key up to 99 times. These shards combine to form a complete key (while the full private key is still never fully created or exposed).

Note: BitGo's MPC keyshares are fundamentally different from key shards on other platforms. Even when combined, BitGo keyshares never produce a viewable private key.

Signing

  • Multisignature - Each cosigners applies their signature asynchronously on chain.
  • MPC - Each cosigners applies their signature synchronously off chain that when combined, results in a single on-chain signature.

Costs

  • Multisignature - Can have higher transaction costs, as each signature is broadcast on chain.
  • MPC: - Can have lower transaction costs, as only one signature (of the combined keyshares) is broadcast on chain. In addition, you can bundle transactions together.

Flexibility

  • Multisignature - Parts of an unsigned transaction (such as nonces or fees) can change during the signing process.
  • MPC - No part of the transaction can change during the signing process.

Multisignature Smart-Contract Wallets

BitGo uses smart contracts to enables multisignature wallets for some account-based assets on programmable blockchains, such as Ethereum. Like all BitGo wallets, when you make multisignature smart-contract wallets, BitGo creates 3 keys (user, backup, and BitGo). In addition, the smart contracts enable creating multiple receive addresses, a feature that isn't native to most account-based assets. The 2-of-3 key scheme and the ability to create multiple receive addresses may appear similar to their UTXO counterparts. However, the mechanisms of how they work for smart-contract wallets differ.

To explore the smart contract yourself, see the repository on GitHub.

Keys

Each key controls an address on the Ethereum blockchain. The user-key and backup-key addresses typically aren't funded, other than for disaster recovery. However, the BitGo-key address is funded, because it's the gas tank. You can use the BitGo Offline Vault Console (OVC) shard each key using Shamir's Secret Sharing (SSS) to create more complicated key distributions. This is often done for the user key.

When you instantiate a multisignature smart-contract wallet, BitGo stores the 3 addresses in the allowedSigners array. Every method on the smart contract requires a certain number of allowed signers to prevent reverting. For example, sending a native token to another address using SendMultiSig requires 2-of-3 signatures, but consolidating ERC20 tokens from a forwarder using flushForwarderTokens only requires 1 signature. This enables BitGo to consolidate ERC20 tokens from your forwarder addresses without your signature and is also why BitGo can't withdraw assets from your wallet.

Signing

The smart contract enables collecting 2-of-3 signatures all on a single on-chain transaction. Typically, the user key signs some fields, including, but not limited to:

  • Unique identifier for the chain
  • Amount
  • Final destination address
  • Any contract data being forwarded
  • Expire time
  • Contract sequence ID

This is done by creating a hash on those fields, and signing that hash. BitGo takes those fields, along with the hash and signature, and places them in the data section of an unsigned transaction. The unsigned transaction has a value of 0, and a destination of the base address of the wallet smart contract. BitGo adds a nonce to the unsigned transaction and sends it to the BitGo hardware security module (HSM) for final signing.

At this stage, BitGo refers to the transaction as a half-signed, because 1-of-3 keys applied a signature. However, from a protocol level, it's an unsigned transaction that just contains cryptographic proof that 1-of-3 keys signed parts of the data section.

Lastly, BitGo uses the HSM to sign the transaction using the BitGo key, creating a fully signed transaction from both the perspective of BitGo and the protocol. BitGo then broadcasts the transaction to the base address of the wallet. The smart contract verifies the transaction was signed by 1-of-3 keys (typically the BitGo key) and that the operationHash was signed by another key (typically the user key).

See Also

To learn more about the BitGo implementation of MPC, see the following: