コード例 #1
0
        //async Task<JObject> GetOracleStatus()
        //{
        //	string oracleService = WebConfigurationManager.AppSettings["oracleService"];
        //	var uri = new Uri($"{oracleService}/Data/Status");

        //	try
        //	{
        //		var response = await new HttpClient().GetAsync(uri.AbsoluteUri).ConfigureAwait(false);

        //		if (response.IsSuccessStatusCode)
        //		{
        //                  return JObject.Parse(await response.Content.ReadAsStringAsync());
        //		}
        //		else
        //		{
        //			return null;
        //		}
        //	}
        //          catch //(Exception e)
        //	{
        //		return null;
        //	}
        //}

        Dictionary <string, string> GetSecureTokens()
        {
            return(Directory.GetFiles(Path.Combine("db", "contracts"), "*.txt").Select(t =>
            {
                var hash = HttpServerUtility.UrlTokenDecode(System.IO.Path.GetFileNameWithoutExtension(t));
                var code = System.IO.File.ReadAllText(t);

                var activeContract = new ActiveContract();

                activeContract.AddressUrl = HttpServerUtility.UrlTokenEncode(hash);
                activeContract.Address = new Wallet.core.Data.Address(hash, Wallet.core.Data.AddressType.Contract).ToString();

                Utils.SetContractInfo(activeContract, code);

                var id = System.IO.Path.GetFileNameWithoutExtension(t);
                var assetMetaDataFile = Path.Combine("db", "asset-metadata", $"{id}.json");
                if (System.IO.File.Exists(assetMetaDataFile))
                {
                    try
                    {
                        var json = System.IO.File.ReadAllText(assetMetaDataFile);
                        var assetMetaData = JsonConvert.DeserializeObject <AssetMetadata>(json);
                        activeContract.AssetName = assetMetaData.name;
                    }
                    catch
                    {
                    }
                }

                return activeContract;
            })
                   .Where(t => t.Type == "secure-token-generator")
                   .ToDictionary(t => t.Address, t => string.IsNullOrEmpty(t.AssetName) ? t.Address : $"{t.AssetName} ({t.Address})"));
        }
コード例 #2
0
        public static void SetContractInfo(ActiveContract activeContract, string contractCode)
        {
            try
            {
                var metadata = ContractExamples.Execution.metadata(contractCode);

                if (FSharpOption <ContractExamples.Execution.ContractMetadata> .get_IsSome(metadata))
                {
                    if (metadata.Value.IsCallOption)
                    {
                        var callOptionParameters = ((ContractExamples.Execution.ContractMetadata.CallOption)metadata.Value).Item;

                        activeContract.Underlying = callOptionParameters.underlying;
                        activeContract.Numeraire  = callOptionParameters.numeraire;

                        activeContract.Type        = "call-option";
                        activeContract.Description = "Call Option";
                        activeContract.Premium     = String.Format("{0:0.00#####}", callOptionParameters.price);
                        activeContract.Strike      = String.Format("{0:0.00#####}", callOptionParameters.strike);
                        activeContract.Oracle      = new Wallet.core.Data.Address(callOptionParameters.oracle, Wallet.core.Data.AddressType.Contract).ToString();
                    }
                    else if (metadata.Value.IsOracle)
                    {
                        activeContract.Type        = "oracle";
                        activeContract.Description = "Oracle";
                    }
                    else if (metadata.Value.IsSecureToken)
                    {
                        activeContract.Type        = "secure-token-generator";
                        activeContract.Description = "Secure Token Generator";
                    }
                    else
                    {
                        activeContract.Type        = "";
                        activeContract.Description = "Unrecognized";
                    }
                }
                else
                {
                    activeContract.Type = "Unknown";
                }
            }
            catch (Exception e)
            {
                activeContract.Type = "Error getting metadata";
            }
        }
コード例 #3
0
        public async Task <ActionResult> Index()
        {
            Directory.CreateDirectory(Path.Combine("db", "contracts"));

            try
            {
                //var helloResult = await Client.Send<HelloResultPayload>(new HelloPayload());
                //ViewData["serverMessage"] = helloResult.Message;

                var acsResult = await Client.Send <GetACSResultPayload>(address, new GetACSPayload());

                var contractsData = new HashDictionary <Zen.RPC.Common.ContractData>();

                foreach (var acs in acsResult.Contracts)
                {
                    string key = HttpServerUtility.UrlTokenEncode(acs.Hash);
                    contractsData[acs.Hash] = acs;

                    string file = Path.ChangeExtension(Path.Combine("db", "contracts", $"{key}"), ".txt");

                    if (!System.IO.File.Exists(file))
                    {
                        System.IO.File.WriteAllText(file, Encoding.ASCII.GetString(acs.Code));
                    }
                }

                var model = Directory.GetFiles(Path.Combine("db", "contracts"), "*.txt").Select(t =>
                {
                    var hash = HttpServerUtility.UrlTokenDecode(System.IO.Path.GetFileNameWithoutExtension(t));
                    var code = System.IO.File.ReadAllText(t);

                    var activeContract = new ActiveContract();

                    activeContract.AddressUrl = HttpServerUtility.UrlTokenEncode(hash);
                    activeContract.Address    = new Wallet.core.Data.Address(hash, Wallet.core.Data.AddressType.Contract).ToString();

                    if (contractsData.ContainsKey(hash))
                    {
                        var contractData         = contractsData[hash];
                        activeContract.LastBlock = contractData.LastBlock;
                    }

                    Utils.SetContractInfo(activeContract, code);

                    var id = System.IO.Path.GetFileNameWithoutExtension(t);
                    var assetMetaDataFile = Path.Combine("db", "asset-metadata", $"{id}.json");
                    if (System.IO.File.Exists(assetMetaDataFile))
                    {
                        try
                        {
                            var json                 = System.IO.File.ReadAllText(assetMetaDataFile);
                            var assetMetaData        = JsonConvert.DeserializeObject <AssetMetadata>(json);
                            activeContract.AssetName = assetMetaData.name;
                        }
                        catch
                        {
                        }
                    }

                    return(activeContract);
                });

                return(View(model));
            }
            catch (Exception e)
            {
                var model = new List <ActiveContract>();
                ViewData["serverMessage"] = "Caught: " + e.Message;
                return(View(model));
            }
        }