예제 #1
0
        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();
        }
예제 #2
0
        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));
        }
예제 #5
0
        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));
            }
        }
예제 #9
0
        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);
        }
예제 #10
0
 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));
            }
        }
예제 #13
0
 public void AddToSigners(Signers signers)
 {
     base.AddObject("Signers", signers);
 }
예제 #14
0
 public static Signers CreateSigners(int signerID_pk)
 {
     Signers signers = new Signers();
     signers.signerID_pk = signerID_pk;
     return signers;
 }