【问题标题】:How opensea auction smart contract work without storing the etheropensea 拍卖智能合约如何在不存储以太币的情况下工作
【发布时间】:2022-06-25 20:31:30
【问题描述】:

试图了解 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 中,他们提到“承诺是通过签署“消息”来创建的。这些是链下交易。但是,取消交易需要在链上发布。”但它实际上是如何工作的呢?

【问题讨论】:

    标签: ethereum solidity smartcontracts nft opensea


    【解决方案1】:

    我将解释最新版本的 Opensea 是如何工作的,称为 Seaport (docs)

    假设,假设我提出了 3 天的报价并且我中标或卖方接受了报价,而我当时不需要以太币(出价金额),那么会发生什么?

    您的报价将无法兑现。 Opensea 的 UI 应该过滤无法完成的报价,以免它们被接受。如果一个提议被错误地接受了,没有什么不好的事情发生,交易就会失败,也不会转移任何代币。

    智能合约的工作不是存储报价,而是验证报价是否有效并相应地转移代币。

    可能有点意外,但合约中存储的唯一数据是以下映射

    // 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 哈希识别)。

    第二个映射为每个提议者保存一个计数器。每个报价都有一个counter 参数,该参数应与_counters[offerer] 匹配,否则无效。这是取消所有现有优惠的明智方法,因为您有一个“全部取消”功能,只需增加您的_counters

    这应该已经回答了为什么取消订单需要进行链上交易。因为没有任何东西可以保证链下的每个人都会忘记报价。

    Opensea 不跟踪竞标金额的质押,从而使用户免于支付交易费用 + 质押以太币。但他们要求用户签署以确认投标。谁能解释一下技术上发生了什么?

    “出价确认”是一个钱包签名 (EIP-712),它是使流程无需信任所必需的。没有人能够通过伪造报价来窃取代币。唯一可信的假设是 Opensea 不会向买家/卖家隐瞒报价。

    【讨论】:

      猜你喜欢
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      相关资源
      最近更新 更多