Skip to content

Commit

Permalink
Merge branch 'master' into patch-1
Browse files Browse the repository at this point in the history
  • Loading branch information
eduardonunesp authored Sep 14, 2018
2 parents 5b47a25 + ef4a4a4 commit 4edc139
Show file tree
Hide file tree
Showing 221 changed files with 25,937 additions and 412 deletions.
4 changes: 2 additions & 2 deletions en/1/functions.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ material:
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
uint dna;
string name;
uint dna;
}
Zombie[] public zombies;
Expand All @@ -32,8 +32,8 @@ material:
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
uint dna;
string name;
uint dna;
}
Zombie[] public zombies;
Expand Down
2 changes: 1 addition & 1 deletion en/3/05-timeunits.md
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ In order to keep track of how much time a zombie has to wait until it can attack

Solidity provides some native units for dealing with time.

The variable `now` will return the current unix timestamp (the number of seconds that have passed since January 1st 1970). The unix time as I write this is `1515527488`.
The variable `now` will return the current unix timestamp of the latest block (the number of seconds that have passed since January 1st 1970). The unix time as I write this is `1515527488`.

>Note: Unix time is traditionally stored in a 32-bit number. This will lead to the "Year 2038" problem, when 32-bit unix timestamps will overflow and break a lot of legacy systems. So if we wanted our DApp to keep running 20 years from now, we could use a 64-bit number instead — but our users would have to spend more gas to use our DApp in the meantime. Design decisions!
Expand Down
2 changes: 1 addition & 1 deletion en/6/01.md
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,7 @@ To do this, we're going to use a JavaScript library from the Ethereum Foundation

## What is Web3.js?

Remember, the Ethereum network is made up of nodes, which each contain a copy of the blockchain. When you want to call a function on a smart contract, you need to query one of these nodes and tell it:
Remember, the Ethereum network is made up of nodes, which each containing a copy of the blockchain. When you want to call a function on a smart contract, you need to query one of these nodes and tell it:

1. The address of the smart contract
2. The function you want to call, and
Expand Down
2 changes: 1 addition & 1 deletion en/6/03.md
Original file line number Diff line number Diff line change
Expand Up @@ -868,7 +868,7 @@ Web3.js will need 2 things to talk to your contract: its **_address_** and its *

After you finish writing your smart contract, you will compile it and deploy it to Ethereum. We're going to cover **deployment** in the **next lesson**, but since that's quite a different process from writing code, we've decided to go out of order and cover Web3.js first.

After you deploy your contract, it gets a fixed address on Ethereum where it will live forever. If you recall from Lesson 2, the address of the CryptoKitties contract on Ethereum mainnet is `YOUR_CONTRACT_ADDRESS`.
After you deploy your contract, it gets a fixed address on Ethereum where it will live forever. If you recall from Lesson 2, the address of the CryptoKitties contract on Ethereum mainnet is `0x06012c8cf97BEaD5deAe237070F9587f8E7A266d`.

You'll need to copy this address after deploying in order to talk to your smart contract.

Expand Down
2 changes: 1 addition & 1 deletion en/6/05.md
Original file line number Diff line number Diff line change
Expand Up @@ -455,7 +455,7 @@ Awesome! You've successfully written front-end code to interact with your first

Now let's put some pieces together — let's say we want our app's homepage to display a user's entire zombie army.

Obviously we'd first need to use our function `getZombiesByOwner(owner)` to look up all the IDs of zombies the current user owners.
Obviously we'd first need to use our function `getZombiesByOwner(owner)` to look up all the IDs of zombies the current user owns.

But our Solidity contract is expecting `owner` to be a Solidity `address`. How can we know the address of the user using our app?

Expand Down
8 changes: 4 additions & 4 deletions en/6/07.md
Original file line number Diff line number Diff line change
Expand Up @@ -482,7 +482,7 @@ material:
// the transaction has been sent
$("#txStatus").text("Creating new zombie on the blockchain. This may take a while...");
// Send the tx to our contract:
return CryptoZombies.methods.createRandomZombie(name)
return cryptoZombies.methods.createRandomZombie(name)
.send({ from: userAccount })
.on("receipt", function(receipt) {
$("#txStatus").text("Successfully created " + name + "!");
Expand All @@ -500,7 +500,7 @@ material:
// the transaction has been sent
$("#txStatus").text("Eating a kitty. This may take a while...");
// Send the tx to our contract:
return CryptoZombies.methods.feedOnKitty(zombieId, KittyId)
return cryptoZombies.methods.feedOnKitty(zombieId, kittyId)
.send({ from: userAccount })
.on("receipt", function(receipt) {
$("#txStatus").text("Ate a kitty and spawned a new Zombie!");
Expand Down Expand Up @@ -582,7 +582,7 @@ function createRandomZombie(name) {
// the transaction has been sent
$("#txStatus").text("Creating new zombie on the blockchain. This may take a while...");
// Send the tx to our contract:
return CryptoZombies.methods.createRandomZombie(name)
return cryptoZombies.methods.createRandomZombie(name)
.send({ from: userAccount })
.on("receipt", function(receipt) {
$("#txStatus").text("Successfully created " + name + "!");
Expand All @@ -599,7 +599,7 @@ function createRandomZombie(name) {
Our function `send`s a transaction to our Web3 provider, and chains some event listeners:

- `receipt` will fire when the transaction is included into a block on Ethereum, which means our zombie has been created and saved on our contract
- `error` will fire if there's an issue the prevented the transaction from being included in a block, such as the user not sending enough gas. We'll want to inform the user in our UI that the transaction didn't go through so they can try again.
- `error` will fire if there's an issue that prevented the transaction from being included in a block, such as the user not sending enough gas. We'll want to inform the user in our UI that the transaction didn't go through so they can try again.

> Note: You can optionally specify `gas` and `gasPrice` when you call `send`, e.g. `.send({ from: userAccount, gas: 3000000 })`. If you don't specify this, MetaMask will let the user choose these values.
Expand Down
16 changes: 8 additions & 8 deletions en/6/08.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ material:
// the transaction has been sent
$("#txStatus").text("Creating new zombie on the blockchain. This may take a while...");
// Send the tx to our contract:
return CryptoZombies.methods.createRandomZombie(name)
return cryptoZombies.methods.createRandomZombie(name)
.send({ from: userAccount })
.on("receipt", function(receipt) {
$("#txStatus").text("Successfully created " + name + "!");
Expand All @@ -81,7 +81,7 @@ material:
function feedOnKitty(zombieId, kittyId) {
$("#txStatus").text("Eating a kitty. This may take a while...");
return CryptoZombies.methods.feedOnKitty(zombieId, KittyId)
return cryptoZombies.methods.feedOnKitty(zombieId, kittyId)
.send({ from: userAccount })
.on("receipt", function(receipt) {
$("#txStatus").text("Ate a kitty and spawned a new Zombie!");
Expand Down Expand Up @@ -513,7 +513,7 @@ material:
// the transaction has been sent
$("#txStatus").text("Creating new zombie on the blockchain. This may take a while...");
// Send the tx to our contract:
return CryptoZombies.methods.createRandomZombie(name)
return cryptoZombies.methods.createRandomZombie(name)
.send({ from: userAccount })
.on("receipt", function(receipt) {
$("#txStatus").text("Successfully created " + name + "!");
Expand All @@ -528,7 +528,7 @@ material:
function feedOnKitty(zombieId, kittyId) {
$("#txStatus").text("Eating a kitty. This may take a while...");
return CryptoZombies.methods.feedOnKitty(zombieId, KittyId)
return cryptoZombies.methods.feedOnKitty(zombieId, kittyId)
.send({ from: userAccount })
.on("receipt", function(receipt) {
$("#txStatus").text("Ate a kitty and spawned a new Zombie!");
Expand All @@ -541,8 +541,8 @@ material:
function levelUp(zombieId) {
$("#txStatus").text("Leveling up your zombie...");
return CryptoZombies.methods.levelUp(zombieId)
.send({ from: userAccount, value: web3js.utils.toWei("0.001") })
return cryptoZombies.methods.levelUp(zombieId)
.send({ from: userAccount, value: web3js.utils.toWei("0.001", "ether") })
.on("receipt", function(receipt) {
$("#txStatus").text("Power overwhelming! Zombie successfully leveled up");
})
Expand Down Expand Up @@ -610,13 +610,13 @@ That's a lot of zeroes to count — but luckily Web3.js has a conversion utilit

```
// This will convert 1 ETH to Wei
web3js.utils.toWei("1", "ether");
web3js.utils.toWei("1");
```

In our DApp, we set `levelUpFee = 0.001 ether`, so when we call our `levelUp` function, we can make the user send `0.001` Ether along with it using the following code:

```
CryptoZombies.methods.levelUp(zombieId)
cryptoZombies.methods.levelUp(zombieId)
.send({ from: userAccount, value: web3js.utils.toWei("0.001", "ether") })
```

Expand Down
16 changes: 8 additions & 8 deletions en/6/09.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ material:
// the transaction has been sent
$("#txStatus").text("Creating new zombie on the blockchain. This may take a while...");
// Send the tx to our contract:
return CryptoZombies.methods.createRandomZombie(name)
return cryptoZombies.methods.createRandomZombie(name)
.send({ from: userAccount })
.on("receipt", function(receipt) {
$("#txStatus").text("Successfully created " + name + "!");
Expand All @@ -83,7 +83,7 @@ material:
function feedOnKitty(zombieId, kittyId) {
$("#txStatus").text("Eating a kitty. This may take a while...");
return CryptoZombies.methods.feedOnKitty(zombieId, KittyId)
return cryptoZombies.methods.feedOnKitty(zombieId, kittyId)
.send({ from: userAccount })
.on("receipt", function(receipt) {
$("#txStatus").text("Ate a kitty and spawned a new Zombie!");
Expand All @@ -96,8 +96,8 @@ material:
function levelUp(zombieId) {
$("#txStatus").text("Leveling up your zombie...");
return CryptoZombies.methods.levelUp(zombieId)
.send({ from: userAccount, value: web3.utils.toWei("0.001") })
return cryptoZombies.methods.levelUp(zombieId)
.send({ from: userAccount, value: web3.utils.toWei("0.001", "ether") })
.on("receipt", function(receipt) {
$("#txStatus").text("Power overwhelming! Zombie successfully leveled up");
})
Expand Down Expand Up @@ -531,7 +531,7 @@ material:
// the transaction has been sent
$("#txStatus").text("Creating new zombie on the blockchain. This may take a while...");
// Send the tx to our contract:
return CryptoZombies.methods.createRandomZombie(name)
return cryptoZombies.methods.createRandomZombie(name)
.send({ from: userAccount })
.on("receipt", function(receipt) {
$("#txStatus").text("Successfully created " + name + "!");
Expand All @@ -546,7 +546,7 @@ material:
function feedOnKitty(zombieId, kittyId) {
$("#txStatus").text("Eating a kitty. This may take a while...");
return CryptoZombies.methods.feedOnKitty(zombieId, KittyId)
return cryptoZombies.methods.feedOnKitty(zombieId, kittyId)
.send({ from: userAccount })
.on("receipt", function(receipt) {
$("#txStatus").text("Ate a kitty and spawned a new Zombie!");
Expand All @@ -559,8 +559,8 @@ material:
function levelUp(zombieId) {
$("#txStatus").text("Leveling up your zombie...");
return CryptoZombies.methods.levelUp(zombieId)
.send({ from: userAccount, value: web3.utils.toWei("0.001") })
return cryptoZombies.methods.levelUp(zombieId)
.send({ from: userAccount, value: web3.utils.toWei("0.001", "ether") })
.on("receipt", function(receipt) {
$("#txStatus").text("Power overwhelming! Zombie successfully leveled up");
})
Expand Down
2 changes: 1 addition & 1 deletion es/1/events.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ material:

¡Nuestro contrato está casi terminado! Añadamos ahora un **_evento_**.

Los **_eventos_** son la forma en la que nuestro contrato comunica que algo sucedió en la cadena de bloques a la interfaz de usuario, el cual puede estar 'escuchando' ciertos eventos y hacer algo cuando suceden.
Los **_eventos_** son la forma en la que nuestro contrato comunica que algo sucedió en la cadena de bloques a la interfaz de usuario, el cual puede estar 'escuchando' ciertos eventos y hacer algo cuando sucedan.

Ejemplo:

Expand Down
4 changes: 2 additions & 2 deletions es/1/functions.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ material:
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
uint dna;
string name;
uint dna;
}
Zombie[] public zombies;
Expand All @@ -32,8 +32,8 @@ material:
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
uint dna;
string name;
uint dna;
}
Zombie[] public zombies;
Expand Down
2 changes: 1 addition & 1 deletion es/1/functions2.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,6 @@ Como puedes ver, usamos la palabra clave `private` después del nombre de la fun

# Vamos a probarlo

Nuestro contrato tiene una función `createZombie` que es pública por defecto, esto significa ¡que cualquiera podría llamarlo y crear un nuevo zombi en nuestro contrato! Vamos a hacerla privada.
Nuestro contrato tiene una función `createZombie` que es pública por defecto, esto significa ¡qué cualquiera podría llamarlo y crear un nuevo zombi en nuestro contrato! Vamos a hacerla privada.

1. Modifica la función `createZombie` para que sea una función privada. ¡No te olvides de la convención del nombre!
2 changes: 1 addition & 1 deletion es/1/lessonoverview.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ En la Lección 1 vas a construir una "Fabrica de Zombis" para poder crear tu ej
* Nuestra fábrica tendrá una función que cree nuevos zombis
* Cada zombi tendrá una apariencia aleatoria y no habrá dos iguales

En las siguientes lecciones añadiremos más funcionalidades, ¡como la capacidad de atacar humanos u otros zombis! Pero antes de que lleguemos allí tendremos que contar con la funcionalidad de crear nuevos zombis.
En las siguientes lecciones añadiremos más funcionalidades, ¡cómo la capacidad de atacar humanos u otros zombis! Pero antes de que lleguemos allí tendremos que contar con la funcionalidad de crear nuevos zombis.

## Cómo funciona el ADN de los Zombis

Expand Down
2 changes: 1 addition & 1 deletion es/2/10-interactingcontracts.md
Original file line number Diff line number Diff line change
Expand Up @@ -190,4 +190,4 @@ Ahora que sabemos como es esta función, podemos usarla para crear una interfaz:

1. Define una interfaz llamada `KittyInterface`. Recuerda, es como crear un nuevo contrato - usamos la palabra clave `contract`.

2. Dentro de la interfaz, define la función `getKitty` (que debería ser un copia/pega de la función de arriba, pero con un punto y coma después de la definición de `returns`, en vez de todo lo que hay dentro de las llaves.
2. Dentro de la interfaz, define la función `getKitty` (que debería ser un copia/pega de la función de arriba, pero con un punto y coma después de los parámetros, en vez de todo lo que hay dentro de las llaves.
2 changes: 1 addition & 1 deletion es/2/3-msgsender.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ material:

Ahora que tenemos nuestros mapeos para seguir el rastro del propietario de un zombi, queremos actualizar el metodo `_createZombie` para que los utilice.

Para poder hacer esto, necesitamos algo llamdo `msg.sender`.
Para poder hacer esto, necesitamos algo llamado `msg.sender`.

## msg.sender

Expand Down
2 changes: 1 addition & 1 deletion es/2/4-require.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ Para eso usamos `require`. `require` hace que la función lanze un error y pare

```
function sayHiToVitalik(string _name) public returns (string) {
// Compara si _name es igual a "Vitalik". Lanza un error y existe si no es verdadero.
// Compara si _name es igual a "Vitalik". Lanza un error si no lo son.
// (Nota: Solidity no tiene su propio comparador de strings, por lo que
// compararemos sus hashes keccak256 para ver si sus strings son iguales)
require(keccak256(_name) == keccak256("Vitalik"));
Expand Down
2 changes: 1 addition & 1 deletion es/2/6-importfiles.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,6 @@ Entonces si tenemos un fichero llamado `someothercontract.sol` en el mismo direc

# Vamos a probarlo

Ahora que tenemos una estructura de multiples ficheros, necesitamos usar `import` para leer el contenido del otro fichero:
Ahora que tenemos una estructura de múltiples ficheros, necesitamos usar `import` para leer el contenido del otro fichero:

1. Importa `zombiefactory.sol` en nuestro nuevo fichero, `zombiefeeding.sol`.
4 changes: 2 additions & 2 deletions es/3/02-ownable.md
Original file line number Diff line number Diff line change
Expand Up @@ -185,13 +185,13 @@ material:

Queremos tener el poder de actualizar esa dirección en nuestro contrato, pero no queremos que todo el mundo sea capaz de hacerlo.

Para manejar casos como este, una practica emergente común es hacer el contrato `Ownable` — significa que tiene un dueño (tú) con privilegios especiales.
Para manejar casos como este, una práctica emergente común es hacer el contrato `Ownable` — significa que tiene un dueño (tú) con privilegios especiales.

## Contrato `Ownable` de OpenZeppelin

Abajo está el contrato `Ownable` definido en la librería Solidity de **_OpenZeppelin_**. OpenZeppelin es una librería segura donde hay contratos inteligentes para utilizar en tus propias DApps revisados por la comunidad. Despues de esta lección, mientras esperas ansiosamente la liberación de la Lección 4, ¡te recomendamos encarecidamente que visites su sitio web para fomentar tu aprendizaje!

Echalé un vistazo al contrato más abajo. Vas a ver algunas cosas que no hemos aprendido aún, pero no te preocupes, hablaremos de ellas más adelante.
Échale un vistazo al contrato más abajo. Vas a ver algunas cosas que no hemos aprendido aún, pero no te preocupes, hablaremos de ellas más adelante.

```
/**
Expand Down
2 changes: 1 addition & 1 deletion es/3/03-onlyowner.md
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ material:
}
---

Ahora que nuestro contrato base `ZombieFactory` extiende de `Ownable`, podemos usar también el modificador de función `onlyOwner` en la función `ZombieFeeding`.
Ahora que nuestro contrato base `ZombieFactory` hereda de `Ownable`, podemos usar también el modificador de función `onlyOwner` en la función `ZombieFeeding`.

Esto es por como funciona la herencia de contratos. Recuerda:

Expand Down
2 changes: 1 addition & 1 deletion es/3/08-functionmodifiers.md
Original file line number Diff line number Diff line change
Expand Up @@ -209,4 +209,4 @@ Vamos a probar a hacer nuestro propio `modifier` que utilice la propiedad `level

2. El cuerpo de la función deberá comprobar que `zombies[_zombieId].level` es mayor o igual a `_level`.

3. Recuerda que para que el modificador pueda ser llamado por el restro de funciones debe incluir `_;` en la última línea.
3. Recuerda que para que el modificador pueda ser llamado por el resto de funciones debe incluir `_;` en la última línea.
2 changes: 1 addition & 1 deletion es/3/10-savinggasview.md
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ material:

¡Increible! Ahora tenemos algunas habilidades especiales para los zombis de nivel alto, dandoles a sus dueños un incentivo por subirlos de nivel. Si queremos podemos añadir más de estos en el futuro.

Vamos a añadir una nueva función: nuestra DApp necesita un metodo para ver el ejército de un usuario - vamos a llamarlo `getZombiesByOwner`.
Vamos a añadir una nueva función: nuestra DApp necesita un método para ver el ejército de un usuario - vamos a llamarlo `getZombiesByOwner`.

Esta función solo necesita leer datos de la blockchain, por lo que podemos hacer una función `view`. Esta nos brinda un importante tema a la hora de hablar sobre la optimización de gas:

Expand Down
2 changes: 1 addition & 1 deletion es/4/battle-01.md
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ Ahora que hemos aprendido sobre funciones payable y balances de contrato ¡Es ho

Siguiendo el formato de capitulos pasados, organizaremos nuestro código creando un nuevo archivo / contrato para la funcionalidad de ataque que se importa desde nuestro contrato anterior.

## Pongalo a prueba
## Póngalo a prueba

Hagamos un repaso de cómo crear un nuevo contrato ¡La repetición hace al maestro!

Expand Down
Loading

0 comments on commit 4edc139

Please sign in to comment.