🇧🇷
Ethereum Developer Pack - PT
  • Ethereum Developer Pack - PT
  • Módulo 1
    • Introdução a Smart Contracts
      • Fundamentos de Blockchain
        • Histórico
        • Bitcoin
        • O que é Blockchain
        • Conceitos-chave em Blockchain
        • Como funciona a Blockchain
        • Tipos de Blockchain
        • Modelos de Consenso
      • A nova Internet
        • Web 3
        • Elementos Fundamentais
        • Impacto do Ethereum em Diversos Setores
      • Wallets
        • Componentes de uma wallet
        • Tipos de Wallet
        • Códigos Mnemônicos
      • Ethereum 101
        • Smart Contracts
        • Contas
          • Tipos de contas
          • Conteúdo das contas
        • Transações
          • Componentes
          • Ciclo de vida
        • Gás
        • Solidity
        • EVM
          • A máquina de estados
          • Opcodes
          • Como funciona a EVM
          • Clientes de execução
          • DApps
      • Blockchain Explorer
        • Funções de um blockchain explorer
        • Beneficios de utilizar um blockchain explorer
      • Remix
        • Características do Remix
        • Workspaces ou espaços de trabalho
        • Carregar e compilar um contrato
        • Implantar na máquina virtual do Remix (Remix VM)
        • Interagindo com funções
        • Deployar em uma rede pública
      • Crie seu primeiro Smart Contract
  • Módulo 2
    • Fundamentos de Solidity
      • Hello World
      • Tipos de Dados
      • Funções
      • Variáveis
        • Exercício 1
      • Operadores
        • Ejercicio 2
      • Constructor
        • Exercício 3
      • Convenções de nomenclatura
      • Tipos de armazenamento para variáveis
      • Estruturas de Controle
        • Exercício 4
      • Modificadores
      • Eventos
        • Exercício 5
      • Tipos de Referencia
        • Arrays
          • Exercício 6
        • Mappings
          • Exercício 7
        • Structs
          • Exercício 8
      • Address Payable
      • Como os contratos e funções recebem Ether.
      • Transferências de Ether
      • Conceitos Avançados
        • Codificação de ABI
        • Hashing
        • This
        • Herança
        • Abstract
        • Interface
        • Chamada entre contratos
        • EVM
        • ABI
        • Bytecode
        • Opcodes
  • Módulo 3
    • ERCs, Bibliotecas e Padrões de Desenvolvimento
      • Boas Práticas de Desenvolvimento
      • Padrões de Desenvolvimento
      • EIP & ERC
      • ERC-20
      • ERC-721
      • Open Zeppelin
      • Crie um Token ERC-20
      • Almacenamiento Descentralizado: IPFS
      • Crea un Token ERC-721
      • DeFi
  • Módulo 4
    • Kit de ferramentas para desenvolvimento na Ethereum
      • Requisitos para o módulo 4
        • Terminal
        • Git e Github
        • Node.js e npm
        • Visual Studio Code para Solidity
      • Toolkit
        • JSON-RPC
        • Ethers.js
          • Exercício
        • Hardhat
          • Implantação de um contrato no Hardhat
          • Implantação de um contrato em uma rede pública
        • Scaffold-ETH
          • Características do Scaffold-ETHCaracterísticas
          • Como instalar o Scaffold-ETH
  • Módulo 5
    • Segurança, Testes e Auditorias
      • Testes
        • Importância de realizar testes
        • Métodos para testar contratos inteligentes
          • Testes automatizados
          • Testes manuais
        • Conceitos importantes em testes
        • Ferramentas para testes
        • Testes com Hardhat
        • Recursos adicionais
      • Segurança
        • Uma mentalidade diferente de design
        • Principais vulnerabilidades em contratos inteligentes
          • Reentrancy attack (ataque de reentrada)
          • Replay attack (ataque de repetición)
          • Price Oracle Manipulation (Manipulación de Oráculos de Precios)
          • Missing Access Control (Pérdida de Control de Acceso)
          • Reward Manipulation (Manipulación de Recompensas)
          • Failure to Initialize (Falla al Inicializar)
          • Front-running
          • Invariant Breaks (Quebra de Invariantes)
          • Mishandling of ETH (Má gestão de ETH)
          • Denial of Service (DoS - Negação de Serviço)
          • Integer overflow and underflow (Overflow e Underflow de inteiros)
          • Phishing y Typosquatting
        • Recursos adicionais
      • Auditoria de smart contracts
        • Processo de Auditoria
        • Ferramentas
        • Como se preparar para uma auditoria
        • O teste Rekt
        • Desafios
        • Recursos adicionais
  • Contribuye
    • Kipu Explorer
Powered by GitBook
On this page
  • License
  • Pragma
  • Contract
  • Comentarios
  1. Módulo 2
  2. Fundamentos de Solidity

Hello World

License

Todos os programas devem começar indicando o tipo de licença, por exemplo:

// SPDX-License-Identifier: MIT

SPDX indica o tipo de licença correspondente ao código. Se não for especificado um tipo de licença, o compilador do Solidity emitirá um aviso. O SPDX é incluído no bytecode pelo compilador. Em programas de código aberto, como os utilizados no Ethereum, é crucial deixar claros os direitos autorais envolvidos. Isso garante que aqueles que desejam utilizá-los ou até mesmo copiá-los estejam cientes das implicações legais.

Por exemplo, os contratos inteligentes do Uniswap V3 utilizam a seguinte licença:

// SPDX-License-Identifier: BUSL-1.1

A licença BUSL protege os direitos autorais por um período de tempo (por exemplo, 3 anos), após o qual o código passa a ser de domínio público.

Uma das licenças mais utilizadas é a MIT, que é uma licença sem restrições. No entanto, ela não assume nenhuma responsabilidade pelo uso do software, deixando claro que o autor não é responsável por eventuais problemas decorrentes do seu uso.

Pragma

A declaração de pragma indica a versão do compilador Solidity que deve ser utilizada para compilar o código sem erros. Caso o compilador usado não seja compatível com a versão especificada no pragma, um erro será emitido.

Por exemplo, uma declaração típica de pragma em Solidity seria:

pragma solidity ^0.8.0;

No exemplo acima, ^0.8.0 significa que o contrato pode ser compilado com qualquer versão do compilador Solidity a partir da 0.8.0, até versões que não introduzam mudanças incompatíveis (breaking changes).

Essa prática é essencial para evitar problemas de incompatibilidade ao usar o contrato em diferentes ambientes e versões do compilador, garantindo maior estabilidade no comportamento do código.

Contract

A palavra contract em Solidity representa um contrato inteligente. Um contrato em Solidity é uma entidade que contém código executável na blockchain Ethereum. Os contratos podem interagir com outros contratos, além de conter variáveis, funções e eventos que definem seu comportamento.

Em linguagens orientadas a objetos, seu equivalente seria uma classe.

Aqui está um exemplo de um contrato simples:

contract HelloWorld {
string public greet = “Hello World!”;
}

Este é um contrato inteligente chamado HelloWorld que contém:

  • Uma única variável chamada greet, que é do tipo string,

  • Marcada como public (visível publicamente),

  • Com o valor inicial atribuído: "Hello World!".

O código do contrato é delimitado por chaves ({ e }). Essa estrutura simples já permite que o valor da variável seja acessado externamente, exemplificando como contratos podem armazenar e expor informações na blockchain.

Comentarios

Em Solidity, assim como em muitas outras linguagens de programação, os comentários têm como objetivo fornecer explicações e documentar o código-fonte. Esses comentários não afetam a execução do programa, pois são ignorados pelo compilador.

Os comentários servem para:

  • Documentar o código, facilitando sua leitura e entendimento, seja por outros desenvolvedores ou pelo próprio programador no futuro.

  • Explicar o propósito e o funcionamento de variáveis, funções e partes específicas do contrato, tornando o código mais acessível e fácil de manter.

Solidity permite criar dois tipos de comentários: em uma única linha ou em várias linhas.

Comentários de uma única linha

Usa-se o símbolo // para iniciar o comentário. O que vier após ele até o final da linha será ignorado pelo compilador.

// Este é um comentário de uma linha e será ignorado pelo compilador

Comentários de múltiplas linhas

Para incluir comentários que ocupem mais de uma linha, utiliza-se /* para iniciar e */ para terminar o bloco.

/* Este é um comentário de múltiplas linhas
   que também será ignorado pelo compilador */

Comentar seu código de forma clara e objetiva ajuda na colaboração e na manutenção de contratos inteligentes, especialmente em projetos maiores ou open-source.

PreviousFundamentos de SolidityNextTipos de Dados

Last updated 5 months ago