From 9681eaf05f452afb668568da9d63b90b569a7855 Mon Sep 17 00:00:00 2001 From: Deepak2030 Date: Tue, 3 Sep 2024 14:53:13 +0530 Subject: [PATCH 1/4] added events to new directory --- bun.lockb | Bin 81033 -> 81033 bytes src/ICS20Transfer.sol | 2 +- src/events/IICS02ClientEvents.sol | 11 +++++ src/events/IICS20TransferEvents.sol | 25 ++++++++++++ src/events/IICS26RouterEvents.sol | 35 ++++++++++++++++ src/interfaces/IICS02Client.sol | 7 +--- src/interfaces/IICS20Transfer.sol | 22 +--------- src/interfaces/IICS26Router.sol | 26 +----------- test/ICS02ClientTest.t.sol | 5 ++- test/ICS20TransferTest.t.sol | 31 +++++++------- test/ICS26RouterTest.t.sol | 7 ++-- test/IntegrationTest.t.sol | 60 ++++++++++++++-------------- 12 files changed, 132 insertions(+), 99 deletions(-) create mode 100644 src/events/IICS02ClientEvents.sol create mode 100644 src/events/IICS20TransferEvents.sol create mode 100644 src/events/IICS26RouterEvents.sol diff --git a/bun.lockb b/bun.lockb index 63c3f41c1120637f86baba5c094531b452746a59..591d710ae8ce842a91708d703467f0e056e5ad5a 100755 GIT binary patch delta 16 YcmeDD$=0.8.25; + +import { IICS02ClientMsgs } from "../msgs/IICS02ClientMsgs.sol"; + +interface IICS02ClientEvents is IICS02ClientMsgs{ + /// @notice Emitted when a new client is added to the client router. + /// @param clientId The newly created client identifier + /// @param counterpartyInfo The counterparty client information for the added client + event ICS02ClientAdded(string clientId, CounterpartyInfo counterpartyInfo); +} diff --git a/src/events/IICS20TransferEvents.sol b/src/events/IICS20TransferEvents.sol new file mode 100644 index 0000000..e02af1c --- /dev/null +++ b/src/events/IICS20TransferEvents.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.25; + +import { ICS20Lib } from "../utils/ICS20Lib.sol"; + +interface IICS20TransferEvents { + /// @notice Called when a packet is handled in onSendPacket and a transfer has been initiated + /// @param packetData The transfer packet data + /// @param erc20Address The address of the ERC20 contract of the token sent + event ICS20TokenTransfer(ICS20Lib.PacketDataJSON packetData, address erc20Address); + + /// @notice Called when a packet is received in onReceivePacket + /// @param packetData The transfer packet data + /// @param erc20Address The address of the ERC20 contract of the token received + event ICS20ReceiveTransfer(ICS20Lib.PacketDataJSON packetData, address erc20Address); + + /// @notice Called after handling acknowledgement in onAcknowledgementPacket + /// @param packetData The transfer packet data + /// @param acknowledgement The acknowledgement data + event ICS20Acknowledgement(ICS20Lib.PacketDataJSON packetData, bytes acknowledgement); + + /// @notice Called after handling a timeout in onTimeoutPacket + /// @param packetData The transfer packet data + event ICS20Timeout(ICS20Lib.PacketDataJSON packetData); +} \ No newline at end of file diff --git a/src/events/IICS26RouterEvents.sol b/src/events/IICS26RouterEvents.sol new file mode 100644 index 0000000..32f47a9 --- /dev/null +++ b/src/events/IICS26RouterEvents.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.25; + +import { IICS26RouterMsgs } from "../msgs/IICS26RouterMsgs.sol"; + +interface IICS26RouterEvents is IICS26RouterMsgs{ + + /// @notice Emitted when an IBC application is added to the router + /// @param portId The port identifier + /// @param app The address of the IBC application contract + event IBCAppAdded(string portId, address app); + + /// @notice Emitted when a packet is sent + /// @param packet The sent packet + event SendPacket(Packet packet); + + /// @notice Emitted when a packet is received + /// @param packet The received packet + event RecvPacket(Packet packet); + + /// @notice Emitted when a packet acknowledgement is written + /// @param packet The packet that was acknowledged + /// @param acknowledgement The acknowledgement data + event WriteAcknowledgement(Packet packet, bytes acknowledgement); + + /// @notice Emitted when a packet is timed out + /// @param packet The packet that was timed out + event TimeoutPacket(Packet packet); + + /// @notice Emitted when a packet is acknowledged + /// @param packet The packet that was acknowledged + /// @param acknowledgement The acknowledgement data + event AckPacket(Packet packet, bytes acknowledgement); + +} \ No newline at end of file diff --git a/src/interfaces/IICS02Client.sol b/src/interfaces/IICS02Client.sol index be28069..adaf7d2 100644 --- a/src/interfaces/IICS02Client.sol +++ b/src/interfaces/IICS02Client.sol @@ -3,14 +3,11 @@ pragma solidity >=0.8.25; import { IICS02ClientMsgs } from "../msgs/IICS02ClientMsgs.sol"; import { ILightClient } from "./ILightClient.sol"; +import { IICS02ClientEvents } from "../events/IICS02ClientEvents.sol"; /// @title ICS02 Light Client Router Interface /// @notice IICS02Client is an interface for the IBC Eureka client router -interface IICS02Client is IICS02ClientMsgs { - /// @notice Emitted when a new client is added to the client router. - /// @param clientId The newly created client identifier - /// @param counterpartyInfo The counterparty client information, if provided - event ICS02ClientAdded(string clientId, CounterpartyInfo counterpartyInfo); +interface IICS02Client is IICS02ClientMsgs, IICS02ClientEvents { /// @notice Returns the counterparty client information given the client identifier. /// @param clientId The client identifier diff --git a/src/interfaces/IICS20Transfer.sol b/src/interfaces/IICS20Transfer.sol index b6e8f67..6d0e96f 100644 --- a/src/interfaces/IICS20Transfer.sol +++ b/src/interfaces/IICS20Transfer.sol @@ -1,28 +1,10 @@ // SPDX-License-Identifier: MIT pragma solidity >=0.8.25; -import { ICS20Lib } from "../utils/ICS20Lib.sol"; import { IICS20TransferMsgs } from "../msgs/IICS20TransferMsgs.sol"; +import { IICS20TransferEvents } from "../events/IICS20TransferEvents.sol"; -interface IICS20Transfer is IICS20TransferMsgs { - /// @notice Called when a packet is handled in onSendPacket and a transfer has been initiated - /// @param packetData The transfer packet data - /// @param erc20Address The address of the ERC20 contract of the token sent - event ICS20Transfer(ICS20Lib.PacketDataJSON packetData, address erc20Address); - - /// @notice Called when a packet is received in onReceivePacket - /// @param packetData The transfer packet data - /// @param erc20Address The address of the ERC20 contract of the token received - event ICS20ReceiveTransfer(ICS20Lib.PacketDataJSON packetData, address erc20Address); - - /// @notice Called after handling acknowledgement in onAcknowledgementPacket - /// @param packetData The transfer packet data - /// @param acknowledgement The acknowledgement data - event ICS20Acknowledgement(ICS20Lib.PacketDataJSON packetData, bytes acknowledgement); - - /// @notice Called after handling a timeout in onTimeoutPacket - /// @param packetData The transfer packet data - event ICS20Timeout(ICS20Lib.PacketDataJSON packetData); +interface IICS20Transfer is IICS20TransferMsgs, IICS20TransferEvents { /// @notice Send a transfer /// @param msg The message for sending a transfer diff --git a/src/interfaces/IICS26Router.sol b/src/interfaces/IICS26Router.sol index 9171339..749e2bf 100644 --- a/src/interfaces/IICS26Router.sol +++ b/src/interfaces/IICS26Router.sol @@ -3,14 +3,11 @@ pragma solidity >=0.8.25; import { IICS26RouterMsgs } from "../msgs/IICS26RouterMsgs.sol"; import { IIBCApp } from "./IIBCApp.sol"; +import { IICS26RouterEvents } from "../events/IICS26RouterEvents.sol"; /// @title ICS26 Router Interface /// @notice IICS26Router is an interface for the IBC Eureka router -interface IICS26Router is IICS26RouterMsgs { - /// @notice Emitted when an IBC application is added to the router - /// @param portId The port identifier - /// @param app The address of the IBC application contract - event IBCAppAdded(string portId, address app); +interface IICS26Router is IICS26RouterMsgs, IICS26RouterEvents { /// @notice Returns the address of the IBC application given the port identifier /// @param portId The port identifier @@ -41,23 +38,4 @@ interface IICS26Router is IICS26RouterMsgs { /// @param msg The message for timing out packets function timeoutPacket(MsgTimeoutPacket calldata msg) external; - // --------------------- Events --------------------- // - - /// @notice Emitted when a packet is sent - /// @param packet The sent packet - event SendPacket(Packet packet); - /// @notice Emitted when a packet is received - /// @param packet The received packet - event RecvPacket(Packet packet); - /// @notice Emitted when a packet acknowledgement is written - /// @param packet The packet that was acknowledged - /// @param acknowledgement The acknowledgement data - event WriteAcknowledgement(Packet packet, bytes acknowledgement); - /// @notice Emitted when a packet is timed out - /// @param packet The packet that was timed out - event TimeoutPacket(Packet packet); - /// @notice Emitted when a packet is acknowledged - /// @param packet The packet that was acknowledged - /// @param acknowledgement The acknowledgement data - event AckPacket(Packet packet, bytes acknowledgement); } diff --git a/test/ICS02ClientTest.t.sol b/test/ICS02ClientTest.t.sol index 1b69ed1..22a42d9 100644 --- a/test/ICS02ClientTest.t.sol +++ b/test/ICS02ClientTest.t.sol @@ -10,8 +10,9 @@ import { IICS02ClientMsgs } from "../src/msgs/IICS02ClientMsgs.sol"; import { ILightClient } from "../src/interfaces/ILightClient.sol"; import { ILightClientMsgs } from "../src/msgs/ILightClientMsgs.sol"; import { DummyLightClient } from "./mocks/DummyLightClient.sol"; +import { IICS02ClientEvents } from "../src/events/IICS02ClientEvents.sol"; -contract ICS02ClientTest is Test { +contract ICS02ClientTest is Test, IICS02ClientEvents { IICS02Client public ics02Client; DummyLightClient public lightClient; @@ -27,7 +28,7 @@ contract ICS02ClientTest is Test { IICS02ClientMsgs.CounterpartyInfo memory counterpartyInfo = IICS02ClientMsgs.CounterpartyInfo(counterpartyClient, merklePrefix); vm.expectEmit(); - emit IICS02Client.ICS02ClientAdded("07-tendermint-0", counterpartyInfo); + emit ICS02ClientAdded("07-tendermint-0", counterpartyInfo); string memory clientIdentifier = ics02Client.addClient("07-tendermint", counterpartyInfo, address(lightClient)); ILightClient fetchedLightClient = ics02Client.getClient(clientIdentifier); diff --git a/test/ICS20TransferTest.t.sol b/test/ICS20TransferTest.t.sol index 9e935f5..f25bca2 100644 --- a/test/ICS20TransferTest.t.sol +++ b/test/ICS20TransferTest.t.sol @@ -17,8 +17,9 @@ import { ICS20Lib } from "../src/utils/ICS20Lib.sol"; import { IICS20Errors } from "../src/errors/IICS20Errors.sol"; import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; import { Vm } from "forge-std/Vm.sol"; +import { IICS20TransferEvents } from "../src/events/IICS20TransferEvents.sol"; -contract ICS20TransferTest is Test { +contract ICS20TransferTest is Test, IICS20TransferEvents { ICS20Transfer public ics20Transfer; TestERC20 public erc20; string public erc20AddressStr; @@ -130,7 +131,7 @@ contract ICS20TransferTest is Test { assertEq(contractBalanceBefore, 0); vm.expectEmit(); - emit IICS20Transfer.ICS20Transfer(expectedDefaultSendPacketData, address(erc20)); + emit ICS20TokenTransfer(expectedDefaultSendPacketData, address(erc20)); ics20Transfer.onSendPacket( IIBCAppCallbacks.OnSendPacketCallback({ packet: packet, sender: address(ics20Transfer) }) ); @@ -159,7 +160,7 @@ contract ICS20TransferTest is Test { expectedDefaultSendPacketData.amount = largeAmount; vm.expectEmit(); - emit IICS20Transfer.ICS20Transfer(expectedDefaultSendPacketData, address(erc20)); + emit ICS20TokenTransfer(expectedDefaultSendPacketData, address(erc20)); ics20Transfer.onSendPacket( IIBCAppCallbacks.OnSendPacketCallback({ packet: packet, sender: address(ics20Transfer) }) ); @@ -268,7 +269,7 @@ contract ICS20TransferTest is Test { assertEq(contractBalanceBefore, 0); vm.expectEmit(); - emit IICS20Transfer.ICS20Transfer(expectedDefaultSendPacketData, address(erc20)); + emit ICS20TokenTransfer(expectedDefaultSendPacketData, address(erc20)); ics20Transfer.onSendPacket( IIBCAppCallbacks.OnSendPacketCallback({ packet: packet, sender: address(ics20Transfer) }) ); @@ -279,7 +280,7 @@ contract ICS20TransferTest is Test { assertEq(contractBalanceAfterSend, defaultAmount); vm.expectEmit(); - emit IICS20Transfer.ICS20Acknowledgement( + emit ICS20Acknowledgement( expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON ); ics20Transfer.onAcknowledgementPacket( @@ -308,7 +309,7 @@ contract ICS20TransferTest is Test { assertEq(contractBalanceBefore, 0); vm.expectEmit(); - emit IICS20Transfer.ICS20Transfer(expectedDefaultSendPacketData, address(erc20)); + emit ICS20TokenTransfer(expectedDefaultSendPacketData, address(erc20)); ics20Transfer.onSendPacket( IIBCAppCallbacks.OnSendPacketCallback({ packet: packet, sender: address(ics20Transfer) }) ); @@ -319,7 +320,7 @@ contract ICS20TransferTest is Test { assertEq(contractBalanceAfterSend, defaultAmount); vm.expectEmit(); - emit IICS20Transfer.ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.FAILED_ACKNOWLEDGEMENT_JSON); + emit ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.FAILED_ACKNOWLEDGEMENT_JSON); ics20Transfer.onAcknowledgementPacket( IIBCAppCallbacks.OnAcknowledgementPacketCallback({ packet: packet, @@ -384,7 +385,7 @@ contract ICS20TransferTest is Test { assertEq(contractBalanceBefore, 0); vm.expectEmit(); - emit IICS20Transfer.ICS20Transfer(expectedDefaultSendPacketData, address(erc20)); + emit ICS20TokenTransfer(expectedDefaultSendPacketData, address(erc20)); ics20Transfer.onSendPacket( IIBCAppCallbacks.OnSendPacketCallback({ packet: packet, sender: address(ics20Transfer) }) ); @@ -395,7 +396,7 @@ contract ICS20TransferTest is Test { assertEq(contractBalanceAfterSend, defaultAmount); vm.expectEmit(); - emit IICS20Transfer.ICS20Timeout(expectedDefaultSendPacketData); + emit ICS20Timeout(expectedDefaultSendPacketData); ics20Transfer.onTimeoutPacket( IIBCAppCallbacks.OnTimeoutPacketCallback({ packet: packet, relayer: makeAddr("relayer") }) ); @@ -444,7 +445,7 @@ contract ICS20TransferTest is Test { assertEq(contractBalanceBefore, 0); vm.expectEmit(); - emit IICS20Transfer.ICS20Transfer(expectedDefaultSendPacketData, address(erc20)); + emit ICS20TokenTransfer(expectedDefaultSendPacketData, address(erc20)); ics20Transfer.onSendPacket( IIBCAppCallbacks.OnSendPacketCallback({ packet: packet, sender: address(ics20Transfer) }) ); @@ -472,7 +473,7 @@ contract ICS20TransferTest is Test { packet.sourceChannel = newSourceChannel; vm.expectEmit(); - emit IICS20Transfer.ICS20ReceiveTransfer( + emit ICS20ReceiveTransfer( ICS20Lib.PacketDataJSON({ denom: receivedDenom, sender: senderStr, @@ -513,7 +514,7 @@ contract ICS20TransferTest is Test { vm.expectEmit(true, true, true, false); // Not checking data because we don't know the address yet ICS20Lib.PacketDataJSON memory packetData; address erc20Address; - emit IICS20Transfer.ICS20ReceiveTransfer(packetData, erc20Address); // we check these values later + emit ICS20ReceiveTransfer(packetData, erc20Address); // we check these values later vm.recordLogs(); bytes memory ack = ics20Transfer.onRecvPacket( IIBCAppCallbacks.OnRecvPacketCallback({ packet: packet, relayer: makeAddr("relayer") }) @@ -524,7 +525,7 @@ contract ICS20TransferTest is Test { Vm.Log[] memory entries = vm.getRecordedLogs(); assertEq(entries.length, 4); Vm.Log memory receiveTransferLog = entries[3]; - assertEq(receiveTransferLog.topics[0], IICS20Transfer.ICS20ReceiveTransfer.selector); + assertEq(receiveTransferLog.topics[0], ICS20ReceiveTransfer.selector); (packetData, erc20Address) = abi.decode(receiveTransferLog.data, (ICS20Lib.PacketDataJSON, address)); assertEq(packetData.denom, foreignDenom); @@ -562,7 +563,7 @@ contract ICS20TransferTest is Test { vm.expectEmit(true, true, true, false); // Not checking data because we don't know the address yet ICS20Lib.PacketDataJSON memory packetData; address erc20Address; - emit IICS20Transfer.ICS20ReceiveTransfer(packetData, erc20Address); // we check these values later + emit ICS20ReceiveTransfer(packetData, erc20Address); // we check these values later vm.recordLogs(); bytes memory ack = ics20Transfer.onRecvPacket( IIBCAppCallbacks.OnRecvPacketCallback({ packet: packet, relayer: makeAddr("relayer") }) @@ -573,7 +574,7 @@ contract ICS20TransferTest is Test { Vm.Log[] memory entries = vm.getRecordedLogs(); assertEq(entries.length, 4); Vm.Log memory receiveTransferLog = entries[3]; - assertEq(receiveTransferLog.topics[0], IICS20Transfer.ICS20ReceiveTransfer.selector); + assertEq(receiveTransferLog.topics[0], ICS20ReceiveTransfer.selector); (packetData, erc20Address) = abi.decode(receiveTransferLog.data, (ICS20Lib.PacketDataJSON, address)); assertEq(packetData.denom, foreignDenom); diff --git a/test/ICS26RouterTest.t.sol b/test/ICS26RouterTest.t.sol index 10cbcfc..f55a5dd 100644 --- a/test/ICS26RouterTest.t.sol +++ b/test/ICS26RouterTest.t.sol @@ -13,8 +13,9 @@ import { ICS20Transfer } from "../src/ICS20Transfer.sol"; import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; import { DummyLightClient } from "./mocks/DummyLightClient.sol"; import { ILightClientMsgs } from "../src/msgs/ILightClientMsgs.sol"; +import { IICS26RouterEvents } from "../src/events/IICS26RouterEvents.sol"; -contract ICS26RouterTest is Test { +contract ICS26RouterTest is Test, IICS26RouterEvents { ICS02Client public ics02Client; ICS26Router public ics26Router; @@ -30,7 +31,7 @@ contract ICS26RouterTest is Test { string memory ics20AddressStr = Strings.toHexString(address(ics20Transfer)); vm.expectEmit(); - emit IICS26Router.IBCAppAdded(ics20AddressStr, address(ics20Transfer)); + emit IBCAppAdded(ics20AddressStr, address(ics20Transfer)); ics26Router.addIBCApp("", address(ics20Transfer)); assertEq(address(ics20Transfer), address(ics26Router.getIBCApp(ics20AddressStr))); @@ -40,7 +41,7 @@ contract ICS26RouterTest is Test { ICS20Transfer ics20Transfer = new ICS20Transfer(address(ics26Router)); vm.expectEmit(); - emit IICS26Router.IBCAppAdded("transfer", address(ics20Transfer)); + emit IBCAppAdded("transfer", address(ics20Transfer)); ics26Router.addIBCApp("transfer", address(ics20Transfer)); assertEq(address(ics20Transfer), address(ics26Router.getIBCApp("transfer"))); diff --git a/test/IntegrationTest.t.sol b/test/IntegrationTest.t.sol index 35f811d..52b67d0 100644 --- a/test/IntegrationTest.t.sol +++ b/test/IntegrationTest.t.sol @@ -23,8 +23,10 @@ import { ICS20Lib } from "../src/utils/ICS20Lib.sol"; import { ICS24Host } from "../src/utils/ICS24Host.sol"; import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; import { Vm } from "forge-std/Vm.sol"; +import { IICS26RouterEvents } from "../src/events/IICS26RouterEvents.sol"; +import { IICS20TransferEvents } from "../src/events/IICS20TransferEvents.sol"; -contract IntegrationTest is Test { +contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { IICS02Client public ics02Client; ICS26Router public ics26Router; DummyLightClient public lightClient; @@ -62,7 +64,7 @@ contract IntegrationTest is Test { ics20AddressStr = Strings.toHexString(address(ics20Transfer)); vm.expectEmit(); - emit IICS26Router.IBCAppAdded("transfer", address(ics20Transfer)); + emit IBCAppAdded("transfer", address(ics20Transfer)); ics26Router.addIBCApp("transfer", address(ics20Transfer)); assertEq(address(ics20Transfer), address(ics26Router.getIBCApp("transfer"))); @@ -98,7 +100,7 @@ contract IntegrationTest is Test { proofHeight: IICS02ClientMsgs.Height({ revisionNumber: 1, revisionHeight: 42 }) // dummy client will accept }); vm.expectEmit(); - emit IICS20Transfer.ICS20Acknowledgement( + emit ICS20Acknowledgement( expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON ); ics26Router.ackPacket(ackMsg); @@ -140,7 +142,7 @@ contract IntegrationTest is Test { proofHeight: IICS02ClientMsgs.Height({ revisionNumber: 1, revisionHeight: 42 }) // dummy client will accept }); vm.expectEmit(); - emit IICS20Transfer.ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.FAILED_ACKNOWLEDGEMENT_JSON); + emit ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.FAILED_ACKNOWLEDGEMENT_JSON); ics26Router.ackPacket(ackMsg); // commitment should be deleted bytes32 path = ICS24Host.packetCommitmentKeyCalldata( @@ -168,7 +170,7 @@ contract IntegrationTest is Test { proofHeight: IICS02ClientMsgs.Height({ revisionNumber: 1, revisionHeight: 42 }) // dummy client will accept }); vm.expectEmit(); - emit IICS20Transfer.ICS20Timeout(expectedDefaultSendPacketData); + emit ICS20Timeout(expectedDefaultSendPacketData); ics26Router.timeoutPacket(timeoutMsg); // commitment should be deleted bytes32 path = ICS24Host.packetCommitmentKeyCalldata( @@ -194,7 +196,7 @@ contract IntegrationTest is Test { proofHeight: IICS02ClientMsgs.Height({ revisionNumber: 1, revisionHeight: 42 }) // dummy client will accept }); vm.expectEmit(); - emit IICS20Transfer.ICS20Acknowledgement( + emit ICS20Acknowledgement( expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON ); ics26Router.ackPacket(ackMsg); @@ -229,7 +231,7 @@ contract IntegrationTest is Test { data: ICS20Lib.marshalJSON(receivedDenom, transferAmount, senderStr, receiverStr, "backmemo") }); vm.expectEmit(); - emit IICS20Transfer.ICS20ReceiveTransfer( + emit ICS20ReceiveTransfer( ICS20Lib.PacketDataJSON({ denom: receivedDenom, sender: senderStr, @@ -240,9 +242,9 @@ contract IntegrationTest is Test { address(erc20) ); vm.expectEmit(); - emit IICS26Router.WriteAcknowledgement(packet, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); + emit WriteAcknowledgement(packet, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); vm.expectEmit(); - emit IICS26Router.RecvPacket(packet); + emit RecvPacket(packet); ics26Router.recvPacket( IICS26RouterMsgs.MsgRecvPacket({ @@ -288,11 +290,11 @@ contract IntegrationTest is Test { ICS20Lib.PacketDataJSON memory packetData; address erc20Address; vm.expectEmit(true, true, true, false); // Not checking data because we don't know the address yet - emit IICS20Transfer.ICS20ReceiveTransfer(packetData, erc20Address); // we check these values later + emit ICS20ReceiveTransfer(packetData, erc20Address); // we check these values later vm.expectEmit(); - emit IICS26Router.WriteAcknowledgement(receivePacket, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); + emit WriteAcknowledgement(receivePacket, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); vm.expectEmit(); - emit IICS26Router.RecvPacket(receivePacket); + emit RecvPacket(receivePacket); vm.recordLogs(); ics26Router.recvPacket( @@ -313,7 +315,7 @@ contract IntegrationTest is Test { // find and extract data from the ICS20ReceiveTransfer event Vm.Log memory receiveTransferLog = vm.getRecordedLogs()[3]; - assertEq(receiveTransferLog.topics[0], IICS20Transfer.ICS20ReceiveTransfer.selector); + assertEq(receiveTransferLog.topics[0], ICS20ReceiveTransfer.selector); (packetData, erc20Address) = abi.decode(receiveTransferLog.data, (ICS20Lib.PacketDataJSON, address)); assertEq(packetData.denom, foreignDenom); @@ -353,7 +355,7 @@ contract IntegrationTest is Test { }); vm.expectEmit(); - emit IICS20Transfer.ICS20Transfer( + emit ICS20TokenTransfer( ICS20Lib.PacketDataJSON({ denom: expectedFullDenomPath, sender: senderStr, @@ -374,7 +376,7 @@ contract IntegrationTest is Test { data: ICS20Lib.marshalJSON(expectedFullDenomPath, transferAmount, senderStr, receiverStr, "backmemo") }); vm.expectEmit(); - emit IICS26Router.SendPacket(expectedPacketSent); + emit SendPacket(expectedPacketSent); vm.prank(sender); uint32 sequence = ics20Transfer.sendTransfer(msgSendTransfer); assertEq(sequence, expectedPacketSent.sequence); @@ -414,11 +416,11 @@ contract IntegrationTest is Test { vm.expectEmit(true, true, true, false); // Not checking data because we don't know the address yet ICS20Lib.PacketDataJSON memory packetData; address erc20Address; - emit IICS20Transfer.ICS20ReceiveTransfer(packetData, erc20Address); // we check these values later + emit ICS20ReceiveTransfer(packetData, erc20Address); // we check these values later vm.expectEmit(); - emit IICS26Router.WriteAcknowledgement(receivePacket, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); + emit WriteAcknowledgement(receivePacket, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); vm.expectEmit(); - emit IICS26Router.RecvPacket(receivePacket); + emit RecvPacket(receivePacket); vm.recordLogs(); ics26Router.recvPacket( @@ -439,7 +441,7 @@ contract IntegrationTest is Test { // find and extract data from the ICS20ReceiveTransfer event Vm.Log memory receiveTransferLog = vm.getRecordedLogs()[3]; - assertEq(receiveTransferLog.topics[0], IICS20Transfer.ICS20ReceiveTransfer.selector); + assertEq(receiveTransferLog.topics[0], ICS20ReceiveTransfer.selector); (packetData, erc20Address) = abi.decode(receiveTransferLog.data, (ICS20Lib.PacketDataJSON, address)); assertEq(packetData.denom, foreignDenom); @@ -479,7 +481,7 @@ contract IntegrationTest is Test { }); vm.expectEmit(); - emit IICS20Transfer.ICS20Transfer( + emit ICS20TokenTransfer( ICS20Lib.PacketDataJSON({ denom: expectedFullDenomPath, sender: senderStr, @@ -501,7 +503,7 @@ contract IntegrationTest is Test { version: ICS20Lib.ICS20_VERSION, data: ICS20Lib.marshalJSON(expectedFullDenomPath, transferAmount, senderStr, receiverStr, "backmemo") }); - emit IICS26Router.SendPacket(expectedPacketSent); + emit SendPacket(expectedPacketSent); vm.prank(sender); uint32 sequence = ics20Transfer.sendTransfer(msgSendTransfer); @@ -545,11 +547,11 @@ contract IntegrationTest is Test { vm.expectEmit(true, true, true, false); // Not checking data because we don't know the address yet ICS20Lib.PacketDataJSON memory packetData; address erc20Address; - emit IICS20Transfer.ICS20ReceiveTransfer(packetData, erc20Address); // we check these values later + emit ICS20ReceiveTransfer(packetData, erc20Address); // we check these values later vm.expectEmit(); - emit IICS26Router.WriteAcknowledgement(receivePacket, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); + emit WriteAcknowledgement(receivePacket, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); vm.expectEmit(); - emit IICS26Router.RecvPacket(receivePacket); + emit RecvPacket(receivePacket); vm.recordLogs(); ics26Router.recvPacket( @@ -570,7 +572,7 @@ contract IntegrationTest is Test { // find and extract data from the ICS20ReceiveTransfer event Vm.Log memory receiveTransferLog = vm.getRecordedLogs()[3]; - assertEq(receiveTransferLog.topics[0], IICS20Transfer.ICS20ReceiveTransfer.selector); + assertEq(receiveTransferLog.topics[0], ICS20ReceiveTransfer.selector); (packetData, erc20Address) = abi.decode(receiveTransferLog.data, (ICS20Lib.PacketDataJSON, address)); assertEq(packetData.denom, foreignDenom); @@ -610,7 +612,7 @@ contract IntegrationTest is Test { }); vm.expectEmit(); - emit IICS20Transfer.ICS20Transfer( + emit ICS20TokenTransfer( ICS20Lib.PacketDataJSON({ denom: expectedFullDenomPath, sender: senderStr, @@ -632,7 +634,7 @@ contract IntegrationTest is Test { version: ICS20Lib.ICS20_VERSION, data: ICS20Lib.marshalJSON(expectedFullDenomPath, largeAmount, senderStr, receiverStr, "") }); - emit IICS26Router.SendPacket(expectedPacketSent); + emit SendPacket(expectedPacketSent); vm.prank(sender); uint32 sequence = ics20Transfer.sendTransfer(msgSendTransfer); @@ -659,7 +661,7 @@ contract IntegrationTest is Test { proofHeight: IICS02ClientMsgs.Height({ revisionNumber: 1, revisionHeight: 42 }) // dummy client will accept }); vm.expectEmit(); - emit IICS20Transfer.ICS20Acknowledgement( + emit ICS20Acknowledgement( expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON ); ics26Router.ackPacket(ackMsg); @@ -730,7 +732,7 @@ contract IntegrationTest is Test { vm.startPrank(sender); vm.expectEmit(); - emit IICS20Transfer.ICS20Transfer(expectedDefaultSendPacketData, address(erc20)); + emit ICS20TokenTransfer(expectedDefaultSendPacketData, address(erc20)); uint32 sequence = ics20Transfer.sendTransfer(msgSendTransfer); assertEq(sequence, 1); From eaeb1bfd44d4ee459310fa89f6cc25bac740bac7 Mon Sep 17 00:00:00 2001 From: Deepak2030 Date: Fri, 6 Sep 2024 20:11:15 +0530 Subject: [PATCH 2/4] ran linter and updated ABI for new eventname --- abi/ICS20Transfer.json | 2 +- abi/SdkICS20Transfer.json | 2 +- src/events/IICS02ClientEvents.sol | 2 +- src/events/IICS20TransferEvents.sol | 2 +- src/events/IICS26RouterEvents.sol | 6 ++---- src/interfaces/IICS02Client.sol | 1 - src/interfaces/IICS20Transfer.sol | 1 - src/interfaces/IICS26Router.sol | 2 -- test/ICS20TransferTest.t.sol | 5 +---- test/ICS26RouterTest.t.sol | 1 - test/IntegrationTest.t.sol | 14 +++----------- 11 files changed, 10 insertions(+), 28 deletions(-) diff --git a/abi/ICS20Transfer.json b/abi/ICS20Transfer.json index d107995..5c909e4 100644 --- a/abi/ICS20Transfer.json +++ b/abi/ICS20Transfer.json @@ -512,7 +512,7 @@ }, { "type": "event", - "name": "ICS20Transfer", + "name": "ICS20TokenTransfer", "inputs": [ { "name": "packetData", diff --git a/abi/SdkICS20Transfer.json b/abi/SdkICS20Transfer.json index c6a11bf..995af39 100644 --- a/abi/SdkICS20Transfer.json +++ b/abi/SdkICS20Transfer.json @@ -512,7 +512,7 @@ }, { "type": "event", - "name": "ICS20Transfer", + "name": "ICS20TokenTransfer", "inputs": [ { "name": "packetData", diff --git a/src/events/IICS02ClientEvents.sol b/src/events/IICS02ClientEvents.sol index 6c4d104..510d4ec 100644 --- a/src/events/IICS02ClientEvents.sol +++ b/src/events/IICS02ClientEvents.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.25; import { IICS02ClientMsgs } from "../msgs/IICS02ClientMsgs.sol"; -interface IICS02ClientEvents is IICS02ClientMsgs{ +interface IICS02ClientEvents is IICS02ClientMsgs { /// @notice Emitted when a new client is added to the client router. /// @param clientId The newly created client identifier /// @param counterpartyInfo The counterparty client information for the added client diff --git a/src/events/IICS20TransferEvents.sol b/src/events/IICS20TransferEvents.sol index e02af1c..bb96797 100644 --- a/src/events/IICS20TransferEvents.sol +++ b/src/events/IICS20TransferEvents.sol @@ -22,4 +22,4 @@ interface IICS20TransferEvents { /// @notice Called after handling a timeout in onTimeoutPacket /// @param packetData The transfer packet data event ICS20Timeout(ICS20Lib.PacketDataJSON packetData); -} \ No newline at end of file +} diff --git a/src/events/IICS26RouterEvents.sol b/src/events/IICS26RouterEvents.sol index 32f47a9..d98e153 100644 --- a/src/events/IICS26RouterEvents.sol +++ b/src/events/IICS26RouterEvents.sol @@ -3,8 +3,7 @@ pragma solidity >=0.8.25; import { IICS26RouterMsgs } from "../msgs/IICS26RouterMsgs.sol"; -interface IICS26RouterEvents is IICS26RouterMsgs{ - +interface IICS26RouterEvents is IICS26RouterMsgs { /// @notice Emitted when an IBC application is added to the router /// @param portId The port identifier /// @param app The address of the IBC application contract @@ -31,5 +30,4 @@ interface IICS26RouterEvents is IICS26RouterMsgs{ /// @param packet The packet that was acknowledged /// @param acknowledgement The acknowledgement data event AckPacket(Packet packet, bytes acknowledgement); - -} \ No newline at end of file +} diff --git a/src/interfaces/IICS02Client.sol b/src/interfaces/IICS02Client.sol index adaf7d2..694d3c5 100644 --- a/src/interfaces/IICS02Client.sol +++ b/src/interfaces/IICS02Client.sol @@ -8,7 +8,6 @@ import { IICS02ClientEvents } from "../events/IICS02ClientEvents.sol"; /// @title ICS02 Light Client Router Interface /// @notice IICS02Client is an interface for the IBC Eureka client router interface IICS02Client is IICS02ClientMsgs, IICS02ClientEvents { - /// @notice Returns the counterparty client information given the client identifier. /// @param clientId The client identifier /// @return The counterparty client information diff --git a/src/interfaces/IICS20Transfer.sol b/src/interfaces/IICS20Transfer.sol index 6d0e96f..6f99d31 100644 --- a/src/interfaces/IICS20Transfer.sol +++ b/src/interfaces/IICS20Transfer.sol @@ -5,7 +5,6 @@ import { IICS20TransferMsgs } from "../msgs/IICS20TransferMsgs.sol"; import { IICS20TransferEvents } from "../events/IICS20TransferEvents.sol"; interface IICS20Transfer is IICS20TransferMsgs, IICS20TransferEvents { - /// @notice Send a transfer /// @param msg The message for sending a transfer /// @return sequence The sequence number of the packet created diff --git a/src/interfaces/IICS26Router.sol b/src/interfaces/IICS26Router.sol index 749e2bf..b5d55c9 100644 --- a/src/interfaces/IICS26Router.sol +++ b/src/interfaces/IICS26Router.sol @@ -8,7 +8,6 @@ import { IICS26RouterEvents } from "../events/IICS26RouterEvents.sol"; /// @title ICS26 Router Interface /// @notice IICS26Router is an interface for the IBC Eureka router interface IICS26Router is IICS26RouterMsgs, IICS26RouterEvents { - /// @notice Returns the address of the IBC application given the port identifier /// @param portId The port identifier /// @return The address of the IBC application contract @@ -37,5 +36,4 @@ interface IICS26Router is IICS26RouterMsgs, IICS26RouterEvents { /// @notice Timeouts a packet /// @param msg The message for timing out packets function timeoutPacket(MsgTimeoutPacket calldata msg) external; - } diff --git a/test/ICS20TransferTest.t.sol b/test/ICS20TransferTest.t.sol index f25bca2..f30e0ee 100644 --- a/test/ICS20TransferTest.t.sol +++ b/test/ICS20TransferTest.t.sol @@ -7,7 +7,6 @@ import { Test } from "forge-std/Test.sol"; import { IICS26RouterMsgs } from "../src/msgs/IICS26RouterMsgs.sol"; import { IICS26Router } from "../src/interfaces/IICS26Router.sol"; import { IIBCAppCallbacks } from "../src/msgs/IIBCAppCallbacks.sol"; -import { IICS20Transfer } from "../src/interfaces/IICS20Transfer.sol"; import { IICS20TransferMsgs } from "../src/msgs/IICS20TransferMsgs.sol"; import { ICS20Transfer } from "../src/ICS20Transfer.sol"; import { TestERC20, MalfunctioningERC20 } from "./mocks/TestERC20.sol"; @@ -280,9 +279,7 @@ contract ICS20TransferTest is Test, IICS20TransferEvents { assertEq(contractBalanceAfterSend, defaultAmount); vm.expectEmit(); - emit ICS20Acknowledgement( - expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON - ); + emit ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); ics20Transfer.onAcknowledgementPacket( IIBCAppCallbacks.OnAcknowledgementPacketCallback({ packet: packet, diff --git a/test/ICS26RouterTest.t.sol b/test/ICS26RouterTest.t.sol index f55a5dd..e57d27c 100644 --- a/test/ICS26RouterTest.t.sol +++ b/test/ICS26RouterTest.t.sol @@ -7,7 +7,6 @@ import { Test } from "forge-std/Test.sol"; import { ICS02Client } from "../src/ICS02Client.sol"; import { IICS02ClientMsgs } from "../src/msgs/IICS02ClientMsgs.sol"; import { ICS26Router } from "../src/ICS26Router.sol"; -import { IICS26Router } from "../src/interfaces/IICS26Router.sol"; import { IICS26RouterMsgs } from "../src/msgs/IICS26RouterMsgs.sol"; import { ICS20Transfer } from "../src/ICS20Transfer.sol"; import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; diff --git a/test/IntegrationTest.t.sol b/test/IntegrationTest.t.sol index 52b67d0..807d4c7 100644 --- a/test/IntegrationTest.t.sol +++ b/test/IntegrationTest.t.sol @@ -7,13 +7,11 @@ import { Test } from "forge-std/Test.sol"; import { IICS02Client } from "../src/interfaces/IICS02Client.sol"; import { IICS02ClientMsgs } from "../src/msgs/IICS02ClientMsgs.sol"; import { ICS20Transfer } from "../src/ICS20Transfer.sol"; -import { IICS20Transfer } from "../src/interfaces/IICS20Transfer.sol"; import { IICS20Errors } from "../src/errors/IICS20Errors.sol"; import { IICS20TransferMsgs } from "../src/msgs/IICS20TransferMsgs.sol"; import { TestERC20 } from "./mocks/TestERC20.sol"; import { IBCERC20 } from "../src/utils/IBCERC20.sol"; import { ICS02Client } from "../src/ICS02Client.sol"; -import { IICS26Router } from "../src/ICS26Router.sol"; import { IICS26RouterErrors } from "../src/errors/IICS26RouterErrors.sol"; import { ICS26Router } from "../src/ICS26Router.sol"; import { IICS26RouterMsgs } from "../src/msgs/IICS26RouterMsgs.sol"; @@ -100,9 +98,7 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { proofHeight: IICS02ClientMsgs.Height({ revisionNumber: 1, revisionHeight: 42 }) // dummy client will accept }); vm.expectEmit(); - emit ICS20Acknowledgement( - expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON - ); + emit ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); ics26Router.ackPacket(ackMsg); // commitment should be deleted bytes32 path = ICS24Host.packetCommitmentKeyCalldata( @@ -196,9 +192,7 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { proofHeight: IICS02ClientMsgs.Height({ revisionNumber: 1, revisionHeight: 42 }) // dummy client will accept }); vm.expectEmit(); - emit ICS20Acknowledgement( - expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON - ); + emit ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); ics26Router.ackPacket(ackMsg); // commitment should be deleted @@ -661,9 +655,7 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { proofHeight: IICS02ClientMsgs.Height({ revisionNumber: 1, revisionHeight: 42 }) // dummy client will accept }); vm.expectEmit(); - emit ICS20Acknowledgement( - expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON - ); + emit ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); ics26Router.ackPacket(ackMsg); // commitment should be deleted From 867ba442f312061776cc6f4a837c93d56c767118 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Sun, 8 Sep 2024 20:58:38 +0200 Subject: [PATCH 3/4] self-review: remove inheritance from transfer events, rename back transfer event to previous name --- abi/ICS20Transfer.json | 2 +- abi/SdkICS20Transfer.json | 933 ---------------------------- src/ICS20Transfer.sol | 2 +- src/events/IICS02ClientEvents.sol | 4 +- src/events/IICS20TransferEvents.sol | 10 +- test/ICS02ClientTest.t.sol | 6 +- test/ICS20TransferTest.t.sol | 32 +- test/ICS26RouterTest.t.sol | 8 +- test/IntegrationTest.t.sol | 62 +- 9 files changed, 63 insertions(+), 996 deletions(-) delete mode 100644 abi/SdkICS20Transfer.json diff --git a/abi/ICS20Transfer.json b/abi/ICS20Transfer.json index 5c909e4..d107995 100644 --- a/abi/ICS20Transfer.json +++ b/abi/ICS20Transfer.json @@ -512,7 +512,7 @@ }, { "type": "event", - "name": "ICS20TokenTransfer", + "name": "ICS20Transfer", "inputs": [ { "name": "packetData", diff --git a/abi/SdkICS20Transfer.json b/abi/SdkICS20Transfer.json deleted file mode 100644 index 995af39..0000000 --- a/abi/SdkICS20Transfer.json +++ /dev/null @@ -1,933 +0,0 @@ -[ - { - "type": "constructor", - "inputs": [ - { - "name": "owner_", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "onAcknowledgementPacket", - "inputs": [ - { - "name": "msg_", - "type": "tuple", - "internalType": "struct IIBCAppCallbacks.OnAcknowledgementPacketCallback", - "components": [ - { - "name": "packet", - "type": "tuple", - "internalType": "struct IICS26RouterMsgs.Packet", - "components": [ - { - "name": "sequence", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "timeoutTimestamp", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "sourcePort", - "type": "string", - "internalType": "string" - }, - { - "name": "sourceChannel", - "type": "string", - "internalType": "string" - }, - { - "name": "destPort", - "type": "string", - "internalType": "string" - }, - { - "name": "destChannel", - "type": "string", - "internalType": "string" - }, - { - "name": "version", - "type": "string", - "internalType": "string" - }, - { - "name": "data", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "name": "acknowledgement", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "relayer", - "type": "address", - "internalType": "address" - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "onRecvPacket", - "inputs": [ - { - "name": "msg_", - "type": "tuple", - "internalType": "struct IIBCAppCallbacks.OnRecvPacketCallback", - "components": [ - { - "name": "packet", - "type": "tuple", - "internalType": "struct IICS26RouterMsgs.Packet", - "components": [ - { - "name": "sequence", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "timeoutTimestamp", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "sourcePort", - "type": "string", - "internalType": "string" - }, - { - "name": "sourceChannel", - "type": "string", - "internalType": "string" - }, - { - "name": "destPort", - "type": "string", - "internalType": "string" - }, - { - "name": "destChannel", - "type": "string", - "internalType": "string" - }, - { - "name": "version", - "type": "string", - "internalType": "string" - }, - { - "name": "data", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "name": "relayer", - "type": "address", - "internalType": "address" - } - ] - } - ], - "outputs": [ - { - "name": "", - "type": "bytes", - "internalType": "bytes" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "onSendPacket", - "inputs": [ - { - "name": "msg_", - "type": "tuple", - "internalType": "struct IIBCAppCallbacks.OnSendPacketCallback", - "components": [ - { - "name": "packet", - "type": "tuple", - "internalType": "struct IICS26RouterMsgs.Packet", - "components": [ - { - "name": "sequence", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "timeoutTimestamp", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "sourcePort", - "type": "string", - "internalType": "string" - }, - { - "name": "sourceChannel", - "type": "string", - "internalType": "string" - }, - { - "name": "destPort", - "type": "string", - "internalType": "string" - }, - { - "name": "destChannel", - "type": "string", - "internalType": "string" - }, - { - "name": "version", - "type": "string", - "internalType": "string" - }, - { - "name": "data", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "name": "sender", - "type": "address", - "internalType": "address" - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "onTimeoutPacket", - "inputs": [ - { - "name": "msg_", - "type": "tuple", - "internalType": "struct IIBCAppCallbacks.OnTimeoutPacketCallback", - "components": [ - { - "name": "packet", - "type": "tuple", - "internalType": "struct IICS26RouterMsgs.Packet", - "components": [ - { - "name": "sequence", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "timeoutTimestamp", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "sourcePort", - "type": "string", - "internalType": "string" - }, - { - "name": "sourceChannel", - "type": "string", - "internalType": "string" - }, - { - "name": "destPort", - "type": "string", - "internalType": "string" - }, - { - "name": "destChannel", - "type": "string", - "internalType": "string" - }, - { - "name": "version", - "type": "string", - "internalType": "string" - }, - { - "name": "data", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "name": "relayer", - "type": "address", - "internalType": "address" - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "sendTransfer", - "inputs": [ - { - "name": "msg_", - "type": "tuple", - "internalType": "struct IICS20TransferMsgs.SendTransferMsg", - "components": [ - { - "name": "denom", - "type": "string", - "internalType": "string" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "receiver", - "type": "string", - "internalType": "string" - }, - { - "name": "sourceChannel", - "type": "string", - "internalType": "string" - }, - { - "name": "destPort", - "type": "string", - "internalType": "string" - }, - { - "name": "timeoutTimestamp", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "memo", - "type": "string", - "internalType": "string" - } - ] - } - ], - "outputs": [ - { - "name": "", - "type": "uint32", - "internalType": "uint32" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { - "name": "newOwner", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "ICS20Acknowledgement", - "inputs": [ - { - "name": "packetData", - "type": "tuple", - "indexed": false, - "internalType": "struct ICS20Lib.PacketDataJSON", - "components": [ - { - "name": "denom", - "type": "string", - "internalType": "string" - }, - { - "name": "sender", - "type": "string", - "internalType": "string" - }, - { - "name": "receiver", - "type": "string", - "internalType": "string" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "memo", - "type": "string", - "internalType": "string" - } - ] - }, - { - "name": "acknowledgement", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ICS20ReceiveTransfer", - "inputs": [ - { - "name": "packetData", - "type": "tuple", - "indexed": false, - "internalType": "struct ICS20Lib.PacketDataJSON", - "components": [ - { - "name": "denom", - "type": "string", - "internalType": "string" - }, - { - "name": "sender", - "type": "string", - "internalType": "string" - }, - { - "name": "receiver", - "type": "string", - "internalType": "string" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "memo", - "type": "string", - "internalType": "string" - } - ] - }, - { - "name": "erc20Address", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ICS20Timeout", - "inputs": [ - { - "name": "packetData", - "type": "tuple", - "indexed": false, - "internalType": "struct ICS20Lib.PacketDataJSON", - "components": [ - { - "name": "denom", - "type": "string", - "internalType": "string" - }, - { - "name": "sender", - "type": "string", - "internalType": "string" - }, - { - "name": "receiver", - "type": "string", - "internalType": "string" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "memo", - "type": "string", - "internalType": "string" - } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ICS20TokenTransfer", - "inputs": [ - { - "name": "packetData", - "type": "tuple", - "indexed": false, - "internalType": "struct ICS20Lib.PacketDataJSON", - "components": [ - { - "name": "denom", - "type": "string", - "internalType": "string" - }, - { - "name": "sender", - "type": "string", - "internalType": "string" - }, - { - "name": "receiver", - "type": "string", - "internalType": "string" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "memo", - "type": "string", - "internalType": "string" - } - ] - }, - { - "name": "erc20Address", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "AddressEmptyCode", - "inputs": [ - { - "name": "target", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "AddressInsufficientBalance", - "inputs": [ - { - "name": "account", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "FailedInnerCall", - "inputs": [] - }, - { - "type": "error", - "name": "ICS20BytesSliceOutOfBounds", - "inputs": [ - { - "name": "length", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "start", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "end", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ICS20BytesSliceOverflow", - "inputs": [ - { - "name": "length", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ICS20DenomNotFound", - "inputs": [ - { - "name": "denom", - "type": "string", - "internalType": "string" - } - ] - }, - { - "type": "error", - "name": "ICS20InvalidAddress", - "inputs": [ - { - "name": "addr", - "type": "string", - "internalType": "string" - } - ] - }, - { - "type": "error", - "name": "ICS20InvalidAmount", - "inputs": [ - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ICS20InvalidAmountAfterConversion", - "inputs": [ - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "convertedAmount", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ICS20JSONClosingBraceNotFound", - "inputs": [ - { - "name": "position", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "actual", - "type": "bytes1", - "internalType": "bytes1" - } - ] - }, - { - "type": "error", - "name": "ICS20JSONInvalidEscape", - "inputs": [ - { - "name": "position", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "actual", - "type": "bytes1", - "internalType": "bytes1" - } - ] - }, - { - "type": "error", - "name": "ICS20JSONStringClosingDoubleQuoteNotFound", - "inputs": [ - { - "name": "position", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "actual", - "type": "bytes1", - "internalType": "bytes1" - } - ] - }, - { - "type": "error", - "name": "ICS20JSONStringUnclosed", - "inputs": [ - { - "name": "bz", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "position", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ICS20JSONUnexpectedBytes", - "inputs": [ - { - "name": "position", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "expected", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "actual", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "error", - "name": "ICS20UnauthorizedPacketSender", - "inputs": [ - { - "name": "packetSender", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "ICS20UnexpectedERC20Balance", - "inputs": [ - { - "name": "expected", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "actual", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ICS20UnexpectedVersion", - "inputs": [ - { - "name": "expected", - "type": "string", - "internalType": "string" - }, - { - "name": "version", - "type": "string", - "internalType": "string" - } - ] - }, - { - "type": "error", - "name": "ICS20UnsupportedFeature", - "inputs": [ - { - "name": "feature", - "type": "string", - "internalType": "string" - } - ] - }, - { - "type": "error", - "name": "InvalidAddress", - "inputs": [ - { - "name": "_address", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "InvalidAmount", - "inputs": [ - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { - "name": "owner", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { - "name": "account", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "ReentrancyGuardReentrantCall", - "inputs": [] - }, - { - "type": "error", - "name": "SafeCastOverflowedUintDowncast", - "inputs": [ - { - "name": "bits", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "value", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "SafeERC20FailedOperation", - "inputs": [ - { - "name": "token", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "StringsInsufficientHexLength", - "inputs": [ - { - "name": "value", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "length", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "Unsupported", - "inputs": [] - }, - { - "type": "error", - "name": "UnsupportedTokenDecimals", - "inputs": [ - { - "name": "decimals", - "type": "uint8", - "internalType": "uint8" - } - ] - } -] diff --git a/src/ICS20Transfer.sol b/src/ICS20Transfer.sol index 2d07766..ad14737 100644 --- a/src/ICS20Transfer.sol +++ b/src/ICS20Transfer.sol @@ -93,7 +93,7 @@ contract ICS20Transfer is IIBCApp, IICS20Transfer, IICS20Errors, Ownable, Reentr ibcERC20Contract.burn(packetData.amount); } - emit ICS20TokenTransfer(packetData, erc20Address); + emit ICS20Transfer(packetData, erc20Address); } /// @inheritdoc IIBCApp diff --git a/src/events/IICS02ClientEvents.sol b/src/events/IICS02ClientEvents.sol index 510d4ec..bf22d11 100644 --- a/src/events/IICS02ClientEvents.sol +++ b/src/events/IICS02ClientEvents.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.25; import { IICS02ClientMsgs } from "../msgs/IICS02ClientMsgs.sol"; -interface IICS02ClientEvents is IICS02ClientMsgs { +interface IICS02ClientEvents { /// @notice Emitted when a new client is added to the client router. /// @param clientId The newly created client identifier /// @param counterpartyInfo The counterparty client information for the added client - event ICS02ClientAdded(string clientId, CounterpartyInfo counterpartyInfo); + event ICS02ClientAdded(string clientId, IICS02ClientMsgs.CounterpartyInfo counterpartyInfo); } diff --git a/src/events/IICS20TransferEvents.sol b/src/events/IICS20TransferEvents.sol index bb96797..ba97d75 100644 --- a/src/events/IICS20TransferEvents.sol +++ b/src/events/IICS20TransferEvents.sol @@ -4,22 +4,22 @@ pragma solidity >=0.8.25; import { ICS20Lib } from "../utils/ICS20Lib.sol"; interface IICS20TransferEvents { - /// @notice Called when a packet is handled in onSendPacket and a transfer has been initiated + /// @notice Emitted when a packet is handled in onSendPacket and a transfer has been initiated /// @param packetData The transfer packet data /// @param erc20Address The address of the ERC20 contract of the token sent - event ICS20TokenTransfer(ICS20Lib.PacketDataJSON packetData, address erc20Address); + event ICS20Transfer(ICS20Lib.PacketDataJSON packetData, address erc20Address); - /// @notice Called when a packet is received in onReceivePacket + /// @notice Emitted when a packet is received in onReceivePacket /// @param packetData The transfer packet data /// @param erc20Address The address of the ERC20 contract of the token received event ICS20ReceiveTransfer(ICS20Lib.PacketDataJSON packetData, address erc20Address); - /// @notice Called after handling acknowledgement in onAcknowledgementPacket + /// @notice Emitted after handling acknowledgement in onAcknowledgementPacket /// @param packetData The transfer packet data /// @param acknowledgement The acknowledgement data event ICS20Acknowledgement(ICS20Lib.PacketDataJSON packetData, bytes acknowledgement); - /// @notice Called after handling a timeout in onTimeoutPacket + /// @notice Emitted after handling a timeout in onTimeoutPacket /// @param packetData The transfer packet data event ICS20Timeout(ICS20Lib.PacketDataJSON packetData); } diff --git a/test/ICS02ClientTest.t.sol b/test/ICS02ClientTest.t.sol index 22a42d9..24c2fbe 100644 --- a/test/ICS02ClientTest.t.sol +++ b/test/ICS02ClientTest.t.sol @@ -7,12 +7,12 @@ import { Test } from "forge-std/Test.sol"; import { IICS02Client } from "../src/interfaces/IICS02Client.sol"; import { ICS02Client } from "../src/ICS02Client.sol"; import { IICS02ClientMsgs } from "../src/msgs/IICS02ClientMsgs.sol"; +import { IICS02ClientEvents } from "../src/events/IICS02ClientEvents.sol"; import { ILightClient } from "../src/interfaces/ILightClient.sol"; import { ILightClientMsgs } from "../src/msgs/ILightClientMsgs.sol"; import { DummyLightClient } from "./mocks/DummyLightClient.sol"; -import { IICS02ClientEvents } from "../src/events/IICS02ClientEvents.sol"; -contract ICS02ClientTest is Test, IICS02ClientEvents { +contract ICS02ClientTest is Test { IICS02Client public ics02Client; DummyLightClient public lightClient; @@ -28,7 +28,7 @@ contract ICS02ClientTest is Test, IICS02ClientEvents { IICS02ClientMsgs.CounterpartyInfo memory counterpartyInfo = IICS02ClientMsgs.CounterpartyInfo(counterpartyClient, merklePrefix); vm.expectEmit(); - emit ICS02ClientAdded("07-tendermint-0", counterpartyInfo); + emit IICS02ClientEvents.ICS02ClientAdded("07-tendermint-0", counterpartyInfo); string memory clientIdentifier = ics02Client.addClient("07-tendermint", counterpartyInfo, address(lightClient)); ILightClient fetchedLightClient = ics02Client.getClient(clientIdentifier); diff --git a/test/ICS20TransferTest.t.sol b/test/ICS20TransferTest.t.sol index f30e0ee..de24cb4 100644 --- a/test/ICS20TransferTest.t.sol +++ b/test/ICS20TransferTest.t.sol @@ -8,6 +8,7 @@ import { IICS26RouterMsgs } from "../src/msgs/IICS26RouterMsgs.sol"; import { IICS26Router } from "../src/interfaces/IICS26Router.sol"; import { IIBCAppCallbacks } from "../src/msgs/IIBCAppCallbacks.sol"; import { IICS20TransferMsgs } from "../src/msgs/IICS20TransferMsgs.sol"; +import { IICS20TransferEvents } from "../src/events/IICS20TransferEvents.sol"; import { ICS20Transfer } from "../src/ICS20Transfer.sol"; import { TestERC20, MalfunctioningERC20 } from "./mocks/TestERC20.sol"; import { IBCERC20 } from "../src/utils/IBCERC20.sol"; @@ -16,9 +17,8 @@ import { ICS20Lib } from "../src/utils/ICS20Lib.sol"; import { IICS20Errors } from "../src/errors/IICS20Errors.sol"; import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; import { Vm } from "forge-std/Vm.sol"; -import { IICS20TransferEvents } from "../src/events/IICS20TransferEvents.sol"; -contract ICS20TransferTest is Test, IICS20TransferEvents { +contract ICS20TransferTest is Test { ICS20Transfer public ics20Transfer; TestERC20 public erc20; string public erc20AddressStr; @@ -130,7 +130,7 @@ contract ICS20TransferTest is Test, IICS20TransferEvents { assertEq(contractBalanceBefore, 0); vm.expectEmit(); - emit ICS20TokenTransfer(expectedDefaultSendPacketData, address(erc20)); + emit IICS20TransferEvents.ICS20Transfer(expectedDefaultSendPacketData, address(erc20)); ics20Transfer.onSendPacket( IIBCAppCallbacks.OnSendPacketCallback({ packet: packet, sender: address(ics20Transfer) }) ); @@ -159,7 +159,7 @@ contract ICS20TransferTest is Test, IICS20TransferEvents { expectedDefaultSendPacketData.amount = largeAmount; vm.expectEmit(); - emit ICS20TokenTransfer(expectedDefaultSendPacketData, address(erc20)); + emit IICS20TransferEvents.ICS20Transfer(expectedDefaultSendPacketData, address(erc20)); ics20Transfer.onSendPacket( IIBCAppCallbacks.OnSendPacketCallback({ packet: packet, sender: address(ics20Transfer) }) ); @@ -268,7 +268,7 @@ contract ICS20TransferTest is Test, IICS20TransferEvents { assertEq(contractBalanceBefore, 0); vm.expectEmit(); - emit ICS20TokenTransfer(expectedDefaultSendPacketData, address(erc20)); + emit IICS20TransferEvents.ICS20Transfer(expectedDefaultSendPacketData, address(erc20)); ics20Transfer.onSendPacket( IIBCAppCallbacks.OnSendPacketCallback({ packet: packet, sender: address(ics20Transfer) }) ); @@ -279,7 +279,7 @@ contract ICS20TransferTest is Test, IICS20TransferEvents { assertEq(contractBalanceAfterSend, defaultAmount); vm.expectEmit(); - emit ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); + emit IICS20TransferEvents.ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); ics20Transfer.onAcknowledgementPacket( IIBCAppCallbacks.OnAcknowledgementPacketCallback({ packet: packet, @@ -306,7 +306,7 @@ contract ICS20TransferTest is Test, IICS20TransferEvents { assertEq(contractBalanceBefore, 0); vm.expectEmit(); - emit ICS20TokenTransfer(expectedDefaultSendPacketData, address(erc20)); + emit IICS20TransferEvents.ICS20Transfer(expectedDefaultSendPacketData, address(erc20)); ics20Transfer.onSendPacket( IIBCAppCallbacks.OnSendPacketCallback({ packet: packet, sender: address(ics20Transfer) }) ); @@ -317,7 +317,7 @@ contract ICS20TransferTest is Test, IICS20TransferEvents { assertEq(contractBalanceAfterSend, defaultAmount); vm.expectEmit(); - emit ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.FAILED_ACKNOWLEDGEMENT_JSON); + emit IICS20TransferEvents.ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.FAILED_ACKNOWLEDGEMENT_JSON); ics20Transfer.onAcknowledgementPacket( IIBCAppCallbacks.OnAcknowledgementPacketCallback({ packet: packet, @@ -382,7 +382,7 @@ contract ICS20TransferTest is Test, IICS20TransferEvents { assertEq(contractBalanceBefore, 0); vm.expectEmit(); - emit ICS20TokenTransfer(expectedDefaultSendPacketData, address(erc20)); + emit IICS20TransferEvents.ICS20Transfer(expectedDefaultSendPacketData, address(erc20)); ics20Transfer.onSendPacket( IIBCAppCallbacks.OnSendPacketCallback({ packet: packet, sender: address(ics20Transfer) }) ); @@ -393,7 +393,7 @@ contract ICS20TransferTest is Test, IICS20TransferEvents { assertEq(contractBalanceAfterSend, defaultAmount); vm.expectEmit(); - emit ICS20Timeout(expectedDefaultSendPacketData); + emit IICS20TransferEvents.ICS20Timeout(expectedDefaultSendPacketData); ics20Transfer.onTimeoutPacket( IIBCAppCallbacks.OnTimeoutPacketCallback({ packet: packet, relayer: makeAddr("relayer") }) ); @@ -442,7 +442,7 @@ contract ICS20TransferTest is Test, IICS20TransferEvents { assertEq(contractBalanceBefore, 0); vm.expectEmit(); - emit ICS20TokenTransfer(expectedDefaultSendPacketData, address(erc20)); + emit IICS20TransferEvents.ICS20Transfer(expectedDefaultSendPacketData, address(erc20)); ics20Transfer.onSendPacket( IIBCAppCallbacks.OnSendPacketCallback({ packet: packet, sender: address(ics20Transfer) }) ); @@ -470,7 +470,7 @@ contract ICS20TransferTest is Test, IICS20TransferEvents { packet.sourceChannel = newSourceChannel; vm.expectEmit(); - emit ICS20ReceiveTransfer( + emit IICS20TransferEvents.ICS20ReceiveTransfer( ICS20Lib.PacketDataJSON({ denom: receivedDenom, sender: senderStr, @@ -511,7 +511,7 @@ contract ICS20TransferTest is Test, IICS20TransferEvents { vm.expectEmit(true, true, true, false); // Not checking data because we don't know the address yet ICS20Lib.PacketDataJSON memory packetData; address erc20Address; - emit ICS20ReceiveTransfer(packetData, erc20Address); // we check these values later + emit IICS20TransferEvents.ICS20ReceiveTransfer(packetData, erc20Address); // we check these values later vm.recordLogs(); bytes memory ack = ics20Transfer.onRecvPacket( IIBCAppCallbacks.OnRecvPacketCallback({ packet: packet, relayer: makeAddr("relayer") }) @@ -522,7 +522,7 @@ contract ICS20TransferTest is Test, IICS20TransferEvents { Vm.Log[] memory entries = vm.getRecordedLogs(); assertEq(entries.length, 4); Vm.Log memory receiveTransferLog = entries[3]; - assertEq(receiveTransferLog.topics[0], ICS20ReceiveTransfer.selector); + assertEq(receiveTransferLog.topics[0], IICS20TransferEvents.ICS20ReceiveTransfer.selector); (packetData, erc20Address) = abi.decode(receiveTransferLog.data, (ICS20Lib.PacketDataJSON, address)); assertEq(packetData.denom, foreignDenom); @@ -560,7 +560,7 @@ contract ICS20TransferTest is Test, IICS20TransferEvents { vm.expectEmit(true, true, true, false); // Not checking data because we don't know the address yet ICS20Lib.PacketDataJSON memory packetData; address erc20Address; - emit ICS20ReceiveTransfer(packetData, erc20Address); // we check these values later + emit IICS20TransferEvents.ICS20ReceiveTransfer(packetData, erc20Address); // we check these values later vm.recordLogs(); bytes memory ack = ics20Transfer.onRecvPacket( IIBCAppCallbacks.OnRecvPacketCallback({ packet: packet, relayer: makeAddr("relayer") }) @@ -571,7 +571,7 @@ contract ICS20TransferTest is Test, IICS20TransferEvents { Vm.Log[] memory entries = vm.getRecordedLogs(); assertEq(entries.length, 4); Vm.Log memory receiveTransferLog = entries[3]; - assertEq(receiveTransferLog.topics[0], ICS20ReceiveTransfer.selector); + assertEq(receiveTransferLog.topics[0], IICS20TransferEvents.ICS20ReceiveTransfer.selector); (packetData, erc20Address) = abi.decode(receiveTransferLog.data, (ICS20Lib.PacketDataJSON, address)); assertEq(packetData.denom, foreignDenom); diff --git a/test/ICS26RouterTest.t.sol b/test/ICS26RouterTest.t.sol index e57d27c..b3f393d 100644 --- a/test/ICS26RouterTest.t.sol +++ b/test/ICS26RouterTest.t.sol @@ -8,13 +8,13 @@ import { ICS02Client } from "../src/ICS02Client.sol"; import { IICS02ClientMsgs } from "../src/msgs/IICS02ClientMsgs.sol"; import { ICS26Router } from "../src/ICS26Router.sol"; import { IICS26RouterMsgs } from "../src/msgs/IICS26RouterMsgs.sol"; +import { IICS26RouterEvents } from "../src/events/IICS26RouterEvents.sol"; import { ICS20Transfer } from "../src/ICS20Transfer.sol"; import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; import { DummyLightClient } from "./mocks/DummyLightClient.sol"; import { ILightClientMsgs } from "../src/msgs/ILightClientMsgs.sol"; -import { IICS26RouterEvents } from "../src/events/IICS26RouterEvents.sol"; -contract ICS26RouterTest is Test, IICS26RouterEvents { +contract ICS26RouterTest is Test { ICS02Client public ics02Client; ICS26Router public ics26Router; @@ -30,7 +30,7 @@ contract ICS26RouterTest is Test, IICS26RouterEvents { string memory ics20AddressStr = Strings.toHexString(address(ics20Transfer)); vm.expectEmit(); - emit IBCAppAdded(ics20AddressStr, address(ics20Transfer)); + emit IICS26RouterEvents.IBCAppAdded(ics20AddressStr, address(ics20Transfer)); ics26Router.addIBCApp("", address(ics20Transfer)); assertEq(address(ics20Transfer), address(ics26Router.getIBCApp(ics20AddressStr))); @@ -40,7 +40,7 @@ contract ICS26RouterTest is Test, IICS26RouterEvents { ICS20Transfer ics20Transfer = new ICS20Transfer(address(ics26Router)); vm.expectEmit(); - emit IBCAppAdded("transfer", address(ics20Transfer)); + emit IICS26RouterEvents.IBCAppAdded("transfer", address(ics20Transfer)); ics26Router.addIBCApp("transfer", address(ics20Transfer)); assertEq(address(ics20Transfer), address(ics26Router.getIBCApp("transfer"))); diff --git a/test/IntegrationTest.t.sol b/test/IntegrationTest.t.sol index 807d4c7..28a1c5f 100644 --- a/test/IntegrationTest.t.sol +++ b/test/IntegrationTest.t.sol @@ -9,22 +9,22 @@ import { IICS02ClientMsgs } from "../src/msgs/IICS02ClientMsgs.sol"; import { ICS20Transfer } from "../src/ICS20Transfer.sol"; import { IICS20Errors } from "../src/errors/IICS20Errors.sol"; import { IICS20TransferMsgs } from "../src/msgs/IICS20TransferMsgs.sol"; +import { IICS20TransferEvents } from "../src/events/IICS20TransferEvents.sol"; import { TestERC20 } from "./mocks/TestERC20.sol"; import { IBCERC20 } from "../src/utils/IBCERC20.sol"; import { ICS02Client } from "../src/ICS02Client.sol"; import { IICS26RouterErrors } from "../src/errors/IICS26RouterErrors.sol"; import { ICS26Router } from "../src/ICS26Router.sol"; import { IICS26RouterMsgs } from "../src/msgs/IICS26RouterMsgs.sol"; +import { IICS26RouterEvents } from "../src/events/IICS26RouterEvents.sol"; import { DummyLightClient } from "./mocks/DummyLightClient.sol"; import { ILightClientMsgs } from "../src/msgs/ILightClientMsgs.sol"; import { ICS20Lib } from "../src/utils/ICS20Lib.sol"; import { ICS24Host } from "../src/utils/ICS24Host.sol"; import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; import { Vm } from "forge-std/Vm.sol"; -import { IICS26RouterEvents } from "../src/events/IICS26RouterEvents.sol"; -import { IICS20TransferEvents } from "../src/events/IICS20TransferEvents.sol"; -contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { +contract IntegrationTest is Test { IICS02Client public ics02Client; ICS26Router public ics26Router; DummyLightClient public lightClient; @@ -62,7 +62,7 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { ics20AddressStr = Strings.toHexString(address(ics20Transfer)); vm.expectEmit(); - emit IBCAppAdded("transfer", address(ics20Transfer)); + emit IICS26RouterEvents.IBCAppAdded("transfer", address(ics20Transfer)); ics26Router.addIBCApp("transfer", address(ics20Transfer)); assertEq(address(ics20Transfer), address(ics26Router.getIBCApp("transfer"))); @@ -98,7 +98,7 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { proofHeight: IICS02ClientMsgs.Height({ revisionNumber: 1, revisionHeight: 42 }) // dummy client will accept }); vm.expectEmit(); - emit ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); + emit IICS20TransferEvents.ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); ics26Router.ackPacket(ackMsg); // commitment should be deleted bytes32 path = ICS24Host.packetCommitmentKeyCalldata( @@ -138,7 +138,7 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { proofHeight: IICS02ClientMsgs.Height({ revisionNumber: 1, revisionHeight: 42 }) // dummy client will accept }); vm.expectEmit(); - emit ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.FAILED_ACKNOWLEDGEMENT_JSON); + emit IICS20TransferEvents.ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.FAILED_ACKNOWLEDGEMENT_JSON); ics26Router.ackPacket(ackMsg); // commitment should be deleted bytes32 path = ICS24Host.packetCommitmentKeyCalldata( @@ -166,7 +166,7 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { proofHeight: IICS02ClientMsgs.Height({ revisionNumber: 1, revisionHeight: 42 }) // dummy client will accept }); vm.expectEmit(); - emit ICS20Timeout(expectedDefaultSendPacketData); + emit IICS20TransferEvents.ICS20Timeout(expectedDefaultSendPacketData); ics26Router.timeoutPacket(timeoutMsg); // commitment should be deleted bytes32 path = ICS24Host.packetCommitmentKeyCalldata( @@ -192,7 +192,7 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { proofHeight: IICS02ClientMsgs.Height({ revisionNumber: 1, revisionHeight: 42 }) // dummy client will accept }); vm.expectEmit(); - emit ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); + emit IICS20TransferEvents.ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); ics26Router.ackPacket(ackMsg); // commitment should be deleted @@ -225,7 +225,7 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { data: ICS20Lib.marshalJSON(receivedDenom, transferAmount, senderStr, receiverStr, "backmemo") }); vm.expectEmit(); - emit ICS20ReceiveTransfer( + emit IICS20TransferEvents.ICS20ReceiveTransfer( ICS20Lib.PacketDataJSON({ denom: receivedDenom, sender: senderStr, @@ -236,9 +236,9 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { address(erc20) ); vm.expectEmit(); - emit WriteAcknowledgement(packet, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); + emit IICS26RouterEvents.WriteAcknowledgement(packet, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); vm.expectEmit(); - emit RecvPacket(packet); + emit IICS26RouterEvents.RecvPacket(packet); ics26Router.recvPacket( IICS26RouterMsgs.MsgRecvPacket({ @@ -284,11 +284,11 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { ICS20Lib.PacketDataJSON memory packetData; address erc20Address; vm.expectEmit(true, true, true, false); // Not checking data because we don't know the address yet - emit ICS20ReceiveTransfer(packetData, erc20Address); // we check these values later + emit IICS20TransferEvents.ICS20ReceiveTransfer(packetData, erc20Address); // we check these values later vm.expectEmit(); - emit WriteAcknowledgement(receivePacket, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); + emit IICS26RouterEvents.WriteAcknowledgement(receivePacket, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); vm.expectEmit(); - emit RecvPacket(receivePacket); + emit IICS26RouterEvents.RecvPacket(receivePacket); vm.recordLogs(); ics26Router.recvPacket( @@ -309,7 +309,7 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { // find and extract data from the ICS20ReceiveTransfer event Vm.Log memory receiveTransferLog = vm.getRecordedLogs()[3]; - assertEq(receiveTransferLog.topics[0], ICS20ReceiveTransfer.selector); + assertEq(receiveTransferLog.topics[0], IICS20TransferEvents.ICS20ReceiveTransfer.selector); (packetData, erc20Address) = abi.decode(receiveTransferLog.data, (ICS20Lib.PacketDataJSON, address)); assertEq(packetData.denom, foreignDenom); @@ -349,7 +349,7 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { }); vm.expectEmit(); - emit ICS20TokenTransfer( + emit IICS20TransferEvents.ICS20Transfer( ICS20Lib.PacketDataJSON({ denom: expectedFullDenomPath, sender: senderStr, @@ -370,7 +370,7 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { data: ICS20Lib.marshalJSON(expectedFullDenomPath, transferAmount, senderStr, receiverStr, "backmemo") }); vm.expectEmit(); - emit SendPacket(expectedPacketSent); + emit IICS26RouterEvents.SendPacket(expectedPacketSent); vm.prank(sender); uint32 sequence = ics20Transfer.sendTransfer(msgSendTransfer); assertEq(sequence, expectedPacketSent.sequence); @@ -410,11 +410,11 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { vm.expectEmit(true, true, true, false); // Not checking data because we don't know the address yet ICS20Lib.PacketDataJSON memory packetData; address erc20Address; - emit ICS20ReceiveTransfer(packetData, erc20Address); // we check these values later + emit IICS20TransferEvents.ICS20ReceiveTransfer(packetData, erc20Address); // we check these values later vm.expectEmit(); - emit WriteAcknowledgement(receivePacket, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); + emit IICS26RouterEvents.WriteAcknowledgement(receivePacket, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); vm.expectEmit(); - emit RecvPacket(receivePacket); + emit IICS26RouterEvents.RecvPacket(receivePacket); vm.recordLogs(); ics26Router.recvPacket( @@ -435,7 +435,7 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { // find and extract data from the ICS20ReceiveTransfer event Vm.Log memory receiveTransferLog = vm.getRecordedLogs()[3]; - assertEq(receiveTransferLog.topics[0], ICS20ReceiveTransfer.selector); + assertEq(receiveTransferLog.topics[0], IICS20TransferEvents.ICS20ReceiveTransfer.selector); (packetData, erc20Address) = abi.decode(receiveTransferLog.data, (ICS20Lib.PacketDataJSON, address)); assertEq(packetData.denom, foreignDenom); @@ -475,7 +475,7 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { }); vm.expectEmit(); - emit ICS20TokenTransfer( + emit IICS20TransferEvents.ICS20Transfer( ICS20Lib.PacketDataJSON({ denom: expectedFullDenomPath, sender: senderStr, @@ -497,7 +497,7 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { version: ICS20Lib.ICS20_VERSION, data: ICS20Lib.marshalJSON(expectedFullDenomPath, transferAmount, senderStr, receiverStr, "backmemo") }); - emit SendPacket(expectedPacketSent); + emit IICS26RouterEvents.SendPacket(expectedPacketSent); vm.prank(sender); uint32 sequence = ics20Transfer.sendTransfer(msgSendTransfer); @@ -541,11 +541,11 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { vm.expectEmit(true, true, true, false); // Not checking data because we don't know the address yet ICS20Lib.PacketDataJSON memory packetData; address erc20Address; - emit ICS20ReceiveTransfer(packetData, erc20Address); // we check these values later + emit IICS20TransferEvents.ICS20ReceiveTransfer(packetData, erc20Address); // we check these values later vm.expectEmit(); - emit WriteAcknowledgement(receivePacket, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); + emit IICS26RouterEvents.WriteAcknowledgement(receivePacket, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); vm.expectEmit(); - emit RecvPacket(receivePacket); + emit IICS26RouterEvents.RecvPacket(receivePacket); vm.recordLogs(); ics26Router.recvPacket( @@ -566,7 +566,7 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { // find and extract data from the ICS20ReceiveTransfer event Vm.Log memory receiveTransferLog = vm.getRecordedLogs()[3]; - assertEq(receiveTransferLog.topics[0], ICS20ReceiveTransfer.selector); + assertEq(receiveTransferLog.topics[0], IICS20TransferEvents.ICS20ReceiveTransfer.selector); (packetData, erc20Address) = abi.decode(receiveTransferLog.data, (ICS20Lib.PacketDataJSON, address)); assertEq(packetData.denom, foreignDenom); @@ -606,7 +606,7 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { }); vm.expectEmit(); - emit ICS20TokenTransfer( + emit IICS20TransferEvents.ICS20Transfer( ICS20Lib.PacketDataJSON({ denom: expectedFullDenomPath, sender: senderStr, @@ -628,7 +628,7 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { version: ICS20Lib.ICS20_VERSION, data: ICS20Lib.marshalJSON(expectedFullDenomPath, largeAmount, senderStr, receiverStr, "") }); - emit SendPacket(expectedPacketSent); + emit IICS26RouterEvents.SendPacket(expectedPacketSent); vm.prank(sender); uint32 sequence = ics20Transfer.sendTransfer(msgSendTransfer); @@ -655,7 +655,7 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { proofHeight: IICS02ClientMsgs.Height({ revisionNumber: 1, revisionHeight: 42 }) // dummy client will accept }); vm.expectEmit(); - emit ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); + emit IICS20TransferEvents.ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); ics26Router.ackPacket(ackMsg); // commitment should be deleted @@ -724,7 +724,7 @@ contract IntegrationTest is Test, IICS26RouterEvents, IICS20TransferEvents { vm.startPrank(sender); vm.expectEmit(); - emit ICS20TokenTransfer(expectedDefaultSendPacketData, address(erc20)); + emit IICS20TransferEvents.ICS20Transfer(expectedDefaultSendPacketData, address(erc20)); uint32 sequence = ics20Transfer.sendTransfer(msgSendTransfer); assertEq(sequence, 1); From ef7163e3a993a29cf2e1c940dc8f44ffb780cd11 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Mon, 9 Sep 2024 08:11:50 +0200 Subject: [PATCH 4/4] lint --- test/ICS20TransferTest.t.sol | 8 ++++++-- test/IntegrationTest.t.sol | 16 ++++++++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/test/ICS20TransferTest.t.sol b/test/ICS20TransferTest.t.sol index de24cb4..0aca14b 100644 --- a/test/ICS20TransferTest.t.sol +++ b/test/ICS20TransferTest.t.sol @@ -279,7 +279,9 @@ contract ICS20TransferTest is Test { assertEq(contractBalanceAfterSend, defaultAmount); vm.expectEmit(); - emit IICS20TransferEvents.ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); + emit IICS20TransferEvents.ICS20Acknowledgement( + expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON + ); ics20Transfer.onAcknowledgementPacket( IIBCAppCallbacks.OnAcknowledgementPacketCallback({ packet: packet, @@ -317,7 +319,9 @@ contract ICS20TransferTest is Test { assertEq(contractBalanceAfterSend, defaultAmount); vm.expectEmit(); - emit IICS20TransferEvents.ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.FAILED_ACKNOWLEDGEMENT_JSON); + emit IICS20TransferEvents.ICS20Acknowledgement( + expectedDefaultSendPacketData, ICS20Lib.FAILED_ACKNOWLEDGEMENT_JSON + ); ics20Transfer.onAcknowledgementPacket( IIBCAppCallbacks.OnAcknowledgementPacketCallback({ packet: packet, diff --git a/test/IntegrationTest.t.sol b/test/IntegrationTest.t.sol index 28a1c5f..0cdf003 100644 --- a/test/IntegrationTest.t.sol +++ b/test/IntegrationTest.t.sol @@ -98,7 +98,9 @@ contract IntegrationTest is Test { proofHeight: IICS02ClientMsgs.Height({ revisionNumber: 1, revisionHeight: 42 }) // dummy client will accept }); vm.expectEmit(); - emit IICS20TransferEvents.ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); + emit IICS20TransferEvents.ICS20Acknowledgement( + expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON + ); ics26Router.ackPacket(ackMsg); // commitment should be deleted bytes32 path = ICS24Host.packetCommitmentKeyCalldata( @@ -138,7 +140,9 @@ contract IntegrationTest is Test { proofHeight: IICS02ClientMsgs.Height({ revisionNumber: 1, revisionHeight: 42 }) // dummy client will accept }); vm.expectEmit(); - emit IICS20TransferEvents.ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.FAILED_ACKNOWLEDGEMENT_JSON); + emit IICS20TransferEvents.ICS20Acknowledgement( + expectedDefaultSendPacketData, ICS20Lib.FAILED_ACKNOWLEDGEMENT_JSON + ); ics26Router.ackPacket(ackMsg); // commitment should be deleted bytes32 path = ICS24Host.packetCommitmentKeyCalldata( @@ -192,7 +196,9 @@ contract IntegrationTest is Test { proofHeight: IICS02ClientMsgs.Height({ revisionNumber: 1, revisionHeight: 42 }) // dummy client will accept }); vm.expectEmit(); - emit IICS20TransferEvents.ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); + emit IICS20TransferEvents.ICS20Acknowledgement( + expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON + ); ics26Router.ackPacket(ackMsg); // commitment should be deleted @@ -655,7 +661,9 @@ contract IntegrationTest is Test { proofHeight: IICS02ClientMsgs.Height({ revisionNumber: 1, revisionHeight: 42 }) // dummy client will accept }); vm.expectEmit(); - emit IICS20TransferEvents.ICS20Acknowledgement(expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON); + emit IICS20TransferEvents.ICS20Acknowledgement( + expectedDefaultSendPacketData, ICS20Lib.SUCCESSFUL_ACKNOWLEDGEMENT_JSON + ); ics26Router.ackPacket(ackMsg); // commitment should be deleted