我已经阅读了EIP-2891,但我不知道什么是正确的方式来接近付款时,交易发生。
一开始我想做这样的事情:
(...)
// Transfer royalties fee
(bool success1, ) = royaltiesRecipient.call{value: royaltiesAmount}("");
require(success1, "Royalties fee transfer failure."); // <=== this can be a problem
// Transfer sale value to seller
(bool success2, ) = seller.call{value: saleValue}("");
require(success2, "Seller transfer failure.");
// Transfer NFT buyer
IERC721(nftContractAddress).transferFrom(address(this), buyer, tokenId);然而,在阅读了关于退出模式的文章后,存在这样一个风险,即版税的接收方是一份使交易失败的合同,因此该项目将无法在市场上销售。
我不认为退出模式是一个很好的选择在这里,因为特许权使用费接受者将需要不断跟踪什么时候和地点的NFT已经出售。一个更好的方法可以是尝试做交易,只有当它失败时,应用提取模式,但仍然不理想。
另一种方法可能只是删除require语句,但如果交易因任何其他原因而失败,则对版税接收方来说是不公平的。
你会怎么接近它?
发布于 2022-01-15 21:05:39
查看ReentrancyGuard在OpenZeppelin上的合同。使用修饰符nonReentrant()将确保如果接收方是一个契约,它将无法再次调用相同的函数,直到它完成。您不需要在这里应用退出模式(尽管过于谨慎并不是坏事)。
发布于 2022-01-19 21:03:26
好的,所以我计划做的是使用开放齐柏林飞艇支付分离器作为使用费的接受者时,通过一个市场的地方出售。
你是说这不会奏效,因为接收者是一份合同?
https://ethereum.stackexchange.com/questions/119024
复制相似问题