Warum sind meine Token für die in Etherscan gesendete Adresse nicht sichtbar?

Ich habe den Code abgeflacht und die Warnung behoben. Aber das Problem mit dem Vertrag ist, dass die Token in den Adressen nicht sichtbar sind, wenn sie mit Etherscan gesucht werden, aber wenn ich versuche, über Metamask hinzuzufügen, ist es leicht sichtbar.

Das zweite Problem ist, dass die Token nicht übertragen werden. Ich kenne den Grund dafür auch nicht, es gab statische Warnungen, aber Gas, aber ich habe das nicht so gut verstanden.

pragma solidity 0.4.25;

library SafeMath {

/**
* @dev Multiplies two numbers, reverts on overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
if (a == 0) {
  return 0;
}

uint256 c = a * b;
require(c / a == b);

return c;
}

/**
* @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
require(b > 0); // Solidity only automatically asserts when dividing by 0
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold

return c;
}

 /**
 * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
 */
 function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a);
uint256 c = a - b;

return c;
}

/**
* @dev Adds two numbers, reverts on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a);

return c;
}

/**
* @dev Divides two numbers and returns the remainder (unsigned integer modulo),
* reverts when dividing by zero.
*/
 function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b != 0);
return a % b;
}
}


interface IERC20{        
function totalSupply() external constant returns (uint256 tootalSupply);
function balanceOf(address _owner) external constant returns (uint256 baalance);
function transfer(address _to, uint256 _value) external returns (bool success);
function transferFrom(address _from, address _to, uint256 _value) external returns (bool success);
function approve(address _spender, uint256 _value) external returns (bool success);
function allowance(address _owner, address _spender) external constant returns (uint256 remaining);
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

contract FuncToken is IERC20{

using SafeMath for uint256;

uint public constant _totalSupply = 0;

string public constant symbol = "UB";
string public constant name = "UNIFIED BET";
uint8 public constant decimals = 18;

//1 ether = 1 UB
uint256 public constant RATE = 1;

address public owner;

mapping (address => uint256) balances;
mapping (address => mapping(address => uint256)) allowed;

function () payable{
    createToken();
}

constructor () public{
    owner = msg.sender;

}

function createToken() public payable {
    require(msg.value > 0);

    uint256 tokens = msg.value;
    balances[msg.sender] = balances[msg.sender].add(tokens);

    owner.transfer(msg.value);
}

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

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

function transfer(address _to, uint256 _value) public returns (bool success){
    require (
        balances[msg.sender] >= _value
        && _value > 0
        );
        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);
        emit Transfer(msg.sender, _to, _value);
        return true;

}

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success){
    require(
        allowed[_from][msg.sender] >= _value
        && balances[_from] >= _value
        && _value > 0
        );

        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(_value);
        allowed[_from][msg.sender] = allowed[_from][msg.sender].add(_value);
        emit Transfer(_from, _to, _value);
        return true;
}

function approve(address _spender, uint256 _value) public returns (bool success){
    allowed[msg.sender][_spender] = _value;
    emit Approval(msg.sender, _spender, _value);
    return true;
}

function allowance(address _owner, address _spender) public constant returns (uint256 remaining) {
    return allowed[_owner][_spender];
}

}

Jede Hilfe wird geschätzt.

Wie lautet Ihre Token-Adresse? Haben Sie ein Beispiel für eine Transaktion ohne Ereignisse? In jedem Fall ist Etherscan ein Closed-Source-Drittanbieter und kann die Vertragsabwicklung aus unbekannten Gründen verzögern.
derzeit im Rinkeby Network eingesetzt. Vertragsadresse - 0x0F051Af45eEdB54aA7d84a2aBF1829BAe82d026C
Sie sagten: "Token werden nicht übertragen". Was passiert, wenn Sie versuchen, Token mit der Übertragungsfunktion zu übertragen? Irgendein Transaktionshash, bitte?
Und "Token sind in Etherscan nicht sichtbar". Erstens dauert es in Etherscan einige Zeit. und zweitens sollten einige Übertragungsereignisse aufgetreten sein, die in den Suchergebnissen in Etherscan aufgegriffen werden :)

Antworten (1)

Die Token-Adressseiten geben an, dass kein Übertragungsereignis registriert wurde https://rinkeby.etherscan.io/tokens?q=0x0F051Af45eEdB54aA7d84a2aBF1829BAe82d026C .

Betrachten Sie nun Ihre Fallback-Funktion, die aufgerufen wird, createTokenund diese Funktion generiert kein Ereignis.

Um ein Ereignis zu generieren, müssen Sie Ihre Funktion so ändern, dass sie wie folgt aussieht:

function createToken() public payable {
    require(msg.value > 0);

    uint256 tokens = msg.value;
    balances[msg.sender] = balances[msg.sender].add(tokens);

    owner.transfer(msg.value);

    // --------- Generate Transfer event -------------
    emit Transfer(address(0x), msg.sender, tokens);
}
Als ich mir zuerst Ihre Antwort ansah, fragte ich mich, "aber das Transfer-Ereignis wird genau dort ausgegeben", bis mir klar wurde, dass Sie die ursprüngliche Funktion zu Demonstrationszwecken geändert hatten. Könnte das vielleicht deutlicher machen.