ERC-721 safeTransferFrom ist überlastet?

Laut ERC-721-Schnittstelle scheint die Funktion safeTransferFrom überlastet zu sein:

function safeTransferFrom(address _from, address _to, uint256 _tokenId) public;
function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) public;

Warum so? Irgendwelche Ideen? Vielen Dank!

Antworten (2)

Der eine ohne _datasendet keine Daten, wenn er den anderen Vertrag aufruft. (Es sendet eine Bytefolge der Länge Null.)

Der mit _datatut.

Das ist falsch, der andere Vertrag muss die Wallet-Schnittstelle implementieren, die die 3-Parameter-Funktion hat onERC721Received(address _from, uint256 _tokenId, bytes data). Wenn Sie nur zwei bestehen, schlägt die Transaktion fehl.
Ich bin mir nicht sicher, welchen Teil meiner Antwort Sie für "falsch" halten. Können Sie das näher erläutern? Vielleicht gibt es etwas zu klären. (Um es klar zu sagen, ich stimme dem Rest Ihres Kommentars zu.)
"Der eine ohne _data sendet keine Daten, wenn er den anderen Vertrag aufruft." - Technisch gesehen sollte es immer noch Daten übergeben, wenn es die andere Funktion aufruft, die Daten sind nur eine leere Zeichenfolge (siehe meine Antwort unten).
Ah, ich werde klarstellen.

Beachten Sie aus dem ERC-721-Standardentwurf die Codekommentare in der bereitgestellten Schnittstelle.

Speziell für die safeTransferFromFunktion ohne den 4. Parameter:

/// @dev This works identically to the other function with an extra data parameter,
///  except this function just sets data to ""

Ihre Drei-Parameter-Funktion sollte also genau dasselbe tun wie die Vier-Parameter-Funktion, aber ""als Daten übergeben.