这个智能合约函数是否应该标记为不可重入?
Should this smart contract function be marked nonReentrant?
这个函数应该被标记为不可重入还是太过分了?
function sendEthToTokenOwner(uint256 _tokenId) external payable nonReentrant {
address _tokenOwner = ownerOf(_tokenId);
require(msg.sender != _tokenOwner, "Sender can't be owner");
uint256 _price = tokenIdToPrice[_tokenId];
require(msg.value == _price, "Please submit the correct amount of ether");
(bool success, ) = payable(_tokenOwner).call{value: _price}("");
require(success, "Eth cannot be transferred");
}
这个特定的片段不需要重入保护,因为 sendEthToTokenOwner()
函数只是充当“传输代理”。执行验证,然后将 msg.value
重定向到令牌所有者。
如果您转出的金额大于 msg.value
或独立于 msg.value
的金额,那么您可能需要重入保护(取决于其他情况)。
这个函数应该被标记为不可重入还是太过分了?
function sendEthToTokenOwner(uint256 _tokenId) external payable nonReentrant {
address _tokenOwner = ownerOf(_tokenId);
require(msg.sender != _tokenOwner, "Sender can't be owner");
uint256 _price = tokenIdToPrice[_tokenId];
require(msg.value == _price, "Please submit the correct amount of ether");
(bool success, ) = payable(_tokenOwner).call{value: _price}("");
require(success, "Eth cannot be transferred");
}
这个特定的片段不需要重入保护,因为 sendEthToTokenOwner()
函数只是充当“传输代理”。执行验证,然后将 msg.value
重定向到令牌所有者。
如果您转出的金额大于 msg.value
或独立于 msg.value
的金额,那么您可能需要重入保护(取决于其他情况)。