createAndFundMultisig method

Future<MultisigResponse> createAndFundMultisig({
  1. required BigInt fundingAmount,
  2. required String depositorAddress,
  3. required SigningCallback signingCallback,
  4. int eraPeriod = 64,
  5. BigInt? tip,
})

Creates and funds a multisig account by transferring the specified amount from the depositor's account.

This method performs a transferKeepAlive operation to fund the multisig account while ensuring the depositor's account remains above the existential deposit.

Parameters:

  • fundingAmount: The amount to transfer to the multisig account (in smallest units)
  • depositorAddress: The address of the account funding the multisig
  • signingCallback: Callback function to sign the transaction
  • eraPeriod: The era period for transaction mortality (default: 64 blocks)
  • tip: Optional tip to prioritize transaction inclusion

Returns: A MultisigResponse containing the multisig account details, call data, and transaction hash.

Throws:

Example:

final response = await multisig.createAndFundMultisig(
  fundingAmount: BigInt.from(1000000000000), // 1 unit with 12 decimals
  depositorAddress: alice.address,
  signingCallback: alice.sign,
  eraPeriod: 64,
);
print('Transaction hash: ${response.txHash}');

Implementation

Future<MultisigResponse> createAndFundMultisig({
  required final BigInt fundingAmount,
  required final String depositorAddress,
  required final SigningCallback signingCallback,
  final int eraPeriod = 64,
  final BigInt? tip,
}) async {
  final RuntimeCall fundingCall = Balances.transferKeepAlive
      .toAccountId(amount: fundingAmount, destination: multisigAccount.multisigPubkey)
      .toRuntimeCall(chainInfo);
  final Uint8List fundingCallData = chainInfo.callsCodec.encode(fundingCall);

  final chainData = await ChainDataFetcher(provider).fetchStandardData();

  final extrinsicBuilder = ExtrinsicBuilder.fromChainData(
    chainInfo: chainInfo,
    callData: fundingCallData,
    chainData: chainData,
    eraPeriod: eraPeriod,
    tip: tip,
  );

  final Uint8List txHash = await extrinsicBuilder.signBuildAndSubmit(
    signingCallback: signingCallback,
    provider: provider,
    signerAddress: depositorAddress,
  );

  return MultisigResponse(
    multisigAccount: multisigAccount,
    callData: fundingCallData,
    txHash: txHash,
  );
}