//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})")); }
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"; } }
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)); } }