public async Task <SendTransactionOperationResult> SendTransaction(Keys keys, string from, string to, BigFloat amount, BigFloat fee, BigFloat gasLimit = null, BigFloat storageLimit = null) { gasLimit = gasLimit ?? 200; storageLimit = storageLimit ?? 0; JObject head = await GetHeader(); JObject account = await GetAccountForBlock(head["hash"].ToString(), from); int counter = int.Parse(account["counter"].ToString()); JArray operations = new JArray(); JToken managerKey = await GetManagerKey(from); string gas = gasLimit.ToString(); string storage = storageLimit.ToString(); if (keys != null && managerKey["key"] == null) { JObject revealOp = new JObject(); operations.AddFirst(revealOp); revealOp["kind"] = "reveal"; revealOp["fee"] = "0"; revealOp["public_key"] = keys.DecryptPublicKey(); revealOp["source"] = from; revealOp["storage_limit"] = storage; revealOp["gas_limit"] = gas; revealOp["counter"] = (++counter).ToString(); } JObject transaction = new JObject(); operations.Add(transaction); transaction["destination"] = to; transaction["amount"] = new BigFloat(amount.ToMicroTez().ToString(6)).Round().ToString(); // Convert to microtez, truncate at 6 digits, round up transaction["storage_limit"] = storage; transaction["gas_limit"] = gas; transaction["counter"] = (++counter).ToString(); transaction["fee"] = fee.ToString(); transaction["source"] = from; transaction["kind"] = Operations.Transaction; JObject parameters = new JObject(); transaction["parameters"] = parameters; parameters["prim"] = "Unit"; parameters["args"] = new JArray(); // No args for this contract. List <OperationResult> sendResults = await SendOperations(operations, keys, head); return(sendResults.LastOrDefault() as SendTransactionOperationResult); }