Interchain (IBC)
Inspect Paxeer’s IBC implementation and send native-denomination transfers from the CLI or the EVM precompile.
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 directory | Purpose |
|---|---|
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 channelsVerify 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-1Use 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.