core
subdirectory).
solana-cli 1.14.20
is required for building HWR programs, but it is not
required to manually install it. The ./build-programs.sh
script will
handle switching to this version automatically and revert to your previous
version (1.18.18) after building.solana-cli 1.14.20
automatically and reset back to the previously used version afterward.
To verify the build output, check the target/deploy directory for .so
files in hyperlane-monorepo/rust/sealevel/target/deploy
Error: Function [...] Stack offset of 4360 exceeded max offset of xx ..
. This is a known issue that has no impact on the functionality of the
programs. The error relates to an unused function in a dependency crate and
can be ignored. The programs will build, deploy, and function correctly
despite this warning.solana-cli 1.18.18
. Note that you must use this version, otherwise deployment may fail.
rust/sealevel/environments/mainnet3/warp-routes
with the name you want your HWR deployment to have.
rust/sealevel/environments/mainnet3/warp-routes/eclipsesol
.
token-config.json
.
Configure the parameters of your HWR based on the serde_json
serialization of the TokenConfig Rust struct. The value to set for the interchainGasPaymaster
, can be found in the core deployment artifacts.
The example below shows a testnet Native to Synthetic HWR that transfers SOL from Solana and mints synthetic SOL on Eclipse. You can also check this configuration of a production SOL HWR.
hyperlane-registry
with metadata to associate with this token (example PR here). The hyperlane-registry
also gives your HWR visibility within the Hyperlane ecosystem.
2.35 SOL
on Solana and 0.025 ETH
on Eclipse, so it’s a good idea to fund the key with at least 5 SOL
/ 0.05 ETH
.
warp-route deploy
subcommand from the rust/sealevel/client
directory:
Example usage:
alert_threshold * 2
, with the
threshold value found
here.--warp-route-name
: should match the directory name picked for the HWR earlier--environment
: keep as mainnet3
--environments-dir ../environments
: keep as ../environments
--built-so-dir
: keep as ../../target/deploy
, as it points to the compilation output directory of HWR programs--token-config-file
: point this to the token-config.json
file created earlier--registry
: path to your local clone of the hyperlane-registry--ata-payer-funding-amount
: this flag specifies by how much to fund the HWR ATA payer accounts on both chains the deployment happens on. It’s expressed in the lowest currency denomination, which means that it’s interpreted as Lamports on Solana and Gwei on Eclipse (since it uses ETH as its native currency). In the command below, the value 1000000
works out to 0.001
ETH and 0.001
SOL, which is enough for an initial deployment, but not for production usage. ATA payers can always be topped up later. For reference, every HWR transfer costs the ATA payer 0.000000001 SOL
(on Solana) and 0.000021 ETH
(on Eclipse) on the destination chain.developers
channel on Discord if you run into
issues.Error: 11 write transactions failed
or Error: Custom: Invalid blockhash
can always be retried by re-running the command. If retriable errors persist, consider increasing the compute unit price here.
solanamainnet.rpcUrls.http
)
--token-config-file
file, run warp-route deploy
:
<CHAIN_RPC_URL>
: e.g., https://api.devnet.solana.com<PROGRAM_ID>
: base58 address from program-ids.json (located in your warp-route directory).<TOKEN_TYPE>
: native|synthetic|collateral<DESTINATION_CHAIN_DOMAIN_ID>
: You’ll need the domain ID of the chain you’re sending to, which you can find in the chain’s metadata.yaml
entry from the hyperlane-registry.<PROGRAM_ID>
: base58 address from program-ids.json (located in your warp-route directory).<WARP_TOKEN_TYPE_ON_ORIGIN_CHAIN>
: Type of token on the origin chain, options are: native|synthetic|collateralhyperlane-sealevel-client
CLI from hyperlane-monorepo
. You may find its various commands useful for configuring the HWR, making state queries, sending transfers, and more. Check out the other utilities it provides, in particular those under the token
subcommand.