On this page
Source: paxeer-network/interchain/, precompiles/ibc/, and the IBC keeper and router wiring in node/app.go.

Protocol and implementation

The in-tree IBC implementation provides clients, connections, channels, packet commitments, and application routing. Relayers submit proofs and carry packets and acknowledgements between chains. A working transfer requires compatible live clients, an open channel, and relayer delivery.

Query the target network for the port, channel, counterparty, and supported denomination before sending funds.

Source directoryPurpose
interchain/modules/core/Client, connection, channel, port, and commitment protocol logic.
interchain/modules/apps/transfer/ICS-20 fungible-token transfer messages, packets, and keeper.
interchain/modules/apps/27-interchain-accounts/Interchain-account implementation.
interchain/modules/light-clients/Tendermint and solo-machine light-client code.
precompiles/ibc/EVM interface to native ICS-20 transfers.

Inspect clients and channels

Configure the CLI's Cosmos RPC endpoint for the Paxeer node being queried, then inspect its state:

paxd query ibc client states
paxd query ibc connection connections
paxd query ibc channel channels

Verify the channel's port, connection, remote chain, ordering, and open state. Channel identifiers such as channel-0 are local to a chain; they are not universal destinations.

Transfer through the CLI

This command template sends 1,000,000 uhpx, one PAX. Set IBC_CHANNEL to a verified channel and IBC_RECIPIENT to an address valid on its destination chain.

paxd tx ibc-transfer transfer \
  transfer "$IBC_CHANNEL" "$IBC_RECIPIENT" 1000000uhpx \
  --from mykey --chain-id hyperpax_125-1

Use the actual bank denomination for other assets. An IBC voucher has its own denomination trace; do not substitute a display ticker for a bank denomination.

Transfer directly from the EVM

The precompile at 0x0000000000000000000000000000000000001009 exposes two nonpayable transfer methods. Use the full precompiles/ibc/abi.json for client bindings.

interface IBC {
    function transfer(
        string calldata toAddress,
        string calldata port,
        string calldata channel,
        string calldata denom,
        uint256 amount,
        uint64 revisionNumber,
        uint64 revisionHeight,
        uint64 timeoutTimestamp,
        string calldata memo
    ) external returns (bool success);

    function transferWithDefaultTimeout(
        string calldata toAddress,
        string calldata port,
        string calldata channel,
        string calldata denom,
        uint256 amount,
        string calldata memo
    ) external returns (bool success);
}

The immediate EVM caller must have a Paxeer address association and sufficient native-denomination balance. A wrapper uses the wrapper's associated account. amount is a bank base-unit integer, not payable EVM value; delegatecall is rejected.

The explicit method takes an absolute remote timeout height and timestamp. IBC timestamps use nanoseconds. The default-timeout method derives a timeout from the channel's connection, client height, consensus timestamp, current block time, and implementation defaults. It can fail when required channel or client state is absent.

The ABI submits transfers; it does not expose channel enumeration or a general incoming-packet callback. Use the native query interfaces to inspect IBC state.

Track the whole transfer

A successful local transaction means the source-chain transfer was accepted. It does not mean the destination has already received the assets. Retain the source transaction and packet identifiers, then track relay, acknowledgement, or timeout/refund handling on both chains.

Configure your relayer for both networks, check that its clients are current, and monitor packet delivery and acknowledgement processing.

Implementation references

  • precompiles/ibc/IBC.sol: exact public selectors.
  • precompiles/ibc/ibc.go: associated sender, amount conversion, timeout derivation, and keeper invocation.
  • interchain/modules/apps/transfer/: packet lifecycle and native transfer behavior.
  • Precompile reference and native query interfaces.
Paxeer Network · Developer documentationBack to top ↑

Ask Paxeer Docs

Answers from the documentation.

What would you like to know?

Ask a question, find a guide, or get help with your next step.

Enter to send · Shift+Enter for a new line