versuche, mein eigenes Token zu machen. Aber ich bekomme einen Fehler beim Kompilieren

Pragma Solidität ^0.8.6;

/* Mein Ethereum-Token */

abstrakter Vertrag ERC20Token {Funktionsname() virtuelle öffentliche Ansicht gibt zurück (String-Speicher); Funktion symbol() virtuelle öffentliche Ansicht gibt zurück (String-Speicher); Funktion decimals() Virtual Public View gibt zurück (uint8); Funktion totalSupply() virtuelle öffentliche Ansicht gibt zurück (uint256); Funktion balanceOf (Adresse _owner) Virtual Public View gibt zurück (uint256 balance); Funktion transfer (Adresse _to, uint256 _value) virtuelle öffentliche Rückgaben (bool Erfolg); Funktion transferFrom (Adresse _from, Adresse _to, uint256 _value) virtuelle öffentliche Rückgaben (bool Erfolg); Funktion genehmigen (Adresse _spender, uint256 _value) virtuelle öffentliche Renditen (bool Erfolg); Funktion Allowance (Adresse _owner, Adresse _spender) gibt die virtuelle öffentliche Ansicht zurück (uint256 bleibt übrig);

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

}

Vertrag Eigentum { Adresse öffentlicher Eigentümer; Adresse öffentlich 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);
}

}

Contract Token ist ERC20Token, Owned {

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;
}

}

Der Typ uint256 ist nicht implizit in die erwartete Typadresse konvertierbar

Was sind diese "ERC20Token, Owned" und welche Solidity-Compiler-Version verwenden Sie?
Owned ist der Name eines anderen Vertrags und die Solidity-Version ist 0.8.6
Der Fehler liegt wahrscheinlich in ERC20Token Contract oder Owned Contract
@MajdTL Kannst du deinen Code bearbeiten und den ganzen Vertrag einfügen?
@IsmailElMoudni, es ist nicht mein Code

Antworten (1)

Es scheint also ein paar Probleme mit Ihrem Code zu geben.

Zuerst übergeben Sie 0als Adresse, aber eine Adresse muss ein 20-Byte-Wert in der Form von see hereTransfer() sein .0x.....

Zweitens fehlen Ihnen, wie bereits in den Kommentaren erwähnt, möglicherweise die Importanweisungen für die Verträge, von denen Sie erben möchten ( contract Token is ERC20Token, Owned {...).

Drittens fehlt Ihnen die letzte geschweifte Klammer }.

Ich bin mir nicht ganz sicher, was Sie mit Ihrem Code zu tun versuchen, also müssen Sie vielleicht mit Ihrer Frage und den von Ihnen geposteten Informationen genauer sein. Ich habe Ihnen jedoch einen Beispielcode erstellt, der funktioniert (und hoffentlich das tut, was Sie anstreben), um damit herumzuspielen

// 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);
  }  
}

Hier ist ein Tutorial, das erklärt, wie Sie Ihr eigenes ERC20-Token bereitstellen: https://www.youtube.com/watch?v=ZLFiGHIxS1c