diff --git a/contracts/GeneralMiddleware.sol b/contracts/base/GeneralMiddleware.sol similarity index 97% rename from contracts/GeneralMiddleware.sol rename to contracts/base/GeneralMiddleware.sol index 74021be7..4291dff1 100644 --- a/contracts/GeneralMiddleware.sol +++ b/contracts/base/GeneralMiddleware.sol @@ -2,10 +2,10 @@ pragma solidity ^0.8.9; -import './Ibc.sol'; -import './IbcReceiver.sol'; -import './IbcDispatcher.sol'; -import './IbcMiddleware.sol'; +import '../libs/Ibc.sol'; +import '../interfaces/IbcReceiver.sol'; +import '../interfaces/IbcDispatcher.sol'; +import '../interfaces/IbcMiddleware.sol'; contract GeneralMiddleware is IbcMwUser, IbcMiddleware, IbcMwEventsEmitter { /** diff --git a/contracts/Dispatcher.sol b/contracts/core/Dispatcher.sol similarity index 99% rename from contracts/Dispatcher.sol rename to contracts/core/Dispatcher.sol index e41073dc..3b06706e 100644 --- a/contracts/Dispatcher.sol +++ b/contracts/core/Dispatcher.sol @@ -4,9 +4,9 @@ pragma solidity ^0.8.9; import '@openzeppelin/contracts/utils/Strings.sol'; import '@openzeppelin/contracts/access/Ownable.sol'; -import './IbcDispatcher.sol'; -import {IbcChannelReceiver, IbcPacketReceiver} from './IbcReceiver.sol'; -import './ConsensusStateManager.sol'; +import '../interfaces/IbcDispatcher.sol'; +import {IbcChannelReceiver, IbcPacketReceiver} from '../interfaces/IbcReceiver.sol'; +import '../interfaces/ConsensusStateManager.sol'; /** * @title Dispatcher diff --git a/contracts/OpConsensusStateManager.sol b/contracts/core/OpConsensusStateManager.sol similarity index 98% rename from contracts/OpConsensusStateManager.sol rename to contracts/core/OpConsensusStateManager.sol index 8d848868..7d6bd7cf 100644 --- a/contracts/OpConsensusStateManager.sol +++ b/contracts/core/OpConsensusStateManager.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; -import './Ibc.sol'; -import './ConsensusStateManager.sol'; +import '../libs/Ibc.sol'; +import '../interfaces/ConsensusStateManager.sol'; import {L1Block} from 'optimism/L2/L1Block.sol'; diff --git a/contracts/OpProofVerifier.sol b/contracts/core/OpProofVerifier.sol similarity index 99% rename from contracts/OpProofVerifier.sol rename to contracts/core/OpProofVerifier.sol index 2c3f8ae8..d1681072 100644 --- a/contracts/OpProofVerifier.sol +++ b/contracts/core/OpProofVerifier.sol @@ -5,7 +5,7 @@ import {SecureMerkleTrie} from 'optimism/libraries/trie/SecureMerkleTrie.sol'; import {RLPReader} from 'optimism/libraries/rlp/RLPReader.sol'; import {RLPWriter} from 'optimism/libraries/rlp/RLPWriter.sol'; -import './ProofVerifier.sol'; +import '../interfaces/ProofVerifier.sol'; contract OpProofVerifier is ProofVerifier { using RLPReader for RLPReader.RLPItem; diff --git a/contracts/UniversalChannelHandler.sol b/contracts/core/UniversalChannelHandler.sol similarity index 97% rename from contracts/UniversalChannelHandler.sol rename to contracts/core/UniversalChannelHandler.sol index 6a2dbf02..abfb0fe4 100644 --- a/contracts/UniversalChannelHandler.sol +++ b/contracts/core/UniversalChannelHandler.sol @@ -3,10 +3,10 @@ pragma solidity ^0.8.9; import '@openzeppelin/contracts/access/Ownable.sol'; -import './IbcDispatcher.sol'; -import './IbcMiddleware.sol'; -import {IbcReceiver} from './IbcReceiver.sol'; -import './Ibc.sol'; +import '../interfaces/IbcDispatcher.sol'; +import '../interfaces/IbcMiddleware.sol'; +import {IbcReceiver} from '../interfaces/IbcReceiver.sol'; +import '../libs/Ibc.sol'; contract UniversalChannelHandler is IbcReceiverBase, IbcUniversalChannelMW { constructor(IbcDispatcher _dispatcher) IbcReceiverBase(_dispatcher) {} diff --git a/contracts/Earth.sol b/contracts/examples/Earth.sol similarity index 94% rename from contracts/Earth.sol rename to contracts/examples/Earth.sol index 815632fd..ec8780d9 100644 --- a/contracts/Earth.sol +++ b/contracts/examples/Earth.sol @@ -2,10 +2,10 @@ pragma solidity ^0.8.9; -import './Ibc.sol'; -import './IbcReceiver.sol'; -import './IbcDispatcher.sol'; -import './IbcMiddleware.sol'; +import '../libs/Ibc.sol'; +import '../interfaces/IbcReceiver.sol'; +import '../interfaces/IbcDispatcher.sol'; +import '../interfaces/IbcMiddleware.sol'; contract Earth is IbcMwUser, IbcUniversalPacketReceiver { struct UcPacketWithChannel { diff --git a/contracts/Mars.sol b/contracts/examples/Mars.sol similarity index 97% rename from contracts/Mars.sol rename to contracts/examples/Mars.sol index 9551e1f0..14729f8b 100644 --- a/contracts/Mars.sol +++ b/contracts/examples/Mars.sol @@ -2,9 +2,9 @@ pragma solidity ^0.8.9; -import './Ibc.sol'; -import './IbcReceiver.sol'; -import './IbcDispatcher.sol'; +import '../libs/Ibc.sol'; +import '../interfaces/IbcReceiver.sol'; +import '../interfaces/IbcDispatcher.sol'; contract Mars is IbcReceiverBase, IbcReceiver { // received packet as chain B diff --git a/contracts/ConsensusStateManager.sol b/contracts/interfaces/ConsensusStateManager.sol similarity index 97% rename from contracts/ConsensusStateManager.sol rename to contracts/interfaces/ConsensusStateManager.sol index f19c804f..27325782 100644 --- a/contracts/ConsensusStateManager.sol +++ b/contracts/interfaces/ConsensusStateManager.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; -import './Ibc.sol'; +import '../libs/Ibc.sol'; import './ProofVerifier.sol'; interface ConsensusStateManager { diff --git a/contracts/IbcDispatcher.sol b/contracts/interfaces/IbcDispatcher.sol similarity index 99% rename from contracts/IbcDispatcher.sol rename to contracts/interfaces/IbcDispatcher.sol index 8ec8d35a..d9837c8e 100644 --- a/contracts/IbcDispatcher.sol +++ b/contracts/interfaces/IbcDispatcher.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.9; -import './Ibc.sol'; +import '../libs/Ibc.sol'; import './IbcReceiver.sol'; import './ProofVerifier.sol'; diff --git a/contracts/IbcMiddleware.sol b/contracts/interfaces/IbcMiddleware.sol similarity index 99% rename from contracts/IbcMiddleware.sol rename to contracts/interfaces/IbcMiddleware.sol index b6d4b5a9..0e75c179 100644 --- a/contracts/IbcMiddleware.sol +++ b/contracts/interfaces/IbcMiddleware.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.9; -import './Ibc.sol'; +import '../libs/Ibc.sol'; import './IbcDispatcher.sol'; import './IbcReceiver.sol'; diff --git a/contracts/IbcReceiver.sol b/contracts/interfaces/IbcReceiver.sol similarity index 99% rename from contracts/IbcReceiver.sol rename to contracts/interfaces/IbcReceiver.sol index 53d473b8..b6268cf3 100644 --- a/contracts/IbcReceiver.sol +++ b/contracts/interfaces/IbcReceiver.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.9; import '@openzeppelin/contracts/access/Ownable.sol'; import './IbcDispatcher.sol'; -import './Ibc.sol'; +import '../libs/Ibc.sol'; /** * @title IbcChannelReceiver diff --git a/contracts/ProofVerifier.sol b/contracts/interfaces/ProofVerifier.sol similarity index 100% rename from contracts/ProofVerifier.sol rename to contracts/interfaces/ProofVerifier.sol diff --git a/contracts/Ibc.sol b/contracts/libs/Ibc.sol similarity index 100% rename from contracts/Ibc.sol rename to contracts/libs/Ibc.sol diff --git a/contracts/DummyConsensusStateManager.sol b/contracts/utils/DummyConsensusStateManager.sol similarity index 95% rename from contracts/DummyConsensusStateManager.sol rename to contracts/utils/DummyConsensusStateManager.sol index 4c4765a5..d5d1834d 100644 --- a/contracts/DummyConsensusStateManager.sol +++ b/contracts/utils/DummyConsensusStateManager.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; -import './ConsensusStateManager.sol'; +import '../interfaces/ConsensusStateManager.sol'; /** * @title DummyConsensusStateManager diff --git a/contracts/DummyProofVerifier.sol b/contracts/utils/DummyProofVerifier.sol similarity index 91% rename from contracts/DummyProofVerifier.sol rename to contracts/utils/DummyProofVerifier.sol index c70a6a5f..e23e4751 100644 --- a/contracts/DummyProofVerifier.sol +++ b/contracts/utils/DummyProofVerifier.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; -import './ProofVerifier.sol'; +import '../interfaces/ProofVerifier.sol'; contract DummyProofVerifier is ProofVerifier { function verifyStateUpdate(L1Header calldata, OpL2StateProof calldata, bytes32, bytes32, uint64) external pure {} diff --git a/contracts/GasAudit.sol b/contracts/utils/GasAudit.sol similarity index 100% rename from contracts/GasAudit.sol rename to contracts/utils/GasAudit.sol diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index 0381d466..00000000 --- a/src/index.ts +++ /dev/null @@ -1,46 +0,0 @@ -import path from 'path' -import fs from 'fs' -import os from 'os' -import tar from 'tar' -import { contractsTemplate } from './contracts.template' - -export async function extractVibcCoreSmartContracts(contractsDir: string): Promise { - // Create a unique temporary directory - const tempDir = fs.mkdtempSync(os.tmpdir() + path.sep) - - // Write the decoded template to a temporary tar file - const tempTarPath = path.join(tempDir, 'temp.tar') - - try { - // Decode the base64-encoded contracts template - const decodedTemplate = Buffer.from(contractsTemplate.trim(), 'base64') - - fs.writeFileSync(tempTarPath, decodedTemplate, 'binary') - - // Extract the tar file contents into the contracts directory - await tar.extract({ - strip: 2, - file: tempTarPath, - cwd: contractsDir - }) - } finally { - // Delete the temporary directory - fs.rmSync(tempDir, {force: true, recursive: true}) - } -} - -if (require.main === module) { - const contractsDir = process.argv[2]; - if (!contractsDir) { - console.error('Please provide a contracts directory as the first argument.'); - process.exit(1); - } - - extractVibcCoreSmartContracts(contractsDir) - .then(() => { - console.log('Extraction completed successfully.'); - }) - .catch(error => { - console.error('Error during extraction:', error); - }); -} \ No newline at end of file diff --git a/test/Dispatcher.base.t.sol b/test/Dispatcher.base.t.sol index 05d18840..2235dcd7 100644 --- a/test/Dispatcher.base.t.sol +++ b/test/Dispatcher.base.t.sol @@ -3,14 +3,14 @@ pragma solidity ^0.8.13; import 'forge-std/Test.sol'; import './Proof.base.t.sol'; -import '../contracts/Ibc.sol'; -import {Dispatcher} from '../contracts/Dispatcher.sol'; -import {IbcEventsEmitter} from '../contracts/IbcDispatcher.sol'; -import {IbcChannelReceiver} from '../contracts/IbcReceiver.sol'; -import '../contracts/Mars.sol'; -import '../contracts/OpConsensusStateManager.sol'; -import '../contracts/DummyConsensusStateManager.sol'; -import '../contracts/OpProofVerifier.sol'; +import '../contracts/libs/Ibc.sol'; +import {Dispatcher} from '../contracts/core/Dispatcher.sol'; +import {IbcEventsEmitter} from '../contracts/interfaces/IbcDispatcher.sol'; +import {IbcChannelReceiver} from '../contracts/interfaces/IbcReceiver.sol'; +import '../contracts/examples/Mars.sol'; +import '../contracts/core/OpConsensusStateManager.sol'; +import '../contracts/utils/DummyConsensusStateManager.sol'; +import '../contracts/core/OpProofVerifier.sol'; struct LocalEnd { IbcChannelReceiver receiver; diff --git a/test/Dispatcher.client.t.sol b/test/Dispatcher.client.t.sol index 696ccbdd..05146183 100644 --- a/test/Dispatcher.client.t.sol +++ b/test/Dispatcher.client.t.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.13; -import '../contracts/Ibc.sol'; -import {Dispatcher} from '../contracts/Dispatcher.sol'; -import {IbcEventsEmitter} from '../contracts/IbcDispatcher.sol'; -import {IbcReceiver} from '../contracts/IbcReceiver.sol'; -import '../contracts/Mars.sol'; -import '../contracts/OpConsensusStateManager.sol'; +import '../contracts/libs/Ibc.sol'; +import {Dispatcher} from '../contracts/core/Dispatcher.sol'; +import {IbcEventsEmitter} from '../contracts/interfaces/IbcDispatcher.sol'; +import {IbcReceiver} from '../contracts/interfaces/IbcReceiver.sol'; +import '../contracts/examples/Mars.sol'; +import '../contracts/core/OpConsensusStateManager.sol'; import './Dispatcher.base.t.sol'; contract ClientTestBase is Base { diff --git a/test/Dispatcher.proof.t.sol b/test/Dispatcher.proof.t.sol index 7bb0ff84..2320154e 100644 --- a/test/Dispatcher.proof.t.sol +++ b/test/Dispatcher.proof.t.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.15; -import '../contracts/Ibc.sol'; -import {Dispatcher} from '../contracts/Dispatcher.sol'; -import '../contracts/Mars.sol'; -import '../contracts/OpConsensusStateManager.sol'; +import '../contracts/libs/Ibc.sol'; +import {Dispatcher} from '../contracts/core/Dispatcher.sol'; +import '../contracts/examples/Mars.sol'; +import '../contracts/core/OpConsensusStateManager.sol'; import './Proof.base.t.sol'; import {stdStorage, StdStorage} from 'forge-std/Test.sol'; diff --git a/test/Dispatcher.t.sol b/test/Dispatcher.t.sol index 6677ef87..370a83d2 100644 --- a/test/Dispatcher.t.sol +++ b/test/Dispatcher.t.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.13; -import '../contracts/Ibc.sol'; -import {Dispatcher} from '../contracts/Dispatcher.sol'; -import {IbcEventsEmitter} from '../contracts/IbcDispatcher.sol'; -import {IbcReceiver} from '../contracts/IbcReceiver.sol'; -import '../contracts/Mars.sol'; -import '../contracts/OpConsensusStateManager.sol'; +import '../contracts/libs/Ibc.sol'; +import {Dispatcher} from '../contracts/core/Dispatcher.sol'; +import {IbcEventsEmitter} from '../contracts/interfaces/IbcDispatcher.sol'; +import {IbcReceiver} from '../contracts/interfaces/IbcReceiver.sol'; +import '../contracts/examples/Mars.sol'; +import '../contracts/core/OpConsensusStateManager.sol'; import './Dispatcher.base.t.sol'; contract ChannelHandshakeTest is Base { diff --git a/test/Ibc.t.sol b/test/Ibc.t.sol index 98560738..f0f455e1 100644 --- a/test/Ibc.t.sol +++ b/test/Ibc.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; -import '../contracts/Ibc.sol'; +import '../contracts/libs/Ibc.sol'; import 'forge-std/Test.sol'; contract IbcTest is Ibc, Test { diff --git a/test/OpConsensusStateManager.t.sol b/test/OpConsensusStateManager.t.sol index 73726421..5e105d37 100644 --- a/test/OpConsensusStateManager.t.sol +++ b/test/OpConsensusStateManager.t.sol @@ -2,8 +2,8 @@ pragma solidity ^0.8.0; import 'forge-std/Test.sol'; -import '../contracts/OpConsensusStateManager.sol'; -import '../contracts/DummyProofVerifier.sol'; +import '../contracts/core/OpConsensusStateManager.sol'; +import '../contracts/utils/DummyProofVerifier.sol'; import './Proof.base.t.sol'; contract OptimisticConsensusStateManagerTest is ProofBase { diff --git a/test/Proof.base.t.sol b/test/Proof.base.t.sol index a8240c84..45cda879 100644 --- a/test/Proof.base.t.sol +++ b/test/Proof.base.t.sol @@ -2,8 +2,8 @@ pragma solidity ^0.8.0; import 'forge-std/Test.sol'; -import '../contracts/Ibc.sol'; -import '../contracts/OpProofVerifier.sol'; +import '../contracts/libs/Ibc.sol'; +import '../contracts/core/OpProofVerifier.sol'; import {L1Block} from 'optimism/L2/L1Block.sol'; contract ProofBase is Test, Ibc { diff --git a/test/Verifier.t.sol b/test/Verifier.t.sol index 3fac99d2..ea6fd085 100644 --- a/test/Verifier.t.sol +++ b/test/Verifier.t.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; -import '../contracts/OpProofVerifier.sol'; -import '../contracts/Ibc.sol'; +import '../contracts/core/OpProofVerifier.sol'; +import '../contracts/libs/Ibc.sol'; import 'forge-std/Test.sol'; import './Proof.base.t.sol'; diff --git a/test/VirtualChain.sol b/test/VirtualChain.sol index a481520c..8fd189b8 100644 --- a/test/VirtualChain.sol +++ b/test/VirtualChain.sol @@ -3,15 +3,15 @@ pragma solidity ^0.8.13; import 'forge-std/Test.sol'; import '@openzeppelin/contracts/utils/Strings.sol'; -import '../contracts/Ibc.sol'; -import '../contracts/Dispatcher.sol'; -import '../contracts/ProofVerifier.sol'; -import {UniversalChannelHandler} from '../contracts/UniversalChannelHandler.sol'; -import {Mars} from '../contracts/Mars.sol'; -import {Earth} from '../contracts/Earth.sol'; -import {IbcMiddleware} from '../contracts/IbcMiddleware.sol'; -import {GeneralMiddleware} from '../contracts/GeneralMiddleware.sol'; -import '../contracts/DummyConsensusStateManager.sol'; +import '../contracts/libs/Ibc.sol'; +import '../contracts/core/Dispatcher.sol'; +import '../contracts/interfaces/ProofVerifier.sol'; +import {UniversalChannelHandler} from '../contracts/core/UniversalChannelHandler.sol'; +import {Mars} from '../contracts/examples/Mars.sol'; +import {Earth} from '../contracts/examples/Earth.sol'; +import {IbcMiddleware} from '../contracts/interfaces/IbcMiddleware.sol'; +import {GeneralMiddleware} from '../contracts/base/GeneralMiddleware.sol'; +import '../contracts/utils/DummyConsensusStateManager.sol'; struct ChannelSetting { ChannelOrder ordering; diff --git a/test/payload/ack.t.sol b/test/payload/ack.t.sol index 953b73d2..e571faa1 100644 --- a/test/payload/ack.t.sol +++ b/test/payload/ack.t.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.13; import 'forge-std/Test.sol'; -import '../../contracts/Ibc.sol'; +import '../../contracts/libs/Ibc.sol'; contract AckContract { // getAckPacketBytes returns the bytes representation of the AckPacket diff --git a/test/universal.channel.t.sol b/test/universal.channel.t.sol index 880adc59..257f91d4 100644 --- a/test/universal.channel.t.sol +++ b/test/universal.channel.t.sol @@ -1,13 +1,13 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.13; -import '../contracts/Ibc.sol'; -import {Dispatcher} from '../contracts/Dispatcher.sol'; -import {IbcEventsEmitter} from '../contracts/IbcDispatcher.sol'; -import {IbcReceiver} from '../contracts/IbcReceiver.sol'; -import '../contracts/UniversalChannelHandler.sol'; -import '../contracts/Mars.sol'; -import '../contracts/OpConsensusStateManager.sol'; +import '../contracts/libs/Ibc.sol'; +import {Dispatcher} from '../contracts/core/Dispatcher.sol'; +import {IbcEventsEmitter} from '../contracts/interfaces/IbcDispatcher.sol'; +import {IbcReceiver} from '../contracts/interfaces/IbcReceiver.sol'; +import '../contracts/core/UniversalChannelHandler.sol'; +import '../contracts/examples/Mars.sol'; +import '../contracts/core/OpConsensusStateManager.sol'; import './Dispatcher.base.t.sol'; import './VirtualChain.sol';