The Agoric chain has a small patch to assert queries are only made for blocks that have been produced. It sends a "given height %d is greater than latest height %d: invalid height" error if a query for a future block is made. It seems if this error happens, the transfer channel gets stuck.
Version
Official docker version for hermes 1.8.0.
Steps to Reproduce
Launch Hermes with the following config:
config.toml
```toml
# The global section has parameters that apply globally to the relayer operation.
[global]
log_level = 'info'
# Specify the mode to be used by the relayer. [Required]
[mode]
# Specify the client mode.
[mode.clients]
# Whether or not to enable the client workers. [Required]
enabled = true
# Whether or not to enable periodic refresh of clients. [Default: true]
# This feature only applies to clients that underlie an open channel.
# For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their
# trusting period (e.g., refresh every ~9 days if the trusting period is 14 days).
# Note: Even if this is disabled, clients will be refreshed automatically if
# there is activity on a connection or channel they are involved with.
refresh = true
# Whether or not to enable misbehaviour detection for clients. [Default: false]
misbehaviour = false
# Specify the connections mode.
[mode.connections]
# Whether or not to enable the connection workers for handshake completion. [Required]
enabled = false
# Specify the channels mode.
[mode.channels]
# Whether or not to enable the channel workers for handshake completion. [Required]
enabled = false
# Specify the packets mode.
[mode.packets]
# Whether or not to enable the packet workers. [Required]
enabled = true
# Parametrize the periodic packet clearing feature.
# Interval (in number of blocks) at which pending packets
# should be periodically cleared. A value of '0' will disable
# periodic packet clearing. [Default: 100]
clear_interval = 100
# Whether or not to clear packets on start. [Default: false]
clear_on_start = true
# Toggle the transaction confirmation mechanism.
# The tx confirmation mechanism periodically queries the `/tx_search` RPC
# endpoint to check that previously-submitted transactions
# (to any chain in this config file) have been successfully delivered.
# If they have not been, and `clear_interval = 0`, then those packets are
# queued up for re-submission.
# If set to `false`, the following telemetry metrics will be disabled:
# `acknowledgment_packets_confirmed`, `receive_packets_confirmed` and `timeout_packets_confirmed`.
# [Default: false]
tx_confirmation = false
# The REST section defines parameters for Hermes' built-in RESTful API.
# https://hermes.informal.systems/rest.html
[rest]
# Whether or not to enable the REST service. Default: false
enabled = true
# Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful
# API requests. Default: 127.0.0.1
host = '127.0.0.1'
# Specify the port over which the built-in HTTP server will serve the restful API
# requests. Default: 3000
port = 3000
# The telemetry section defines parameters for Hermes' built-in telemetry capabilities.
# https://hermes.informal.systems/telemetry.html
[telemetry]
# Whether or not to enable the telemetry service. Default: false
enabled = false
# Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics
# gathered by the telemetry service. Default: 127.0.0.1
host = '127.0.0.1'
# Specify the port over which the built-in HTTP server will serve the metrics gathered
# by the telemetry service. Default: 3001
port = 3001
# A chains section includes parameters related to a chain and the full node to which
# the relayer can send transactions and queries.
[[chains]]
id = 'agoric-emerynet-8'
rpc_addr = 'https://emerynet.rpc.agoric.net/'
grpc_addr = 'https://emerynet.grpc.agoric.net/'
event_source = { mode = 'push', url = 'wss://emerynet.rpc.agoric.net/websocket', batch_delay = '500ms' }
rpc_timeout = '15s'
account_prefix = 'agoric'
key_name = 'whale-emerynet'
address_type = { derivation = 'cosmos' }
store_prefix = 'ibc'
default_gas = 2000000
max_gas = 10000000
gas_price = { price = 0.00, denom = 'ubld' }
gas_multiplier = 1.1
max_msg_num = 25
max_tx_size = 180000
clock_drift = '15s'
#max_block_time = '15s'
trusting_period = '14days'
trust_threshold = { numerator = '1', denominator = '3' }
memo_prefix = 'agoric-emerynet-relay'
[[chains]]
id = 'agoricdev-23'
rpc_addr = 'https://devnet.rpc.agoric.net/'
grpc_addr = 'https://devnet.grpc.agoric.net/'
event_source = { mode = 'push', url = 'wss://devnet.rpc.agoric.net:26657/websocket', batch_delay = '500ms' }
rpc_timeout = '15s'
account_prefix = 'agoric'
key_name = 'whale-devnet'
address_type = { derivation = 'cosmos' }
store_prefix = 'ibc'
default_gas = 2000000
max_gas = 10000000
gas_price = { price = 0.00, denom = 'ubld' }
gas_multiplier = 1.1
max_msg_num = 25
max_tx_size = 180000
clock_drift = '15s'
#max_block_time = '15s'
trusting_period = '14days'
trust_threshold = { numerator = '1', denominator = '3' }
memo_prefix = 'agoric-devnet-relay'
```
refs: #3299
Summary of Bug
The Agoric chain has a small patch to assert queries are only made for blocks that have been produced. It sends a
"given height %d is greater than latest height %d: invalid height"
error if a query for a future block is made. It seems if this error happens, the transfer channel gets stuck.Version
Official docker version for hermes 1.8.0.
Steps to Reproduce
config.toml
```toml # The global section has parameters that apply globally to the relayer operation. [global] log_level = 'info' # Specify the mode to be used by the relayer. [Required] [mode] # Specify the client mode. [mode.clients] # Whether or not to enable the client workers. [Required] enabled = true # Whether or not to enable periodic refresh of clients. [Default: true] # This feature only applies to clients that underlie an open channel. # For Tendermint clients, the frequency at which Hermes refreshes them is 2/3 of their # trusting period (e.g., refresh every ~9 days if the trusting period is 14 days). # Note: Even if this is disabled, clients will be refreshed automatically if # there is activity on a connection or channel they are involved with. refresh = true # Whether or not to enable misbehaviour detection for clients. [Default: false] misbehaviour = false # Specify the connections mode. [mode.connections] # Whether or not to enable the connection workers for handshake completion. [Required] enabled = false # Specify the channels mode. [mode.channels] # Whether or not to enable the channel workers for handshake completion. [Required] enabled = false # Specify the packets mode. [mode.packets] # Whether or not to enable the packet workers. [Required] enabled = true # Parametrize the periodic packet clearing feature. # Interval (in number of blocks) at which pending packets # should be periodically cleared. A value of '0' will disable # periodic packet clearing. [Default: 100] clear_interval = 100 # Whether or not to clear packets on start. [Default: false] clear_on_start = true # Toggle the transaction confirmation mechanism. # The tx confirmation mechanism periodically queries the `/tx_search` RPC # endpoint to check that previously-submitted transactions # (to any chain in this config file) have been successfully delivered. # If they have not been, and `clear_interval = 0`, then those packets are # queued up for re-submission. # If set to `false`, the following telemetry metrics will be disabled: # `acknowledgment_packets_confirmed`, `receive_packets_confirmed` and `timeout_packets_confirmed`. # [Default: false] tx_confirmation = false # The REST section defines parameters for Hermes' built-in RESTful API. # https://hermes.informal.systems/rest.html [rest] # Whether or not to enable the REST service. Default: false enabled = true # Specify the IPv4/6 host over which the built-in HTTP server will serve the RESTful # API requests. Default: 127.0.0.1 host = '127.0.0.1' # Specify the port over which the built-in HTTP server will serve the restful API # requests. Default: 3000 port = 3000 # The telemetry section defines parameters for Hermes' built-in telemetry capabilities. # https://hermes.informal.systems/telemetry.html [telemetry] # Whether or not to enable the telemetry service. Default: false enabled = false # Specify the IPv4/6 host over which the built-in HTTP server will serve the metrics # gathered by the telemetry service. Default: 127.0.0.1 host = '127.0.0.1' # Specify the port over which the built-in HTTP server will serve the metrics gathered # by the telemetry service. Default: 3001 port = 3001 # A chains section includes parameters related to a chain and the full node to which # the relayer can send transactions and queries. [[chains]] id = 'agoric-emerynet-8' rpc_addr = 'https://emerynet.rpc.agoric.net/' grpc_addr = 'https://emerynet.grpc.agoric.net/' event_source = { mode = 'push', url = 'wss://emerynet.rpc.agoric.net/websocket', batch_delay = '500ms' } rpc_timeout = '15s' account_prefix = 'agoric' key_name = 'whale-emerynet' address_type = { derivation = 'cosmos' } store_prefix = 'ibc' default_gas = 2000000 max_gas = 10000000 gas_price = { price = 0.00, denom = 'ubld' } gas_multiplier = 1.1 max_msg_num = 25 max_tx_size = 180000 clock_drift = '15s' #max_block_time = '15s' trusting_period = '14days' trust_threshold = { numerator = '1', denominator = '3' } memo_prefix = 'agoric-emerynet-relay' [[chains]] id = 'agoricdev-23' rpc_addr = 'https://devnet.rpc.agoric.net/' grpc_addr = 'https://devnet.grpc.agoric.net/' event_source = { mode = 'push', url = 'wss://devnet.rpc.agoric.net:26657/websocket', batch_delay = '500ms' } rpc_timeout = '15s' account_prefix = 'agoric' key_name = 'whale-devnet' address_type = { derivation = 'cosmos' } store_prefix = 'ibc' default_gas = 2000000 max_gas = 10000000 gas_price = { price = 0.00, denom = 'ubld' } gas_multiplier = 1.1 max_msg_num = 25 max_tx_size = 180000 clock_drift = '15s' #max_block_time = '15s' trusting_period = '14days' trust_threshold = { numerator = '1', denominator = '3' } memo_prefix = 'agoric-devnet-relay' ```ubld
from https://emerynet.faucet.agoric.net and https://devnet.faucet.agoric.net (send BLD/IBC toy tokens)ubld
from emerynet to devnet using the relayer addresses. This will usually work (but sometimes fails as below logs indicate).ibc/XXX
vouchers from devnet to emerynet. This will almost always fail as below logs indicate.Here is the invalid height WARN I see sent by Hermes (all in one line):
and later:
Acceptance Criteria
Ensure that future block heights are not queried. Clear guidance as to whether this is part of the "account sequence mismatch" issue.
For Admin Use