estimateOperation method
dynamic
estimateOperation(
- String server,
- String chainId,
- dynamic opResults
)
Implementation
estimateOperation(String server, String chainId, opResults) async {
var gas = 0;
var storageCost = 0;
var staticFee = 0;
var gasStorageList = [];
for (var ele in opResults['contents']) {
gas = 0;
storageCost = 0;
try {
gas = (int.parse(ele['metadata']['operation_result']
['consumed_milligas']
.toString()) ~/
1000) +
GAS_BUFFER;
storageCost = int.parse((ele['metadata']['operation_result']
['paid_storage_size_diff'] ??
'0')
.toString());
if (ele['kind'] == 'origination' ||
ele['metadata']['operation_result']
['allocated_destination_contract'] !=
null) {
storageCost += TezosConstants.EmptyAccountStorageBurn;
} else if (ele['kind'] == 'reveal') {
staticFee += 1270;
}
} catch (e) {
throw "Error while estimating operation: $e";
}
gas += TezosConstants.GasLimitPadding;
storageCost += TezosConstants.StorageLimitPadding;
var internalOperations = ele['metadata']['internal_operation_results'];
if (internalOperations == null) {
gasStorageList.add({'gas': gas, 'storageCost': storageCost});
continue;
}
for (var internalOperation in internalOperations) {
var result = internalOperation['result'];
gas += (int.parse(result['consumed_milligas'] ?? '0') ~/ 1000) +
GAS_BUFFER;
storageCost += int.parse(result['paid_storage_size_diff'] ?? '0');
if (internalOperation['kind'] == 'origination') {
storageCost += TezosConstants.EmptyAccountStorageBurn;
}
}
gasStorageList.add({'gas': gas, 'storageCost': storageCost});
}
gas = gasStorageList
.map((e) => e['gas'])
.reduce((value, element) => value + element);
storageCost = gasStorageList
.map((e) => e['storageCost'])
.reduce((value, element) => value + element);
var validBranch = 'BMLxA4tQjiu1PT2x3dMiijgvMTQo8AVxkPBPpdtM8hCfiyiC1jz';
var forgedOperationGroup =
await TezosNodeWriter.forgeOperations(server, validBranch, operations);
var operationSize = forgedOperationGroup.length / 2 + 64;
var estimatedFee = staticFee +
(gas / 10).ceil() +
TezosConstants.BaseOperationFee +
operationSize +
TezosConstants.DefaultBakerVig;
var estimatedStorageBurn =
(storageCost * TezosConstants.StorageRate).ceil();
return {
'gas': gas,
'storageCost': storageCost,
'estimatedFee': estimatedFee.toInt(),
'estimatedStorageBurn': estimatedStorageBurn,
'gasStorageList': gasStorageList,
};
}