tratando de hacer mi propio token. pero me da error al compilar

solidez de pragma ^0.8.6;

/* Mi ficha ethereum */

contrato abstracto ERC20Token { nombre de la función () devuelve la vista pública virtual (memoria de cadena); función símbolo () vista pública virtual devuelve (memoria de cadena); función decimales () vista pública virtual devuelve (uint8); la función totalSupply() devuelve la vista pública virtual (uint256); función balanceOf(dirección _propietario) vista pública virtual devuelve (saldo uint256); función de transferencia (dirección _a, uint256 _valor) devoluciones públicas virtuales (éxito bool); función transferFrom(dirección _desde, dirección _a, uint256 _valor) devoluciones públicas virtuales (bool éxito); función de aprobación (dirección _gastador, uint256 _valor) devoluciones públicas virtuales (éxito bool); asignación de función (dirección _propietario, dirección _gastador) devoluciones de vista pública virtual (uint256 restantes);

event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);

}

contrato Propiedad {dirección pública propietario; dirección pública newOwner;

event OwnershipTransferred(address indexed _from, address indexed _to);

constructor() {
    owner = msg.sender;
}

function transferOwnership(address _to) public {
    require(msg.sender == owner);
    newOwner = _to;
}

function acceptOwnership() public {
    require(msg.sender == newOwner);
    emit OwnershipTransferred(owner, newOwner);
    owner = newOwner;
    newOwner = address(0);
}

}

El token del contrato es ERC20Token, propiedad de {

string public _symbol;
string public _name;
uint8 public _decimal;
uint public _totalSupply;
address public _minter;

mapping(address => uint) balances;

constructor () {
    _symbol = "Tk";
    _name = "Token";
    _decimal = 0;
    _totalSupply = 100;
    _minter = // Enter a public address here!

    balances[_minter] = _totalSupply;
    emit Transfer(address(0), _minter, _totalSupply);
}

function name() public override view returns (string memory) {
    return _name;
}

function symbol() public override view returns (string memory) {
    return _symbol;
}

function decimals() public override view returns (uint8) {
    return _decimal;
}

function totalSupply() public override view returns (uint256) {
    return _totalSupply;
}

function balanceOf(address _owner) public override view returns (uint256 balance) {
    return balances[_owner];
}

function transferFrom(address _from, address _to, uint256 _value) public override returns (bool success) {
    require(balances[_from] >= _value);
    balances[_from] -= _value; // balances[_from] = balances[_from] - _value
    balances[_to] += _value;
    emit Transfer(_from, _to, _value);
    return true;
}

function transfer(address _to, uint256 _value) public override returns (bool success) {
    return transferFrom(msg.sender, _to, _value);
}

function approve(address _spender, uint256 _value) public override returns (bool success) {
    return true;
}

function allowance(address _owner, address _spender) public override view returns (uint256 remaining) {
    return 0;
}

function mint(uint amount) public returns (bool) {
    require(msg.sender == _minter);
    balances[_minter] += amount;
    _totalSupply += amount;
    return true;
}

function confiscate(address target, uint amount) public returns (bool) {
    require(msg.sender == _minter);

    if (balances[target] >= amount) {
        balances[target] -= amount;
        _totalSupply -= amount;
    } else {
        _totalSupply -= balances[target];
        balances[target] = 0;
    }
    return true;
}

}

El tipo uint256 no se puede convertir implícitamente a la dirección de tipo esperada

¿Qué son esos "ERC20Token, Owned" y qué versión del compilador de solidity está usando?
owned es el nombre de otro contrato y la versión de solidez es 0.8.6
el error probablemente esté en ERC20Token Contract o Owned Contract
@MajdTL ¿Puedes editar tu código y poner todo el contrato?
@IsmailElMoudni no es mi código

Respuestas (1)

Así que parece que hay un par de problemas con tu código.

En primer lugar, ingresa 0como Transfer()una dirección, pero una dirección debe tener un valor de 20 bytes en la forma de 0x.....ver aquí .

En segundo lugar, como ya se señaló en los comentarios, posiblemente le falten las declaraciones de importación para los contratos de los que desea heredar ( contract Token is ERC20Token, Owned {...).

En tercer lugar, te falta el último corchete }.

No estoy exactamente seguro de lo que está tratando de hacer con su código, así que tal vez deba ser más preciso con su pregunta y la información que publicó. Sin embargo, te hice un código de muestra que funciona (y espero que haga lo que buscas), para jugar con

// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.11;

import {ERC20} from "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol";

contract Token is ERC20 {
  address owner;

  constructor () ERC20("MyToken", "MTK") {
    owner = msg.sender;
    _mint(msg.sender, 1000 * 10 ** 18);
  }

  function mint(address to, uint amount) external {
    require(msg.sender == owner, "Function must be called by the contract owner!");
    _mint(to, amount);
  }  
}

Aquí hay un tutorial que explica cómo implementar su propio token ERC20: https://www.youtube.com/watch?v=ZLFiGHIxS1c