我正在熟悉使用 brownie 框架和solidity 的智能合约开发。一开始,我使用brownie console
部署一些标准的 OpenZeppelin 代币合约。
我通过直接从他们的文档中复制代码并调整导入以使用布朗尼来做到这一点,就像在这个页面中一样:https ://docs.openzeppelin.com/contracts/3.x/erc777
它适用于 ERC20 和 ERC721 合约。然而,ERC777 总是被还原并给我一个没有错误消息的事务,其中没有一个跟踪方法起作用,因为它们不是为部署事务实现的。
ERC777 令牌的代码(不工作)
// contracts/GLDToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
import "OpenZeppelin/openzeppelin-contracts@3.0.0/contracts/token/ERC777/ERC777.sol";
contract GLDToken is ERC777 {
constructor(uint256 initialSupply, address[] memory defaultOperators)
public
ERC777("Gold", "GLD", defaultOperators)
{
_mint(msg.sender, initialSupply, "", "");
}
}
ERC20 代币代码(工作中)
// contracts/TestToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
import "OpenZeppelin/openzeppelin-contracts@3.0.0/contracts/token/ERC20/ERC20.sol";
contract TestToken is ERC20 {
constructor(uint256 initialSupply) public ERC20("Gold", "GLD") {
_mint(msg.sender, initialSupply);
}
}
布朗尼控制台中的输出
>>> t1 = TestToken.deploy(1e21, {'from': accounts[0]})
Transaction sent: 0x33de3fadb7ccf2dd8b3841365ad88190c3486a803f6ea30c04ef8c0111ec9cbd
Gas price: 0.0 gwei Gas limit: 6721975 Nonce: 2
TestToken.constructor confirmed Block: 4 Gas used: 721166 (10.73%)
TestToken deployed at: 0x8c81630387e9507739fCeB6cbB14Ea1Da11D2339
>>> t2 = GLDToken.deploy(1e21, [], {'from': accounts[1]})
Transaction sent: 0xca91d510e7a54099182fe218ff0ec55c62ccb06227afbe9d9497790e35776651
Gas price: 0.0 gwei Gas limit: 6721975 Nonce: 0
GLDToken.constructor confirmed (reverted) Block: 5 Gas used: 260948 (3.88%)
我还尝试在默认令牌运营商的列表中输入一个有效地址(部署的运营商合同),该地址作为第二个参数传递给 GLDToken 的部署函数。不幸的是,它没有任何区别。
我已经用尽了部署功能的所有可能性,并且没有得到进一步的调试信息。有没有人遇到过类似的问题,或者知道如何进一步调试?任何帮助将非常感激!