0

我正在学习创建 NFT markertplace (openZeppelin-ERC721) 并被困在柜台上。我徘徊在执行下面的代码时会发生什么。

pragma solidity ^0.8.0;

library Counters {
    struct Counter { uint256 _value; }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked { counter._value += 1; }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked { counter._value = value - 1; }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

假设 A 和 B 都试图创建 NFT,并且计数器应该增加并为他们的 NFT 提供 ID。但是,如果他们都尝试同时创建 NFT 怎么办,我的意思是当然有很多机会发生这种情况。是否会丢弃其他 NFT,获得一个新 ID,如果是,会不会比预期花费更长的时间?那么GAS费用呢???

很多问题我希望你明白我想说什么!

4

3 回答 3

1

但是,如果他们都尝试同时创建 NFT 怎么办,我的意思是当然有很多机会发生这种情况。

你的假设是不正确的。不要做假设,总是批判性地思考。

所有以太坊交易都是按顺序执行的,理论上没有两个交易同时发生的方法。请参阅基于 EVM 的链中的交易生命周期

于 2021-08-10T07:38:06.407 回答
0

我在此代码中找不到更改 NFT id 的位置。它是一个可以增加或减少值的计数器。如果两个人同时创建一个 nft,处理 nft id 的函数将根据以太坊区块中的哪个交易首先确定谁获得什么 id。除非智能合约设置为这样做,否则不会丢弃任何 nft。如果你能解释你所说的汽油费是什么意思,你可能会找到答案。

于 2021-08-10T01:59:56.650 回答
0

首先选择的交易将获得第一个令牌(计数器),另一个在它之后。

于 2022-01-08T02:56:05.650 回答