aragon / aragonOS

(Aragon 1) Reference implementation for aragonOS: a Solidity framework for building complex dApps and protocols
https://hack.aragon.org/docs/aragonos-intro.html
GNU General Public License v3.0
686 stars 245 forks source link

DeclarationError: Identifier already declared. #411

Closed arquimed closed 5 years ago

arquimed commented 6 years ago

Hi there!

Probably a super newbie error, but here it goes. When I try to start migrating the different smart contracts of my project to AragonOS I get several DeclarationErrors. I think the problem seems to be that I should be importing the compiled smart contracts differently if I develop within AragonOS framework, rather than the way it is done in a simple truffle project?

aragon run ✔ Start a local Ethereum network ✔ Check IPFS ❯ Publish app to APM ❯ Deploy contract ⠹ Compile contracts Deploy 'ParticipantFactory' to network Automatically bump version Determine contract address for version Building frontend Prepare files for publishing Generate application artifact Publish test12.aragonpm.eth Fetch published repo Create DAO Open DAO Compiling ./contracts/CrowdsaleIBT.sol... Compiling ./contracts/IBT.sol... Compiling ./contracts/Migrations.sol... Compiling ./contracts/ParticipantFactory.sol... Compiling ./contracts/ParticipantManager.sol... Compiling ./contracts/SafeMath.sol... Compiling ./node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol... Compiling ./node_modules/openzeppelin-solidity/contracts/ownership/Ownable.sol... Compiling ./node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol... Compiling ./node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol... Compiling ./node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol... Compiling @aragon/os/contracts/acl/ACLSyntaxSugar.sol... Compiling @aragon/os/contracts/acl/IACL.sol... Compiling @aragon/os/contracts/apps/AppStorage.sol... Compiling @aragon/os/contracts/apps/AragonApp.sol... Compiling @aragon/os/contracts/common/EtherTokenConstant.sol... Compiling @aragon/os/contracts/common/IVaultRecoverable.sol... Compiling @aragon/os/contracts/common/Initializable.sol... Compiling @aragon/os/contracts/common/IsContract.sol... Compiling @aragon/os/contracts/common/VaultRecoverable.sol... Compiling @aragon/os/contracts/evmscript/EVMScriptRunner.sol... Compiling @aragon/os/contracts/evmscript/IEVMScriptExecutor.sol... Compiling @aragon/os/contracts/evmscript/IEVMScriptRegistry.sol... Compiling @aragon/os/contracts/evmscript/ScriptHelpers.sol... Compiling @aragon/os/contracts/kernel/IKernel.sol... Compiling @aragon/os/contracts/lib/zeppelin/math/SafeMath.sol... Compiling @aragon/os/contracts/lib/zeppelin/token/ERC20.sol... Compiling @aragon/os/contracts/lib/zeppelin/token/ERC20Basic.sol...

/home/democritus/Documents/Projects/ScipioPlatform/test12/contracts/ParticipantManager.sol:4:1: DeclarationError: Identifier already declared. import "./IBT.sol"; ^-----------------^ /home/democritus/Documents/Projects/ScipioPlatform/test12/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol:8:1: The previous declaration is here: library SafeMath { ^ Spanning multiple lines.

,/home/democritus/Documents/Projects/ScipioPlatform/test12/contracts/ParticipantManager.sol:5:1: DeclarationError: Identifier already declared. import "./CrowdsaleIBT.sol"; ^--------------------------^ /home/democritus/Documents/Projects/ScipioPlatform/test12/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol:8:1: The previous declaration is here: library SafeMath { ^ Any help will be more than welcomed..

sohkai commented 6 years ago

I'm not entirely sure about the IBT and CrowdsaleIBT contracts without having a look at how you're using them, but the SafeMath ones are due to the fact that we use SafeMath libraries internally. You'll have to use our SafeMath library version.

Unfortunately, solc doesn't know how to handle cases where the contract names are the same, but come from two different locations.