Identidad digital
¿Cómo proteger tu identidad digital con blockchain?
Caso práctico: identidad digital
Servicios financieros
¿Cómo blockchain soluciona problemas financieros?
Caso práctico: servicios financieros
Protección de activos digitales
¿Cómo proteger tus activos con blockchain?
Caso práctico: activos digitales
Cadena de suministro
¿Cómo hacer cadenas de suministro más eficientes con blockchain?
Caso práctico: cadena de suministro
Ciberseguridad
Ciberseguridad y blockchain
Caso práctico: ciberseguridad
Cierre
Continúa aprendiendo
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Los tokens son activos digitales que necesitan una crypto subyacente que los respalde y pueden representar el valor digital de lo que imagines en Internet. Por ejemplo, puntos en un juego, votos, el nivel de habilidad de un personaje, reputación, o realmente lo que se te ocurra.
En una Blockchain se pueden representar activos económicos a través de criptomonedas o tokens. Estos también permiten interactuar con un contrato inteligente para intercambiarlos, crear más tokens, destruirlos o participar de cualquier tipo de regla de negocio.
Las criptomonedas no son lo mismo que un token. Existe una delgada línea entre ambos y podemos confundirlos al principio.
Una criptomoneda es el activo digital nativo que vive en una Blockchain, mientras que los tokens requieren de una crypto y de una Blockchain para existir.
Un ejemplo de criptomoneda es Ether o ETH de la Blockchain de Ethereum. En este sistema podrás encontrar tokens como USDT, USDC, DAI o BUSD.
Los tokens comparten características con el dinero de cualquier país con el fin de convertirse en activos financieros.
Crear una criptomoneda nueva implica necesitar de toda una Blockchain para que la misma exista. Con todos los desafíos que implica, como la infraestructura, descentralización, protocolos de consenso, por solo nombrar algunos requisitos técnicos.
Es mucho más fácil crear un nuevo token y para esto existen estándares a seguir para lograrlo.
El estándar por excelencia para la creación de tokens es denominado ERC20, proveniente de la propuesta EIP20. La misma estandarizó una interfaz y características de cómo deben ser los tokens que viven en la Blockchain de Ethereum.
Para cumplir con el estándar, se exige que el token implemente los siguientes métodos y eventos.
function name() public view returns (string)
function symbol() public view returns (string)
function decimals() public view returns (uint8)
function totalSupply() public view returns (uint256)
function balanceOf(address _owner) public view returns (uint256 balance)
function transfer(address _to, uint256 _value) public returns (bool success)
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
function approve(address _spender, uint256 _value) public returns (bool success)
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
event Transfer(address indexed _from, address indexed _to, uint256 _value)
event Approval(address indexed _owner, address indexed _spender, uint256 _value)
De esta manera, puede considerarse que el token hereda del estándar ERC20 y es compatible con gran parte del ecosistema de Ethereum.
Como desarrolladores de software, podemos implementar nosotros mismos cada función del estándar, o bien, utilizar una implementación de un tercero. Empresas como OpenZeppelin ofrecen una implementación del estándar ERC20 auditada por la comunidad y lista para usarse en nuestros contratos.
Te preguntarás qué es lo que hace que el precio de una criptomoneda o token suba y baje. Detrás de eso existen un nuevo concepto denominado Tokenomics o Economía de Tokens y está relacionado con la usabilidad del token, liquidez, intercambio, gobernanza, etc.
Muchos conceptos de las finanzas tradicionales, también aplican a este tipo de activos financieros. Como la oferta y demanda o el funcionamiento de un mercado económicos. Platzi tiene mucho para enseñarte al respecto iniciando por el Curso de Introducción al Análisis Técnico de Mercados Financieros.
Si bien podemos utilizar implementaciones del estándar ERC20 de terceros e incluso es lo más recomendable dado que son contratos seguros y auditados, es un buen ejercicio realizar la implementación del estándar por nuestra cuenta para aprender más al respecto sobre cómo funciona por detrás.
También podemos investigar cómo funcionan los proyectos DeFi más populares como Aave o Uniswap. Aprender poco a poco la teoría y los fundamentos para posteriormente investigar sus contratos y así poder desarrollar nuestros propios contratos inteligentes DeFi.
Contribución creada por: Kevin Fiorentino.
Aportes 7
Preguntas 3
Este curso es super interesante…
Es muy interesante poder desarrollar nosotros mismos el estandar ERC20. Más allá de que podemos utilizar las implementaciones ya auditadas como la de OpenZeppelin. Es muy valioso ver una aproximación a cómo se desarrolla este tipo de estándares.
El total supply debe estar multiplicado por 10 elevado a la cantidad de decimales del token.
Para el ejemplo mostrado colocar la variable decimals no cambia el funcionamiento del contrato. En el estandar ERC20 no hay una variable, sino una función llamada decimals ( ) que devuelve el numero de decimales que debe tener el token creado. Mientras que en los contratos se trabaja con la minima unidad entera soportada en solidity (wei), a los usuarios se les muestra un valor con decimales. La funcion decimals ( ) es para mejorar la usabilidad del usuario como en los exploradores de bloques o Metamask, para que no tengan que lidiar con numeros grandes.
RESUMEN CLASE 4:
CASO PRACTICO
SERVICIOS FINANCIEROS
REMIX:
Balance.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract TokenBasic {
string public constant name = "PlatziCoin";
string public constant symbol = "PZC";
uint8 public constant decimals = 18;
uint256 _totalSupply;
mapping(address => uint256) balances;
mapping(address => mapping(address => uint256)) allowed;
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(
address indexed _owner,
address indexed _spender,
uint256 _value
);
constructor(uint256 total) {
_totalSupply = total;
balances[msg.sender] = total;
}
function totalSupply() public view returns (uint256) {
return _totalSupply;
}
function balanceOf(address _owner) public view returns (uint256) {
return balances[_owner];
}
function transfer(address _to, uint256 _value)
public
returns (bool success)
{
require(
_value <= balances[msg.sender],
"There are not enough funds to do the transfer"
);
balances[msg.sender] = balances[msg.sender] - _value;
balances[_to] = balances[_to] + _value;
emit Transfer(msg.sender, _to, _value);
success = true;
}
function approve(address _spender, uint256 _value)
public
returns (bool success)
{
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
success = true;
}
function allowance(address _owner, address _spender)
public
view
returns (uint256 remaining)
{
remaining = allowed[_owner][_spender];
}
function transferFrom(
address _from,
address _to,
uint256 _value
) public returns (bool success) {
require(
_value <= balances[_from],
"There are not enough funds to do the transfer"
);
require(_value <= allowed[_from][msg.sender], "Sender not allowed");
balances[_from] = balances[_from] - _value;
allowed[_from][msg.sender] = allowed[_from][msg.sender] - _value;
balances[_to] = balances[_to] + _value;
emit Transfer(_from, _to, _value);
success = true;
}
}
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?