Solidity
存入 ERC721 時有沒有辦法得到通知?
我們正在編寫一個可以使用 ERC721 代幣的合約,基本上是一個 Plasma Root Chain 合約。每當它從
SafeTransferFrom
.就像
function() external payable
僅在將乙太幣轉移到合約時才呼叫該函式一樣,我們需要為 ERC721 提供相同的功能,但我們不確定它是否存在甚至是否可能實現。我們知道
function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data) internal returns (bytes4)
只要 SafeTransferFrom 正確完成就會被呼叫,但是,可以做些什麼來阻止任何人在沒有實際存入 ERC721 令牌的情況下呼叫該函式?
如果是真正的ERC-721轉賬交易,那麼
msg.sender
交易的地址就是ERC-721合約的地址。該交易還包含tokenId
剛剛傳輸給您的數據。所以你可以呼叫ownerOf(tokenId)
那個合約,如果返回的地址是你合約的地址,那麼你可以確信你剛剛收到了一個 ERC721 代幣。
通常,大多數人在實踐中實際上並沒有做的是將他們想要支持的代幣合約列入白名單。
例子:
- OpenSea 僅顯示預先註冊的令牌
- Compound 只允許交易經過審查的代幣
老實說,我期待它更加去中心化和預設允許處理任何遵循標準的合約並響應內省。