mukan-ibc/testing/endpoint_v2.go
Mukan Erkin Törük 88dd97a9f8
Some checks failed
CodeQL / Analyze (push) Waiting to run
golangci-lint / lint (push) Waiting to run
Tests / Code Coverage / build (amd64) (push) Waiting to run
Tests / Code Coverage / build (arm64) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[additional-args:-tags="test_e2e" name:e2e path:./e2e]) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[name:08-wasm path:./modules/light-clients/08-wasm]) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[name:ibc-go path:.]) (push) Waiting to run
Docker Build & Push Simapp (main) / docker-build (push) Has been cancelled
refactor: replace all github.com upstream refs with git.cw.tr/mukan-network
2026-05-11 03:36:22 +03:00

105 lines
4.3 KiB
Go

package ibctesting
import (
"github.com/cosmos/gogoproto/proto"
sdk "git.cw.tr/mukan-network/mukan-sdk/types"
clientv2types "git.cw.tr/mukan-network/mukan-ibc/modules/core/02-client/v2/types"
channeltypesv2 "git.cw.tr/mukan-network/mukan-ibc/modules/core/04-channel/v2/types"
hostv2 "git.cw.tr/mukan-network/mukan-ibc/modules/core/24-host/v2"
)
// RegisterCounterparty will construct and execute a MsgRegisterCounterparty on the associated endpoint.
func (endpoint *Endpoint) RegisterCounterparty() (err error) {
msg := clientv2types.NewMsgRegisterCounterparty(endpoint.ClientID, endpoint.Counterparty.MerklePathPrefix.KeyPath, endpoint.Counterparty.ClientID, endpoint.Chain.SenderAccount.GetAddress().String())
// setup counterparty
_, err = endpoint.Chain.SendMsgs(msg)
return err
}
// MsgSendPacket sends a packet on the associated endpoint using a predefined sender. The constructed packet is returned.
func (endpoint *Endpoint) MsgSendPacket(timeoutTimestamp uint64, payload channeltypesv2.Payload) (channeltypesv2.Packet, error) {
senderAccount := SenderAccount{
SenderPrivKey: endpoint.Chain.SenderPrivKey,
SenderAccount: endpoint.Chain.SenderAccount,
}
return endpoint.MsgSendPacketWithSender(timeoutTimestamp, payload, senderAccount)
}
// MsgSendPacketWithSender sends a packet on the associated endpoint using the provided sender. The constructed packet is returned.
func (endpoint *Endpoint) MsgSendPacketWithSender(timeoutTimestamp uint64, payload channeltypesv2.Payload, sender SenderAccount) (channeltypesv2.Packet, error) {
msgSendPacket := channeltypesv2.NewMsgSendPacket(endpoint.ClientID, timeoutTimestamp, sender.SenderAccount.GetAddress().String(), payload)
res, err := endpoint.Chain.SendMsgsWithSender(sender, msgSendPacket)
if err != nil {
return channeltypesv2.Packet{}, err
}
if err := endpoint.Counterparty.UpdateClient(); err != nil {
return channeltypesv2.Packet{}, err
}
// TODO: parse the packet from events instead of from the response. https://github.com/cosmos/ibc-go/issues/7459
// get sequence from msg response
var msgData sdk.TxMsgData
err = proto.Unmarshal(res.Data, &msgData)
if err != nil {
return channeltypesv2.Packet{}, err
}
msgResponse := msgData.MsgResponses[0]
var sendResponse channeltypesv2.MsgSendPacketResponse
err = proto.Unmarshal(msgResponse.Value, &sendResponse)
if err != nil {
return channeltypesv2.Packet{}, err
}
packet := channeltypesv2.NewPacket(sendResponse.Sequence, endpoint.ClientID, endpoint.Counterparty.ClientID, timeoutTimestamp, payload)
return packet, nil
}
// MsgRecvPacket sends a MsgRecvPacket on the associated endpoint with the provided packet.
func (endpoint *Endpoint) MsgRecvPacket(packet channeltypesv2.Packet) error {
// get proof of packet commitment from chainA
packetKey := hostv2.PacketCommitmentKey(packet.SourceClient, packet.Sequence)
proof, proofHeight := endpoint.Counterparty.QueryProof(packetKey)
msg := channeltypesv2.NewMsgRecvPacket(packet, proof, proofHeight, endpoint.Chain.SenderAccount.GetAddress().String())
if err := endpoint.Chain.sendMsgs(msg); err != nil {
return err
}
return endpoint.Counterparty.UpdateClient()
}
// MsgAcknowledgePacket sends a MsgAcknowledgement on the associated endpoint with the provided packet and ack.
func (endpoint *Endpoint) MsgAcknowledgePacket(packet channeltypesv2.Packet, ack channeltypesv2.Acknowledgement) error {
packetKey := hostv2.PacketAcknowledgementKey(packet.DestinationClient, packet.Sequence)
proof, proofHeight := endpoint.Counterparty.QueryProof(packetKey)
msg := channeltypesv2.NewMsgAcknowledgement(packet, ack, proof, proofHeight, endpoint.Chain.SenderAccount.GetAddress().String())
if err := endpoint.Chain.sendMsgs(msg); err != nil {
return err
}
return endpoint.Counterparty.UpdateClient()
}
// MsgTimeoutPacket sends a MsgTimeout on the associated endpoint with the provided packet.
func (endpoint *Endpoint) MsgTimeoutPacket(packet channeltypesv2.Packet) error {
packetKey := hostv2.PacketReceiptKey(packet.DestinationClient, packet.Sequence)
proof, proofHeight := endpoint.Counterparty.QueryProof(packetKey)
msg := channeltypesv2.NewMsgTimeout(packet, proof, proofHeight, endpoint.Chain.SenderAccount.GetAddress().String())
if err := endpoint.Chain.sendMsgs(msg); err != nil {
return err
}
return endpoint.Counterparty.UpdateClient()
}