Skip to content

Warning

Always start with a small test transaction. Bridge transfers are irreversible, so before moving large amounts, send a small amount first and confirm it arrives as expected.

The dedicated Bridge smart contract, controlled by the Gonka consensus, is active on Ethereum at the address:

0x972a7a92d92796a98801a8818bcf91f1648f2f68

Withdraw USDT (Gonka → Ethereum)

Note

Withdrawals are released on Ethereum by a BLS signature tied to the current epoch's group key, which is refreshed about once per day. A single epoch signature can authorize any number of withdrawals started in that epoch, so this step is normally fast. See How Gonka → Ethereum is authorized for the background.

A) Send Withdrawal Request on Gonka

Initiate the withdrawal transaction using CLI:

./inferenced tx wasm execute <gonka1CW20WrappedUSDTAddress> \
  '{"withdraw":{"amount":"<amount>","destination_address":"0xYourEthereumAddr","destination_bridge_address":"0x972a7a92d92796a98801a8818bcf91f1648f2f68"}}' \
  --from <your_key_name> \
  --chain-id gonka-mainnet \
  --gas auto --gas-adjustment 1.5 \
  -y \
  --node http://node1.gonka.ai:8000/chain-rpc/

Tip

If --gas auto produces an incorrect gas estimation, check the returned status for the required gas limit and explicitly pass it (e.g., --gas 200000).

Expected Output

...
txhash: 12E8ABCA5A35D73042564FDF6D686424F742414EEC172450AB6EDA34BD1F0805

B) Retrieve Withdrawal Receipt & Request ID

Allow a couple of blocks to be mined, then query the transaction hash to obtain the request ID:

./inferenced query tx 12E8ABCA5A35D73042564FDF6D686424F742414EEC172450AB6EDA34BD1F0805 --node http://node1.gonka.ai:8000/chain-rpc/

Ensure the output contains "code": 0 (indicating success) and extract the base64-encoded request_id:

"request_id": "vSTWiN1pvooxcFoDLzePCEq3x/C5NQ+jFMvfcEozCm4="

Convert the base64 request_id to hexadecimal format:

echo "vSTWiN1pvooxcFoDLzePCEq3x/C5NQ+jFMvfcEozCm4=" | base64 -d | xxd -p -c 256
Example Hex Output:
bd24d688dd69be8a31705a032f378f084ab7c7f0b9350fa314cbdf704a330a6e

C) Get BLS Signature Status

Query the BLS signature API with your request ID hex:

curl "https://node2.gonka.ai:8443/v1/bls/signatures/<REQUEST_ID_HEX>" \
  | jq -r '
    {
      uncompressed_signature_128: .uncompressed_signature_128,
      current_epoch_id: .signing_request.current_epoch_id,
      request_id: .signing_request.request_id
    }
  '

The response includes: * current_epoch_id: The epoch of the request. * request_id: The 32-byte hash used on Gonka. * uncompressed_signature_128: The BLS signature needed for Ethereum execution.

Bridge epoch update

Before submitting the Ethereum withdrawal transaction, make sure the Ethereum bridge contract is synced to current_epoch_id. If the dashboard shows A Bridge needs epoch update or the Ethereum execution fails with InvalidEpoch, follow Bridge epoch update.

D) Submit Withdrawal Command on Ethereum

Use the withdraw-tokens.js script:

HARDHAT_NETWORK=mainnet node withdraw-tokens.js \
  0x972a7a92d92796a98801a8818bcf91f1648f2f68 \
  <current_epoch_id> \
  <request_id_base64> \
  <destination_address> \
  0xdAC17F958D2ee523a2206206994597C13D831ec7 \
  <amount> \
  <uncompressed_signature_128>