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"); }
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); }
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); }