コード例 #1
0
        public string RevalidarBloco(int id)
        {
            Bloco bloco       = ObterBloco(id);
            Bloco ultimoBloco = ObterBloco(id - 1);

            string chaveBlocoAnterior = ultimoBloco?.Chave;
            Int64  provaBlocoAnterior = ultimoBloco != null ? ultimoBloco.Prova : _provaInicial;

            bloco.Chave = bloco.ObterChave();
            bloco.Prova = CriarProva(bloco.Chave, chaveBlocoAnterior, provaBlocoAnterior);

            Contexto.SaveChanges();

            return("O bloco foi revalidado, caso tenha efetuado alguma alteração nesse bloco, todos os blocos estão inválidos, sendo assim necessário revalidar todos os blocos");
        }
コード例 #2
0
        private Bloco CriarNovoBloco(List <Transacao> transacoes = null)
        {
            string chaveBlocoAnterior = _ultimoBloco?.Chave;
            Int64  provaBlocoAnterior = _ultimoBloco != null ? _ultimoBloco.Prova : _provaInicial;

            Bloco bloco = new Bloco
            {
                Altura             = Contexto.Blocos.Count() + 1,
                ChaveBlocoAnterior = chaveBlocoAnterior,
                CriadoEm           = DateTime.UtcNow,
                Transacoes         = transacoes
            };

            bloco.Chave = bloco.ObterChave();
            bloco.Prova = CriarProva(bloco.Chave, chaveBlocoAnterior, provaBlocoAnterior);
            bloco.Bits  = bloco.ObterBits();

            AtualizarBlocoAnterior(bloco.Chave);

            Contexto.Blocos.Add(bloco);
            Contexto.SaveChanges();
            return(bloco);
        }
コード例 #3
0
        private bool CadeiaValida(List <Bloco> cadeia)
        {
            Bloco  bloco         = null;
            Bloco  blocoAnterior = null;
            string chaveBlocoAnterior;
            Int64  provaBlocoAnterior;

            for (int blocoId = 0; blocoId < cadeia.Count; blocoId++)
            {
                bloco         = cadeia[blocoId];
                blocoAnterior = blocoId > 0 ? cadeia[blocoId - 1] : null;

                chaveBlocoAnterior = blocoAnterior?.Chave;
                provaBlocoAnterior = blocoAnterior == null ? _provaInicial : blocoAnterior.Prova;

                //Verifica se a Chave do bloco está correta
                if ((bloco.ChaveBlocoAnterior != null && blocoAnterior != null) && (bloco.ChaveBlocoAnterior != blocoAnterior.ObterChave()))
                {
                    return(false);
                }

                //Verifica se a Prova está correta
                if (!ProvaValida(bloco.Chave, bloco.ChaveBlocoAnterior, bloco.Prova, provaBlocoAnterior))
                {
                    return(false);
                }

                blocoAnterior = bloco;
            }

            return(true);
        }