Skip to content

Commit

Permalink
PT-BR: Chap:3 Lesson 00 to 02. Many corrections. (CryptozombiesHQ#168)
Browse files Browse the repository at this point in the history
* PT-BR: Chap:3 Lesson 00 to 02. Many corrections.

* atualizando githignore para não utilizar arquivos das pastas do visual studio code
  • Loading branch information
marcelo-maciel authored and mattkanwisher committed Mar 6, 2018
1 parent 5be04bf commit b031a7d
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 17 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ public/
build/
.tmp
.idea/
/.vs/
8 changes: 4 additions & 4 deletions pt/3/00-overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ header: "Lição 3: Conceitos Avançados de Solidity"
roadmap: roadmap3.png
---

Grr... Eu não consigo para você, consigo? Suas habilidades em Solidity são formidáveis, humano...
Grr... Eu não consigo parar você, consigo? Suas habilidades em Solidity são formidáveis, humano...

Agora que você tem alguma experiência em Solidity, vamos mergulhar em alguns aspectos mais técnicos do desenvolvimento em Ethereum.

Esta lição será um pouco menos chamativa (desculpe, sem reviravoltas!). Mas você irá aprender conceitos realmente importantes que o deixara mais perto de criar DApps reais - coisas como **propriedade do contrato, custo em gas, otimização de código e segurança**.
Esta lição será um pouco menos chamativa (desculpe, sem reviravoltas!). Mas você irá aprender conceitos realmente importantes que o deixará mais perto de criar DApps reais - coisas como **propriedade do contrato, custo em gas, otimização de código e segurança**.

Você foi avisado - sem gatinhos sem arcos-íris na Lição 3!
Você foi avisado - sem gatinhos nem arcos-íris na Lição 3!

Mas um grande conhecimento em Solidity empacotado. Recomendamos fortemente que você complete a Lição 2 antes de começar a próxima.
Mas um grande conhecimento em Solidity densamente agrupado. Recomendamos fortemente que você complete a Lição 2 antes de começar a próxima.
4 changes: 2 additions & 2 deletions pt/3/01-externaldependencies.md
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ Até agora, Solidity pareceu bastante similar a outras linguagens como Javascrip

Para começar, após você implantar um contrato em Ethereum, este é **_imutável_**, quer dizer que ele nunca poder ser modificado ou melhorado novamente.

O código que você implantou para um contrato esta lá permanentemente, para sempre, na blockchain. Esta é uma das razões na qual a segurança em Solidity é uma grande preocupação. Se houver ma falha no código do contrato, não há maneira de remendar depois. Você precisará dizer aos seus usuários para começarem a usar um outro smart contract que tem a correção.
O código que você implantou para um contrato esta lá permanentemente, para sempre, na blockchain. Esta é uma das razões na qual a segurança em Solidity é uma grande preocupação. Se houver uma falha no código do contrato, não há maneira de remendar depois. Você precisará dizer aos seus usuários para começarem a usar um outro smart contract que tem a correção.

Mais isto também é uma parte essencial dos smart contracts. O código é a lei. Se você ler o código do smart contract e verificá-lo, você pode ter certeza que toda vez que chamar aquela função sempre irá acontecer exatamente aquilo que o código diz. Ninguém pode mudar essa função depois e retornar resultados inesperados.

Expand All @@ -161,7 +161,7 @@ Por exemplo, ao invés de ter um código fixo com o endereço do contrato dos Cr

## Vamos testar

Vamos atualizar o nosso código para a Lição 2 para permitir a mudança do endereço do contrato do CryptoKitties.
Vamos atualizar o nosso código da Lição 2 para permitir a mudança do endereço do contrato do CryptoKitties.

1. Remova a linha de código onde esta fixo a variável `ckAddress`.

Expand Down
21 changes: 10 additions & 11 deletions pt/3/02-ownable.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ material:
// 1. Importe aqui
// 2. Here aqui:
// 2. Herde Aqui:
contract ZombieFactory {
event NewZombie(uint zombieId, string name, uint dna);
Expand Down Expand Up @@ -181,23 +181,23 @@ material:

Você percebeu a falha de segurança no capítulo anterior?

`setKittyContractAddress` é um `external`, então qualquer um pode chamá-lo! Isso quer dizer que qualquer que chamar a função pode mudar o endereço do contrato do CryptoKitties, e quebrar a nossa aplicação para todos os usuários.
`setKittyContractAddress` é um `external`, então qualquer um pode chamá-lo! Isso quer dizer que qualquer um que chamar a função pode mudar o endereço do contrato do CryptoKitties, e quebrar a nossa aplicação para todos os usuários.

Nós queremos uma maneira de atualizar este endereço em nosso contrato, mas nós não queremos que qualquer um passa atualizá-lo.

Para lidar com casos assim, uma prática que se tornou comum é tornar o contrato `Ownable` (Proprietário) - quer dizer que tem um dono (você no caso) que tem privilégios especiais.

## Contratos `Ownable` do OpenZeppelin

Abaixo um contrato `Ownable` pego da biblioteca Solidity do **_OpenZeppelin_**. OpenZeppelin é uma biblioteca de contratos seguros e auditados pela comunidade que você pode usar em suas próprias DApps. Após esta lição, enquanto você estiver ansioso esperando a lição 4, recomendamos fortemente que você visite o site deles para maior aprendizado.
Abaixo um contrato `Ownable` pego da biblioteca Solidity do **_OpenZeppelin_**. OpenZeppelin é uma biblioteca de contratos seguros e auditados pela comunidade que você pode usar em suas próprias DApps. Após esta lição, recomendamos fortemente que você visite o site deles para maior aprendizado.

Leia com atenção o contrato abaixo. Você verá algumas coisas que nós já aprendemos, mas não se preocupe, iremos falar mais sobre em seguida.
Leia com atenção o contrato abaixo. Você verá algumas coisas que nós já aprendemos, mas não se preocupe, iremos falar mais sobre isso em seguida.

```
/**
* @title Ownable
* @dev Um contrato Ownable tem um endereço de dono, e fornece uma funções de controle básicos,
* que simplifica a implementação de "permissões de usuário".
* @dev Um contrato Ownable tem um endereço de dono, e fornece funções básicas de autorização,
* que simplificam a implementação de "permissões de usuário".
*/
contract Ownable {
address public owner;
Expand Down Expand Up @@ -233,15 +233,15 @@ contract Ownable {

Um pouco de novas coisas que não vimos antes:

- Construtores: `function Ownable()` is a **_constructor_**, que é um função opcional e especial que tem o mesmo nome do contrato. Esta será executada somente uma vez, quando o contrato é criado a primeira vez.
- Funções Modificadoras: `modifier onlyOwner()`. Modificadores são um tipo de meia-função que são usadas para modificar outras funções, normalmente usadas para checar algo requerido antes da execução. Neste caso, `onlyOwner` pode ser usada para limitar o acesso então **only** (somente) the **owner** (dono) do contrato pode executar esta função. Nós iremos falar mais sobre funções modificadoras no próximo capítulo, e o que esse `_;` faz.
- Palavra-chave `indexed`: não se preocupe com esse, nós ainda não precisamos.
- Construtores: `function Ownable()` é um **_construtor_**, que é uma função opcional e especial que tem o mesmo nome do contrato. Esta será executada somente uma vez, quando o contrato é criado a primeira vez.
- Funções Modificadoras: `modifier onlyOwner()`. Modificadores são um tipo de meia-função que são usadas para modificar outras funções, normalmente usadas para checar algo requerido antes da execução. Neste caso, `onlyOwner` pode ser usada para limitar o acesso então **only** (somente) o **owner** (dono) do contrato pode executar esta função. Nós iremos falar mais sobre funções modificadoras no próximo capítulo, e o que esse `_;` faz.
- Palavra-chave `indexed`: não se preocupe com isso, nós ainda não precisamos.

Então o contrato `Ownable` basicamente faz o seguinte:

1. Quando o contrato é criado, este construtor define o `owner` (dono) para `msg.sender` (a pessoa que implantou-o na blockchain)

2. Este adiciona um modificador `onlyOwner`, que restringe o acesso a certas função para somente o `owner` (dono)
2. Este adiciona um modificador `onlyOwner`, que restringe o acesso a certas função somente para o `owner` (dono)

3. Também permite a transferência de um contrato para o novo `owner` (dono)

Expand All @@ -251,7 +251,6 @@ Já que nós queremos limitar o `setKittyContractAddress` para `onlyOwner`, tere

## Vamos testar

We've gone ahead and copied the code of the `Ownable` contract into a new file, `ownable.sol`. Let's go ahead and make `ZombieFactory` inherit from it.
Nós já copiamos o código do contrato `Ownable` em um novo arquivo, `ownable.sol`. Vá em frente e faça o `ZombieFactory` herdá-lo.

1. Modifique nosso código para importar com `import` o conteúdo de `ownable.sol`. Se você não lembra como fazer isso de uma olhada em `zombiefeeding.sol`.
Expand Down

0 comments on commit b031a7d

Please sign in to comment.