callSmartContractFunction method

  1. @override
Future<BlockchainResponse> callSmartContractFunction(
  1. TransferRequest transferRequest
)
override

Implementation

@override
Future<BlockchainResponse> callSmartContractFunction(
  TransferRequest transferRequest,
) async {
  NearTransferRequest nearTransferRequest =
      transferRequest as NearTransferRequest;
  if (nearTransferRequest.arguments
      is! NearBlockChainSmartContractArguments) {
    throw Exception('Incorrect Blockchain Smart Contract Arguments');
  }
  final transactionInfo = await getTransactionInfo(
    accountId: nearTransferRequest.fromAddress!,
    publicKey: nearTransferRequest.publicKey!,
  );
  final gas = transferRequest.gas ?? BlockchainGas.gas[BlockChains.near];
  if (gas == null) {
    throw Exception('Incorrect Blockchain Gas');
  }
  final arg =
      nearTransferRequest.arguments as NearBlockChainSmartContractArguments;
  if (arg == null) {
    throw Exception('Incorrect Blockchain Arg');
  }
  final List<Map<String, dynamic>> actions = [
    {
      "type": "functionCall",
      "data": {
        "methodName": arg.method,
        "args": arg.args,
      },
    },
  ];

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