Neu bei Solidity...
Ist es möglich, eine Gebühr für die Übertragung eines ERC20-Tokens in Ether zu erheben? Die Gebühr würde 0,000001 Ether pro Überweisung betragen. Jedes Mal, wenn der ERC20-Token an einen anderen Benutzer gesendet wird, wird die Gebühr in Ether an einen Vertrag gesendet. Quellenbeispiel für die Überweisung der Gebühr in Ether wäre am hilfreichsten.
(Hinweis: Diese Frage bezieht sich nicht auf Gasgebühren. Dies bezieht sich auf eine zusätzliche Gebühr in Ether für die Übertragung eines ERC20-Tokens.)
Die Spezifikationen des ERC-20-Standards können Sie hier einsehen .
Für die relevanten Funktionen transfer
und transferFrom
gibt es keine Erwähnung von Veränderbarkeitsbeschränkungen (oder für irgendeine andere Funktion).
Wenn Sie diese Funktionen payable
erstellen und verlangen, dass der Wert 0,000001 ETH beträgt, würde dies wahrscheinlich nicht gegen den ERC-20-Standard verstoßen (wie in diesem Dokument dargelegt).
transfer
ist eine dieser Funktionen, daher muss der Durchführungsvertrag eine transfer
Funktion mit derselben Signatur haben. Wenn eine payable
Funktion die Funktion in der Schnittstelle implementieren kann, ist meine Antwort falsch. Aber ich konnte nicht viele Informationen darüber finden :(payable
ändert den Funktionshash nicht. Der Funktions-Hash ist einfach der Hash von transfer(address,uint256)
(oder bytes4(keccak256("transfer(address,uint256)"))
, was 0xa9059cbb
) ist, es werden keine Rückgabewerte, Modifikatoren oder Veränderlichkeit für den Funktions-Hash berücksichtigt.Gemäß dem ERC20-Standard ( https://theethereum.wiki/w/index.php/ERC20_Token_Standard ) lautet die Antwort nein.
Aber nichts hindert Sie daran, die Funktionalität zu erweitern. Das Erweitern bedeutet einfach, dass es zusätzlich zur regulären ERC20-Funktionalität über zusätzliche Funktionen verfügt - Benutzer müssen über die zusätzliche Funktionalität Bescheid wissen, um sie verwenden zu können.
Hier ist eine ziemlich standardmäßige Implementierung eines ERC20-Tokens: https://github.com/ConsenSys/Tokens/blob/master/contracts/eip20/EIP20.sol Wenn wir uns die transfer
Funktion ansehen, können wir zum Beispiel eine ähnliche Funktion wie diese hinzufügen :
function transferWithFee(address _to, uint256 _value) public payable returns (bool success) {
require(balances[msg.sender] >= _value);
// require some amount of ether to be included in the transaction.
require(msg.value >= 123);
balances[msg.sender] -= _value;
balances[_to] += _value;
Transfer(msg.sender, _to, _value);
return true;
}
Alle Ether, die an die Funktion gesendet werden, bleiben im Vertrag. Außerdem möchten Sie wahrscheinlich etwas Böses mit der ursprünglichen transfer
Funktion machen, damit die Leute nicht nur diese, sondern diese neue Funktion verwenden: Sie können sie zum Beispiel einfach wie folgt implementieren:
function transfer(address _to, uint256 _value) public returns (bool success) {
return false;
}
Ziege teleportieren