callFunction method
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);
}