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
105 lines
4.3 KiB
Go
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()
|
|
}
|