addKey method

Future<BlockchainResponse> addKey({
  1. required String fromAddress,
  2. required String mnemonic,
  3. String passphrase = '',
  4. required DerivationPath derivationPathOfNewGeneratedAccount,
  5. required String permission,
  6. required String allowance,
  7. required String smartContractId,
  8. required List<String> methodNames,
  9. required String privateKey,
  10. required String publicKey,
})

Implementation

Future<BlockchainResponse> addKey({
  required String fromAddress,
  required String mnemonic,
  String passphrase = '',
  required DerivationPath derivationPathOfNewGeneratedAccount,
  required String permission,
  required String allowance,
  required String smartContractId,
  required List<String> methodNames,
  required String privateKey,
  required String publicKey,
}) async {
  final transactionInfo = await getTransactionInfo(
    accountId: fromAddress,
    publicKey: publicKey,
  );
  final gas = BlockchainGas.gas[BlockChains.near];
  if (gas == null) {
    throw Exception('Incorrect Blockchain Gas');
  }

  final List<Map<String, dynamic>> actions = [
    {
      "type": "addKey",
      "data": {
        "mnemonic": mnemonic,
        "passphrase": passphrase,
        "indexOfTheDerivationAccount": derivationPathOfNewGeneratedAccount
            .accountNumber
            .replaceAll("'", ""),
        "permission": permission,
        "receiverId": smartContractId,
        "methodNames": methodNames,
      },
    },
  ];

  final signedAction = await signNearActions(
    fromAddress: fromAddress,
    toAddress: fromAddress,
    transferAmount: allowance,
    privateKey: privateKey,
    gas: gas,
    nonce: transactionInfo.nonce,
    blockHash: transactionInfo.blockHash,
    actions: actions,
  );
  final res = await nearRpcClient.sendSyncTx([signedAction]);
  return res;
}