标签: openzeppelin

不支持文件导入回调?

尝试运行:

\n

1.) Dappuniversity 项目 (dappuniversity/dbank)\n2.) pet-shop-tutorial

\n

Truffle v5.3.3(核心:5.3.3)\nNode v14.15.5

\n

当 Truffle 要求 it\xe2\x80\x99s 编译器/solc 匹配 5.3.3 时,ser 如何在 0.8.4 编译代码以导入 OpenZeppelin\xe2\x80\x99s ERC20.sol 模板?

\n
// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.4;\n\nimport "@openzeppelin/contracts/token/ERC20/ERC20.sol";\n\ncontract Token is ERC20 {\n\n  //add minter variable\n\n  //add minter changed event\n\n  constructor() public payable ERC20("Name", "Symbol") {\n\n    //assign initial minter\n\n  }\n\n  //Add pass minter role function\n\n  function mint(address account, uint256 amount) public {\n\n    //check if msg.sender has a minter role\n\n    _mint(account, amount);\n\n  }\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n

未找到源 \xe2\x80\x9c@openzeppelin/contracts/token/ERC20/ERC20.sol\xe2\x80\x9d:不支持文件导入回调

\n

solidity erc20 openzeppelin

33
推荐指数
6
解决办法
4万
查看次数

ethers.js 合约实例中没有 safeTransferFrom 函数?

我在安全帽控制台中创建了一个合约实例,如下所示:

\n
const contract_fac = await ethers.getContractFactory("ContractName");\nconst contract = await contract_fac.attach("CONTRACTADDR...");\n
Run Code Online (Sandbox Code Playgroud)\n

合约对象具有除 之外的所有公共/外部函数safeTransferFrom。为什么?

\n

当我用它调用它时,它contract.safeTransferFrom(\xe2\x80\xa6)会抛出 JavaScript 错误 \xe2\x80\x9csafeTransferFrom 不是函数\xe2\x80\x9d。这是一个错误还是我不明白什么?safeTransferFrom函数在 ABI 中列出。

\n

我使用未做任何更改的 OpenZeppelin (v. 4.2) 721 令牌模板、Ethers.js (v. 5.4.1) 和 Hardhat (v. 2.4.1)。

\n

更新: \n问题已解决。safeTransferFrom 是一个重载函数。在 ethers 中,调用重载合约函数的语法与非重载函数不同。\n Ethers.js doc

\n

错误的:

\n
contract.safeTransferFrom(addr1, addr2, 1);\n
Run Code Online (Sandbox Code Playgroud)\n

正确的:

\n
contract["safeTransferFrom(address,address,uint256)"](addr1, addr2, 1);\n
Run Code Online (Sandbox Code Playgroud)\n

ethereum solidity openzeppelin ethers.js hardhat

28
推荐指数
1
解决办法
5233
查看次数

插件@nomiclabs/hardhat-etherscan 中出现错误:合约验证失败。原因:失败 - 无法验证 - 带参数

我试图用参数验证我的合同,但收到此错误:

Error in plugin @nomiclabs/hardhat-etherscan: The contract verification failed.
Reason: Fail - Unable to verify

Run Code Online (Sandbox Code Playgroud)

我还导入Open Zeppelin合同ERC721EnumerableOwnable.

这是我的NFTCollectible.sol


pragma solidity 0.8.10;

import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "hardhat/console.sol";

contract NFTCollectible is ERC721Enumerable, Ownable {
    using Strings for uint256;

    string public baseURI;
    string public baseExtension = ".json";
    uint256 public cost = 0.08 ether;
    uint256 public maxSupply = 5000;
    uint256 public maxMintAmount = 25;
    mapping(address => uint256) public addressMintedBalance;

    constructor(
        string memory _name,
        string memory _symbol, …
Run Code Online (Sandbox Code Playgroud)

solidity openzeppelin etherscan ethers.js hardhat

11
推荐指数
2
解决办法
2万
查看次数

为什么以及何时调用 setApprovalForAll?

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

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

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

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

在此输入图像描述

ethereum solidity openzeppelin nft erc721

10
推荐指数
1
解决办法
1万
查看次数

以太币上的 _signTypedData 方法与 ERC712 Solidity 代码不匹配

我遇到了以太签名不匹配的问题。

一切正常。已经将js 代码中的domainData, types,变量与合约进行了比较。message

下面是生成签名和调用合约的JS代码。

      const contractAddress = await contract.address;

      domainData.chainId = 31337;
      domainData.verifyingContract = contractAddress;

      const signature = await signer._signTypedData(domainData, types, message);
      const { r, s, v } = ethers.utils.splitSignature(signature);

      const result = await contract.recoverAddressFromTypedData(
        message,
        v,
        r,
        s
      );
      expect(result).to.equal(signer.address);
Run Code Online (Sandbox Code Playgroud)

下面是使用“@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol”的 Solidity 代码

function recoverAddressFromTypedData(
    Bid memory bid,
    uint8 v,
    bytes32 r,
    bytes32 s
) public view returns (address) {
    bytes32 digest = _hashTypedDataV4(hashBid(bid));
    address signer = ecrecover(digest, v, r, s);
    return signer;
} …
Run Code Online (Sandbox Code Playgroud)

signature solidity openzeppelin

8
推荐指数
1
解决办法
2991
查看次数

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

我正在测试 ERC721 代币的智能合约,该代币继承自 OpenZeppelin,使用 waffle 和 chai 以及 NodeJS v14.18.0,但 chai 的恢复断言似乎没有按预期运行。

依赖项:

  "devDependencies": {
    "@nomiclabs/hardhat-ethers": "^2.0.1",
    "@nomiclabs/hardhat-etherscan": "^2.1.0",
    "@nomiclabs/hardhat-waffle": "^2.0.1",
    "@typechain/ethers-v5": "^5.0.0",
    "@types/chai": "^4.2.14",
    "@types/mocha": "^8.2.0",
    "@types/node": "^14.14.14",
    "chai": "^4.2.0",
    "dotenv": "^8.2.0",
    "ethereum-waffle": "^3.2.1",
    "ethers": "^5.0.24",
    "hardhat": "^2.0.5",
    "hardhat-typechain": "^0.3.4",
    "ts-generator": "^0.1.1",
    "ts-node": "^9.1.1",
    "typechain": "^4.0.1",
    "typescript": "^4.1.3"
  },
Run Code Online (Sandbox Code Playgroud)

示例代码:

  let genesisTokenHolders: Array<string>;

        beforeEach(async () => {
            genesisTokenHolders = new Array(230).fill('0x0000000000000000000000000000000000000000')
            genesisTokenHolders[1] = addr1.address;
            genesisTokenHolders[2] = addr2.address;
        })

        describe('airdrop genesis tokens', async () => {
            it('should fail when non-owner …
Run Code Online (Sandbox Code Playgroud)

waffle chai solidity openzeppelin ethers.js

8
推荐指数
1
解决办法
6471
查看次数

未找到源“@openzeppelin/contracts/token/ERC721/ERC721.sol”:不支持文件导入回调

我已使用 Solidity 扩展将 Open Zeppelin ERC721 令牌标准导入到我的 VS Code 中,但在我的所有 OZ 导入语句中看到以下警告:

错误截图

为什么会发生这种情况以及此警告的解决方法是什么?

我尝试过的:

  • 将默认工作区编译器更改为 localNodeModule (开始抛出其他警告,例如 pragma Solidity 行上的警告)

我尝试过的解决方案示例

visual-studio-code solidity openzeppelin

6
推荐指数
2
解决办法
1万
查看次数

Openzeppelin SDK 和 Truffle 的区别?

对于智能合约开发,Openzeppelin SDK 和 Truffle 有什么区别?我什么时候应该使用一种或另一种,或两者一起使用?

ethereum smartcontracts truffle openzeppelin

5
推荐指数
2
解决办法
1282
查看次数

未找到所请求的合同。确保源代码可用于编译

我正在使用“@openzeppelin/truffle-upgrades”插件来创建可升级的合同。第一次这样做,并以他们在网站上的文章为基础。https://docs.openzeppelin.com/learn/upgrading-smart-contracts

一切都编译正确,但每当我迁移“未找到所请求的合同。确保源代码可用于编译”时,3_deploy_upgradeable_box.js 就会吐出​​此错误,或者查看此屏幕截图https://gyazo.com/f4b8d8afea69b67965670b520e48db13

这是我的代码

// contracts/Box.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/access/Ownable.sol";

contract Box is Ownable {

    uint256 private value;

    // Emitted when the stored value changes
    event ValueChanged(uint256 _value);

    // Store a new value in the contract, only the owner can call this
    function store(uint256 _value) public onlyOwner {
        value = _value;
        emit ValueChanged(_value);
    }

    // Retrieve the last stored value
    function retrieve() public view returns(uint256) {
        return value;
    }

}
Run Code Online (Sandbox Code Playgroud)
// migrations/2_deploy.js
const Box …
Run Code Online (Sandbox Code Playgroud)

javascript ethereum solidity openzeppelin

5
推荐指数
1
解决办法
2148
查看次数

当我使用 ETH 部署 NFT 时出现错误

我是 NFT 新手,我正在尝试创建测试 NFT,当我尝试部署该 NFT 时,我收到此错误,insufficient funds for intrinsic transaction cost即使我的帐户中有 1 ETH 余额,但我已附加了它的完整代码,可以有人请帮助我,如何解决这个问题?MyNFT.sol

//Contract based on [https://docs.openzeppelin.com/contracts/3.x/erc721](https://docs.openzeppelin.com/contracts/3.x/erc721)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";

contract MyNFT is ERC721URIStorage, Ownable {   
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    constructor() ERC721("MyNFT", "NFT") {}

    function mintNFT(address recipient, string memory tokenURI)
        public onlyOwner
        returns (uint256)
    {
        _tokenIds.increment();

        uint256 newItemId = _tokenIds.current();
        _mint(recipient, newItemId);
        _setTokenURI(newItemId, tokenURI);

        return newItemId;
    }
}
Run Code Online (Sandbox Code Playgroud)

安全帽.config.js

/**

* @type import('hardhat/config').HardhatUserConfig …
Run Code Online (Sandbox Code Playgroud)

ethereum solidity openzeppelin nft hardhat

5
推荐指数
1
解决办法
410
查看次数