Wie entferne ich Token aus dem Gesamtangebot?

Hey Leute, ich habe mich gefragt, wie man einen Token aus dem Gesamtvorrat löscht, nachdem jemand einen Token "gekauft" hat. Welche Funktion kann ich hier einfach kopieren und einfügen, da sie dem Konto beim Kauf die erforderlichen Token gibt, sie aber nicht aus dem Gesamtangebot entfernt?

pragma solidity ^0.4.18;

import './XXERC20.sol';
import './SafeMath.sol';

   contract XXPreOrderToken is XXERC20 {

    using SafeMath for uint256;

    uint public _totalSupply = 72500000000000000000000;

    string public constant symbol ="XXPOT";
    string public constant name = "PreOrderToken";
    uint8 public constant decimals = 18;

    //1 ether = 1000 pre-order tokens
    uint256 public constant RATE = 1000;

    address public owner;

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

    function() payable{
        createTokens();
    }

    function XXPreOrderToken() {
        balances[msg.sender] = _totalSupply;
        owner = msg.sender;
    }

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

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

        owner.transfer(msg.value);
    }

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

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

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

    function transferFrom(address _from, address _to, uint256 _value) 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].sub(_value);
            Transfer(_from, _to, _value);
            return true;
    }

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

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

Antworten (1)

Es klingt für mich nicht so, als ob sich das Gesamtangebot jemals ändern sollte. Die Gesamtversorgung ist im Grunde eine "maximale" Versorgung.

Durch die Übertragung eines Tokens von einer Person auf eine andere hat sich das Gesamtangebot nicht geändert, nur der Besitzer eines Tokens hat sich geändert.

Wenn Sie diesen Vertrag erstellen, werden alle Token erstellt und der Adresse zugewiesen, die den Vertrag erstellt hat (in der Funktion XXPreOrderToken())

Wenn jemand einen Token kauft, sollte dieser einfach vom Vertragsinhaber an die Person (Adresse) übertragen werden, die den Kauf tätigt.

Statt dieser Funktion:

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

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

    owner.transfer(msg.value);
}

Sie möchten wahrscheinlich so etwas:

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

    uint256 _numTokens = msg.value.mul(RATE);

    require(balances[owner] >= _numTokens);

    balances[owner] = balances[owner].sub(_numTokens);
    balances[msg.sender] = balances[msg.sender].add(_numTokens);
    Transfer(owner, msg.sender, _numTokens);

    owner.transfer(msg.value);
}
Es tut mir leid, ich sollte klarer sein. Wenn der Vertrag erstellt wird, gehen die 72500 XXPreOrderTokens an das Eigentümerkonto, aber wenn ich 1 Ether von Konto 2 an den Vertrag sende, werden die 1000 Token an Konto 2 gegeben, aber das Eigentümerkonto enthält immer noch 72500 Token. Gibt es etwas, das ich vermisse?
Die Kauffunktion muss Token vom Besitzerkonto an die Person übertragen, die den Kauf tätigt, was die Funktion buyTokens() tut, die ich als Beispiel erstellt habe. Es sollte keine createTokens()-Funktion geben, da alle Münzen während des Konstruktors erstellt werden sollten.