Code Monkey home page Code Monkey logo

Comments (9)

tonypig avatar tonypig commented on July 29, 2024 1

Hi @ZeroEkkusu

Sorry, I just found the real problem.

that because forge is not case sensitive, and I import the console file withs "Console.sol" in ContactA.sol, then the error reproduce.

Maybe it’s not a big problem, thanks for your time

from forge-std.

ZeroEkkusu avatar ZeroEkkusu commented on July 29, 2024

Gm, @tonypig.

There should be no issues with importing/using console and console2. Can you show me an example setup?

The only case I can think of when you would get a DeclarationError is when you try to import console from console2.sol and vice-versa.

from forge-std.

tonypig avatar tonypig commented on July 29, 2024

Hi @ZeroEkkusu

My scenario is simple:

two contract:
ContractA.sol and ContractA.t.sol (test)

While import console in ContractA.sol, then forge build/test will throw an DeclarationError

that because forge-std/Test.sol also import the console (through Script.sol)

from forge-std.

ZeroEkkusu avatar ZeroEkkusu commented on July 29, 2024

@tonypig, like so? I can't reproduce the error.

ContractA.sol

import "forge-std/console.sol";
import "forge-std/console2.sol";

contract ContractA {
    function f() external {
        console.log("gm with console");
        console2.log("gm with console2");
    }
}

ContractA.t.sol

import "forge-std/Test.sol";

import "src/ContractA.sol";

contract ContractATest is Test {

    ContractA cA;

    function setUp() public {
        cA = new ContractA();
    }

    function testExample() public {
        cA.f();
        console.log("test");
        console2.log("test 2");
    }
}

from forge-std.

ranmocy avatar ranmocy commented on July 29, 2024

I think this still could be an issue for users who use Hardhat console in their production contracts, and use Forge Test in their test contracts.

import "hardhat/console.sol";

contract MyContract {}
import "forge-std/Test.sol";
import "contracts/MyContract.sol";

contract MyContractTest is Test {}

Compile it will throw error[2333]: DeclarationError: Identifier already declared.

Is there a way to import the library so that it only affects current file and it's child-contracts, but not sibling contracts in the inheritance chain?

from forge-std.

ZeroEkkusu avatar ZeroEkkusu commented on July 29, 2024

@ranmocy, import console from forge-std instead of hardhat in your production contracts:

import "forge-std/console.sol";

Another option is to use selective imports to import only MyContract in your test contracts:

import {MyContract} from "contracts/MyContract.sol";

from forge-std.

heyJonBray avatar heyJonBray commented on July 29, 2024

I also cannot get console2 to work on a particular project that I built from scratch. I've ran multiple repos locally that have had it implemented already, and have configured my repo in the same way as the ones that work.

foundry.toml remappings

remappings = [
    "forge-std/=lib/forge-std/src/",
    "@openzeppelin/=lib/openzeppelin-contracts/",
    "@uniswap/v2-core/=lib/v2-core/",
    "@uniswap/v3-core/=lib/v3-core/",
    "@uniswap/v3-periphery/=lib/v3-periphery/"
]

having trouble importing in both ContractTest.t.sol and ContractScript.s.sol files:

// have tried
import "forge-std/console2.sol";

// as well as
import {console2} from "forge-std/console2.sol";

// as well as
import {Script} from "forge-std/Script.sol";
import {console2} from "forge-std/console2.sol";
import {MyContract} from "../src/MyContract.sol";

getting this error on forge build:

Error (7576): Undeclared identifier. Did you mean "console"?
script/PriceOracle.s.sol:19:9: DeclarationError: Undeclared identifier. Did you mean "console"?
        console2.log("initializing price oracle...");
        ^------^

from forge-std.

heyJonBray avatar heyJonBray commented on July 29, 2024

I think the issue I was running into had to do with Solidity and my PriceOracle.sol contract being version ^0.7.6

was able to resolve the error using pragma abicoder v2 on the script/test contracts for PriceOracle

from forge-std.

ZeroEkkusu avatar ZeroEkkusu commented on July 29, 2024

Btw, no need to use console2; it's only there for legacy support. You can just use console.

from forge-std.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.