Skip to content

Multikey Accounts

The Aptos .NET SDK provides an implementation of Multikey accounts to create accounts from a combination of multiple key pairs. This is useful for Multisig accounts. In this guide, we will provide snippets of creating accounts.

MultiKeyAccount’s are created to sign transactions where the account is controlled by multiple private keys.

To create a MultiKey account, you will need the following components:

  • PublicKeys: The public keys of the accounts that control the MultiKey account.
  • SignaturesRequired: The minimum number of signers required to sign transactions.
  • Signers: The account signers that will be used to sign transactions. The number of signers should be equal to or greater than the SignaturesRequired.
  1. Create your Accounts

    Create your accounts, they can be different types of accounts.

    var account1 = Ed25519Account.Generate();
    var account2 = SingleKeyAccount.Generate(PublicKeyVariant.Secp256k1Ecdsa);
  2. Create a MultiKey Verifying Key

    Create a MultiKey verifying key using the PublicKeys and SignaturesRequired. In this example, we have two accounts controlling the MultiKey and we require 2 signers to sign transactions.

    var multiKey = new MultiKey(
    publicKeys: [account1.PublicKey, account2.PublicKey],
    signaturesRequired: 2,
    );
  3. Create the MultiKey Account

    Create the MultiKey account using the PublicKeys, SignaturesRequired, and Signers.

    var multikeyAccount = new MultiKeyAccount(
    multiKey: multiKey,
    signers: [account1, account2]
    );
  4. Sign and Submit transactions

    After creating a MultiKey account, you can sign and submit transactions using the AptosClient.

    // 1. Build the transaction
    var transaction = await client.Transaction.Build(
    sender: multikeyAccount,
    data: new GenerateEntryFunctionPayloadData(
    function: "0x1::aptos_account::transfer_coins",
    typeArguments: ["0x1::aptos_coin::AptosCoin"],
    functionArguments: [account.Address, "100000"]
    )
    );
    // 2. Sign and submit the transaction
    var submittedTransaction = await client.Transaction.SignAndSubmitTransaction(multikeyAccount, transaction);
    // 3. (Optional) Wait for the transaction to be committed
    var committedTransaction = await client.Transaction.WaitForTransaction(submittedTransaction.Hash);