createAndFundMultisig method
Future<MultisigResponse>
createAndFundMultisig({
- required BigInt fundingAmount,
- required String depositorAddress,
- required SigningCallback signingCallback,
- int eraPeriod = 64,
- 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 multisigsigningCallback: Callback function to sign the transactioneraPeriod: 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:
- Exception if the transaction submission fails
- ArgumentError if the depositor address is invalid
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,
);
}