callFunction method

Future<Map> callFunction(
  1. String functionName,
  2. String functionArgs, [
  3. double nearAmount = 0.0,
  4. int gasFees = Constants.defaultGas,
])

Calls contract mutate state functions

Implementation

Future<Map<dynamic, dynamic>> callFunction(
    String functionName, String functionArgs,
    [double nearAmount = 0.0, int gasFees = Constants.defaultGas]) async {
  AccessKey accessKey = await callerAccount.findAccessKey();

  // Create Transaction
  accessKey.nonce++;
  String publicKey =
      KeyStore.publicKeyToString(callerAccount.keyPair.publicKey);

  Transaction transaction = Transaction(
      actionType: ActionType.functionCall,
      signer: callerAccount.accountId,
      publicKey: publicKey,
      nearAmount: nearAmount.toStringAsFixed(12),
      gasFees: gasFees,
      receiver: contractId,
      methodName: functionName,
      methodArgs: functionArgs,
      accessKey: accessKey);

  // Serialize Transaction
  Uint8List serializedTransaction =
      TransactionManager.serializeFunctionCallTransaction(transaction);
  Uint8List hashedSerializedTx =
      TransactionManager.toSHA256(serializedTransaction);

  // Sign Transaction
  Uint8List signature = TransactionManager.signTransaction(
      callerAccount.keyPair.privateKey, hashedSerializedTx);

  // Serialize Signed Transaction
  Uint8List serializedSignedTransaction =
      TransactionManager.serializeSignedFunctionCallTransaction(
          transaction, signature);
  String encodedTransaction =
      TransactionManager.encodeSerialization(serializedSignedTransaction);

  // Broadcast Transaction
  return await callerAccount.provider
      .broadcastTransaction(encodedTransaction);
}