solidity-gradle-plugin icon indicating copy to clipboard operation
solidity-gradle-plugin copied to clipboard

No way to specify additional PROVIDERS in ImportsResolver.groovy

Open antonydenyer opened this issue 4 years ago • 7 comments

I want to be able to specify different providers so I don't have to provide pathRemappings.

antonydenyer avatar Aug 10 '21 11:08 antonydenyer

Hi @antonydenyer ! Ok which provider would you want? We can add it for the next release.

For now the only extension mechanism is specifying your own package.json file and add path remappings.

Or, would you have another suggestion on how to add providers dynamically?

Thanks

xaviarias avatar Sep 06 '21 11:09 xaviarias

:wave:

It's basically to get around having to do the following in my build gradle

solidity {
  resolvePackages = false
  pathRemappings = ['@consensys-software' : "$rootDir/permissioning-smartcontracts/node_modules/@consensys-software"]
}

Ideally, I'd like to be able to just add @consensys-software to the list of providers something like:

solidity {
  providers = ['@consensys-software']
}

perhaps?

antonydenyer avatar Sep 06 '21 15:09 antonydenyer

The issue with that is @consensys-software is not the NPM package, but @consensys-software/permissioning-smart-contracts.

Maybe if we add a property named packages or npmPackages instead of providers, then that would be clear that the package name is required in order for this to work.

What do you think @antonydenyer ?

xaviarias avatar Sep 06 '21 17:09 xaviarias

In any case, we can already add this package to the defaults.

xaviarias avatar Sep 06 '21 17:09 xaviarias

Ahh yes:

solidity {
  providers += '@consensys-software/permissioning-smart-contracts'
}

is what we want.

I think it's probably worth explaining what we are trying to achieve.

We want the following import to work as it does with truffle.

import "@consensys-software/permissioning-smart-contracts/contracts/NodeRules.sol";

In an ideal world having the defaults would be enough. So maybe doing something to match the import with package.json and resolve it to node_modules?

antonydenyer avatar Sep 06 '21 18:09 antonydenyer

We could just add it to the ImportsResolver and release a new plugin version. This would add it to the path remappings as well as the allowed paths.

The only objection I have is that the Consensys permissioning contracts do not implement any standard, so that would mean adding to the default packages a non-EIP library, opening the door to many other user packages.

I think we should stick to a clear demarcation criteria on what should be added as a plugin default provider, and for now EIP implementations are the only reason I think a package should be added.

xaviarias avatar Sep 07 '21 16:09 xaviarias

Workaround to use the @uniswap/v3-core package instead of the out of date @uniswap/lib : package.json :

{
    ...
    "dependencies": {
        "@uniswap/v3-core": "1.0.1"
    }
}

build.gradle :

solidity {
    evmVersion = "constantinople"
    resolvePackages = false
    pathRemappings = ['@uniswap' : "$projectDir/node_modules/@uniswap"]
}

You can then import Uniswap contracts, libraries and interfaces :

import '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol';

jclagache avatar Feb 25 '23 10:02 jclagache