Welche Risiken bestehen bei der Verwendung von Token, die den ERC20-Standard zu haben scheinen?

Angenommen, jemand sendet einige ERC20 (angeblich) Tokens an meine ETH-Adresse. Ich verwende dann die transfer()Funktion, um diese Token an eine andere Adresse zu senden. Die Frage ist - riskiere ich durch die Verwendung einer "Transfer"-Funktion, meine Ether oder andere Token an dieselbe Adresse zu verlieren, von der ich Token sende? Oder riskiere ich sogar, meine Ether oder Token auf demselben Keystore zu verlieren? Der Grund, warum ich frage, ist folgender:

  • Muss ich ein Experte für Solidität sein und jedes Mal, wenn ich es mit einem neuen angeblich ERC20-Token zu tun habe, eine SmartContract-Code-Überprüfung durchführen?
  • Welche Risiken bestehen, wenn ich kein Solidity-Experte bin und den Solidity-Code eines ERC20-Vertrags, den ich verwenden möchte, nicht überprüfen möchte?

Antworten (2)

Die Risiken sind ziemlich gering.

Die EIP-20-Style- transfer()Funktion kann dies nicht

  • Bewegen Sie Ihren Ether herum, da Sie manuell Guthaben zu Ihren Ethereum-Transaktionen in Ihrer Brieftasche hinzufügen müssen (das Betragsfeld beim Senden der Transaktion).

  • Bewegen Sie andere Token herum, als ob Sie einen Token-Vertrag eines Drittanbieters transfer()aufrufen würden . transfer()Der böswillige Vertragsaufruf würde von der böswilligen Smart-Contract-Adresse stammen, nicht von Ihrer Brieftaschenadresse, und hat daher keinen Zugriff auf Ihre Brieftaschen-Token. Sie müssten zuerst einen expliziten EIP-20- approve()Anruf durchführen.

  • Das größte Risiko in der Praxis besteht darin, approve(amount)einen Smart Contract abzugeben, dem nicht vertraut wird oder der später von einem Angreifer übernommen wird. Sie können Token für jeden von Ihnen genehmigten Betrag (normalerweise unendlich) aus Ihrer Brieftasche ziehen.

Ich verstehe. Soweit ich weiß, ist der maximale Schaden, den eine bösartige transfer()Funktion anrichten kann, der folgende: Anstatt eine bestimmte Menge an Token an eine bestimmte Adresse zu übertragen, könnte sie alle Token von meinem Guthaben an eine andere Adresse übertragen. Ist das korrekt?
Ja. Außerdem gibt es Token, bei denen der Token einen Besitzer hat, der frei Token von anderen Konten entnehmen kann, wie Everex etherscan.io/address/… (siehe moderatorTransferFrom)

Wenn Sie den Token-Vertrag von Ihrem eigenen Vertrag aus aufrufen, besteht die Möglichkeit einer Schwachstelle. Sie unterliegen mindestens den folgenden Problemen:

  • Wiedereintrittsangriff
  • Die Transaktion wird aufgrund von „Kein Gas“-Problemen zurückgesetzt

Werfen Sie einen Blick auf https://github.com/ethereum/wiki/wiki/Safety für einen guten Überblick über die möglichen Angriffsvektoren.

Kurz gesagt, ja, Sie müssen wissen, was Sie tun, wenn Sie einen unbekannten Vertrag von Ihrem eigenen Vertrag aus aufrufen.

Wenn Sie jedoch den unbekannten Vertrag von einem web3j oder von einer Brieftasche oder von einem anderen Ort aufrufen, der kein intelligenter Vertrag ist, können Sie nur Folgendes verlieren:

  • Der Ether, den Sie senden
  • Das Gas, das Sie verwenden