# README
Teste Aprendendo Conceitos de Blockchain
Made from scratch, generic propose, production ready blockchain for uses like office files, criptocurrency Build using TDD
Test Coverage
Features
- [v] Server
- Creating blocks
- Block
- Block's hash
- Test
- Transaction
- Transaction list Hash
- Test
- Key
- Transport => tcp, udp,
- Local transport layer
- Crypto Keypairs and signature
- Block Signing
- Blockchain struct
- Storage (memory storage)
- Transaction Encoding/Decoding
- Block Encoding/Decoding
Todos
Improvements and fixes that can be implemented
- Add a database or a better storage method to store transactions and block data
Types
- Hash
type Hash [32]uint8
type Address [20]uint8
Mistakes to remember
On the struct Transaction on Signing the transaction the object was missing the value of the transaction's Signature
, returnning a null value
func TestSignTransaction(t *testing.T) {
privateKey := crypto.GeneratePrivateKey()
tx := &Transaction{
Data: []byte("foo bar baz"),
}
assert.Nil(t, tx.Sign(privateKey))
assert.NotNil(t, tx.Signature) // FAIL
}
Beacuse of the method signatue (tx T) insted of (tx *T), the object was missing the reference
old
:
func (tx Transaction) Sign(privKey crypto.PrivateKey) error {
fixed
:
func (tx *Transaction) Sign(privKey crypto.PrivateKey) error {
Instalação
Para instalar as dependências do projeto, execute:
go mod tidy
Para executar o projeto
make run
Como Contribuir
- Faça um fork do projeto
- Crie uma nova branch (
git checkout -b feature/nome-da-feature
) - Faça commit das suas alterações (
git commit -am 'Adiciona nova feature'
) - Faça push para a branch (
git push origin feature/nome-da-feature
) - Abra um Pull Request
Licença
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para mais detalhes.