public ActionResult FromTemplate(string id) { object model = null; switch (id) { case "CallOption": var createCallOption = new CreateCallOption(); // var oracleStatus = GetOracleStatus().Result; // if (oracleStatus == null) // { // createCallOption.OracleErrorMessage = "Oracle not operatable"; //} var oracleContractManager = new ContractsDiscovery.Web.App_Code.OracleContractManager(); if (oracleContractManager.IsSetup) { createCallOption.Oracle.SetValue(oracleContractManager.ContractAddress.ToString()); } else { createCallOption.OracleErrorMessage = oracleContractManager.Message; } //createCallOption.OracleServiceUrl = WebConfigurationManager.AppSettings["oracleService"]; createCallOption.Tickers.AddRange(new List <String>(WebConfigurationManager.AppSettings["tickers"].Split(','))); model = createCallOption; break; case "TokenGenerator": model = new CreateTokenGenerator(); break; case "Oracle": model = new CreateOracle(); break; } return(View(id, model)); }
public ActionResult CallOption() { var createCallOption = new CreateCallOption(); createCallOption.Numeraire.SetValue(Request["numeraire"]); createCallOption.Oracle.SetValue(Request["oracle"]); createCallOption.Underlying.SetValue(Request["underlying"]); createCallOption.Price.SetValue(Request["price"]); createCallOption.Strike.SetValue(Request["strike"]); createCallOption.MinimumCollateralRatio.SetValue(Request["minimumCollateralRatio"]); //createCallOption.OwnerPubKey.SetValue(Request["ownerPubKey"]); if (createCallOption.Invalid) { return(View("CallOption", createCallOption)); } else { try { var callOptionParameters = new ContractExamples.QuotedContracts.CallOptionParameters( createCallOption.Numeraire.Address.Bytes, new byte[] { }, new byte[] { }, createCallOption.Oracle.Address.Bytes, createCallOption.Underlying.Value, createCallOption.Price.Decimal, createCallOption.Strike.Decimal, createCallOption.MinimumCollateralRatio.Decimal, new byte[] { } /*createCallOption.OwnerPubKey.PublicKey*/); //var contract = ContractExamples.QuotedContracts.callOptionFactory(callOptionParameters); //var contractCode = ContractExamples.Execution.quotedToString(contract); var tpl = Utils.GetTemplate("CallOption"); var metadata = new { contractType = "calloption", numeraire = Convert.ToBase64String(callOptionParameters.numeraire), oracle = Convert.ToBase64String(callOptionParameters.oracle), underlying = callOptionParameters.underlying, price = "" + callOptionParameters.price, strike = "" + callOptionParameters.strike, minimumCollateralRatio = "" + callOptionParameters.minimumCollateralRatio, ownerPubKey = Convert.ToBase64String(callOptionParameters.ownerPubKey) }; var jsonHeader = "//" + JsonConvert.SerializeObject(metadata); var underlying = Enumerable.Repeat((byte)0, 32).ToArray(); Encoding.ASCII.GetBytes(callOptionParameters.underlying).CopyTo(underlying, 0); var contractCode = tpl .Replace("__numeraire__", Convert.ToBase64String(callOptionParameters.numeraire)) .Replace("__oracle__", Convert.ToBase64String(callOptionParameters.oracle)) .Replace("__underlying__", Convert.ToBase64String(underlying)) .Replace("__price__", "" + callOptionParameters.price) .Replace("__strike__", "" + Math.Round(callOptionParameters.strike).ToString()) .Replace("__minimumCollateralRatio__", "" + callOptionParameters.minimumCollateralRatio); // .Replace("__ownerPubKey__", Convert.ToBase64String(callOptionParameters.ownerPubKey)); contractCode += "\n" + jsonHeader; var code = Utils.Dos2Unix(contractCode); var contractHash = Consensus.Merkle.innerHash(Encoding.ASCII.GetBytes(contractCode)); ViewBag.Code = code; ViewBag.Hash = Convert.ToBase64String(contractHash); var file = $"{HttpServerUtility.UrlTokenEncode(contractHash)}"; Directory.CreateDirectory(Path.Combine("db", "contracts")); Directory.CreateDirectory(Path.Combine("db", "asset-metadata")); if (!System.IO.File.Exists(file)) { System.IO.File.WriteAllText(Path.ChangeExtension(Path.Combine("db", "contracts", file), ".txt"), contractCode); } System.IO.File.WriteAllText(Path.ChangeExtension(Path.Combine("db", "asset-metadata", file), ".json"), JsonConvert.SerializeObject(new AssetMetadata() { name = Request["assetName"] })); } catch (Exception e) { ViewBag.Message = "Error creating contract: " + e.Message; } return(View("Result")); } }