问题标签 [openzeppelin]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
54 浏览

solidity - 无法转移代币 [Solidity][OpenZepplin]

使用 OpenZepplin 时我无法转移令牌。我尝试自己运行令牌智能合约,但它完全没问题,没有启动它的实例。下面是我的代码:

我不确定我哪里出错了:(因为当我启动“主”智能合约时,一切似乎都很好。我能够毫无问题地创建一个令牌实例。但是,当我想将令牌转移到一个地址时,我提示此错误:

向 main.employeeReceiveToken 交易错误:VM 错误:还原。

revert 事务已恢复到初始状态。合约提供的原因:“ERC20:转账金额超过余额”。调试事务以获取更多信息。

更新:通过使用 OpenZepplin 向导创建合约来解决

0 投票
1 回答
1372 浏览

solidity - Solidity:使用 waffle + chai 测试恢复的断言不起作用

我正在测试一个 ERC721 令牌的智能合约,它继承自 OpenZeppelin,使用 waffle 和 chai 和 NodeJS v14.18.0,但 chai 的还原断言似乎没有按预期运行。

依赖项:

示例代码:

尽管使用.to.be.revertedWith()and .to.be.reverted,测试套件仍然抛出错误:

预期结果:测试应该通过。

0 投票
0 回答
128 浏览

solidity - 无法从水龙头合约中提取 ERC-20 代币

我最近在主网上发布了一个 ERC-20 代币,一切运行良好。现在我正在尝试编写一个水龙头智能合约,以便将硬币分发给任何需要它们的人。请注意,这不是直接从 Token 合约铸造新代币的水龙头,而是我可以预加载代币的水龙头(通过从我的钱包发送到水龙头)。

我已经为各种来源的水龙头整理了一份智能合约,除了“取款”功能外,一切正常。我收到以下错误:

这是我的水龙头智能合约代码:

我正在通过“truffle migrate”将它以及 ERC20 令牌部署到本地 ganache 区块链。然后我在 truffle 控制台中使用以下命令对其进行测试:

设置:

使用令牌加载水龙头:

检查水龙头平衡:

尝试退出水龙头:

这导致了这篇文章顶部的错误。我尝试删除所有要求语句,但结果相同。我确定我忽略了一些非常愚蠢的东西。谁能发现我做错了什么?我很感激任何建议-谢谢!

  • 乔纳森
0 投票
1 回答
1539 浏览

ethereum - 为什么以及何时调用 setApprovalForAll?

我很难理解为什么以及何时在 NFT 生成合同上调用 SetApprovalForAll。

酷猫为例。为方便起见,下面是相关交易的屏幕截图。

我注意到对于这个合同和其他合同,Set Approval For All 被反复调用。在我自己对允许铸币的合同的有限经验中_safeMint,我在日志中也看到了 SetApprovalForAll 交易。我的代码中没有直接调用它。

为什么叫它?钱包是否将其作为铸造过程的一部分?

在此处输入图像描述

0 投票
0 回答
141 浏览

ethereum - 尝试使用 brownie 框架将标准 OpenZeppelin ERC777 合约部署到 ganache-cli 时出错

我正在熟悉使用 brownie 框架和solidity 的智能合约开发。一开始,我使用brownie console部署一些标准的 OpenZeppelin 代币合约。

我通过直接从他们的文档中复制代码并调整导入以使用布朗尼来做到这一点,就像在这个页面中一样:https ://docs.openzeppelin.com/contracts/3.x/erc777

它适用于 ERC20 和 ERC721 合约。然而,ERC777 总是被还原并给我一个没有错误消息的事务,其中没有一个跟踪方法起作用,因为它们不是为部署事务实现的。

ERC777 令牌的代码(不工作)

ERC20 代币代码(工作中)

布朗尼控制台中的输出

我还尝试在默认令牌运营商的列表中输入一个有效地址(部署的运营商合同),该地址作为第二个参数传递给 GLDToken 的部署函数。不幸的是,它没有任何区别。

我已经用尽了部署功能的所有可能性,并且没有得到进一步的调试信息。有没有人遇到过类似的问题,或者知道如何进一步调试?任何帮助将非常感激!

0 投票
1 回答
388 浏览

ethereum - 如果使用特定的代币,是否有 ERC20 功能来确保付款?

是否有 ERC/IERC20 功能或实用程序可确保收到的付款以特定令牌计价?

0 投票
0 回答
369 浏览

javascript - MerkleProof 智能合约和 Javascript 中的不同哈希值

我在智能合约和 Javascript(测试)中为 MerkleProof 获得了不同的哈希值

智能合约

令牌测试

它仅在散列 msg.sender 时有效,但不适用于连接数据和单个 uint256。我尝试使用带有以太坊地址和数量的 merkletree.js 创建一个 MerkleTree。MerkelTree 在链下创建(例如 node.js)并在链上验证。

有任何想法吗?

0 投票
1 回答
100 浏览

blockchain - 如何使用 ERC777 作为支付方式

当发生市场交易时,在 ERC20 代币接口上,approve 和 transferFrom 返回 true,因此,在这两个返回之后,我知道我可以做一些事情,比如执行 NFT 转账。但是在 ERC777 发送方法上不返回任何内容。我怎么知道是否有人为转发我的操作而付费?

前任。:

0 投票
0 回答
77 浏览

ethereum - 如何从另一个合约转移代币

我有两个单独部署的合同。

第一合约.sol

第二合约.sol

createToken使用in铸造令牌后SecondContract,当我调用 时transferToken,出现以下错误:

ERC721:转接呼叫者既不是所有者也不是批准的

这很可能是因为SecondContract调用msg.sendertransferFromtx.origin令牌的实际所有者。我尝试批准SecondContract作为一次性操作员通过 传输令牌approve(address(this), tokenId),但仍然遇到相同的错误。我也尝试过approve(address(firstContract), tokenId)or setApproveForAll(address(firstContract), true),但结果相同。

完成这项工作的唯一方法是如果我使用_transferin FirstContract

并从以下位置调用该方法SecondContract

这不太理想,因为无论您是否是代币的所有者,任何人都可以调用 transfer 方法。

0 投票
0 回答
30 浏览

ethereum - Solidity 中定点数学的最佳实践是什么?

我正在审查一些已部署的具有定点数学运算的智能合约,并且我正在寻求通过导入执行定点数学函数的库或已部署的合约标准来改进代码。

类似于 Openzeppelin,但用于定点数学函数。

使用导入库进行定点数学的最佳实践是什么?哪个是最好的图书馆?