public ActionResult PrepareAction() { var action = Request["Action"]; var address = Request["ActiveContract.Address"]; var contractInteraction = new ContractInteraction() { Action = action, Address = address }; return(View(contractInteraction)); }
public async Task <ActionResult> Action() { var action = Request["Action"]; var args = new Dictionary <string, string>(); byte opcode = 0x01; var address = Request["Address"]; var contractHash = new Address(address).Bytes; string key = HttpServerUtility.UrlTokenEncode(contractHash); var file = $"{key}"; string contractCode = null; var codeFile = Path.ChangeExtension(Path.Combine("db", "contracts", file), ".txt"); if (System.IO.File.Exists(codeFile)) { contractCode = System.IO.File.ReadAllText(codeFile); } var contractInteraction = new ContractInteraction() { Action = action, Address = new Address(contractHash, AddressType.Contract).ToString() }; ContractMetadata contractMetadata = null; try { var _metadata = ContractExamples.Execution.metadata(contractCode); if (FSharpOption <ContractMetadata> .get_IsNone(_metadata)) { contractInteraction.Message = "No metadata"; } else { contractMetadata = _metadata.Value; } } catch { contractInteraction.Message = "Error getting metadata"; return(View(contractInteraction)); } if (contractMetadata.IsCallOption) { var callOptionParameters = (ContractExamples.Execution.ContractMetadata.CallOption)contractMetadata; switch (action) { case "Collateralize": //var pkAddress = new PKAddressField(); //pkAddress.SetValue(Request["return-address"]); //if (pkAddress.Invalid) //{ // contractInteraction.Message = "Invalid return address"; // return View(contractInteraction); //} //args.Add("returnPubKeyAddress", pkAddress.Value); opcode = OPCODE_COLLATERALIZE; break; case "Exercise": var pkExerciseReturnAddress = new PKAddressField(); pkExerciseReturnAddress.SetValue(Request["exercise-return-address"]); if (pkExerciseReturnAddress.Invalid) { contractInteraction.Message = "Invalid send address"; return(View(contractInteraction)); } args.Add("returnPubKeyAddress", pkExerciseReturnAddress.Value); string oracleData; //GetOracleCommitmentData(callOptionParameters.Item.underlying, DateTime.Now.ToUniversalTime()).Result; if (GetLastData(callOptionParameters.Item.underlying, out oracleData)) { args.Add("oracleRawData", oracleData); } else { contractInteraction.Message = "Error getting oracle data"; return(View(contractInteraction)); } opcode = OPCODE_EXERCISE; break; case "Buy": var pkSendAddress = new PKAddressField(); pkSendAddress.SetValue(Request["buy-send-address"]); if (pkSendAddress.Invalid) { contractInteraction.Message = "Invalid send address"; return(View(contractInteraction)); } args.Add("returnPubKeyAddress", pkSendAddress.Value); opcode = OPCODE_BUY; break; //case "Close": // opcode = OPCODE_CLOSE; // break; } } var argsMap = new FSharpMap <string, string>(args.Select(t => new Tuple <string, string>(t.Key, t.Value))); var result = await Client.Send <GetContractPointedOutputsResultPayload>(_address, new GetContractPointedOutputsPayload() { ContractHash = contractHash }); var utxos = GetContractPointedOutputsResultPayload.Unpack(result.PointedOutputs); var data = ContractUtilities.DataGenerator.makeJson(contractMetadata, utxos, opcode, argsMap); if (data.IsError) { contractInteraction.Message = data.ErrorValue.ToString(); } else { contractInteraction.Data = data.ResultValue.JsonValue.ToString(); } return(View(contractInteraction)); }
private bool Equals(ContractInteraction other) { return ID == other.ID; }
private bool Equals(ContractInteraction other) { return(ID == other.ID); }