Skip to content

Commit ca7a56c

Browse files
authored
Merge pull request #300 from hyperledger-labs/fix-module-initializer-return-address
Fix `onChanOpenInit` and `onChanOpenTry` to returns a module address Signed-off-by: Jun Kimura <jun.kimura@datachain.jp>
2 parents a37d4e1 + d551cd7 commit ca7a56c

23 files changed

+922
-219
lines changed

.gas-snapshot

+64-61
Original file line numberDiff line numberDiff line change
@@ -5,74 +5,77 @@ IBCBenchmarks:testRecvPacket() (gas: 154889)
55
IBCBenchmarks:testSendPacket() (gas: 94843)
66
IBCBenchmarks:testUpdateMockClientDirectly() (gas: 64879)
77
IBCBenchmarks:testUpdateMockClientViaHandler() (gas: 148239)
8-
IBCMockAppTest:testHandshake() (gas: 4162455)
9-
IBCMockAppTest:testHandshakeBetweenDifferentPorts() (gas: 3104765)
10-
IBCMockAppTest:testPacketRelay() (gas: 11461419)
11-
IBCMockAppTest:testPacketTimeout() (gas: 4059968)
8+
IBCMockAppFactoryTest:testHandshake() (gas: 8710771)
9+
IBCMockAppFactoryTest:testPacketRelay() (gas: 15995791)
10+
IBCMockAppTest:testHandshake() (gas: 4183963)
11+
IBCMockAppTest:testHandshakeBetweenDifferentPorts() (gas: 3130978)
12+
IBCMockAppTest:testPacketRelay() (gas: 11493798)
13+
IBCMockAppTest:testPacketTimeout() (gas: 4089477)
1214
ICS24HostTest:testValidatePortIdentifier() (gas: 44476)
13-
TestICS02:testCreateClient() (gas: 30594453)
15+
TestICS02:testCreateClient() (gas: 30936959)
1416
TestICS02:testHeightToUint128((uint64,uint64)) (runs: 256, μ: 907, ~: 907)
15-
TestICS02:testInvalidCreateClient() (gas: 30479715)
16-
TestICS02:testInvalidUpdateClient() (gas: 30483432)
17-
TestICS02:testRegisterClient() (gas: 30143677)
18-
TestICS02:testRegisterClientDuplicatedClientType() (gas: 30129897)
19-
TestICS02:testRegisterClientInvalidClientType() (gas: 30158859)
20-
TestICS02:testUpdateClient() (gas: 30650006)
21-
TestICS03Handshake:testConnOpenAck() (gas: 1811232)
22-
TestICS03Handshake:testConnOpenConfirm() (gas: 1989361)
23-
TestICS03Handshake:testConnOpenInit() (gas: 1423016)
24-
TestICS03Handshake:testConnOpenTry() (gas: 2348031)
25-
TestICS03Handshake:testInvalidConnOpenAck() (gas: 2323525)
26-
TestICS03Handshake:testInvalidConnOpenConfirm() (gas: 2422540)
17+
TestICS02:testInvalidCreateClient() (gas: 30822171)
18+
TestICS02:testInvalidUpdateClient() (gas: 30825962)
19+
TestICS02:testRegisterClient() (gas: 30486209)
20+
TestICS02:testRegisterClientDuplicatedClientType() (gas: 30472391)
21+
TestICS02:testRegisterClientInvalidClientType() (gas: 30501395)
22+
TestICS02:testUpdateClient() (gas: 30992560)
23+
TestICS03Handshake:testConnOpenAck() (gas: 1810871)
24+
TestICS03Handshake:testConnOpenConfirm() (gas: 1988723)
25+
TestICS03Handshake:testConnOpenInit() (gas: 1422940)
26+
TestICS03Handshake:testConnOpenTry() (gas: 2347689)
27+
TestICS03Handshake:testInvalidConnOpenAck() (gas: 2322689)
28+
TestICS03Handshake:testInvalidConnOpenConfirm() (gas: 2421514)
2729
TestICS03Handshake:testInvalidConnOpenInit() (gas: 776893)
28-
TestICS03Handshake:testInvalidConnOpenTry() (gas: 2283536)
30+
TestICS03Handshake:testInvalidConnOpenTry() (gas: 2283346)
2931
TestICS03Version:testCopyVersions() (gas: 570207)
3032
TestICS03Version:testFindSupportedVersion() (gas: 34452)
3133
TestICS03Version:testIsSupportedVersion() (gas: 13568)
3234
TestICS03Version:testPickVersion() (gas: 37836)
3335
TestICS03Version:testVerifyProposedVersion() (gas: 21308)
3436
TestICS03Version:testVerifySupportedFeature() (gas: 10229)
35-
TestICS04Handshake:testBindPort() (gas: 456448)
36-
TestICS04Handshake:testChanClose() (gas: 12159177)
37-
TestICS04Handshake:testChanOpenAck() (gas: 3242652)
38-
TestICS04Handshake:testChanOpenConfirm() (gas: 3538460)
39-
TestICS04Handshake:testChanOpenInit() (gas: 2395251)
40-
TestICS04Handshake:testChanOpenTry() (gas: 2897730)
41-
TestICS04Handshake:testInvalidChanOpenAck() (gas: 2317075)
42-
TestICS04Handshake:testInvalidChanOpenConfirm() (gas: 2391732)
43-
TestICS04Handshake:testInvalidChanOpenInit() (gas: 1677410)
44-
TestICS04Handshake:testInvalidChanOpenTry() (gas: 1692299)
45-
TestICS04Packet:testAcknowledgementPacket() (gas: 3111209)
46-
TestICS04Packet:testInvalidSendPacket() (gas: 3294829)
47-
TestICS04Packet:testRecvPacket() (gas: 9485892)
48-
TestICS04Packet:testRecvPacketTimeoutHeight() (gas: 3053603)
49-
TestICS04Packet:testRecvPacketTimeoutTimestamp() (gas: 3077652)
50-
TestICS04Packet:testSendPacket() (gas: 4393801)
51-
TestICS04Packet:testTimeoutOnClose() (gas: 3304846)
52-
TestICS04Upgrade:testCrossingHelloInconsistentVersions() (gas: 9732925)
53-
TestICS04Upgrade:testUpgradeAuthorityCancel() (gas: 44979235)
54-
TestICS04Upgrade:testUpgradeCannotCancelWithOldErrorReceipt() (gas: 3297188)
55-
TestICS04Upgrade:testUpgradeCannotRecvNextUpgradePacket() (gas: 5125194)
56-
TestICS04Upgrade:testUpgradeCounterpartyAdvanceNextSequenceBeforeOpen() (gas: 5088264)
57-
TestICS04Upgrade:testUpgradeCrossingHelloIncompatibleProposals() (gas: 4844529)
58-
TestICS04Upgrade:testUpgradeFull() (gas: 55706062)
59-
TestICS04Upgrade:testUpgradeInit() (gas: 2925623)
60-
TestICS04Upgrade:testUpgradeNoChanges() (gas: 2342894)
61-
TestICS04Upgrade:testUpgradeNotUpgradableModule() (gas: 3443205)
62-
TestICS04Upgrade:testUpgradeOutOfSync() (gas: 3728418)
63-
TestICS04Upgrade:testUpgradeRelaySuccessAtCounterpartyFlushComplete() (gas: 5097801)
64-
TestICS04Upgrade:testUpgradeRelaySuccessAtFlushing() (gas: 5469958)
65-
TestICS04Upgrade:testUpgradeSendPacketFailAtFlushingOrFlushComplete() (gas: 3907976)
66-
TestICS04Upgrade:testUpgradeTimeoutAbortAck() (gas: 17324220)
67-
TestICS04Upgrade:testUpgradeTimeoutAbortConfirm() (gas: 20921139)
68-
TestICS04Upgrade:testUpgradeTimeoutUpgrade() (gas: 68900740)
69-
TestICS04Upgrade:testUpgradeToOrdered() (gas: 52811190)
70-
TestICS04Upgrade:testUpgradeToUnordered() (gas: 42156184)
37+
TestICS04Handshake:testBindPort() (gas: 461372)
38+
TestICS04Handshake:testChanClose() (gas: 12244889)
39+
TestICS04Handshake:testChanOpenAck() (gas: 3264520)
40+
TestICS04Handshake:testChanOpenConfirm() (gas: 3561004)
41+
TestICS04Handshake:testChanOpenInit() (gas: 2411027)
42+
TestICS04Handshake:testChanOpenTry() (gas: 2918880)
43+
TestICS04Handshake:testInvalidChanOpenAck() (gas: 2327618)
44+
TestICS04Handshake:testInvalidChanOpenConfirm() (gas: 2402634)
45+
TestICS04Handshake:testInvalidChanOpenInit() (gas: 1677184)
46+
TestICS04Handshake:testInvalidChanOpenTry() (gas: 1692266)
47+
TestICS04Packet:testAcknowledgementPacket() (gas: 3133839)
48+
TestICS04Packet:testInvalidSendPacket() (gas: 3317459)
49+
TestICS04Packet:testRecvPacket() (gas: 9561916)
50+
TestICS04Packet:testRecvPacketTimeoutHeight() (gas: 3083947)
51+
TestICS04Packet:testRecvPacketTimeoutTimestamp() (gas: 3107997)
52+
TestICS04Packet:testSendPacket() (gas: 4425319)
53+
TestICS04Packet:testTimeoutOnClose() (gas: 3335905)
54+
TestICS04Upgrade:testCrossingHelloInconsistentVersions() (gas: 9761065)
55+
TestICS04Upgrade:testUpgradeAuthorityCancel() (gas: 45179742)
56+
TestICS04Upgrade:testUpgradeCannotCancelWithOldErrorReceipt() (gas: 3309916)
57+
TestICS04Upgrade:testUpgradeCannotRecvNextUpgradePacket() (gas: 5142516)
58+
TestICS04Upgrade:testUpgradeCounterpartyAdvanceNextSequenceBeforeOpen() (gas: 5101888)
59+
TestICS04Upgrade:testUpgradeCrossingHelloIncompatibleProposals() (gas: 4859793)
60+
TestICS04Upgrade:testUpgradeFull() (gas: 55736320)
61+
TestICS04Upgrade:testUpgradeInit() (gas: 2937759)
62+
TestICS04Upgrade:testUpgradeNoChanges() (gas: 2354426)
63+
TestICS04Upgrade:testUpgradeNotUpgradableModule() (gas: 3470809)
64+
TestICS04Upgrade:testUpgradeOutOfSync() (gas: 3741133)
65+
TestICS04Upgrade:testUpgradeRelaySuccessAtCounterpartyFlushComplete() (gas: 5115114)
66+
TestICS04Upgrade:testUpgradeRelaySuccessAtFlushing() (gas: 5487347)
67+
TestICS04Upgrade:testUpgradeSendPacketFailAtFlushingOrFlushComplete() (gas: 3920258)
68+
TestICS04Upgrade:testUpgradeTimeoutAbortAck() (gas: 17345060)
69+
TestICS04Upgrade:testUpgradeTimeoutAbortConfirm() (gas: 20945649)
70+
TestICS04Upgrade:testUpgradeTimeoutUpgrade() (gas: 69105350)
71+
TestICS04Upgrade:testUpgradeToOrdered() (gas: 53030759)
72+
TestICS04Upgrade:testUpgradeToUnordered() (gas: 42323192)
7173
TestICS04UpgradeApp:testUpgradeAuthorizationChanneNotFound() (gas: 62062)
72-
TestICS04UpgradeApp:testUpgradeAuthorizationRePropose() (gas: 2365672)
73-
TestICS04UpgradeApp:testUpgradeAuthorizationRemove() (gas: 2346118)
74-
TestICS20:testAddressToHex(address) (runs: 256, μ: 26869, ~: 27044)
75-
TestICS20:testHexToAddress(string) (runs: 256, μ: 4636, ~: 4595)
76-
TestICS20:testIsEscapedString() (gas: 62745)
77-
TestICS20:testMarshaling() (gas: 180081)
78-
TestICS20:testParseAmount(uint256) (runs: 256, μ: 31973, ~: 28039)
74+
TestICS04UpgradeApp:testUpgradeAuthorizationRePropose() (gas: 2376902)
75+
TestICS04UpgradeApp:testUpgradeAuthorizationRemove() (gas: 2357348)
76+
TestICS20:testAddressToHex(address) (runs: 256, μ: 26910, ~: 27088)
77+
TestICS20:testHexToAddress(string) (runs: 256, μ: 4658, ~: 4617)
78+
TestICS20:testIsEscapedString() (gas: 64753)
79+
TestICS20:testMarshaling() (gas: 180017)
80+
TestICS20:testParseAmount(uint256) (runs: 256, μ: 31599, ~: 27438)
81+
TestICS20:testParseUint256String() (gas: 26745)

contracts/apps/20-transfer/ICS20Transfer.sol

+4-4
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ abstract contract ICS20Transfer is IBCAppBase, IICS20Errors {
7676
virtual
7777
override
7878
onlyIBC
79-
returns (string memory)
79+
returns (address, string memory)
8080
{
8181
if (msg_.order != Channel.Order.ORDER_UNORDERED) {
8282
revert IBCModuleChannelOrderNotAllowed(msg_.portId, msg_.channelId, msg_.order);
@@ -86,15 +86,15 @@ abstract contract ICS20Transfer is IBCAppBase, IICS20Errors {
8686
revert ICS20UnexpectedVersion(msg_.version);
8787
}
8888
channelEscrowAddresses[msg_.channelId] = address(this);
89-
return ICS20_VERSION;
89+
return (address(this), ICS20_VERSION);
9090
}
9191

9292
function onChanOpenTry(IIBCModule.MsgOnChanOpenTry calldata msg_)
9393
external
9494
virtual
9595
override
9696
onlyIBC
97-
returns (string memory)
97+
returns (address, string memory)
9898
{
9999
if (msg_.order != Channel.Order.ORDER_UNORDERED) {
100100
revert IBCModuleChannelOrderNotAllowed(msg_.portId, msg_.channelId, msg_.order);
@@ -103,7 +103,7 @@ abstract contract ICS20Transfer is IBCAppBase, IICS20Errors {
103103
revert ICS20UnexpectedVersion(msg_.counterpartyVersion);
104104
}
105105
channelEscrowAddresses[msg_.channelId] = address(this);
106-
return ICS20_VERSION;
106+
return (address(this), ICS20_VERSION);
107107
}
108108

109109
function onChanOpenAck(IIBCModule.MsgOnChanOpenAck calldata msg_) external virtual override onlyIBC {

contracts/apps/commons/IBCAppBase.sol

+20-5
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ pragma solidity ^0.8.20;
44
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
55
import {Context} from "@openzeppelin/contracts/utils/Context.sol";
66
import {Packet} from "../../core/04-channel/IIBCChannel.sol";
7-
import {IIBCModule} from "../../core/26-router/IIBCModule.sol";
7+
import {IIBCModule, IIBCModuleInitializer} from "../../core/26-router/IIBCModule.sol";
88
import {IIBCModuleErrors} from "../../core/26-router/IIBCModuleErrors.sol";
99

1010
abstract contract AppBase is Context, IERC165, IIBCModuleErrors {
@@ -41,6 +41,17 @@ abstract contract AppBase is Context, IERC165, IIBCModuleErrors {
4141
}
4242
}
4343

44+
abstract contract IBCAppInitializerBase is AppBase, IIBCModuleInitializer {
45+
/**
46+
* @dev See {IERC165-supportsInterface}
47+
*
48+
* NOTE: This must return true if the `interfaceId` is equal to the `IIBCModule` interface.
49+
*/
50+
function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, AppBase) returns (bool) {
51+
return interfaceId == type(IIBCModuleInitializer).interfaceId || super.supportsInterface(interfaceId);
52+
}
53+
}
54+
4455
/**
4556
* @dev Base contract of the IBC App protocol
4657
*/
@@ -55,8 +66,10 @@ abstract contract IBCAppBase is AppBase, IIBCModule {
5566
virtual
5667
override
5768
onlyIBC
58-
returns (string memory)
59-
{}
69+
returns (address, string memory)
70+
{
71+
return (address(this), "");
72+
}
6073

6174
/**
6275
* @dev See {IIBCModule-onChanOpenTry}
@@ -68,8 +81,10 @@ abstract contract IBCAppBase is AppBase, IIBCModule {
6881
virtual
6982
override
7083
onlyIBC
71-
returns (string memory)
72-
{}
84+
returns (address, string memory)
85+
{
86+
return (address(this), "");
87+
}
7388

7489
/**
7590
* @dev See {IIBCModule-onChanOpenAck}

contracts/apps/mock/IBCMockApp.sol

+4-4
Original file line numberDiff line numberDiff line change
@@ -94,25 +94,25 @@ contract IBCMockApp is IBCAppBase, IIBCMockErrors, Ownable {
9494
virtual
9595
override
9696
onlyIBC
97-
returns (string memory)
97+
returns (address, string memory)
9898
{
9999
if (bytes(msg_.version).length != 0 && keccak256(bytes(msg_.version)) != keccak256(bytes(MOCKAPP_VERSION))) {
100100
revert IBCMockUnexpectedVersion(msg_.version, MOCKAPP_VERSION);
101101
}
102-
return MOCKAPP_VERSION;
102+
return (address(this), MOCKAPP_VERSION);
103103
}
104104

105105
function onChanOpenTry(IIBCModule.MsgOnChanOpenTry calldata msg_)
106106
external
107107
virtual
108108
override
109109
onlyIBC
110-
returns (string memory)
110+
returns (address, string memory)
111111
{
112112
if (keccak256(bytes(msg_.counterpartyVersion)) != keccak256(bytes(MOCKAPP_VERSION))) {
113113
revert IBCMockUnexpectedVersion(msg_.counterpartyVersion, MOCKAPP_VERSION);
114114
}
115-
return MOCKAPP_VERSION;
115+
return (address(this), MOCKAPP_VERSION);
116116
}
117117

118118
function onChanCloseInit(IIBCModule.MsgOnChanCloseInit calldata msg_) external virtual override onlyIBC {

0 commit comments

Comments
 (0)