Пример #1
0
        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));
        }
Пример #2
0
        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"));
            }
        }