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);
}
Würde dies als teilweise konformer ERC20 akzeptiert werden, wie es GNT ist? Würden Brieftaschen es akzeptieren?
Ich glaube, dass der obige Vertrag funktioniert, aber vielleicht gibt es einige Probleme, an die ich nicht gedacht habe? Was denken Sie?
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!
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.