Пример #1
0
 private void CheckSignatures()
 {
     if (context.Signatures.Count(p => p != null) >= context.M && context.TransactionHashes.All(p => context.Transactions.ContainsKey(p)))
     {
         VerificationContract contract = VerificationContract.CreateMultiSigContract(context.Validators[context.MyIndex].EncodePoint(true).ToScriptHash(), context.M, context.Validators);
         Block block = context.MakeHeader();
         ContractParametersContext sc = new ContractParametersContext(block);
         for (int i = 0, j = 0; i < context.Validators.Length && j < context.M; i++)
         {
             if (context.Signatures[i] != null)
             {
                 sc.AddSignature(contract, context.Validators[i], context.Signatures[i]);
                 j++;
             }
         }
         sc.Verifiable.Scripts = sc.GetScripts();
         block.Transactions    = context.TransactionHashes.Select(p => context.Transactions[p]).ToArray();
         Log($"relay block: {block.Hash}");
         if (!localNode.Relay(block))
         {
             Log($"reject block: {block.Hash}");
         }
         context.State |= ConsensusState.BlockSent;
     }
 }
Пример #2
0
 public VerificationContract GetContract()
 {
     ECPoint[] publicKeys = listBox1.Items.OfType <string>().Select(p => ECPoint.DecodePoint(p.HexToBytes(), ECCurve.Secp256r1)).ToArray();
     foreach (ECPoint publicKey in publicKeys)
     {
         KeyPair key = Program.CurrentWallet.GetKey(publicKey.EncodePoint(true).ToScriptHash());
         if (key != null)
         {
             return(VerificationContract.CreateMultiSigContract(key.PublicKeyHash, (int)numericUpDown2.Value, publicKeys));
         }
     }
     return(null);
 }
Пример #3
0
        private void RegisterContract(ECPoint[] publicKeys, int nValidatorCount)
        {
            UInt160 walletAddrHash = UInt160.Zero;

            foreach (UInt160 scriptHash in GetAddresses())
            {
                if (Wallet.GetAddressVersion(Wallet.ToAddress(scriptHash)) == Wallet.AddressVersion)
                {
                    walletAddrHash = scriptHash;
                    KeyPair key = (KeyPair)GetKeyByScriptHash(scriptHash);
                    if (key != null)
                    {
                        VerificationContract newContract = VerificationContract.CreateMultiSigContract(key.PublicKeyHash, nValidatorCount, publicKeys);
                        if (GetContracts().Contains(newContract) == false)
                        {
                            AddContract(newContract);
                        }
                    }
                    break;
                }
            }
        }