Tag:
Branch:
Tree:
d274c6b3f8
0.2.4
0.4.1
0.5.0
0.5.1
0.5.2
0.5.3
06-19-add_ci-default-test
07-01-feat_cli_Add_hyperlane_warp_apply
1.0.0-beta8
3.1.4
CODEOWNERS-ascii
Defcon023/mock_mailbox_size_check
add-delegate
aggregation-hook-improvements
ameten/non-native-token
ameten/scraper-sealevel-e2e
ameten/sealevel-delivery-sequence
ancient8-eth-verify
asaj/addresses
asaj/agent-dev-env
asaj/announce
asaj/block-skew
asaj/check-middlewares
asaj/check-ownables
asaj/ci
asaj/ci-try
asaj/count-lag
asaj/debug
asaj/debug-ci
asaj/deploy
asaj/deploy-ergonomics
asaj/e2e-fast
asaj/enroll
asaj/fern
asaj/gas-profiling
asaj/hardhat
asaj/hardhat-plugin
asaj/hardhat-task
asaj/hooks
asaj/image
asaj/inbox-checkpoints
asaj/index
asaj/kathy-7
asaj/kathy-9
asaj/key-funder
asaj/lag-count
asaj/ll
asaj/metadata-debug
asaj/new-update
asaj/ownable-replicas-dev
asaj/ownership
asaj/ownerships
asaj/ownersss
asaj/pd
asaj/pi-deployer
asaj/poc
asaj/prettier
asaj/readonly
asaj/relayer-checkpoints
asaj/relayer-isms
asaj/router-govern
asaj/schnorr
asaj/schnorr-2
asaj/sdk-proposal
asaj/sealevel-inclusive
asaj/serialize
asaj/solc
asaj/sovereign
asaj/suffix
asaj/upgrade-dev-scripts
asaj/upgrade-rotate-updater
asaj/upgrades
asaj/v2-create2
asaj/v2-exploration
asaj/v2-helm
asaj/v2-main
asaj/workflows
asaj/zkevm
audit-coverage
audit-q3-2024
avious00-link-to-loglevel
avious00-typo-patch
aws-signer-retry
benchmark-multisig
buddies-main-deployment
build-ccip-server
changeset-release/main
changeset-release/release-test
checkInflight
ci-by-path
cli-2.0-beta
cli-figlet
cli-patches
core-msg-encoding
cosmos-gas-prices
cover-mailbox-100%
coverage-flake
create2-deploy
dan/aggregation-ism-rc
dan/bump-relayer-image
dan/configurable-fallback-deprio
dan/cw-types-reuse
dan/debug-cosmos-rpc
dan/e2e-fixes
dan/eip1967
dan/fast-relayer-startup-e2e
dan/gas-escalator-middleware
dan/index-range-refactor
dan/injective-e2e
dan/injective-testnet-agents
dan/keypair-cosmrs
dan/local-svm-setup
dan/lower-txid-channel-size
dan/merkle-tree-hook-indexer
dan/non-evm-cli-warp-deploy
dan/osmosis-test
dan/processed-commitment-sealevel
dan/rc-relayer-profiling
dan/relayer-images-bump
dan/relayer-migrations
dan/retry-cosmos-e2e
dan/rocksdb-config
dan/rust-caching
dan/stage-agent-fixes
dan/testnet-aggregation-ism
dan/tmp-branch
dan/token-config-schema
dan/v3-e2e
dan/v3-sealevel-e2e
dan/va-urls
dan/zksync-testing
danil/validator_deployment_latest_image
deploy-create2-factory-moonbeam
deploy-ica-proxied
deploy-middlewares-1.3.1
deploy-wait
deployer-options
docs-simplifications
drew/manual_processing_config
dynamic-cli-version
eigenlayer
erc165
fallback-routing-hook-deployer
feat/hl-starknet-29-oct
feat/v3-cosmos
flexible-voting-vault
github-pr-stats
hook-agent-testing
hook-ism-contract-READMEs
injective-ism-fix
interchain-call-tests
kunal/arb-l2-hook-contracts
kunal/arb-selfrelay
kunal/arb-sepolia-deployment
kunal/ascii-art
kunal/avs-contract-deployment
kunal/avs-temp
kunal/avs-update-reward
kunal/avs-validator-check-status
kunal/bump-solana-prio-fee-further
kunal/check-msg-value-send-auth-hooks
kunal/ci-checker-warp-fix
kunal/cli-register-ci
kunal/default-hook
kunal/ica-deployment
kunal/ica-govern-testing
kunal/igp-hook
kunal/ism-factory-warp-deploy
kunal/l2-native-bridge-hook
kunal/latest-height-merkle-root-index
kunal/manta-gas-overpayment-fix
kunal/messageIdAuth-replay-protection
kunal/native-arbitrum-hook
kunal/native-gnosis-hook
kunal/native-polygon-hook
kunal/null-metadata
kunal/op-stack-hook-custom-test
kunal/orphan-format-igp-async
kunal/ownable-caching-hook
kunal/rc-kathy-ism-config
kunal/relayer-metadata-null
kunal/revert-multisig-interface
kunal/revert-weighted-multisig-changes
kunal/rez-avs
kunal/special-case-plume-testnet
kunal/stake-weighted-ism
kunal/update-gasOracle-cron-job
kunal/update-gasOracle-deployer
kunal/v3-pr-comments-fixes
kunal/validator-el-sig-posting
kunal/validator-endpoints
kunal/value-router
kunal/verifiedMessageId-param
kunal/verify-ica
kunal/warp-route-checker
kunal/weighted-ism-relayer-change
light-optimistic
lint.only
liquidity-layer-v2
ltyu/core-apply-defaultIsm
ltyu/hook-config
ltyu/sp1-lightclient-ism
ltyu/warp-apply-hook
ltyu/warp-ism-config
ltyu/zerion-configs
mailbox-branch
mailbox-chainid
main
main-auditv2-merge
main-node-ci
main-to-v3
mattie/512-bit-txoutcomes
mattie/auto-update-prs
mattie/automated-vendoring
mattie/caching-requests
mattie/cosmos-stubs
mattie/finality-blocks-config
mattie/fix-kathy
mattie/inclusive-block-range
mattie/infra-drift-fix
mattie/large-runners
mattie/optional-agent-configuration
mattie/reclaim-funds-from-old-relayer-keys
mattie/relayer-debugging
mattie/sealevel-better-patching
mattie/sealevel-dependency-conflicts-fix
mattie/sealevel/dependencies-part-2
mattie/serejke-fix-1924
mattie/typescript-provider-timeouts
mattie/zkevm-context
merkle-tree-hook-indexer
merkle-vs-mapping
mo/check-avs-cli-command
mo/infra-warp-config-generation
mo/key-funder-debug
mo/keyfunder-707db4a27
mo/non-aw-owned-proxy-checks
mo/verify-proxy-contracts
mo/warp-balance-monitor-validator-names
monitor-war-routes-general
multi-message-relay
multisig-init
nam-rebase
nambrot-patch-1
nambrot/add-gcp-address-to-allconfigs
nambrot/arc-test
nambrot/callforwarder
nambrot/celo-safe
nambrot/chain-connection-to-provider
nambrot/checkpointer-local
nambrot/ci-build
nambrot/circle-relayer
nambrot/core-deploy-fixes
nambrot/debug-fork-ci
nambrot/deploy-aggregation-relayer
nambrot/deploy-helloworld
nambrot/deploy-igp
nambrot/deploy-test-recipient
nambrot/deployment-tooling
nambrot/dev-community
nambrot/dockerignore
nambrot/double-update-script
nambrot/extra-partial-config
nambrot/failed-refactor
nambrot/fix-contract-metrics-avalanche
nambrot/fix-contracts-metrics
nambrot/fix-polygon-updater-old-root
nambrot/foundry-in-ica
nambrot/fundraise-xapp
nambrot/generate-message-with-proof
nambrot/hyp7683
nambrot/igp-deployment-woes
nambrot/in-over-or
nambrot/infra-multiprovider
nambrot/kurtosis-cli
nambrot/loop-with-sleep
nambrot/manual-processing-deploy
nambrot/mintable-token-standard
nambrot/nam-run-feedback
nambrot/optics-ts-interface
nambrot/oracle-updates
nambrot/owner-without-ism
nambrot/parallelize-sol-testing
nambrot/polygon-updater-rotation
nambrot/processor-s3-pusher
nambrot/publish-script
nambrot/relay-specific-message
nambrot/remove-dependabot
nambrot/rename-abacus-solidity-typechain
nambrot/rename-network-to-chain
nambrot/repro-2-2-run-locally
nambrot/resolve-lock
nambrot/rotate-mainnet-etherscan
nambrot/rpc-validator
nambrot/scroll-overrides
nambrot/sdk-0.2.4
nambrot/selective-index-on
nambrot/speed-up-events
nambrot/staging-community-provider
nambrot/static-igp
nambrot/superchain-ism
nambrot/trace-level-s3
nambrot/transfer-owner-no-op
nambrot/try-gas-payment-test-abstraction
nambrot/update-kathy
nambrot/update-optics-provider
nambrot/updater-pause
nambrot/verification-fies
nambrot/watcher-test
nambrot/yo-deploy
nexus-neutron-validators
noah/agg-failure
noah/co
noah/dr-fix
noah/move-safe
noah/no-warp
noah/node-expwarn-cli
noah/prompt
noah/root
noah/warp-ica
noah/zod-2
op-interceptor-deployer
op-stack-hook-deployment
opt-mailbox-delivered
optics-v2
parameterize-infra-paths
pb/chore-test-conditions
pb/duplicate-chainid-support
pb/enable-hyperliquidevmtestnet
pb/lumiaprism
pb/sprint32-mainnet
pb/stride-va
pb/submitter-types
pb/test-e2e-breaks
pb/turbo
pb/verify-viction
pb/zerion
pb/zksync
pjson-pruning
pr-analytics
processor-fixes
public-main
rc-validators
rebalance-collateral
retry-signer
reverse-ica
revert-4869-feat/key-command
revert-964-hacken-critical-1
rossy/cli-version-fix
rossy/codespell-changeset
rossy/multiprovider-no-generic
router-not-upgradeable
router<0.8
routing-interceptor
rpc-fork-cache
schema-fixes
sdk-release
snapshot-igp-config
storage-ism
submodules-1.0.0
submodules-path-2
suppress-coverage-patch
symbiotic
test-recipient-ism-config
test-sol-fixes
test-sol-speed
testnet-dtm
testnet4
testnet4-deployment
tmp-keyfunder
token-testing-forge
transfer-and-call
transient-current-message-id
trevor/1.4.2-beta69
trevor/add-injective-back
trevor/addtl-igp-cmds
trevor/arbitrum-gas-amounts
trevor/bridge-app-interchain-gas-contracts
trevor/conditional-middlewares-suck
trevor/cosmos-cleanup-2
trevor/dao-ism
trevor/debug-verbosity
trevor/debugging-sept-21
trevor/decimal-consistency-checker
trevor/dependency-attempts
trevor/deploy-relayer-funder-multi-context
trevor/deploy-testrecipient-rollup-testnets
trevor/deploy-v2
trevor/deploy-v2-relayer-feb-1-2024
trevor/deploying-ancient8
trevor/deploying-to-zbc-testnet
trevor/disable-rarichain-rpc
trevor/eclipsedevnet-deploy
trevor/env-var-tip
trevor/fallback-igp
trevor/fastusd-infra-checking
trevor/fix-announcement-issues
trevor/fix-e2e-mar-31
trevor/fix-feat/deploy-new-rc
trevor/fix-inaccurate-svm-comment
trevor/fix-polygon-updater-old-root
trevor/force-readonly-collateral-mints
trevor/gelato-mainnet-abacus
trevor/gelato-testnet2
trevor/grpc-refactor
trevor/hacky-nautilus-indexing-fix-attempt
trevor/helloworld-check-mostly-works
trevor/helloworld-program
trevor/helloworld-program-and-tooling-not-working
trevor/higher-sol-fees
trevor/key-funder-fallbackprovider
trevor/last-agent-release
trevor/legacy-ethers
trevor/local-igp-for-playing-with
trevor/lz-reorg-periods
trevor/mainnet-rc-quorumprovider
trevor/merge-main-jul-6
trevor/merge-v3
trevor/merkle-indexing-as-message
trevor/native-warp-route-allow-donate
trevor/new-featv3-cosmos
trevor/nits-and-no-invariant
trevor/no-address-filter
trevor/no-eip-1559
trevor/on-chain-fee-quoting-calculator
trevor/opentelemetry
trevor/opentelemetry-stackdriver
trevor/oracle-updates-mode-blast-try-batching
trevor/parallel-pod-management-policy
trevor/play-with-ci
trevor/playing-with-validator-announce
trevor/port-over-addtl-igp-cmds
trevor/proteus-from-last-agent-release
trevor/proteus-from-last-agent-release-1
trevor/quick-scroll-moonbeam-fix
trevor/read-txs-nov-8
trevor/relayer-use-gelato-scaffolding
trevor/sealevel-igp
trevor/sei-fix
trevor/send-unblocking-tx
trevor/some-svm-improvements
trevor/suggestion
trevor/svm-collateral-readonly-mint
trevor/test-dispatch-return-value
trevor/try-ethers-quorum-estimate-gas-fix
trevor/try-fix-e2e
trevor/upgrade-registry-update
trevor/use-gas-estimate-components-in-arb
trevor/use-secret-rpc-urls-awk-branch-setup
trevor/wip-transfer-test
trusted-relayer-ism
typechain11
upgradable-warp-routes-rossy
upgrades-v2
v1
v2
v2-2
v2-create2
v3
v3-agents
v3-agents-feedback
v3-agents-rebase
v3-review
validator-correctness
verify-igp
verify-mainnet
verify-new-testnet2
warp-deploy-ism-config
warp-route-v3
webbhorn/gelato-PR-submitter-prep
webbhorn/gelato-tip
webbhorn/gelato-tip-wip
webbhorn/gelato/demo-cli
webbhorn/gelato/op
xeno/better-chain-selection-for-single-chain
xeno/ica-router-management
xeno/ica-router-management-update
xeno/update-ism-derivation-for-ica-support
xeno/zero-warp-deploys
yarn-4.1.0
yorhodes-patch-1
yorhodes/427
yorhodes/429
yorhodes/450
yorhodes/479
yorhodes/inbox-enrollments
zksync
0.2.1
0.2.4
0.3.1
1.0.0-beta5
2023-06-08
@hyperlane-xyz/cli@3.10.0
@hyperlane-xyz/cli@3.11.0
@hyperlane-xyz/cli@3.11.1
@hyperlane-xyz/cli@3.13.0
@hyperlane-xyz/cli@3.13.0-next.0
@hyperlane-xyz/cli@3.14.0
@hyperlane-xyz/cli@3.15.0
@hyperlane-xyz/cli@3.15.1
@hyperlane-xyz/cli@3.16.0
@hyperlane-xyz/cli@3.2.0
@hyperlane-xyz/cli@3.3.0
@hyperlane-xyz/cli@3.4.0
@hyperlane-xyz/cli@3.5.0
@hyperlane-xyz/cli@3.5.1
@hyperlane-xyz/cli@3.6.0
@hyperlane-xyz/cli@3.6.1
@hyperlane-xyz/cli@3.6.2
@hyperlane-xyz/cli@3.7.0
@hyperlane-xyz/cli@3.8.0
@hyperlane-xyz/cli@3.8.1
@hyperlane-xyz/cli@3.8.2
@hyperlane-xyz/cli@3.9.0
@hyperlane-xyz/cli@4.0.0
@hyperlane-xyz/cli@4.0.0-alpha.0
@hyperlane-xyz/cli@4.0.0-alpha.1
@hyperlane-xyz/cli@4.0.0-alpha.2
@hyperlane-xyz/cli@4.0.0-beta
@hyperlane-xyz/cli@4.1.0
@hyperlane-xyz/cli@5.1.0
@hyperlane-xyz/cli@5.1.1
@hyperlane-xyz/cli@5.1.2
@hyperlane-xyz/cli@5.2.0
@hyperlane-xyz/cli@5.2.1
@hyperlane-xyz/cli@5.2.1-beta.0
@hyperlane-xyz/cli@5.3.0
@hyperlane-xyz/cli@5.4.0
@hyperlane-xyz/cli@5.5.0
@hyperlane-xyz/cli@5.6.0
@hyperlane-xyz/cli@5.6.1
@hyperlane-xyz/cli@5.6.2
@hyperlane-xyz/cli@5.7.0
@hyperlane-xyz/cli@6.0.0
@hyperlane-xyz/cli@7.0.0
@hyperlane-xyz/cli@7.1.0
@hyperlane-xyz/cli@7.2.0
@hyperlane-xyz/core@3.1.10
@hyperlane-xyz/core@3.10.0
@hyperlane-xyz/core@3.11.0
@hyperlane-xyz/core@3.11.1
@hyperlane-xyz/core@3.12.0
@hyperlane-xyz/core@3.13.0
@hyperlane-xyz/core@3.13.0-next.0
@hyperlane-xyz/core@3.14.0
@hyperlane-xyz/core@3.15.0
@hyperlane-xyz/core@3.15.1
@hyperlane-xyz/core@3.16.0
@hyperlane-xyz/core@3.2.0
@hyperlane-xyz/core@3.3.0
@hyperlane-xyz/core@3.4.0
@hyperlane-xyz/core@3.5.0
@hyperlane-xyz/core@3.5.1
@hyperlane-xyz/core@3.6.0
@hyperlane-xyz/core@3.6.1
@hyperlane-xyz/core@3.6.2
@hyperlane-xyz/core@3.7.0
@hyperlane-xyz/core@3.8.0
@hyperlane-xyz/core@3.8.1
@hyperlane-xyz/core@3.8.2
@hyperlane-xyz/core@3.9.0
@hyperlane-xyz/core@4.0.0
@hyperlane-xyz/core@4.0.0-alpha.0
@hyperlane-xyz/core@4.0.0-alpha.1
@hyperlane-xyz/core@4.0.0-alpha.2
@hyperlane-xyz/core@4.0.0-beta
@hyperlane-xyz/core@4.1.0
@hyperlane-xyz/core@5.1.0
@hyperlane-xyz/core@5.1.1
@hyperlane-xyz/core@5.1.2
@hyperlane-xyz/core@5.2.0
@hyperlane-xyz/core@5.2.1
@hyperlane-xyz/core@5.2.1-beta.0
@hyperlane-xyz/core@5.3.0
@hyperlane-xyz/core@5.4.0
@hyperlane-xyz/core@5.4.1
@hyperlane-xyz/core@5.5.0
@hyperlane-xyz/core@5.6.0
@hyperlane-xyz/core@5.6.1
@hyperlane-xyz/core@5.7.0
@hyperlane-xyz/core@5.7.1
@hyperlane-xyz/core@5.8.0
@hyperlane-xyz/core@5.8.1
@hyperlane-xyz/core@5.8.2
@hyperlane-xyz/github-proxy@5.2.0
@hyperlane-xyz/github-proxy@5.2.1-beta.0
@hyperlane-xyz/helloworld@3.1.10
@hyperlane-xyz/helloworld@3.10.0
@hyperlane-xyz/helloworld@3.11.0
@hyperlane-xyz/helloworld@3.11.1
@hyperlane-xyz/helloworld@3.12.0
@hyperlane-xyz/helloworld@3.13.0
@hyperlane-xyz/helloworld@3.13.0-next.0
@hyperlane-xyz/helloworld@3.14.0
@hyperlane-xyz/helloworld@3.15.0
@hyperlane-xyz/helloworld@3.15.1
@hyperlane-xyz/helloworld@3.16.0
@hyperlane-xyz/helloworld@3.2.0
@hyperlane-xyz/helloworld@3.3.0
@hyperlane-xyz/helloworld@3.4.0
@hyperlane-xyz/helloworld@3.5.0
@hyperlane-xyz/helloworld@3.5.1
@hyperlane-xyz/helloworld@3.6.0
@hyperlane-xyz/helloworld@3.6.1
@hyperlane-xyz/helloworld@3.6.2
@hyperlane-xyz/helloworld@3.7.0
@hyperlane-xyz/helloworld@3.8.0
@hyperlane-xyz/helloworld@3.8.1
@hyperlane-xyz/helloworld@3.8.2
@hyperlane-xyz/helloworld@3.9.0
@hyperlane-xyz/helloworld@4.0.0
@hyperlane-xyz/helloworld@4.0.0-alpha.0
@hyperlane-xyz/helloworld@4.0.0-alpha.1
@hyperlane-xyz/helloworld@4.0.0-alpha.2
@hyperlane-xyz/helloworld@4.0.0-beta
@hyperlane-xyz/helloworld@4.1.0
@hyperlane-xyz/helloworld@5.1.0
@hyperlane-xyz/helloworld@5.1.1
@hyperlane-xyz/helloworld@5.1.2
@hyperlane-xyz/helloworld@5.2.0
@hyperlane-xyz/helloworld@5.2.1
@hyperlane-xyz/helloworld@5.2.1-beta.0
@hyperlane-xyz/helloworld@5.3.0
@hyperlane-xyz/helloworld@5.4.0
@hyperlane-xyz/helloworld@5.5.0
@hyperlane-xyz/helloworld@5.6.0
@hyperlane-xyz/helloworld@5.6.1
@hyperlane-xyz/helloworld@5.6.2
@hyperlane-xyz/helloworld@5.7.0
@hyperlane-xyz/helloworld@6.0.0
@hyperlane-xyz/helloworld@7.0.0
@hyperlane-xyz/helloworld@7.1.0
@hyperlane-xyz/helloworld@7.2.0
@hyperlane-xyz/sdk@3.1.10
@hyperlane-xyz/sdk@3.10.0
@hyperlane-xyz/sdk@3.11.0
@hyperlane-xyz/sdk@3.11.1
@hyperlane-xyz/sdk@3.12.0
@hyperlane-xyz/sdk@3.13.0
@hyperlane-xyz/sdk@3.13.0-next.0
@hyperlane-xyz/sdk@3.14.0
@hyperlane-xyz/sdk@3.15.0
@hyperlane-xyz/sdk@3.15.1
@hyperlane-xyz/sdk@3.16.0
@hyperlane-xyz/sdk@3.2.0
@hyperlane-xyz/sdk@3.3.0
@hyperlane-xyz/sdk@3.4.0
@hyperlane-xyz/sdk@3.5.0
@hyperlane-xyz/sdk@3.5.1
@hyperlane-xyz/sdk@3.6.0
@hyperlane-xyz/sdk@3.6.1
@hyperlane-xyz/sdk@3.6.2
@hyperlane-xyz/sdk@3.7.0
@hyperlane-xyz/sdk@3.8.0
@hyperlane-xyz/sdk@3.8.1
@hyperlane-xyz/sdk@3.8.2
@hyperlane-xyz/sdk@3.9.0
@hyperlane-xyz/sdk@4.0.0
@hyperlane-xyz/sdk@4.0.0-alpha.0
@hyperlane-xyz/sdk@4.0.0-alpha.1
@hyperlane-xyz/sdk@4.0.0-alpha.2
@hyperlane-xyz/sdk@4.0.0-beta
@hyperlane-xyz/sdk@4.1.0
@hyperlane-xyz/sdk@5.1.0
@hyperlane-xyz/sdk@5.1.1
@hyperlane-xyz/sdk@5.1.2
@hyperlane-xyz/sdk@5.2.0
@hyperlane-xyz/sdk@5.2.1
@hyperlane-xyz/sdk@5.2.1-beta.0
@hyperlane-xyz/sdk@5.3.0
@hyperlane-xyz/sdk@5.4.0
@hyperlane-xyz/sdk@5.5.0
@hyperlane-xyz/sdk@5.6.0
@hyperlane-xyz/sdk@5.6.1
@hyperlane-xyz/sdk@5.6.2
@hyperlane-xyz/sdk@5.7.0
@hyperlane-xyz/sdk@6.0.0
@hyperlane-xyz/sdk@7.0.0
@hyperlane-xyz/sdk@7.1.0
@hyperlane-xyz/sdk@7.2.0
@hyperlane-xyz/utils@3.1.10
@hyperlane-xyz/utils@3.10.0
@hyperlane-xyz/utils@3.11.0
@hyperlane-xyz/utils@3.11.1
@hyperlane-xyz/utils@3.12.0
@hyperlane-xyz/utils@3.13.0
@hyperlane-xyz/utils@3.13.0-next.0
@hyperlane-xyz/utils@3.14.0
@hyperlane-xyz/utils@3.15.0
@hyperlane-xyz/utils@3.15.1
@hyperlane-xyz/utils@3.16.0
@hyperlane-xyz/utils@3.2.0
@hyperlane-xyz/utils@3.3.0
@hyperlane-xyz/utils@3.4.0
@hyperlane-xyz/utils@3.5.0
@hyperlane-xyz/utils@3.5.1
@hyperlane-xyz/utils@3.6.0
@hyperlane-xyz/utils@3.6.1
@hyperlane-xyz/utils@3.6.2
@hyperlane-xyz/utils@3.7.0
@hyperlane-xyz/utils@3.8.0
@hyperlane-xyz/utils@3.8.1
@hyperlane-xyz/utils@3.8.2
@hyperlane-xyz/utils@3.9.0
@hyperlane-xyz/utils@4.0.0
@hyperlane-xyz/utils@4.0.0-alpha.0
@hyperlane-xyz/utils@4.0.0-alpha.1
@hyperlane-xyz/utils@4.0.0-alpha.2
@hyperlane-xyz/utils@4.0.0-beta
@hyperlane-xyz/utils@4.1.0
@hyperlane-xyz/utils@5.1.0
@hyperlane-xyz/utils@5.1.1
@hyperlane-xyz/utils@5.1.2
@hyperlane-xyz/utils@5.2.0
@hyperlane-xyz/utils@5.2.1
@hyperlane-xyz/utils@5.2.1-beta.0
@hyperlane-xyz/utils@5.3.0
@hyperlane-xyz/utils@5.4.0
@hyperlane-xyz/utils@5.5.0
@hyperlane-xyz/utils@5.6.0
@hyperlane-xyz/utils@5.6.1
@hyperlane-xyz/utils@5.6.2
@hyperlane-xyz/utils@5.7.0
@hyperlane-xyz/utils@6.0.0
@hyperlane-xyz/utils@7.0.0
@hyperlane-xyz/utils@7.1.0
@hyperlane-xyz/utils@7.2.0
@hyperlane-xyz/widgets@5.0.0
@hyperlane-xyz/widgets@5.1.0
@hyperlane-xyz/widgets@5.1.1
@hyperlane-xyz/widgets@5.1.2
@hyperlane-xyz/widgets@5.2.0
@hyperlane-xyz/widgets@5.2.1
@hyperlane-xyz/widgets@5.2.1-beta.0
@hyperlane-xyz/widgets@5.3.0
@hyperlane-xyz/widgets@5.4.0
@hyperlane-xyz/widgets@5.5.0
@hyperlane-xyz/widgets@5.6.0
@hyperlane-xyz/widgets@5.6.1
@hyperlane-xyz/widgets@5.6.2
@hyperlane-xyz/widgets@5.7.0
@hyperlane-xyz/widgets@6.0.0
@hyperlane-xyz/widgets@7.0.0
@hyperlane-xyz/widgets@7.1.0
@hyperlane-xyz/widgets@7.2.0
agents-1.0.0
agents-1.0.1
agents-2023-04-14
agents-2023-05-25
agents-2023-05-26
agents-2023-06-08
agents-2023-06-14
agents-2023-07-24
agents-2023-07-25
agents-2023-08-23
agents-2023-11-28
agents-2023-11-29
agents-2023-11-30
agents-2023-12-14
agents-2024-01-29
agents-2024-03-19
agents-2024-03-21
agents-2024-05-30
agents-2024-06-19
agents-v1.0.0
audit-fyeo-responses-0
audit-remediations
audit-scope-0
audit-v2
fyeo-fixes
hacken-fixes
mainnet-contracts
show
testnet2-contracts
testnet3
v.0.2.0
v.1.5.3
v0.0.0-testnet.0
v0.2.0
v0.2.1
v0.2.2
v0.2.3
v0.3.1
v0.4.0
v0.4.1
v0.5.0
v0.5.0-beta0
v0.5.1
v0.5.2
v0.5.3
v0.5.5
v1.0.0
v1.0.0-beta1
v1.0.0-beta5
v1.0.0-beta6
v1.1.0
v1.2.0
v1.2.1
v1.2.2
v1.2.3
v1.3.0
v1.3.1
v1.3.2
v1.3.3
v1.3.4
v1.3.7
v1.4.0
v1.4.1
v1.5.0
v1.5.1
v1.5.8
v2
v3-audit-remediations
v3-solidity
zksyncbeta
${ noResults }
104 Commits (d274c6b3f879215611f8940ca350fb144a525422)
Author | SHA1 | Message | Date |
---|---|---|---|
Danil Nemirovsky |
d1bf212bf7
|
feat: Report git commit hash as agent metadata (#4282)
### Description * We are storing git commit hash as an environment variable when we compile the source code of an agent. * Validator uses git commit hash as a agent version in `metadata_latest.json` file. * File `metadata_latest.json` is overwritten every time when validator is restarted. * Git commit hash is extracted by `git` util, so, it should be available during build time. * If the directory with the source code does not contain `.git` folder, git commit hash will be defaulted to `VERGEN_IDEMPOTENT_OUTPUT`. Agent Metadata is propagated to Relayer and Scraper, but is not used there. We can use it in the future, reporting git hash commit in the logs, for example. ### Backward compatibility Yes ### Testing * Tested locally with E2E Tests. * Tested against S3 by deploying docker image into k8s --------- Co-authored-by: Danil Nemirovsky <4614623+ameten@users.noreply.github.com> |
4 months ago |
Paul Balaji |
ff3c9897ea
|
chore: migrate `test1` from `13371` to `133711` (#4252)
- chore: migrate `test1` from `13371` to `133711` - due to clash with immutablezkevm - drive-by registry update + agent config update --------- Signed-off-by: pbio <10051819+paulbalaji@users.noreply.github.com> |
4 months ago |
Daniel Savu |
b643fba90a
|
feat: use multiple `mpsc` channels instead of `broadcast` for async interface (#4190)
### Description Follow up to https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/4180 Lowers txid broadcast channel capacity from 1M to 30k and refactors it to use a vec of `mpsc` under the hood. ### Context The heap profiler showed that each new chain takes up 100MB of memory because of the txid broadcast channel. In addition to this, the tokio broadcast channel is a ring buffer where new items simply overwrite old items, making it hard to safely lower the capacity. As such, to be able to safely lower the capacity of this channel, usage of `tokio`'s `broadcast` channel is replaced with a `Vec` of `mpsc`s, which offer an async `send` interface for backpressure. So instead of overwriting old items, senders will block on sends, which makes sense in our case as we absolutely don't want to miss items. The submitter is slower than the indexer based on empirical observation, so blocking on channel size doesn't bottleneck throughput. I noticed the max number of channel items we can reach is 29k, by running the RC relayer after an 8 day break, during which around 160k messages were submitted. Lowering the capacity to 30k should cause us to only encounter backpressure in very rare cases, and the footprint of this channel would lower from 100MB to 3MB. ### Drive-by changes The delivery indexer in the scraper is no longer passed a txid receiver, since message deliveries are not expected to occur in the same tx as message dispatches. ### Related issues - Fixes https://github.com/hyperlane-xyz/issues/issues/1293 ### Testing E2E, by adding invariants to make sure txid indexing works --------- Co-authored-by: Trevor Porter <tkporter4@gmail.com> |
4 months ago |
Daniel Savu |
6140e6f397
|
feat: Relayer heap profiling (#4180)
### Description During the scalability audit we've identified relayer memory usage as a cause of concern. This PR runs the profiler each time e2e is run and outputs a report called `dhat-heap.json` in the current dir. That file can be visualised with a dhat viewer, such as the one hosted by the author [here](https://nnethercote.github.io/dh_view/dh_view.html). It adds a conditionally compiled heap memory profiler ([dhat-rs](https://docs.rs/dhat/latest/dhat/)), which is only included when both the `memory-profiling` feature is enabled and the `memory-profiling` cargo profile is used. The report can order the profiling results by total lifetime allocated bytes, peak allocated bytes, total allocation count, etc. Below is the result of sorting by total lifetime allocated bytes, which reveals that the biggest memory hogs are the hook indexing channel [senders](https://github.com/hyperlane-xyz/hyperlane-monorepo/blob/main/rust/hyperlane-base/src/contract_sync/mod.rs#L52) (one per origin chain), taking up 100+ MB. Its size can most likely be reduced from 1M to 1k. ![Screenshot 2024-07-23 at 14 32 21](https://github.com/user-attachments/assets/f551ebfe-3ee0-40de-b53f-e5de1bc56dfa) ### Drive-by changes Adds the remaining IDs in the channel as a field to the hook indexing log, to know if it's safe to lower the channel size. ### Related issues - Fixes https://github.com/hyperlane-xyz/issues/issues/1293 ### Backward compatibility Yes, since everything is conditionally compiled / isolated in a new cargo profile. ### Testing Manual |
4 months ago |
Daniel Savu |
a5e5f70610
|
chore: Revert "feat(hyp-ethereum): gas escalator middleware (#3852)" (#4098)
This reverts commit
|
5 months ago |
Daniel Savu |
c3c002a8fe
|
feat(hyp-ethereum): gas escalator middleware (#3852)
### Description Wraps evm providers in a gas escalator middleware as part of the `build_with_signer` step, so signed txs can have their gas price bumped if stuck in the mempool. Gas price is increased every 60s by 12.5%, and is capped at the `max_fee_per_gas` set in tx overrides. ### Drive-by changes - changes to our fork of `ethers`: - removes the `M: Clone` bound, since it's not actually required and conflicts with the middleware we use - increases the level of the `escalated` log in the middleware to `debug` (so we can see it working in prod without enabling `trace`) ### Related issues - Fixes https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/2959 ### Backward compatibility Yes ### Testing e2e --------- Co-authored-by: Trevor Porter <tkporter4@gmail.com> |
5 months ago |
Daniel Savu |
befc38daba
|
fix: agent log verbosity (#4054)
### Description tbh I don't know why, but this makes all the logs we were previously missing show up in e2e: - |
5 months ago |
Paul Balaji |
39f66df326
|
feat(ci): rust caching in `test` workflow (#4021)
- brings https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/4015 to cli-2.0 branch - cherry-pick e2e flake fix - ensure tests run on pushes to `cli-2.0` --------- Signed-off-by: Paul Balaji <10051819+paulbalaji@users.noreply.github.com> Co-authored-by: Daniel Savu <23065004+daniel-savu@users.noreply.github.com> |
5 months ago |
Daniel Savu |
f227eec892
|
fix: e2e invariant flake (#4017)
### Description Context is explained in the comment, copying it here: ``` // TODO: Sometimes we find more logs than expected. This may either mean that gas is deducted twice for the same message due to a bug, // or that submitting the message transaction fails for some messages. Figure out which is the case and convert this check to // strict equality. // EDIT: Having had a quick look, it seems like there are some legitimate reverts happening in the confirm step // (`Transaction attempting to process message either reverted or was reorged`) // in which case more gas expenditure logs than messages are expected. ``` ### Drive-by changes <!-- Are there any minor or drive-by changes also included? --> ### Related issues <!-- - Fixes #[issue number here] --> ### Backward compatibility <!-- Are these changes backward compatible? Are there any infrastructure implications, e.g. changes that would prohibit deploying older commits using this infra tooling? Yes/No --> ### Testing <!-- What kind of testing have these changes undergone? None/Manual/Unit Tests --> |
5 months ago |
Daniel Savu |
3bb9d0a767
|
fix(cosmos): validator checkpoint & agent indexing improvements (#3958)
- propagates RPC errors to the indexing logic, so errors cause sleeps instead of overwhelming the RPCs. This also greatly reduces cosmos log noisiness: from 9.5k logs per min, to 2.5k logs per min. - checks for published checkpoints in reverse, to prioritize recent messages among those from before the validator was spun up - fixes a validator bug where errors in checkpoint publishing would cause the entire checkpoint queue to be reiterated through, from scratch - Builds on top of https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/3887 so we can test this out on osmosis ### Description <!-- What's included in this PR? --> ### Drive-by changes <!-- Are there any minor or drive-by changes also included? --> ### Related issues <!-- - Fixes #[issue number here] --> ### Backward compatibility <!-- Are these changes backward compatible? Are there any infrastructure implications, e.g. changes that would prohibit deploying older commits using this infra tooling? Yes/No --> ### Testing <!-- What kind of testing have these changes undergone? None/Manual/Unit Tests --> |
5 months ago |
overallteach |
42a6dbc3e6
|
chore: remove repetitive words (#3644)
### Description <!-- What's included in this PR? --> remove repetitive words ### Drive-by changes <!-- Are there any minor or drive-by changes also included? --> ### Related issues <!-- - Fixes #[issue number here] --> ### Backward compatibility <!-- Are these changes backward compatible? Are there any infrastructure implications, e.g. changes that would prohibit deploying older commits using this infra tooling? Yes/No --> ### Testing <!-- What kind of testing have these changes undergone? None/Manual/Unit Tests --> Signed-off-by: overallteach <cricis@foxmail.com> |
6 months ago |
Daniel Savu |
826b4ae57f
|
feat: batching igp (#3870)
### Description Deducts IGP cost from senders of messages within a batch, based on the total gas used by the batch and the estimates for submitting messages individually. The formula is `gas_used_by_operation = gas_used_by_tx * (operation_estimated_gas / total_estimated_cost)` Note that the individual estimate have a buffer value added to them (currently 75k), which will slightly skew proportions, though by a negligible amount. For example, given these estimates in a batch: 150k, 160k, 180k, if we add 80k to each, we go from e.g. 0.312 for the first message to 0.319 -> 2.25% error which isn't so bad. The error can be larger if operations within a batch have very different estimates, but realistically within a 5% range based on back-of-the-napkin calculations. ### Drive-by changes - The batching feature introduced an bug whereby gas expenditure would only be deducted in the `confirm` step. Now this is done in the `submit` step to account for txs that revert - Sealevel e2e can now be disabled for faster iteration! I've not done the cleanest job, but even the fact that we have this will reduce the time to run e2e locally by more than half. To use it, set `SEALEVEL_ENABLED=false` when running `run-locally` - e2e uses a new utility called `get_matching_lines`, that can be used to count (and in the future _parse_) logs, to reconstruct the state of the relayer and have more expressive correctness checks. This is used to make sure that gas is deducted for all messages, including those in batches. ### Related issues - Fixes https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/3709 ### Backward compatibility Yes ### Testing E2E, using `get_matching_lines` |
6 months ago |
Daniel Savu |
942aba8e55
|
feat(evm): collaborative indexing through txid sharing (#3833)
### Description - improved indexing reliability by sharing channels between indexing tasks, such that they inform one another when they come across a hyperlane-related transaction - the receiving end will then get the receipt of that tx and filter it for events relevant to it - this adds some flexibility to indexing since we can stop relying on watermark cursor entirely: as long as we have one task using sequence indexing, all others can rely on being informed by their channels about what txs to index - this PR is only for the EVM chains, but can be easily extended ### Drive-by changes - Enforces gas payments for all chains in e2e (previously this only used to be the case for sealevel) - The channel size is configured per type, similarly to the indexing cursor, in `contract_sync/cursors/mod.rs` - Reduces log verbosity is some places, e.g. by manually implementing `Debug` to exclude fields that aren't relevant to debugging (maybe there's even a macro annotation to exclude, but I haven't checked) - Renames `MpmcReceiver` -> `BroadcastReceiver` ### Related issues - Fixes https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/3267 ### Backward compatibility <!-- Are these changes backward compatible? Are there any infrastructure implications, e.g. changes that would prohibit deploying older commits using this infra tooling? Yes/No --> ### Testing e2e tested with the watermark cursor manually disabled |
6 months ago |
Daniel Savu |
be43b0fd91
|
feat: use batching configs on all execution environments (#3723)
### Description While we only have a tx batching implementation available for EVM chains, we still parallelize the `prepare` and `confirm` steps in the serial submitter according to the `maxBatchSize` config item. To reap the benefits of this change, we need to make these configs universal, because they were only defined within `h_eth::ChainConnectionConf`. This PR adds slight duplication because it adds the batching config on each individual connection config, but it's far simpler than including it in the `ChainConf` struct. The latter would've required changing all the trait impls of `BuildableWithProvider` to include the batching config. ### Drive-by changes Renames `serial_submitter` to `op_submitter` since it's no longer serial. ### Related issues Fixes https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/3722 ### Backward compatibility Yes ### Testing Manually - added the configs to cosmos e2e and checked the logs |
7 months ago |
Daniel Savu |
f46cf7708e
|
Indexing Type Wrapper (#3610)
### Description Depends on https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/3544. Wraps all types to be indexed in an `Indexed<T>` struct in the relayer. This allows for using sequece-aware cursors for data that doesn't contain a sequence but can have it inferred from metadata (as is the case for the IGP on sealevel). `Indexed<T>` stores the sequence as an `Option`, so the db can have additional sequence data stored in it when the sequence is defined - this is how `process_indexed_gas_payment` is implemented now. In addition, the IGP payments and Deliveries are configured to be indexed with a `SequenceAware` cursor on sealevel (see `cursors/mod.rs`). ### Drive-by changes Implements the custom `Encode` and `Decode` traits for `IndexingDecorator`, which can be generalized to `Option<T>` where `T: Encode + Decode`. ### Related issues <!-- - Fixes #[issue number here] --> ### Backward compatibility <!-- Are these changes backward compatible? Are there any infrastructure implications, e.g. changes that would prohibit deploying older commits using this infra tooling? Yes/No --> ### Testing E2E |
7 months ago |
Daniel Savu |
5aeb83a2e5
|
Relayer Message Batching to EVM (#3656)
### Description Status: - [x] op-queue scaffolding - [x] hyperlane-ethereum integration with multicall - [x] new config items - [x] actually build batch in the op-queue submit step - [x] e2e tests with batching configured - [x] dynamic batch sizes (batch as many messages as the prepare step has ready) - [x] parallelize metadata building - [ ] proportional IGP deduction ### Drive-by changes <!-- Are there any minor or drive-by changes also included? --> ### Related issues - Fixes #3628 - Fixes #3630 ### Backward compatibility <!-- Are these changes backward compatible? Are there any infrastructure implications, e.g. changes that would prohibit deploying older commits using this infra tooling? Yes/No --> ### Testing <!-- What kind of testing have these changes undergone? None/Manual/Unit Tests --> --------- Co-authored-by: Trevor Porter <tkporter4@gmail.com> |
7 months ago |
Daniel Savu |
f4626eb4fe
|
Allow protocol-specific indexing (#3544)
### Description - Generalizes contract syncer hashmaps to store trait objects instead of concrete structs, since both `SequencedDataContractSync` and `WatermarkContractSync` implement `ContractSyncer` - The nice thing this enables is being able to instantiate a different type of syncer for the same contract, for different chain protocols (e.g. for IGP, we can use a sequenced syncer on sealevel and cosmwasm, and a watermark syncer on EVM). - The problem is that `ContractSyncer` is implemented on different trait bounds on `SequencedDataContractSync` and `WatermarkContractSync`. Most notably, the `SequencedDataContractSync` impl bounds the indexed type by the `Sequenced` trait. This means that if a type is to be indexed by more than one syncer strategy, it needs to implement the union of bounds of those strategies - **Blocker:** In the IGP, this means that `InterchainGasPayment` needs to implement `Sequenced` and we have no obvious way of getting that just from the type. Even if the sequence is derived from the type, it has to be a sensible value, since indexing reliability depends on it. - Similar to the point above, we now have `contract_syncs`, a single function that instantiates contract syncs for all chains. Since `contract_syncs` must be able to build a `ContractSyncer` trait obj for all syncer types, it bounds both `T` (the indexed type) and `D` (the log store type) with a union of bounds, so it may be too strict for some types in the future. - The scraper now uses forward-backward indexing instead of just forward indexing, because that simplified the refactor - there's now a convenience trait called `TryFromWithMetrics` that allows adding this bound: `SequenceIndexer<T>: TryFromWithMetrics<ChainConf>,`. This isn't really extendable if we use non-sequence indexers, but it's fine for now since this is used everywhere - replaces the macro-based contract syncer builder with generic fns Still todo: - add new `IndexingDecorator<T>` struct that can wrap `InterchainGasPayment`, so we can use sequence-aware indexing for the IGP - remove sequence logic from the watermark cursor ### Drive-by changes <!-- Are there any minor or drive-by changes also included? --> ### Related issues <!-- - Fixes #[issue number here] --> ### Backward compatibility <!-- Are these changes backward compatible? Are there any infrastructure implications, e.g. changes that would prohibit deploying older commits using this infra tooling? Yes/No --> ### Testing <!-- What kind of testing have these changes undergone? None/Manual/Unit Tests --> |
8 months ago |
J M Rossy |
adab1bec0c
|
Add code spellcheck CI job (#3467)
### Description Fix spelling mistakes and create codespell CI job. An extension of #3422 with the remaining mistakes fixed ### Backward compatibility Yes --------- Co-authored-by: miles <66052478+miles-six@users.noreply.github.com> Co-authored-by: Paul Balaji <paul@hyperlane.xyz> |
8 months ago |
Daniel Savu |
e737d998ff
|
Cosmos block-by-block indexing (#3245)
### Description Implements cosmos block-by-block indexing, parallelizing where possible: the `block` and `block_results` calls, and the individual block queries within a range. Also reuses the existing `handle_txs` logic, to improve readability. ### Drive-by changes Adds `tokio::task::JoinError` to the `hyperlane-core` error enum ### Related issues - Fixes https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/3234 - Added some hacky retrying logic to `get_logs_in_block`, since we were seeing lots of `503` http errors. In https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/3264 we should make sure to remove this and propagate the error instead, to retry via the cursor / indexer logic. I edited the description of 3264 to reflect this ### Backward compatibility Yes ### Testing e2e --------- Co-authored-by: Trevor Porter <trkporter@ucdavis.edu> |
9 months ago |
Yorke Rhodes |
0ff3e2b171
|
Deploy injective and inEVM (#3140)
### Description - Deploy core to injective and inEVM networks ### Drive-by changes - Update cw-hyperlane dependency ### Backward compatibility Yes ### Testing - Fork tests - e2e tests --------- Co-authored-by: J M Rossy <jm.rossy@gmail.com> Co-authored-by: Trevor Porter <trkporter@ucdavis.edu> Co-authored-by: Daniel Savu <23065004+daniel-savu@users.noreply.github.com> Co-authored-by: Nam Chu Hoai <nambrot@googlemail.com> |
10 months ago |
Daniel Savu |
f2a0e92c7f
|
Cosmos grpc fallbackprovider (#3139)
### Description Implements grpc fallback provider logic for cosmos - initially tried implementing the fallback provider deprioritization logic at middleware level like in the EVM. The difference between ethers and cosmrs is that in the latter, middleware can only live at the transport layer (`tower` crate level). - based on this github [issue](https://github.com/hyperium/tonic/issues/733), that actually doesn't look possible, because the http::Request type isn't `Clone` so it can't be submitted to multiple providers - ended up implementing the fallback provider at the application layer, by keeping an array of grpc channels - There is now a `call` method in `hyperlane_core::FallbackProvider` which I'm actually really happy with. This method handles the fallbackprovider-specific logic by taking in an async closure, running it on each provider, and iterating providers if the closure call fails. In `grpc.rs` you can see how this is slightly verbose but I think it's quite manageable. The only part that bugs me is having to duplicate `Pin::from(Box::from(future))`, but that's need afaict because the regular closure returns an anonymous type - adds `grpcUrls` and `customGrpcUrls` config items - tests the cosmos fallback provider e2e ### Drive-by changes <!-- Are there any minor or drive-by changes also included? --> ### Related issues - Fixes: https://github.com/hyperlane-xyz/issues/issues/998 ### Backward compatibility <!-- Are these changes backward compatible? Are there any infrastructure implications, e.g. changes that would prohibit deploying older commits using this infra tooling? Yes/No --> ### Testing <!-- What kind of testing have these changes undergone? None/Manual/Unit Tests --> |
10 months ago |
Trevor Porter |
0cad4f7407
|
Support cosmos contract byte lengths other than 32 (#3147)
### Description fixes #3143 Initially went down a path that would use protocol-specific types for addresses as suggested by #3143. I had made a `HyperlaneConnectionConf` enum with protocol-specific variants whose values were `addresses: CoreContractAddresses<ProtocolSpecificAddressType>` and `connection: ProtocolSpecificConnectionConf`. This worked pretty well until I hit the ISM logic. Because hyperlane-core is where the Mailbox trait is defined, the return type of `recipient_ism` in the trait cannot involve protocol specific types. It can't be moved to hyperlane-base because hyperlane-base imports the chain crates, so we'd have a cyclic dependency. I experimented with moving away from H256 to something like a Vec<u8> or string, but this felt a bit weird. In the end we decided to keep H256s as the global representation for contract addresses for now, with the intent of eventually changing this, and to support the varying length situation in a cosmos config ### Drive-by changes - Added some cosmos specific agent configurations into the sdk - Moved to bech32_prefix in the agents for consistency with what the SDK's chain metadata already does - I guess no one's ran cargo test in a while so vectors/message.json got a new v3 message lol ### Related issues Fixes #3143 ### Backward compatibility Changes prefix to bech32_prefix in the agent config, and now requires `contractAddressBytes` ### Testing Tested merged with #3144 and all worked --------- Co-authored-by: Daniel Savu <23065004+daniel-savu@users.noreply.github.com> |
10 months ago |
Daniel Savu |
c2cf7be8f2
|
feat(cosmos): ism dry-run (#3077)
### Description Implements `dry_run_verify` for the aggregation ISM on cosmwasm. One remaining issue is that the estimated gas is hardcoded to `1`, because we're actually [just querying]( |
11 months ago |
Daniel Savu |
d18f7ae8e1
|
Cosmos gas price config (#3042)
### Description Adds a cosmos-specific config item for setting the minimum gas price, in the format returned by the `cosmos.base.node.v1beta1.Service/Config` cosmos-sdk grpc endpoint. ### Related issues - Fixes https://github.com/hyperlane-xyz/issues/issues/810 ### Backward compatibility No. Will break existing cosmos configs. ### Testing None yet, will test in e2e |
12 months ago |
Daniel Savu |
8e44bc1b81
|
feat: sealevel merkle indexer + e2e (#3053)
Depends on https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/3048 Fixes https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/3046 Fixes https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/2754 |
12 months ago |
Daniel Savu |
77aa58c581
|
Relayer balance metrics (#2976)
Done: - scaffolding for fetching custom agent metrics - abstractions for building a metrics fetcher for a given VM - querying cosmos balances; e2e tested. - querying evm balances; e2e tested. - **Note that as a result, evm addresses are now no longer zero-padded when printed in the logs. This may break existing log queries** - fixed a nasty bug on ubuntu where wasmd (osmosisd dependency, part of the grpc query flow) would panic when a block is specified via `x-cosmos-block-height`. The fix was to bump the version of osmosisd from `19.0.0` to `20.5.0`. **Note that when running e2e on Mac OS, the osmosis version in use is still 19.0.0**. That's because we need a fork that publishes a darwin target binary (currently pointing [here](https://github.com/hashableric/osmosis/releases/download/v19.0.0-mnts/osmosisd-19.0.0-mnts-darwin-arm64.tar.gz)) For follow up PR: - sealevel balance querying I'm open to all renaming suggestions, I just tried to speed through and didn't ponder names too much Relates to https://github.com/hyperlane-xyz/issues/issues/701 Closes https://github.com/hyperlane-xyz/issues/issues/702 (because the balance becomes available in the metrics endpoint for polling) |
12 months ago |
ByeongSu Hong |
50aed86517
|
fix: change domain id of cosmos localnet to random (#2977)
### Description We, Mitosis team will be using 26657 as the chain id, so it's good to change now ### Drive-by changes <!-- Are there any minor or drive-by changes also included? --> ### Related issues <!-- - Fixes #[issue number here] --> ### Backward compatibility <!-- Are these changes backward compatible? Are there any infrastructure implications, e.g. changes that would prohibit deploying older commits using this infra tooling? Yes/No --> ### Testing <!-- What kind of testing have these changes undergone? None/Manual/Unit Tests --> |
1 year ago |
Trevor Porter |
ece2be507a
|
Cosmos / CosmWasm agents (#2865)
### Description <!-- What's included in this PR? --> ### Drive-by changes <!-- Are there any minor or drive-by changes also included? --> ### Related issues <!-- - Fixes #[issue number here] --> ### Backward compatibility <!-- Are these changes backward compatible? Are there any infrastructure implications, e.g. changes that would prohibit deploying older commits using this infra tooling? Yes/No --> ### Testing <!-- What kind of testing have these changes undergone? None/Manual/Unit Tests --> --------- Co-authored-by: Mattie Conover <git@mconover.dev> Co-authored-by: hashableric <hashableric@gmail.com> Co-authored-by: byeongsu-hong <hong@byeongsu.dev> Co-authored-by: Daniel Savu <23065004+daniel-savu@users.noreply.github.com> Co-authored-by: Nam Chu Hoai <nambrot@googlemail.com> Co-authored-by: Yorke Rhodes <yorke@hyperlane.xyz> |
1 year ago |
Daniel Savu |
b0870b1113
|
V3 E2E agent testing scenarios (#2815)
### Description - Adds E2E testing scenarios to the agents: zero, single and double merkle tree hook insertion - zero insertion messages are assumed to not be deliverable for now, because that would require additional changes to e2e logic (deploying more one `TestSendReceiver.sol` instance per destination network) - `TestSendReceiver.sol` is extended to dynamically specify the default hook to use - the kathy hardhat script is extended with two params: the required and default hooks. If these are not specified via CLI, they default to `protocolFee` and `aggregationHook` respectively and are still set in the mailbox, to ensure idempotency. - sealevel tests commented out for now ### Drive-by changes ### Related issues - Closes https://github.com/hyperlane-xyz/issues/issues/561 - Closes https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/2720 - Closes https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/2755 ### Backward compatibility <!-- Are these changes backward compatible? Are there any infrastructure implications, e.g. changes that would prohibit deploying older commits using this infra tooling? Yes/No --> ### Testing <!-- What kind of testing have these changes undergone? None/Manual/Unit Tests --> --------- Co-authored-by: Yorke Rhodes <yorke@hyperlane.xyz> |
1 year ago |
Yorke Rhodes |
1d18549755
|
Merge main to v3 (#2812)
|
1 year ago |
Daniel Savu |
c6cea785ae
|
V3 agents feedback (#2780)
### Description Part of the remediations from https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/2746 --------- Co-authored-by: Trevor Porter <trkporter@ucdavis.edu> |
1 year ago |
Daniel Savu |
af5bd88aa8
|
V3 agents rebase (#2746)
### Description It's your favourite PR coming right back... V3 agents! Closes https://github.com/hyperlane-xyz/issues/issues/561 Builds on top of https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/2742 Depends on https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/2681 for e2e testing This PR includes: - [x] Merkle tree hook indexer - [x] Merkle tree builder task - [x] Update submitter to trigger retries if no proof is available yet Slightly more detailed overview of the work here: https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/2720#issuecomment-1724038643 <!-- What's included in this PR? --> ### Drive-by changes <!-- Are there any minor or drive-by changes also included? --> ### Related issues <!-- - Fixes #[issue number here] --> ### Backward compatibility <!-- Are these changes backward compatible? Are there any infrastructure implications, e.g. changes that would prohibit deploying older commits using this infra tooling? Yes/No --> ### Testing <!-- What kind of testing have these changes undergone? None/Manual/Unit Tests --> --------- Co-authored-by: -f <kunalarora1729@gmail.com> Co-authored-by: Trevor Porter <trkporter@ucdavis.edu> Co-authored-by: Kunal Arora <55632507+aroralanuk@users.noreply.github.com> Co-authored-by: Mattie Conover <git@mconover.dev> Co-authored-by: Guillaume Bouvignies <guillaumebouvignies@gmail.com> Co-authored-by: Yorke Rhodes <yorke@hyperlane.xyz> Co-authored-by: Guillaume Bouvignies <guillaume.bouvignies@kurtosistech.com> |
1 year ago |
Trevor Porter |
3f3306c35e
|
Helloworld program and tooling (#2744)
### Description * HelloWorld program added to `rust/sealevel/programs/helloworld` * Some changes to the Sealevel tooling * Refactored the old warp-route-specific deploy management into a more generic framework for idempotently deploying and managing router apps in Sealevel * Added helloworld deploy tooling * Added ISM & owner checking to this router deployment tooling * Added `--require-tx-approval` to prevent txs from being called without first prompting * Added a bunch of new commands for creating txs with certain instructions that were needed along the way -- e.g. setting an ISM, deploying a specific multisig ISM (previously only one would be deployed as a part of `core deploy` * Added a command for configuring multisig ISMs, `multisig-ism-message-id configure`, that takes in a JSON file of multisig ISM configs and applies them onchain * A bit of cleanup / refactor - e.g. removed some old commands like `mailbox receive` * Added foreignDeployments into `RouterApp` * Because RouterApp takes in `contractsMap: HyperlaneContractsMap<Factories>,`, which require attached contracts, a new `readonly foreignDeployments: ChainMap<Address> = {},` is added to the constructor * These foreignDeployments are considered in the return value of `remoteChains(chainName: string)`, but not in `chains()` -- this means that `chains()` now concretely means "chains that can be deployed to / interacted with and that there is an entry in `contractsMap` for, and `remoteChains(chainName: string)` returns any and all remote chains, regardless of whether they can be deployed to / interacted with * Added complete ISM support to the HyperlaneRouterChecker * when checking the ISM, if there's not a match and the ISM is a config, then the ISM will be deployed * Also added RouterViolation, before it'd just throw if there was a violation * Updated the Helloworld, IGP, and core tooling to work when AEE deployments are also configured * Moved to Routing ISM -> Aggregation ISM -> Merkle / Message ID multisig setup Some things to note: * atm there are a few places that have a TODO saying to remove something after some multisig txs are executed, I plan to revisit these after we get some sigs * I've deployed the mainnet sealevel version of helloworld, but haven't been able to enroll it in the EVM chains yet. Waiting for some multisig activity here ### Drive-by changes ### Related issues #2502 ### Backward compatibility I believe it should all be backward compatible ### Testing Deployed, ran checkers, etc |
1 year ago |
Kunal Arora |
f0a45bd6b1
|
Merkle Tree Hook Deployer changes (#2747)
### Description - Interceptor is the pair <hook, ism> - `MerkleTreeInterceptorDeployer` for deploying merkle root hook and the `StaticMerkleRootMultisigIsm` on chain ### Drive-by changes - None ### Related issues - addresses https://github.com/hyperlane-xyz/issues/issues/621 ### Backward compatibility Yes ### Testing Manual |
1 year ago |
Trevor Porter |
62ab488db9
|
Sealevel IGP debugging, temporarily change Sealevel gas payment policy (#2758)
### Description - Some small changes to help with debugging sealevel IGP - Turns out the GasPaymentAccount data format onchain is different from the one in `main`. This causes IGP indexing to not work in the wild, but it works in e2e. Because we were planning to change the IGP anyways as we transfer ownership to Zebec, this isn't so bad - so temporarily just not enforcing ZBC warp route Solana -> Nautilus gas payments. In practice, we're still effectively enforcing gas payments because the warp route will pay for gas ### Drive-by changes - Also added the new BSC POSE addy ### Related issues n/a ### Backward compatibility yes ### Testing Deployed, poked around, used cmds |
1 year ago |
Daniel Savu |
71e8988ccd
|
Sealevel igp indexing (#2585)
### Description Depends on https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/2583 Indexes IGP payments related to the relayer's data pda address. Unless this address is specified in the config (`sealevel.relayer_account `), no filtering is applied and all IGP payments are stored in the local database. <!-- What's included in this PR? --> ### Drive-by changes - Sets `HYP_BASE_GASPAYMENTENFORCEMENT` in `run-locally` for the relayer, to test that it correctly indexes the IGP payment before submitting the message - A new config section (`sealevel`) is added to the relayer - The `MessageIndexer` trait is replaced with `SequenceIndexer<HyperlaneMessage>`, renaming `fetch_count_at_tip` to `sequence_at_tip`. `SequenceIndexer` is now common to both the message and igp indexers. - The `parse_addr` macro is modified so it can be reused when parsing the sealevel relayer address config too - `rust/utils/sealevel-test.bash` is included because I was using it to test locally, but I can remove it if the sealevel e2e test already does all the steps there @mattiecnvr - Performs a `try_into` conversion that can be removed once https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/2610 is done ### Related issues - Fixes https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/2501 ### Backward compatibility <!-- Are these changes backward compatible? Are there any infrastructure implications, e.g. changes that would prohibit deploying older commits using this infra tooling? Yes/No --> ### Testing <!-- What kind of testing have these changes undergone? --> e2e tests but the pipeline is failing, likely fixed by https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/2602 --------- Co-authored-by: Trevor Porter <trkporter@ucdavis.edu> |
1 year ago |
Daniel Savu |
51b81b84fa
|
fix(sealevel): data encoding in `set_return_data` (#2635)
### Description Suffixes `set_return_data` bytes with a non-zero byte to prevent a truncation bug ### Drive-by changes <!-- Are there any minor or drive-by changes also included? --> ### Related issues - Fixes https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/2589 ### Backward compatibility <!-- Are these changes backward compatible? Are there any infrastructure implications, e.g. changes that would prohibit deploying older commits using this infra tooling? Yes/No --> ### Testing <!-- What kind of testing have these changes undergone? None/Manual/Unit Tests --> --------- Co-authored-by: Trevor Porter <trkporter@ucdavis.edu> |
1 year ago |
Mattie Conover |
041cf92d57
|
Fix insertion errors for txn and block (#2629)
### Description This resolves the insertion conflict that is being caused by #2246 that introduced multiple concurrent tasks to scrape. This does not address the underlying concurrency issue I discovered, however. Please review the issue comments for more details. ### Drive-by changes - Cleans up logs a bit (This was useful during testing and I think is useful globally) - Removed an unused file ### Related issues Fixes hyperlane-xyz/issues#493 ### Backward compatibility Yes ### Testing Manual |
1 year ago |
Mattie Conover |
a5e1815746
|
Rust updates (#2619)
### Description Let this one slip a while. Updates our version of rust and as many packages as did not conflict with solana. I think we are going to need to figure something better out going forward with solana since if we have a couple more envs like this, it is going to make updates very hard. ### Drive-by changes None ### Related issues General Maintenance ### Backward compatibility Yes ### Testing Manual & Unit Tests |
1 year ago |
Mattie Conover |
19838b11c6
|
E2E test `pkill` anvil (#2607)
### Description Fixes a minor bug when testing locally where sometimes a failure in the e2e test will not correctly clean up anvil. This just runs `pkill -SIGKILL anvil` to clean it up if it was running. ### Drive-by changes None ### Related issues ### Backward compatibility Yes ### Testing Manual |
1 year ago |
Mattie Conover |
9045f8362e
|
IGP Tooling (#2602)
### Description Adds support for deploying IGPs and initial setup. Also extends the E2E tests to support these changes. - Deploy an IGP - Configure gas oracle data on IGPs - Configure gas overhead amounts for overhead IGP - Adds new config files to support the above - Adds support for u128 in `serde_json` ### Drive-by changes - Minor code cleanup around unused build cmd args - Refactored transaction submission to prevent common errors. - Cleaned up arg passing in the core commands ### Related issues Fixes #2500 ### Backward compatibility Yes-ish, slightly changes some sealevel commands but mostly the same. See the e2e test if in doubt. ### Testing Manual Unit Tests --------- Co-authored-by: Trevor Porter <trkporter@ucdavis.edu> |
1 year ago |
Mattie Conover |
9ed3a24902
|
Solana e2e tests (#2578)
### Description Adds support for testing solana with the e2e tests. This involves 1) Downloading the pre-built solana cli tools 2) Setting up the solana configuration 3) Downloading the pre-built solana programs we need (see https://github.com/hyperlane-xyz/solana-program-library/releases/) 4) The solana programs in the repo 5) Start the solana validator 6) Deploy the solana programs 7) Deploy a warp route 8) Initialize the multisig ism and validator announce 9) Initialize a transfer 10) Wait for the message to be delivered In addition these were "woven" in with the existing E2E test logic, so for instance we only run one new validator and the existing relayer was extended to support these additional chains. This will make it much easier later on to support testes between environments. ### Drive-by changes - Fix a bug in the relayer when trying to index the mailbox - Add support in the hyperlane sealevel CLI for custom solana config paths - Fix a linker error on linux causes by not specifying `no-entrypoint` - Cleaned up unnecessary `no-entrypoint` features in libraries - Minor refactor to how we run commands to avoid arg passing - Created an easy way to define tasks that run asyncly `as_task` - Split up main logic flow into a couple files for easier reading - Use mold linker to speed up builds (well, the linking part) - Removed support for `log_all` to simplify code pathways - Added context when a child process ends unexpectedly for easier debugging - Fixed a bug in the validator where it would infinitely retry to send an announcement on failure without waiting - Cleaned up solana configs - Fixed processes hanging on exit (very annoying when testing locally since you have to manually go kill them) - Added stderr logging to the hyperlane sealevel CLI subprocess calls ### Related issues Fixes #2415 ### Backward compatibility Yes ### Testing Manual |
1 year ago |
Trevor Porter |
8c5983933b
|
Sealevel (#2404)
### Description Opening for that sweet sweet agent image ### Drive-by changes _Are there any minor or drive-by changes also included?_ ### Related issues - Fixes #[issue number here] ### Backward compatibility _Are these changes backward compatible?_ Yes No _Are there any infrastructure implications, e.g. changes that would prohibit deploying older commits using this infra tooling?_ None Yes ### Testing _What kind of testing have these changes undergone?_ None Manual Unit Tests --------- Co-authored-by: Steven Sloboda <steven@eclipse.builders> Co-authored-by: Nam Chu Hoai <nambrot@googlemail.com> Co-authored-by: Yorke Rhodes <yorke@hyperlane.xyz> Co-authored-by: J M Rossy <jm.rossy@gmail.com> Co-authored-by: Mattie Conover <git@mconover.dev> Co-authored-by: Asa Oines <asaoines@gmail.com> Co-authored-by: Sergei Patrikeev <serejke.best@gmail.com> Co-authored-by: Daniel Savu <23065004+daniel-savu@users.noreply.github.com> Co-authored-by: Kunal Arora <55632507+aroralanuk@users.noreply.github.com> Co-authored-by: yorhodes <yorkerhodesiv@gmail.com> Co-authored-by: Yorke Rhodes <yorke@useabacus.network> Co-authored-by: Yorke Rhodes <email@yorke.dev> Co-authored-by: Asa Oines <asaoines@Asas-MacBook-Pro.local> Co-authored-by: Kunal Arora <kuarora@ucsd.edu> Co-authored-by: Anett <44020788+anettrolikova@users.noreply.github.com> Co-authored-by: Yaqub Mahmoud <yaqub320@gmail.com> Co-authored-by: Alex <alex@alexbh.dev> |
1 year ago |
Mattie Conover |
c1c86c7953
|
E2E Sealevel Prep (#2551)
### Description This PR hardens the e2e test pipeline to failure cases we have seen frequently and also makes the code more generic to better support future environments such as sealevel. The original ticket describes making one or more traits to help with this but after much experimentation and consideration, I feel that doing so would make the code unnecessarily complex and less flexible to future changes. My solution instead after talking with @tkporter regarding the sealvel e2e test pathway is to: 1) get utility code out of the way to make it more clear what the execution path is 2) simplify the process of running build tasks in the background so that as we add more envs we can have multiple things running concurrently without difficulty 3) standardize our program execution pattern to reduce the understanding overhead of the main execution path The main thing I kept running into every time I tried to create traits is that we ultimately need a lot of env and context which means either arg passing or even more structures to hold them or we statically code it into that module. The last option was the cleanest but at that point there isn't much difference between creating a trait and just defining a function to call. And even then there is still some live data we define as we go in main that is bulky to pass around but it might become worth it depending. Also the amount of support code for traits kept trying to ballon because we would need something that constructs the "components", and then runs each of the stages, but it also would need to still know what order to run things in, possibly even within each of those steps. ### Drive-by changes - Now watches agents to detect early termination - Standardizes log prefixes to distinguish between e2e logs and sub process logs - Now logs what commands are run - Standardized the program args concept to reduce param passing and better support reusable configurations - Has all build commands run asynchronously by default to prevent `spawn` commands in main - Fixed an issue where some rust components were being built twice, once as debug and again as release ### Related issues - Fixes hyperlane-xyz/issues#501 - Should help debug recent flakiness if not resolve it ### Backward compatibility Yes ### Testing Manual |
1 year ago |
Yorke Rhodes |
638b3f5474
|
Unify lint configs
|
1 year ago |
Yorke Rhodes |
eb17a9af15
|
Block validator submitter on nonzero mailbox count (#2341)
### Description Ensures all checkpoint submitters wait for nonzero mailbox count ### Drive-by Changes Notably always spawns backfill submitter after seeing nonzero mailbox count ### Related issues Fixes https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/2340 ### Backward compatibility Yes ### Testing Updated E2E Tests |
2 years ago |
Mattie Conover |
efad4e1326
|
Omniscient relayer infra (#2299)
### Description - Adds support for omniscient relayers - Updates config formats to allow better overideability by agent role - Enables deploying selected agents rather than having to deploy them all at once - Merges scraper scripts and configuration ### Drive-by changes Lots of cleanup was made in the infrastructure scripts and source as it was already being touched by the above. While this PR touches a lot of files, many of the changes are just because we have so many scripts and a small change to something they all use instantly can lead to many files changed. ### Related issues - Fixes hyperlane-xyz/issues#438 - Fixes hyperlane-xyz/issues#447 - Fixes #1664 ### Backward compatibility _Are these changes backward compatible?_ No _Are there any infrastructure implications, e.g. changes that would prohibit deploying older commits using this infra tooling?_ Yes ### Testing _What kind of testing have these changes undergone?_ Manual Unit Tests |
2 years ago |
Asa Oines |
90191d43d0
|
Fix bug in MessageSyncCursor rewind logic (#2297)
### Description This PR fixes a bug in the MessageSyncCursor rewind logic that causes the cursor to get stuck. The cursor would look for the message with nonce `n`, find it, and move its `next_block` to the block `b_n` at which `n` was dispatched. It would then index starting at `b_n`, find `n` again, interpret that as a "discontinuity", and rewind back to `b_n`, getting itself stuck permanently. We *should* be moving to `b_n` and not e.g. `b_n + 1` because we have no guarantee that `n+1` was not also present in `b_n` but just dropped by a flaky `eth_getLogs` implementation. The fix is to only consider messages with nonce > `n` when looking for discontinuities when our target nonce is `n + 1`. ### Drive-by changes - Modifies the E2E tests to use a chunk size of 1, allowing us to reproduce this failure mode without the filtering fix. - Debug log on rewind - Comments to clarify fast forward logic |
2 years ago |
Yorke Rhodes |
50f04db1fa
|
Make merkle proofs optional on multisig ISM (#2173)
### Description Validators currently sign `(root, index)` checkpoints and during verification, a `message` is passed as calldata, an `id()` is derived, and a `proof` of `id()` at `index` in `root` is verified This provides “all or nothing” censorship resistance guarantees because a validator can only sign roots to allow any contained messages to be processed. We have considered alternatives where validators sign `message` directly and we lose censorship resistance in exchange for eliminating merkle proof verification gas costs. However, if validators sign `(root, index, message)` tuples, we can skip merkle proof verification on the destination chain while still maintaining censorship resistance by providing two valid metadata formats: 1. existing validator signatures and merkle proof verification of inclusion 2. including merkle proof verification for pathway where validators are censoring `message` It’s worth noting the validator is required to index event data to produce this new signature format. However, this does not require historical indexing and new validators being spun up can simply begin indexing from tip. See https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/2187 for validator changes See https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/2248 for relayer and e2e test changes ### Drive-by changes Merkle index also optional ### Related issues - Fixes https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/2192 ### Backward compatibility - new ISM deployment is necessary (we could upgrade implementation in theory) - Validator and relayer upgrades ### Testing Unit (fuzz) Tests, E2E tests |
2 years ago |
Asa Oines |
8aa7b62bea
|
Minor logging improvements to agents (#2271)
### Description Removes some unnecessary clutter, adds domain to some spans ### Drive-by changes None |
2 years ago |