-
Notifications
You must be signed in to change notification settings - Fork 716
Description
Summary
Reconstructing a packet from a relayer's perspective is unnecessarily complex due to the need to process multiple events, which complicates event handling and increases the likelihood of errors.
Problem Definition
ibc-go/modules/core/04-channel/v2/keeper/events.go
Lines 14 to 53 in 8bae734
func emitSendPacketEvents(ctx context.Context, packet types.Packet) { | |
sdkCtx := sdk.UnwrapSDKContext(ctx) | |
sdkCtx.EventManager().EmitEvents(sdk.Events{ | |
sdk.NewEvent( | |
types.EventTypeSendPacket, | |
sdk.NewAttribute(types.AttributeKeySrcChannel, packet.SourceChannel), | |
sdk.NewAttribute(types.AttributeKeyDstChannel, packet.DestinationChannel), | |
sdk.NewAttribute(types.AttributeKeySequence, fmt.Sprintf("%d", packet.Sequence)), | |
sdk.NewAttribute(types.AttributeKeyTimeoutTimestamp, fmt.Sprintf("%d", packet.TimeoutTimestamp)), | |
sdk.NewAttribute(types.AttributeKeyPayloadLength, fmt.Sprintf("%d", len(packet.Payloads))), | |
sdk.NewAttribute(types.AttributeKeyVersion, packet.Payloads[0].Version), | |
sdk.NewAttribute(types.AttributeKeyEncoding, packet.Payloads[0].Encoding), | |
sdk.NewAttribute(types.AttributeKeyData, hex.EncodeToString(packet.Payloads[0].Value)), | |
), | |
sdk.NewEvent( | |
sdk.EventTypeMessage, | |
sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), | |
), | |
}) | |
for i, payload := range packet.Payloads { | |
sdkCtx.EventManager().EmitEvents(sdk.Events{ | |
sdk.NewEvent( | |
types.EventTypeSendPayload, | |
sdk.NewAttribute(types.AttributeKeySrcChannel, packet.SourceChannel), | |
sdk.NewAttribute(types.AttributeKeyDstChannel, packet.DestinationChannel), | |
sdk.NewAttribute(types.AttributeKeySequence, fmt.Sprintf("%d", packet.Sequence)), | |
sdk.NewAttribute(types.AttributeKeyPayloadSequence, fmt.Sprintf("%d", i)), | |
sdk.NewAttribute(types.AttributeKeyVersion, payload.Version), | |
sdk.NewAttribute(types.AttributeKeyEncoding, payload.Encoding), | |
sdk.NewAttribute(types.AttributeKeyData, hex.EncodeToString(payload.Value)), | |
), | |
sdk.NewEvent( | |
sdk.EventTypeMessage, | |
sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), | |
), | |
}) | |
} | |
} |
Since event support has not yet fully arrived (#7386), the same problem would also occur for write acknowledgement events once they are implemented.
Use cases
Improved Developer Experience
- Relayer developers can work with a more intuitive event model, reducing development and debugging time.
Cleaner Codebase in IBC-Go
- Consolidating packet data into a single event simplifies code logic, reducing maintenance overhead and potential for bugs.
Enhanced Ecosystem Interoperability
- A more streamlined event structure aligns with modern approaches, like Solidity-IBC-Eureka, fostering consistency across implementations.
Proposal
We can simply include the all payload information in the same event or do what solidity-ibc-eureka is doing and encode the entire packet as a single key-value pair.
We may also want to modify the spec so that all packet info is contained in a single event.
For Admin Use
- Not duplicate issue
- Appropriate labels applied
- Appropriate contributors tagged/assigned
- Estimate provided