public NodeKeyInfo(int chainId, uint chainIndex, short keyIndex, PublicChainKeyFlags keyFlags, Key key)
 {
     ChainId    = chainId;
     ChainIndex = chainIndex;
     KeyIndex   = keyIndex;
     KeyFlags   = keyFlags;
     Key        = key;
 }
Пример #2
0
 public NodeKey(Unpacker unpacker, int unpackerStartPosition)
 {
     unpacker.Unpack(out ChainId);
     unpacker.Unpack(out ChainIndex);
     unpacker.Unpack(out KeyIndex);
     KeyFlags = (PublicChainKeyFlags)unpacker.UnpackLong();
     (_signatureHash, _signature) = unpacker.GetHashAndSignature(unpackerStartPosition, unpacker.Position - unpackerStartPosition);
 }
Пример #3
0
 NodeKey(int chainId, uint chainIndex, short keyIndex, PublicChainKeyFlags keyFlags, Signature signature, Hash signatureHash)
 {
     ChainId        = chainId;
     ChainIndex     = chainIndex;
     KeyIndex       = keyIndex;
     KeyFlags       = keyFlags;
     _signature     = signature;
     _signatureHash = signatureHash;
 }
Пример #4
0
        public PublicChainKey(PublicChainKeyFlags flags, int chainId, uint chainIndex, long expires, short keyIndex, Key publicKey)
        {
            Flags      = flags;
            ChainId    = chainId;
            ChainIndex = chainIndex;
            Expires    = expires;

            KeyIndex  = keyIndex;
            PublicKey = publicKey.PublicKey;

            CheckKey();
        }
Пример #5
0
        protected Council(Node.Node node, ChainType chainType, int chainId, uint chainIndex, short keyIndex, Key key)
        {
            ChainType  = chainType;
            ChainId    = chainId;
            ChainIndex = chainIndex;

            RequiresChainVoteKeyFlags = Block.GetRequiredChainVoteKeyFlags(ChainType);
            RequiresChainKeyFlags     = Block.GetRequiredChainKeyFlags(ChainType);
            LocalKeyIndex             = keyIndex;
            _localKey = key;

            _node         = node;
            _coreChain    = node.ChainManager.CoreChain;
            _blockStorage = node.ChainManager.GetChain(ChainType, ChainId, chainIndex).BlockStorage;
        }
Пример #6
0
        public PublicChainKey(int chainId, Unpacker unpacker)
        {
            ChainId = chainId;

            Flags      = (PublicChainKeyFlags)unpacker.UnpackUInt();
            ChainIndex = 0;
            if ((Flags & PublicChainKeyFlags.DataChainKey) != 0)
            {
                unpacker.Unpack(out ChainIndex);
            }

            unpacker.Unpack(out Expires);
            unpacker.Unpack(out KeyIndex);
            PublicKey = unpacker.UnpackKey(false);

            CheckKey();
        }
Пример #7
0
        static string GetKeyName(PublicChainKeyFlags keyFlags, bool coreChain)
        {
            if ((keyFlags & PublicChainKeyFlags.ChainAdminKey) != 0)
            {
                return("Chain Admin");
            }

            if (coreChain)
            {
                if ((keyFlags & PublicChainKeyFlags.CoreChainKey) != 0)
                {
                    if ((keyFlags & PublicChainKeyFlags.CoreChainVoteKey) != 0)
                    {
                        return("Chain Vote");
                    }

                    return("Chain");
                }
            }

            if ((keyFlags & PublicChainKeyFlags.ServiceChainKey) != 0)
            {
                if ((keyFlags & PublicChainKeyFlags.ServiceChainVoteKey) != 0)
                {
                    return("Service Chain Vote");
                }
                return("Service Chain");
            }

            if ((keyFlags & PublicChainKeyFlags.DataChainKey) != 0)
            {
                if ((keyFlags & PublicChainKeyFlags.DataChainVoteKey) != 0)
                {
                    return("Data Chain Vote");
                }

                return("Data Chain");
            }

            throw new Exception();
        }
Пример #8
0
        public PublicChainKey GetValidChainKeyWithFlags(uint chainIndex, short keyIndex, long timestamp, PublicChainKeyFlags flags)
        {
            lock (this)
            {
                var key = GetValidChainKey(chainIndex, keyIndex, timestamp);
                if (key != null)
                {
                    var keyFlags = key.Flags;
                    if ((keyFlags & flags) == flags)
                    {
                        return(key);
                    }
                }
            }

            return(null);
        }
Пример #9
0
        public Dictionary <short, PublicChainKey> GetValidChainKeysWithFlags(uint chainIndex, long timestamp, PublicChainKeyFlags flags)
        {
            var result = new Dictionary <short, PublicChainKey>();

            lock (this)
            {
                foreach (var idx in _chainKeys.Keys)
                {
                    var key = GetValidChainKeyWithFlags(chainIndex, idx, timestamp, flags);
                    if (key != null)
                    {
                        result[idx] = key;
                    }
                }
            }

            return(result);
        }
Пример #10
0
 public PublicChainKey GetValidPublicChainKeyWithFlags(int chainId, uint chainIndex, short keyIndex, PublicChainKeyFlags keyFlags, long timestamp)
 {
     TryGetChainInfo(chainId, out var chainInfo);
     return(chainInfo?.GetValidChainKeyWithFlags(chainIndex, keyIndex, timestamp, keyFlags));
 }
Пример #11
0
        public static NodeKey Pack(Packer packer, int chainId, uint chainIndex, short keyIndex, PublicChainKeyFlags keyFlags, Key signKey)
        {
            packer.Pack(chainId);
            packer.Pack(chainIndex);
            packer.Pack(keyIndex);
            packer.Pack((long)keyFlags);
            (var hash, var signature) = packer.AddSignature(signKey, 0, packer.Position);

            return(new NodeKey(chainId, chainIndex, keyIndex, keyFlags, signature, hash));
        }