Guia Prático: Blockchain e Contratos Inteligentes II

Na primeira parte deste guia prático exploramos os fundamentos da blockchain. A segunda parte tem um foco claro e objetivo: mostrar na prática a estrutura dos contratos inteligentes e como você pode implementá-los em sua própria blockchain.

Mão escrevendo 'Ethereum" em um quadro 'white board'.
Imagem: pexels.com

Se no primeiro volume vimos a estrutura básica do bloco e da blockchain, aqui começamos a plantar os mecanismos que darão vida às aplicações descentralizadas (dApps). Seja para transferências automatizadas, registros imutáveis ou lógica condicional entre partes, os contratos inteligentes são a chave para desbloquear o verdadeiro potencial da Web3.


🚀 Integrando Contratos Inteligentes à Sua Blockchain

Contratos inteligentes permitem acordos automatizados e autoexecutáveis sem a necessidade de uma autoridade central. Você pode implementá-los diretamente na sua blockchain para viabilizar funcionalidades como transferência de ativos, validação de transações ou execução de aplicativos descentralizados (dApps).

🌐 Visão Geral dos Contratos Inteligentes

Contratos inteligentes são programas que rodam na blockchain. Eles podem ser escritos em linguagens como Solidity (comumente usada no Ethereum) ou Vyper, e têm como objetivo automatizar acordos ou transações entre partes.

Em sua blockchain baseada em Go, você essencialmente precisará de:

  • Uma forma de armazenar contratos inteligentes na blockchain.
  • Um mecanismo para executar o código do contrato inteligente quando certas condições forem atendidas.

Vamos simular isso de forma simples para começar, utilizando as capacidades nativas do Go. Isso não será tão complexo quanto o Ethereum, mas ilustrará os conceitos. Se você quiser avançar para contratos inteligentes compatíveis com o Ethereum, precisará de Solidity e de um cliente Ethereum como Geth ou Parity.

Abordagem Básica para Integrar Contratos Inteligentes

1️⃣ Representar Contratos Inteligentes

Em Go, você pode representar um contrato inteligente criando uma estrutura (struct) para o código do contrato e seu estado. Vamos começar definindo um contrato inteligente simples que pode atualizar seu estado quando chamado.

type SmartContract struct {
	ID    int
	Code  string  // Este pode ser o código do contrato (por exemplo, código Solidity ou pseudo-código)
	State string  // Armazena o estado do contrato (por exemplo, "ativo", "concluído", etc.)
}

2️⃣ Adicionar Contratos Inteligentes aos Blocos

Você pode modificar a estrutura do bloco para incluir um contrato inteligente em cada bloco.

type Block struct {
	Index         int
	Timestamp     string
	Data          string // Dados da transação ou do contrato inteligente
	PrevHash      string
	Hash          string
	SmartContract *SmartContract // Adiciona um ponteiro para o contrato inteligente (se houver)
}

Ao adicionar um novo bloco, você pode verificar se o bloco deve conter um contrato inteligente e configurá-lo.

func (bc *Blockchain) addBlockWithContract(data string, contract *SmartContract) {
	prevBlock := bc.Chain[len(bc.Chain)-1]
	newBlock := Block{
		Index:         prevBlock.Index + 1,
		Timestamp:     time.Now().String(),
		Data:          data,
		PrevHash:      prevBlock.Hash,
		Hash:          calculateHash(prevBlock.Index+1, prevBlock.Hash, data),
		SmartContract: contract,
	}
	bc.Chain = append(bc.Chain, newBlock)
}

3️⃣ Simular a Execução do Contrato

Uma maneira básica de simular a execução de um contrato é chamando uma função no SmartContract quando certas condições forem atendidas.

Vamos supor que você tenha um contrato que permite alguém “ativá-lo” e definir seu estado como “concluído”:

func (sc *SmartContract) execute() {
	// Para este exemplo simples, vamos dizer que executar significa mudar o estado
	if sc.State == "ativo" {
		sc.State = "concluído"
		fmt.Println("Contrato executado com sucesso!")
	} else {
		fmt.Println("Contrato já está concluído!")
	}
}

Então, na sua blockchain, você poderia ter uma função que verifica se há contratos que precisam ser executados quando um novo bloco é adicionado:

func (bc *Blockchain) executeContracts() {
	for _, block := range bc.Chain {
		if block.SmartContract != nil && block.SmartContract.State == "ativo" {
			block.SmartContract.execute()
		}
	}
}

4️⃣ Acionar Contratos Inteligentes

Agora você pode executar a lógica do contrato inteligente ao adicionar blocos à sua blockchain:

func main() {
	blockchain := Blockchain{}
	blockchain.Chain = append(blockchain.Chain, createGenesisBlock())

	// Cria um novo contrato inteligente
	contract := &SmartContract{
		ID:    1,
		Code:  "transferir(100 tokens)",
		State: "ativo", // Inicialmente ativo, pode ser executado
	}

	// Adiciona o contrato a um novo bloco
	blockchain.addBlockWithContract("Dados da Transação", contract)

	// Executa quaisquer contratos ativos
	blockchain.executeContracts()

	// Imprime a blockchain para verificar o estado do contrato
	for _, block := range blockchain.Chain {
		fmt.Printf("Bloco %d: %s - Estado do Contrato: %s\n", block.Index, block.Timestamp, block.SmartContract.State)
	}
}

5️⃣ Expandir os Contratos Inteligentes

Para tornar este sistema mais semelhante ao que você veria com contratos inteligentes baseados no Ethereum, você poderia:

  • Adicionar uma linguagem (como Solidity) para escrever contratos mais complexos.
  • Usar uma máquina virtual para executar a lógica do contrato (semelhante à EVM do Ethereum).
  • Adicionar mecanismos de gás para limitar quanto de recursos cada execução de contrato consome.
  • Implementar um algoritmo de consenso para execução descentralizada (Proof of Work, Proof of Stake, etc.).

Considerações do Mundo Real

Para integrar completamente contratos inteligentes em uma blockchain:

  • Armazenamento de dados: Armazene o código e os estados do contrato de forma descentralizada (por exemplo, IPFS ou em seus blocos).
  • Ambiente de execução: Você precisará implementar um sistema para interpretar e executar o código do contrato de forma segura. Isso poderia ser semelhante à Máquina Virtual Ethereum (EVM), mas poderia ser muito mais simples na sua blockchain baseada em Go.
  • Segurança: Contratos inteligentes podem ser vulneráveis a ataques como reentrância ou bugs de estouro. Lidar com isso de forma segura é crucial (por exemplo, testando contratos minuciosamente).

Conectar a um Contrato Inteligente baseado em Ethereum (Avançado)

Se você está procurando conectar sua blockchain Go ao Ethereum ou a uma blockchain semelhante ao Ethereum para executar contratos inteligentes Solidity, aqui está a abordagem geral:

  1. Instalar o Web3 para Go: Esta é uma biblioteca Go que permite interagir com contratos inteligentes do Ethereum. go get github.com/ethereum/go-ethereum
  2. Conectar-se ao Ethereum: Você precisará configurar um nó Ethereum (por exemplo, usando Infura ou executando seu próprio nó) e usar o Web3 em Go para implantar e interagir com contratos inteligentes.

Aqui está um exemplo:

package main

import (
    "fmt"
    "log"

    "github.com/ethereum/go-ethereum/accounts/abi"
    "github.com/ethereum/go-ethereum/common"
    "github.com/ethereum/go-ethereum/ethclient"
)

func main() {
    client, err := ethclient.Dial("https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID")
    if err != nil {
        log.Fatalf("Falha ao conectar ao cliente Ethereum: %v", err)
    }

    address := common.HexToAddress("0xYourContractAddress")

    fmt.Println("Conectado ao Ethereum!")
    fmt.Println("Endereço do Contrato:", address.Hex())
}

Nesta segunda parte, exploramos na prática como os contratos inteligentes funcionam dentro de uma blockchain. Em breve vamos aprofundar ainda mais: analisando padrões de contratos inteligentes, interações entre múltiplos contratos e desafios reais como segurança, escalabilidade e integração com redes como Ethereum.

O futuro é descentralizado — e ele começa com nossas linhas de código.

Triforma, meu novo emprego

É com satisfação (e alívio) que anuncio o lançamento do triforma.com.br.

Captura de tela da página principal do site triforma.com.br
Imagem: Triforma – CC

Esse site é o resultado de um trabalho iniciado há oito anos, quando começei a desenvolver meu projeto de AI, e que se consolida em uma mistura de serviços, aparentemente desconexos, mas que faz todo sentido depois da análise superficial.

Inovar sempre

Com o triforma.com.br, apresentamos uma plataforma que queremos inovadora, que reúna conteúdos relevantes e soluções surpreendentes para problemas outrora intratáveis. O site foi desenvolvido com o framework Hugo e tem um blog com quatro categorias, que vai receber toda a minha atenção.

Nosso projeto de visão computacional na web: a análise de imagens com IA

Uma coisa bastante nova, e que eu pessoalmente nunca vi pela web em português, vai ser nosso projeto de visão computacional, para trazer análise avançada de imagens com o uso de IA diretamente para o seu navegador da web. Com apenas alguns cliques, os usuários podem subir imagens e executar uma ampla gama de tarefas de visão computacional.

Nossa plataforma usa os modelos YOLO (You Only Look Once), que são conhecidos no ramo por seus recursos de detecção de objetos em tempo real. Um dos recursos de destaque do nosso serviço é o COWNT – um aplicativo exclusivo projetado especificamente para rastrear e analisar gado zebu usando nosso conjunto de dados exclusivo.

Gado zebu alongado, detectado com modelo e datasets desenvolvidos com know-how próprio. O gado zebu é notoriamente dificil de ser corretamente identificado com o uso de datasets onde o gado zebu é sub representado, como o COCo. Toque/clique para ler artigo explicativo.

Além de contar animais, o utilitário no site será capaz de várias funções avançadas, incluindo:

  • Detecção de características: detecte pontos-chave e objetos em imagens.
  • Contagem e rastreamento de pessoas: rastreie os indivíduos e conte-os com precisão.
  • Estimativa de velocidade: estime a velocidade de objetos em movimento em tempo real.
  • Rastreamento de objetos personalizados: rastreie objetos específicos, como veículos, animais ou até mesmo pessoas em ambientes dinâmicos.

Nossa interface vai fácil de usar e vai permitir interação perfeita com esses modelos, ajudando o usuário a resolver problemas complexos de análise de imagem sem precisar de nenhuma experiência técnica anterior.

Seja você uma pesquisadora, um agricultor, comerciante ou simplesmente interessado no poder da IA, nossa plataforma torna a visão computacional acessível e utilizável para todos, e acredito que será muito divertida.


Agradecemos a todos os parceiros, colaboradores e profissionais que contribuíram de alguma forma para a concretização deste projeto. Estamos confiantes no sucesso.

Aqui não tem AI…nda

Ando em um frenesi de postagens, o que pode levantar suspeitas quanto ao meu uso de AI. O que quero me apressar em negar e esclarecer.

Imagem do teclado e tela iluminada de  um laptop à noite.
Imagem: pexels.com

Começo esclarecendo que esta nota deve ser entendida em tom de blague e que não tenho nenhum tipo de preconceito contra seu uso. De fato eu uso AI pessoalmente em meu trabalho de desenvolvimento de sistemas e não poderia estar mais satisfeito. Ela diminuiu para duas semanas o que eu levaria quatro meses para fazer; me livrou, talvez para sempre, de ter que fazer o ‘boilerplate’, que geralmente é a dor hemorroidal de todo desenvolvedor. Me ajuda no design e produção de grafismos diversos.

Diminuiu também, em muito, minha necessidade contratar três ou quatro pessoas com diploma universitário.

Mas ainda não a emprego em tarefas criativas de base. Para este blog, do qual andei desalentado por meses, embora nunca tenha deixado de postar pelo menos um artigo por mês, exceto em dezembro passado – eu tenho muito material. Se você procurar nos arquivos verá que, no início, quando entrei com tudo, eu postava todo dia. Hoje, quando quero variar meu tempero eu sempre busco traduzir algum material interessante, de uma língua que eu conheça, e é óbvio que eu uso translation para adiantar o trabalho. Mas o resultado final, passado a limpo, continua sendo pessoal e único, e minha alma está ali sempre.

Sei que meus assuntos são chatos, mas vivemos da e para a tecnologia, e alguém tem que falar sobre eles no Brasil, do jeito que eu falo; um jeito que respeita a inteligência de quem lê; um jeito não contaminado pelo estilo industrial fake-firula-mamãe-quero-bolo do complexo das redes sociais e da velha mídia, cada vez mais surreal e fora de contexto.

Eu também já disse que, no início, o que motivou a manter um blog foi a possibilidade de ter este tipo de informação que eu trago, que mistura aspectos técnicos com questões de princípios.

O que me traz ao assunto paralelo de que, cansado de apanhar, estou pensando em reorientar o estilo e escrever um material um pouco mais curto e mais frequente. Pretendo explorar também a possibilidade de tornar a escrita mais intimista, no estilo “fluxo de consciência”. Isso não é uma certeza. Vamos ver…

Para ser bem franco este blog tem sido um fracasso e o que faço é em respeito aos poucos que ocasionalmente me dão sua atenção. Com este blog me sinto falando para o vazio, como o personagem (o correto é dizer “a” personagem) de Will Smith em “Eu Sou a Lenda”. Ao me aventurar no bloguismo, depois de uma vida curtindo — de fora — a blogosfera anglófona, não pensei que a Internet pt_BR estivesse tão rarefeita de inteligência.

Em outra nota, estou lançando o site de minha seara empreendedora [o post específico será depois, mas por favor, sejam minhas convidadas e convidados >> triforma.com.br] nesta semana e planejo fazer um blog lá também. Tenho certeza de que será um sucesso – diferente de wordpress.com, lá eu tenho controle do meu servidor e do domínio canônico [onde wordpress.com nos trai a todos, o que pode ser tema de futuro post]. Terei muito material para comentar e compartilhar aqui com o vazio.

Vox Leone in the blind

End of transmission

Lamento (para) a Pátria

Porque hoje é o Seu dia. 🔥

Arte sobre imagem de Jesse Allen e Robert Simmon, Domínio Publico, via Wikimedia Commons

Não há mais tempo pra revoluções
Não há razão pra sonhar
Tanta fumaça, barulho, balas, caixões
Estamos suspensos no ar

E no fundo, aqui
viver e morrer são coisas muito banais
as estrelas no céu são todas iguais
(nenhuma)

O jeito é
se defender dos golpes sujos do mundo
sempre aprendendo a conviver

Com muita fumaça
muito barulho
Muita fumaça
muito barulho

O Meu Blogar

Comecei este blog originalmente para adicionar um certo tempero em minha carreira e tentar me estabelecer como uma autoridade nas áreas de tecnologia nas quais eu me concentro. Eu gosto de escrever e achei que tinha algo a dizer.

Pessoa escrevendo um diário.
Imagem: Pexels

Olhando para trás, para meus quatro anos de blog [ou serão cinco?], agora é difícil me reconhecer como o desenvolvedor de sistemas que eu era no início da década, antes de escrever se tornar um hábito regular para mim. É engraçado porque no final das contas meu blog foi, de fato, o caminho para diversificar minha carreira, mas não necessariamente da maneira que eu esperava. Achei que se eu pudesse escrever alguns posts interessantes poderia usá-los como uma espécie de portfólio em uma reunião de negócios, mas acabou se tornando muito mais do que isso.

Imediatamente tive a exata noção da minha insignificância, e de como temos idéias erradas a respeito de nosso entorno, das relações pessoais e das expectativas. Compreendi com certo alarme como o panorama havia mudado desde os anos dourados do bloguismo, na virada do milênio, e como a atenção das pessoas não estava mais disponível como eu pensava.

Superado o choque inicial, o que me surpreendeu depois de algum tempo de escrita técnica foi que escrever não era apenas uma questão de explicar algo para o público; era, na verdade, uma ferramenta para dar rigor ao meu pensamento.

Eu sempre me preocupei, talvez demasiadamente, com minha reputação e com meus leitores em potencial e, por isso, o compromisso de escrever um post no blog sobre um assunto técnico sempre acabou envolvendo muito trabalho. Eu sabia que se não fosse criterioso, ou se fosse descuidado com o que escrevia, não só estaria desperdiçando o tempo das pessoas, como também poderia ser ridicularizado publicamente. Assim, escrevia apenas coisas sobre as quais eu tinha uma compreensão fundamental e, ao mesmo tempo, buscava atingir uma compreensão profunda sobre os outros assuntos.

Aos poucos fui decobrindo que o ritual de escrever ilumina todas essas áreas que você achava que entendia, mas estava equivocado. Isto é especialmente verdadeiro quando você sabe que pessoas competentes e conhecedoras vão lê-lo. Você começa a explicar algo em detalhes, sobre como funciona, quais são as vantagens e desvantagens, as alternativas e coisa e tal, e logo seu detector interno de asneiras dispara. Uma voz interior começa a gritar “Como você sabe disso!?” ou “Como você pode fazer esta afirmação!?”. Você percebe que seu conhecimento muitas vezes se baseia em alicerces instáveis e que suas palavras não valem muita coisa. A partir daí você então se propõe a buscar a nesga de luz que falta, a buscar os insights e as verdades fundamentais para poder explicar tudo com honestidade e autenticidade.

Quando você escreve regularmente e enfrenta esse detector interno de asneiras, as opções que te sobram são subir de nível ou ambandonar a empreitada. Escrever me forçou a aprender coisas com um padrão mais elevado.

Depois de um tempo escrevendo meu blog, percebi que ele corrigiu muita coisa no meu modo de pensar. Ensinou-me como descobrir insights que poucos tinham visto. Isso, percebo agora, me levou àquele nível mais alto que eu procurava e necessitava. Escrevi aqui postagens de muita qualidade, e se não me tornei a autoridade reconhecida que sonhava, pelo menos atingi uma espécie de calma interior, e uma maior confiança nas minhas possibilidades. Estou também muito mais preparado para os encontros de trabalho e negócios. E de fato este blog se tornou um precioso portfolio.

Agora eu tenho grande força mental para escrever sobre uma questão qualquer que eu esteja a imaginar, uma nova técnica computacional que poderá ajudar alguém, ou explicar como algo funciona. Como eu compartilho isso com as pessoas, estou sempre atento àquele detector automático de asneiras em minha cabeça que me diz quando meu pensamento está desleixado ou instável. O compartilhar também me obriga a tornar as ideias concretas e a considerar todas as suas implicações.

Continuo sendo um José Ninguém, mas se posso recomendar algo às cinco pessoas que me lêem – um grande privilégio – é que elas não vejam a escrita de blog apenas como algo para trabalhar seu marketing pessoal. Antes de mais nada, escrever em um blog é uma ferramenta que as pessoas devem usar para melhorar sua visão de mundo e levar seu conhecimento e pensamento crítico para níveis mais altos.

É como treinar o pensamento: torna você uma pessoa mais poderosa, o que se traduz em melhor percepção e compreensão do mundo ao redor. Os blogs são menos populares agora do que eram no início, mas não deixe que isso te impeça. No final das contas a pessoa que mais se beneficia, mesmo que poucas pessoas leiam, é você.