Skip to content

Commit

Permalink
Merge pull request #284 from hyperledger-labs/module-erc165
Browse files Browse the repository at this point in the history
Add ERC-165 to IIBCModule

Signed-off-by: Jun Kimura <[email protected]>
  • Loading branch information
bluele authored Jul 22, 2024
2 parents da692ad + 8d854ba commit 49d88ae
Show file tree
Hide file tree
Showing 15 changed files with 390 additions and 121 deletions.
93 changes: 47 additions & 46 deletions .gas-snapshot
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
IBCMockAppTest:testHandshake() (gas: 4420488)
IBCMockAppTest:testHandshakeBetweenDifferentPorts() (gas: 3334373)
IBCMockAppTest:testPacketRelay() (gas: 13935239)
IBCMockAppTest:testPacketTimeout() (gas: 4284263)
IBCMockAppTest:testHandshake() (gas: 4420576)
IBCMockAppTest:testHandshakeBetweenDifferentPorts() (gas: 3339589)
IBCMockAppTest:testPacketRelay() (gas: 13935831)
IBCMockAppTest:testPacketTimeout() (gas: 4284259)
IBCTest:testBenchmarkCreateMockClient() (gas: 233366)
IBCTest:testBenchmarkLCUpdateMockClient() (gas: 62005)
IBCTest:testBenchmarkRecvPacket() (gas: 158870)
IBCTest:testBenchmarkRecvPacket() (gas: 158888)
IBCTest:testBenchmarkSendPacket() (gas: 128432)
IBCTest:testBenchmarkUpdateMockClient() (gas: 160229)
IBCTest:testToUint128((uint64,uint64)) (runs: 256, μ: 947, ~: 947)
TestICS02:testCreateClient() (gas: 36576736)
TestICS02:testInvalidCreateClient() (gas: 36473955)
TestICS02:testInvalidUpdateClient() (gas: 36472863)
TestICS02:testRegisterClient() (gas: 36128529)
TestICS02:testRegisterClientDuplicatedClientType() (gas: 36113838)
TestICS02:testRegisterClientInvalidClientType() (gas: 36143299)
TestICS02:testUpdateClient() (gas: 36641063)
TestICS02:testCreateClient() (gas: 36633805)
TestICS02:testInvalidCreateClient() (gas: 36530922)
TestICS02:testInvalidUpdateClient() (gas: 36529932)
TestICS02:testRegisterClient() (gas: 36185598)
TestICS02:testRegisterClientDuplicatedClientType() (gas: 36170907)
TestICS02:testRegisterClientInvalidClientType() (gas: 36200368)
TestICS02:testUpdateClient() (gas: 36698132)
TestICS03Handshake:testConnOpenAck() (gas: 1858230)
TestICS03Handshake:testConnOpenConfirm() (gas: 2054143)
TestICS03Handshake:testConnOpenInit() (gas: 1429838)
Expand All @@ -29,43 +29,44 @@ TestICS03Version:testIsSupportedVersion() (gas: 7864)
TestICS03Version:testPickVersion() (gas: 25327)
TestICS03Version:testVerifyProposedVersion() (gas: 11777)
TestICS03Version:testVerifySupportedFeature() (gas: 4153)
TestICS04Handshake:testBindPort() (gas: 124350)
TestICS04Handshake:testChanClose() (gas: 12973854)
TestICS04Handshake:testChanOpenAck() (gas: 3459404)
TestICS04Handshake:testChanOpenConfirm() (gas: 3770673)
TestICS04Handshake:testChanOpenInit() (gas: 2543524)
TestICS04Handshake:testChanOpenTry() (gas: 3099898)
TestICS04Handshake:testInvalidChanOpenAck() (gas: 2439749)
TestICS04Handshake:testInvalidChanOpenConfirm() (gas: 2517338)
TestICS04Handshake:testBindPort() (gas: 458549)
TestICS04Handshake:testChanClose() (gas: 12973942)
TestICS04Handshake:testChanOpenAck() (gas: 3459492)
TestICS04Handshake:testChanOpenConfirm() (gas: 3770761)
TestICS04Handshake:testChanOpenInit() (gas: 2543590)
TestICS04Handshake:testChanOpenTry() (gas: 3099942)
TestICS04Handshake:testInvalidChanOpenAck() (gas: 2439771)
TestICS04Handshake:testInvalidChanOpenConfirm() (gas: 2517382)
TestICS04Handshake:testInvalidChanOpenInit() (gas: 1760558)
TestICS04Handshake:testInvalidChanOpenTry() (gas: 1775528)
TestICS04Packet:testAcknowledgementPacket() (gas: 3351116)
TestICS04Packet:testInvalidSendPacket() (gas: 3579083)
TestICS04Packet:testRecvPacket() (gas: 11006942)
TestICS04Packet:testRecvPacketTimeoutHeight() (gas: 3259727)
TestICS04Packet:testRecvPacketTimeoutTimestamp() (gas: 3284103)
TestICS04Packet:testSendPacket() (gas: 6412442)
TestICS04Packet:testTimeoutOnClose() (gas: 3553289)
TestICS04Upgrade:testUpgradeAuthorityCancel() (gas: 46744545)
TestICS04Upgrade:testUpgradeCannotCancelWithOldErrorReceipt() (gas: 3456630)
TestICS04Upgrade:testUpgradeCannotRecvNextUpgradePacket() (gas: 5265976)
TestICS04Upgrade:testUpgradeCounterpartyAdvanceNextSequenceBeforeOpen() (gas: 5236229)
TestICS04Upgrade:testUpgradeCrossingHelloIncompatibleProposals() (gas: 4996384)
TestICS04Upgrade:testUpgradeFull() (gas: 56608897)
TestICS04Upgrade:testUpgradeInit() (gas: 3071908)
TestICS04Upgrade:testUpgradeNoChanges() (gas: 2471936)
TestICS04Upgrade:testUpgradeOutOfSync() (gas: 3904992)
TestICS04Upgrade:testUpgradeRelaySuccessAtCounterpartyFlushComplete() (gas: 5237741)
TestICS04Upgrade:testUpgradeRelaySuccessAtFlushing() (gas: 5610928)
TestICS04Upgrade:testUpgradeSendPacketFailAtFlushingOrFlushComplete() (gas: 4070996)
TestICS04Upgrade:testUpgradeTimeoutAbortAck() (gas: 17693913)
TestICS04Upgrade:testUpgradeTimeoutAbortConfirm() (gas: 21333170)
TestICS04Upgrade:testUpgradeTimeoutUpgrade() (gas: 71048576)
TestICS04Upgrade:testUpgradeToOrdered() (gas: 56509239)
TestICS04Upgrade:testUpgradeToUnordered() (gas: 45113597)
TestICS04Packet:testAcknowledgementPacket() (gas: 3351204)
TestICS04Packet:testInvalidSendPacket() (gas: 3579171)
TestICS04Packet:testRecvPacket() (gas: 11007558)
TestICS04Packet:testRecvPacketTimeoutHeight() (gas: 3259769)
TestICS04Packet:testRecvPacketTimeoutTimestamp() (gas: 3284145)
TestICS04Packet:testSendPacket() (gas: 6411842)
TestICS04Packet:testTimeoutOnClose() (gas: 3553375)
TestICS04Upgrade:testUpgradeAuthorityCancel() (gas: 46723464)
TestICS04Upgrade:testUpgradeCannotCancelWithOldErrorReceipt() (gas: 3458838)
TestICS04Upgrade:testUpgradeCannotRecvNextUpgradePacket() (gas: 5259191)
TestICS04Upgrade:testUpgradeCounterpartyAdvanceNextSequenceBeforeOpen() (gas: 5230069)
TestICS04Upgrade:testUpgradeCrossingHelloIncompatibleProposals() (gas: 5068281)
TestICS04Upgrade:testUpgradeFull() (gas: 56559261)
TestICS04Upgrade:testUpgradeInit() (gas: 3074224)
TestICS04Upgrade:testUpgradeNoChanges() (gas: 2473090)
TestICS04Upgrade:testUpgradeNotUpgradableModule() (gas: 3648610)
TestICS04Upgrade:testUpgradeOutOfSync() (gas: 3905908)
TestICS04Upgrade:testUpgradeRelaySuccessAtCounterpartyFlushComplete() (gas: 5230956)
TestICS04Upgrade:testUpgradeRelaySuccessAtFlushing() (gas: 5604165)
TestICS04Upgrade:testUpgradeSendPacketFailAtFlushingOrFlushComplete() (gas: 4069212)
TestICS04Upgrade:testUpgradeTimeoutAbortAck() (gas: 17708385)
TestICS04Upgrade:testUpgradeTimeoutAbortConfirm() (gas: 21315818)
TestICS04Upgrade:testUpgradeTimeoutUpgrade() (gas: 70973805)
TestICS04Upgrade:testUpgradeToOrdered() (gas: 56461648)
TestICS04Upgrade:testUpgradeToUnordered() (gas: 45074517)
TestICS04UpgradeApp:testUpgradeAuthorizationChanneNotFound() (gas: 61690)
TestICS04UpgradeApp:testUpgradeAuthorizationRePropose() (gas: 2565532)
TestICS04UpgradeApp:testUpgradeAuthorizationRemove() (gas: 2475992)
TestICS04UpgradeApp:testUpgradeAuthorizationRePropose() (gas: 2565379)
TestICS04UpgradeApp:testUpgradeAuthorizationRemove() (gas: 2475938)
TestICS20:testAddressToHex(address) (runs: 256, μ: 22668, ~: 22804)
TestICS20:testHexToAddress(string) (runs: 256, μ: 4776, ~: 4734)
TestICS20:testIsEscapedString() (gas: 48979)
Expand Down
42 changes: 31 additions & 11 deletions contracts/apps/commons/IBCAppBase.sol
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.20;

import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
import {Context} from "@openzeppelin/contracts/utils/Context.sol";
import {Packet} from "../../core/04-channel/IIBCChannel.sol";
import {IIBCModule} from "../../core/26-router/IIBCModule.sol";
import {IIBCModuleErrors} from "../../core/26-router/IIBCModuleErrors.sol";

abstract contract AppBase is Context, IIBCModuleErrors {
abstract contract AppBase is IERC165, Context, IIBCModuleErrors {
/**
* @dev Throws if called by any account other than the IBC contract.
*/
Expand All @@ -28,14 +29,24 @@ abstract contract AppBase is Context, IIBCModuleErrors {
revert IBCModuleInvalidSender(_msgSender());
}
}

/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
* to learn more about how these ids are created.
*/
function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
return interfaceId == type(IERC165).interfaceId || interfaceId == this.ibcAddress.selector;
}
}

/**
* @dev Base contract of the IBC App protocol
*/
abstract contract IBCAppBase is AppBase, IIBCModule {
/**
* @dev See IIBCModule-onChanOpenInit
* @dev See {IIBCModule-onChanOpenInit}
*
* NOTE: You should apply an `onlyIBC` modifier to the function if a derived contract overrides it.
*/
Expand All @@ -48,7 +59,7 @@ abstract contract IBCAppBase is AppBase, IIBCModule {
{}

/**
* @dev See IIBCModule-onChanOpenTry
* @dev See {IIBCModule-onChanOpenTry}
*
* NOTE: You should apply an `onlyIBC` modifier to the function if a derived contract overrides it.
*/
Expand All @@ -61,35 +72,35 @@ abstract contract IBCAppBase is AppBase, IIBCModule {
{}

/**
* @dev See IIBCModule-onChanOpenAck
* @dev See {IIBCModule-onChanOpenAck}
*
* NOTE: You should apply an `onlyIBC` modifier to the function if a derived contract overrides it.
*/
function onChanOpenAck(IIBCModule.MsgOnChanOpenAck calldata) external virtual override onlyIBC {}

/**
* @dev See IIBCModule-onChanOpenConfirm
* @dev See {IIBCModule-onChanOpenConfirm}
*
* NOTE: You should apply an `onlyIBC` modifier to the function if a derived contract overrides it.
*/
function onChanOpenConfirm(IIBCModule.MsgOnChanOpenConfirm calldata) external virtual override onlyIBC {}

/**
* @dev See IIBCModule-onChanCloseInit
* @dev See {IIBCModule-onChanCloseInit}
*
* NOTE: You should apply an `onlyIBC` modifier to the function if a derived contract overrides it.
*/
function onChanCloseInit(IIBCModule.MsgOnChanCloseInit calldata) external virtual override onlyIBC {}

/**
* @dev See IIBCModule-onChanCloseConfirm
* @dev See {IIBCModule-onChanCloseConfirm}
*
* NOTE: You should apply an `onlyIBC` modifier to the function if a derived contract overrides it.
*/
function onChanCloseConfirm(IIBCModule.MsgOnChanCloseConfirm calldata) external virtual override onlyIBC {}

/**
* @dev See IIBCModule-onRecvPacket
* @dev See {IIBCModule-onRecvPacket}
*
* NOTE: You should apply an `onlyIBC` modifier to the function if a derived contract overrides it.
*/
Expand All @@ -102,16 +113,25 @@ abstract contract IBCAppBase is AppBase, IIBCModule {
{}

/**
* @dev See IIBCModule-onAcknowledgementPacket
* @dev See {IIBCModule-onAcknowledgementPacket}
*
* NOTE: You should apply an `onlyIBC` modifier to the function if a derived contract overrides it.
*/
function onAcknowledgementPacket(Packet calldata, bytes calldata, address) external virtual override onlyIBC {}

/**
* @dev See IIBCModule-onTimeoutPacket
* @dev See {IIBCModule-onTimeoutPacket}
*
* NOTE: You should apply an `onlyIBC` modifier to the function if a derived contract overrides it.
*/
function onTimeoutPacket(Packet calldata, address relayer) external virtual onlyIBC {}
function onTimeoutPacket(Packet calldata, address relayer) external virtual override onlyIBC {}

/**
* @dev See {IERC165-supportsInterface}
*
* NOTE: This must return true if the `interfaceId` is equal to the `IIBCModule` interface.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, AppBase) returns (bool) {
return interfaceId == type(IIBCModule).interfaceId || super.supportsInterface(interfaceId);
}
}
Loading

0 comments on commit 49d88ae

Please sign in to comment.