private void ProcessInvokeWithWallet(JObject result, Signers signers = null) { Transaction tx = null; if (wallet != null && signers != null) { Signer[] witnessSigners = signers.GetSigners().ToArray(); UInt160 sender = signers.Size > 0 ? signers.GetSigners()[0].Account : null; if (witnessSigners.Count() > 0) { try { tx = wallet.MakeTransaction(result["script"].AsString().HexToBytes(), sender, witnessSigners); } catch (Exception e) { result["exception"] = GetExceptionMessage(e); return; } ContractParametersContext context = new ContractParametersContext(tx); wallet.Sign(context); if (context.Completed) { tx.Witnesses = context.GetWitnesses(); } else { tx = null; } } } result["tx"] = tx?.ToArray().ToHexString(); }
private JObject InvokeScript(JArray _params) { byte[] script = _params[0].AsString().HexToBytes(); Signers signers = _params.Count >= 2 ? SignersFromJson((JArray)_params[1]) : null; return(GetInvokeResult(script, signers)); }
private JObject GetInvokeResult(byte[] script, Signers signers = null) { Transaction tx = signers == null ? null : new Transaction { Signers = signers.GetSigners(), Attributes = System.Array.Empty <TransactionAttribute>(), Witnesses = signers.Witnesses, }; using ApplicationEngine engine = ApplicationEngine.Run(script, system.StoreView, container: tx, settings: system.Settings, gas: settings.MaxGasInvoke); JObject json = new(); json["script"] = Convert.ToBase64String(script); json["state"] = engine.State; json["gasconsumed"] = engine.GasConsumed.ToString(); json["exception"] = GetExceptionMessage(engine.FaultException); try { json["stack"] = new JArray(engine.ResultStack.Select(p => ToJson(p, settings.MaxIteratorResultItems))); } catch (InvalidOperationException) { json["stack"] = "error: invalid operation"; } if (engine.State != VMState.FAULT) { ProcessInvokeWithWallet(json, signers); } return(json); }
protected virtual JObject InvokeScript(JArray _params) { byte[] script = Convert.FromBase64String(_params[0].AsString()); UInt160 sender = _params.Count >= 2 ? AddressToScriptHash(_params[1].AsString()) : null; Signers signers = _params.Count >= 3 ? SignersFromJson((JArray)_params[2]) : null; return(GetInvokeResult(script, sender, signers)); }
private void OnSignerRemoved(SignerRemoved @event) { if (!Signers.Contains(@event.Email)) { throw new InvalidOperationException($"Signer with email {@event.Email} was not found among signers"); } Signers.Remove(@event.Email); }
public JObject ToJson() { JObject json = new JObject(); json["operations"] = Operations.Select(p => p.ToJson()).ToArray(); json["signers"] = Signers.Select(p => new JString(p)).ToArray(); if (Metadata != null && Metadata.ToJson() != null) { json["metadata"] = Metadata.ToJson(); } return(json); }
private void validateXmlSignature(string filePath) { var policy = XmlPolicySpec.GetXmlDSigBasic(App.GetTrustArbitrator()); var xmlSigLocator = new XmlSignatureLocator(File.ReadAllBytes(filePath)); Signers.Clear(); foreach (var signature in xmlSigLocator.GetSignatures()) { var vr = signature.Validate(policy); Signers.Add(new SignerItem(getSignerDescription(signature, vr), vr)); } }
private void validatePdfSignature(string filePath) { var policy = PadesPoliciesForValidation.GetPadesBasic(App.GetTrustArbitrator()); var padesSignature = PadesSignature.Open(filePath); Signers.Clear(); foreach (var signer in padesSignature.Signers) { var vr = padesSignature.ValidateSignature(signer, policy); Signers.Add(new SignerItem(getSignerDescription(signer, vr), vr)); } }
protected virtual JObject InvokeFunction(JArray _params) { UInt160 script_hash = UInt160.Parse(_params[0].AsString()); string operation = _params[1].AsString(); ContractParameter[] args = _params.Count >= 3 ? ((JArray)_params[2]).Select(p => ContractParameter.FromJson(p)).ToArray() : System.Array.Empty<ContractParameter>(); Signers signers = _params.Count >= 4 ? SignersFromJson((JArray)_params[3], system.Settings) : null; bool useDiagnostic = _params.Count >= 5 && _params[4].GetBoolean(); byte[] script; using (ScriptBuilder sb = new()) { script = sb.EmitDynamicCall(script_hash, operation, args).ToArray(); } return GetInvokeResult(script, signers, useDiagnostic); }
public Transaction Unwrap() { return(new Transaction { Version = Version, Nonce = Nonce, Signers = Signers.Select(p => p.Unwrap()).ToArray(), SystemFee = SystemFee, NetworkFee = NetworkFee, ValidUntilBlock = ValidUntilBlock, Attributes = Attributes.Select(p => p.Unwrap()).ToArray(), Script = Script, Witnesses = Witnesses.Select(p => p.Unwrap()).ToArray() }); }
private JObject GetInvokeResult(byte[] script, UInt160 sender = null, Signers signers = null) { using ApplicationEngine engine = ApplicationEngine.Run(script, container: signers, gas: settings.MaxGasInvoke); JObject json = new JObject(); json["script"] = Convert.ToBase64String(script); json["state"] = engine.State; json["gasconsumed"] = engine.GasConsumed.ToString(); try { json["stack"] = new JArray(engine.ResultStack.Select(p => p.ToJson())); } catch (InvalidOperationException) { json["stack"] = "error: recursive reference"; } ProcessInvokeWithWallet(json, sender, signers); return(json); }
private void validateCadesSignature(string filePath) { var policy = CadesPoliciesForValidation.GetCadesBasic(App.GetTrustArbitrator()); var cadesSignature = CadesSignature.Open(filePath); if (!cadesSignature.HasEncapsulatedContent) { MessageBox.Show("This CAdES signature does not have an encapsulated content (\"detached signature\"). Please provide the data file to continue with the validation.", "Data file needed"); var dataFileDialog = new OpenFileDialog() { }; if (dataFileDialog.ShowDialog() != true) { return; } cadesSignature.SetExternalData(File.ReadAllBytes(dataFileDialog.FileName)); } Signers.Clear(); foreach (var signer in cadesSignature.Signers) { var vr = cadesSignature.ValidateSignature(signer, policy); Signers.Add(new SignerItem(getSignerDescription(signer, vr), vr)); } }
public void AddToSigners(Signers signers) { base.AddObject("Signers", signers); }
public static Signers CreateSigners(int signerID_pk) { Signers signers = new Signers(); signers.signerID_pk = signerID_pk; return signers; }