Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Desafío

14/15
Recursos

Aportes 5

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Contrato sin desafio para usar como plantilla:

//SPDX-License-Identifier:  MIT
pragma solidity ^0.8.0;

contract Desafio {
    uint private pin;
    mapping(address => uint) balances;

    constructor(uint ownerPin) {
        pin = ownerPin;
    }

    function min(uint ownerPin, uint amount) public {
        require(pin == ownerPin, "El pin no es correcto");
        balances[msg.sender] += amount;
    }

    function depositar() public payable{
        balances[msg.sender] += msg.value;
    }

    function retirar() public {
        require(balances[msg.sender] > 0);
        msg.sender.call{value:balances[msg.sender]}("");
        balances[msg.sender = 0];
    }
}

Agregué una variable estado para suspender la ejecución de las funciones del contrato.

// SPDX-License-Identifier: MIT

pragma solidity >= 0.8.7;

contract Desafio{
    address private _ownerPin;
    bool private estado;
    mapping(address => uint) balances;

    constructor (){
        _ownerPin = msg.sender;
        estado=true;
    }

    function mint(address ownerPin, uint amount) public {
         require(_ownerPin == ownerPin, "No es el pin correcto");
         require (estado, "Estado no permite ejecutar la opcion");
         balances[msg.sender] += amount;
    }

    function depositar() public payable {
         require (estado, "Estado no permite ejecutar la opcion");
        balances[msg.sender] += msg.value;
    }

    function retirar() public {
        require (estado, "Estado no permite ejecutar la opcion");
        require (balances[msg.sender] > 0, "No tienes suficiente saldo");
        uint monto = balances[msg.sender];
        balances[msg.sender] = 0;
        (bool res, ) = msg.sender.call{value: monto, gas: 1000}("");
        if (!res) revert();
    }
    
    function cambiarEstado() public {
        require (_ownerPin == msg.sender, "No puede cambiar el estado");
        estado = !estado;
    }
}

Muy lindo el curso. Saludos.

Hola Sebastián.
Tienes un error en la parte en la que recomiendas manejar un rango de versiones del compilador para el smart contract.

Contracts should be deployed with the same compiler version and flags that they have been tested the most with. Locking the pragma helps ensure that contracts do not accidentally get deployed using, for example, the latest compiler which may have higher risks of undiscovered bugs.

https://swcregistry.io/docs/SWC-103

Saludos

Desafio, implementando OpenZeppelin:

//SPDX-License-Identifier:  MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/access/Ownable.sol";

contract Desafio is Ownable {
    mapping(address => uint) balances;


    function min(uint amount) public onlyOwner {
        balances[msg.sender] += amount;
    }

    function depositar() public payable{
        balances[msg.sender] += msg.value;
    }

    function retirar() public  {
        require(balances[msg.sender] > 0);
        uint amount = balances[msg.sender];
        balances[msg.sender] = 0;
        (bool result, ) = msg.sender.call{value:amount,gas:600000}("");
        if(!result) revert();
    }
}