XRPL EVM Sidechain to XRPL transfer
This guide shows how relay a transfer message manually from an XRPL EVM Sidechain to XRPL.
- Send a
verify_messages
transaction to XRPL EVM Sidechain's source gateway address on Axelar.
axelard tx wasm execute '{
verify_messages: [
{
cc_id: {
source_chain: "xrpl-evm-sidechain",
message_id: MESSAGE_ID,
},
destination_chain: "axelarnet",
destination_address: "axelar10jzzmv5m7da7dn2xsfac0yqe7zamy34uedx3e28laq0p6f3f8dzqp649fp",
source_address: "0x43F2ccD4E27099b5F580895b44eAcC866e5F7Bb1",
payload_hash: PAYLOAD_HASH,
},
],
}' --gas 20000000 --gas-adjustment 1.5 --gas-prices 0.00005uamplifier --chain-id devnet-amplifier --node http://devnet-amplifier.axelar.dev:26657
- Route the message.
axelard tx wasm execute '{
route_messages: [
{
cc_id: {
source_chain: "xrpl-evm-sidechain",
message_id: MESSAGE_ID,
},
destination_chain: "axelarnet",
destination_address: "axelar10jzzmv5m7da7dn2xsfac0yqe7zamy34uedx3e28laq0p6f3f8dzqp649fp",
source_address: "0x43F2ccD4E27099b5F580895b44eAcC866e5F7Bb1",
payload_hash: PAYLOAD_HASH,
},
],
}' --gas 20000000 --gas-adjustment 1.5 --gas-prices 0.00005uamplifier --chain-id devnet-amplifier --node http://devnet-amplifier.axelar.dev:26657
- Execute the ITS Hub message.
axelard tx wasm execute axelar1yvfcrdke7fasxfaxx2r706h7h85rnk3w68cc5f4fkmafz5j755ssl8h9p0 '{
execute: {
cc_id: {
source_chain: "xrpl-evm-sidechain",
message_id: MESSAGE_ID,
},
payload: TX_PAYLOAD,
},
}' --gas 20000000 --gas-adjustment 1.5 --gas-prices 0.00005uamplifier --chain-id devnet-amplifier --node http://devnet-amplifier.axelar.dev:26657
- Construct transfer proof.
axelard tx wasm execute axelar1upqj9paf2qhhp49fjtk4ghwnv2mzcqnpglggr0hds8dy9a4stz2st0ewsh '{
construct_proof: {
message_id: {
source_chain: "axelarnet",
message_id: MESSAGE_ID_FROM_STEP_3,
},
payload: CALCULATED_PAYLOAD,
},
}' --gas 20000000 --gas-adjustment 1.5 --gas-prices 0.00005uamplifier --chain-id devnet-amplifier --node http://devnet-amplifier.axelar.dev:26657
- Query the contract state to check if the proof was completed. You can find the
multisig_session_id
in the response of theconstruct_proof
transaction.
axelard q wasm contract-state smart axelar1upqj9paf2qhhp49fjtk4ghwnv2mzcqnpglggr0hds8dy9a4stz2st0ewsh '{
proof: {
multisig_session_id: multisigSessionId,
},
}' --chain-id devnet-amplifier --node http://devnet-amplifier.axelar.dev:26657 --output json
- If the proof is completed, a XRPL transaction blob will be returned in the response. Submit the transaction blob to XRPL.
const client = new Client("wss://s.devnet.rippletest.net:51233");
const request: SubmitRequest = {
command: "submit",
tx_blob: txBlob,
fail_hard: true,
};
await client.connect();
const response = await client.request(request);
await client.disconnect();
Check that the transaction is successful.
- Submit the proof to XRPL Axelar gateway.
axelard tx wasm execute axelar13w698a6pjytxj6jzprs6pznaxhan3flhf76fr0nc7jg3udcsa07q9c7da3 '{
verify_messages: [
{
prover_message: SUBMITTED_TRANSACTION_BLOB_TX_HASH,
},
],
}' --gas 20000000 --gas-adjustment 1.5 --gas-prices 0.00005uamplifier --chain-id devnet-amplifier --node http://devnet-amplifier.axelar.dev:26657
- Update the transaction status on XRPL Multisig prover contract. The
signer_public_keys
can be found in theSigners
field of the submitted transaction blob transaction.
axelard tx wasm execute axelar1upqj9paf2qhhp49fjtk4ghwnv2mzcqnpglggr0hds8dy9a4stz2st0ewsh '{
update_tx_status: {
multisig_session_id: MULTISIG_SESSION_ID,
message_id: SUBMITTED_TRANSACTION_BLOB_TX_HASH,
message_status: "succeeded_on_source_chain",
signer_public_keys: [
{
ecdsa: SIGNER_PUBLIC_KEY,
},
],
},
}' --gas 20000000 --gas-adjustment 1.5 --gas-prices 0.00005uamplifier --chain-id devnet-amplifier --node http://devnet-amplifier.axelar.dev:26657