试图了解opensea"出价;工作每当任何感兴趣的买家想要购买NFT时,他们都必须创建一个报价,在报价中,他们基本上签署了一条信息(承诺((这不需要汽油费(。我不明白这东西在幕后是怎么运作的。比方说,如果我出价3天,我中标了,或者卖家接受了投标,而我当时不需要以太币(投标金额(,那么会发生什么?
拍卖智能合约基本上是以竞买人的金额为赌注,当拍卖结束时,如果用户没有赢得拍卖,就把赌注以太币转回,但在上述两个过程中,赌注以太币+支付交易费用,这些额外的开销都存在。
Opensea不遵循竞价金额的押记,因此用户无需支付交易费+押记以太币。但他们要求用户签字确认出价。有人能解释一下技术上发生了什么吗?
我也浏览了以下链接,但这并不能回答opensea是如何工作的。
链接1:https://ethereum.stackexchange.com/questions/102660/creating-an-auction-smart-contract-without-storing-the-ether
链接2:https://ethereum.stackexchange.com/questions/110749/auction-data-on-chain-or-off-chain
在链接2中,他们提到";承诺是通过签署";消息";。这些都是链外交易。但是,取消交易需要在链上过帐"但它实际上是如何工作的?
我将解释Opensea的最新版本Seaport(docs(是如何工作的。
如果,比方说,我提出了3天的报价,我赢得了投标,或者卖家接受了投标,而我当时不需要以太币(投标金额(,那么会发生什么?
简单地说,你的报价是无法实现的。Opensea的用户界面应该过滤无法满足的报价,这样它们就不会被接受。如果一个报价被错误地接受,没有什么不好的事情发生,交易只是失败,没有代币被转移。
智能合约的工作不是存储报价,而是验证报价是否有效,并相应地转移代币。
这可能令人惊讶,但合同中存储的唯一数据是以下映射
// Track status of each order (validated, cancelled, and fraction filled).
mapping(bytes32 => OrderStatus) private _orderStatus;
// Only orders signed using an offerer's current counter are fulfillable.
mapping(address => uint256) private _counters;
第一个映射可确保订单不能多次履行或被取消。(该顺序由其bytes32
散列识别(。
第二个映射为每个报价人保存一个计数器。每个offer都有一个counter
参数,该参数应与_counters[offerer]
匹配,否则无效。这是取消所有现有优惠的明智方法,因为你有一个";全部取消";函数只需增加您的_counters
。
这应该回答了为什么要取消订单,你需要进行链上交易。因为没有什么能保证报价会被链外的每个人遗忘。
Opensea不遵循竞价金额的押记,因此节省了用户支付交易费+押记以太币的费用。但他们要求用户签字确认出价。有人能解释一下技术上发生了什么吗?
;投标确认书";是使该过程不可信所必需的钱包签名(EIP-712(。没有人能够通过伪造报价来窃取代币。唯一值得信赖的假设是,Opensea不会向买家/卖家隐瞒报价。