首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solityv0.8.15: ETH上的需求和映射问题

Solityv0.8.15: ETH上的需求和映射问题
EN

Stack Overflow用户
提问于 2022-07-19 21:46:11
回答 1查看 57关注 0票数 0

我正在进行NFT管理控制;我可以看到,在rinkeby上一切都很好,但是当我在mainnet上调用相同的函数时,我在require上会出现许多错误。代码是在混合Ide上编译的;

下面是一个示例:

代码语言:javascript
复制
mapping(address => mapping(uint => uint8) public handledNfts;

mapping(bytes32 => uint8) public usedHashes;

function create(address contractAddress, uint tokenId, bytes32 hash) external
{
    uint8 vCheck = usedHashes[hash];

    require(vCheck!=1, "Bad hash");    // sometimes it has false-positive

    usedHashes[ hash ] = 1;

    uint8 vCheck = handledNfts[contractAddress][tokenId];
    
    require(vCheck!=1, "Already created");    // False-positive sometimes also

    handledNfts[contractAddress][tokenId] = 1;



    //--- DO SOMETHING ....
}

所以,当我使用rinkeby时,任何创建电话都会有效。然而,在mainnet上,create函数返回一个“坏哈希”或“已经关闭”,没有真正的原因,但有时在工作中像一种魅力。

所以,我不知道在mainnet上有什么问题,因为一个代码在testnet上运行得很好?

这很奇怪,因为当开始使用handledNftscontractAddress时,==1不应该在这个位置。不管是否可靠,如果哈希已经被使用,或者nft说已经被管理了,当它不是真的时候。有时起作用,有时不起作用。大多数情况下是行不通的。

create函数中使用的散列对于每个调用总是唯一的。

有人能帮我找到解决这种不稳定的办法吗?它似乎映射对象与一个要求,不正常的工作与我。

我直接通过remix编译代码,使用的是https://remix.ethereum.org/#optimize=true&runs=200&evmVersion=null&version=soljson-v0.8.15+commit.e14f2714.js v0.8.15

同样令人吃惊的是,我被迫使用变量来访问映射对象,然后使用该变量;因此,这样的代码在很多时候对我来说都是错误的:

代码语言:javascript
复制
require(usedHashes[hash]!=1, "Hash already used"); <-- buggy on mainnet

有什么帮助吗?

EN

回答 1

Stack Overflow用户

发布于 2022-08-10 18:25:30

我知道发生了什么。我被一辆MEV机器人抢在前面。它检测到一个ETH事务是从我的智能合同中发送的,并且比我的要早发送了事务的副本猫。

我已经采取了反击措施来避免它。现在没事了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73043803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档