kann ERC20-Token private Transferfunktionen implementieren

Ich weiß, dass Golem Network Token die Funktionen „approve() allow()“ und „transferFrom()“ nicht implementiert. Damit ist GNT teilweise konform zum ERC20-Standard.

Ich möchte noch weiter gehen und die Funktion transfer() als private() implementieren .

Auf diese Weise wäre es für die Token-Inhaber unmöglich, damit frei zu handeln (es wäre nur mit einem benutzerdefinierten Mechanismus möglich – siehe unten), aber dennoch möglich, das Token in Wallets zu sehen.

Beispielcode würde so aussehen:

contract CustomToken is ERC20 {

    public symbol = “TEST”
    public totalSupply = X;
    public balanceOf...

    //function approve() -- not implemented
    //function transferFrom() -- not implemented

    // first step: check that the caller is KYC
    function placeOrderBuy(int _amountToken, int _maxPrice ) external payable 
            returns(bool success); 

    // first step: check that the caller is KYC
    function placeOrderSell(int _amountToken, int _minPrice ) external 
            payable returns(bool success); 

    //run automatically every month, and transfer the tokens function 
    executeOrders() private returns(float newPrice);

    // triggers Transfer event 
    transfer(address _to, uint _value) private returns(bool success);
}
  1. Würde dies als teilweise konformer ERC20 akzeptiert werden, wie es GNT ist? Würden Brieftaschen es akzeptieren?

  2. Ich glaube, dass der obige Vertrag funktioniert, aber vielleicht gibt es einige Probleme, an die ich nicht gedacht habe? Was denken Sie?

  3. Wenn ERC20 nicht in der Tabelle ist, könnte ich einfach auch die transfer()-Funktion entfernen und die Token-Übertragung innerhalb der executeOrders()-Funktionen implementieren, richtig?

Danke!

Antworten (1)

Die Tools, die mit einem Smart Contract umgehen/interagieren, tun dies, indem sie die verschlüsselte Signatur der Funktionsschnittstellen verwenden. Die Signatur wird aus der kanonischen Schnittstelle für die Funktion erstellt, also

transfer(address,uint)

wird kanonisch als

transfer(address,uint256)

und codiert als

0xa9059cbb

Das Hinzufügen privateändert die Schnittstelle nicht, daher ist die Codierung dieselbe, sodass die Tools die Änderung nicht kennen. Es sollte gut funktionieren.