Skip to main content
Stable uses USDT0 as the gas token, so you’ll need USDT0 in your wallet to interact with the chain. First, you need to fund USDT0 to your account using the faucet.
  1. Visit https://faucet.stable.xyz
  2. Click ‘Get USDT0’ button and 1 USDT0 will be dropped to your wallet.
If you want more USDT0, you can bridge Test USDT from Ethereum Sepolia to Stable testnet.
  1. Visit https://sepolia.etherscan.io/token/0xc4DCC311c028e341fd8602D8eB89c5de94625927#writeContract, and mint desired amount of Test Tether USD to your account by calling the _mint function.
  2. Send the following transaction to the LayerZero bridge contract on Ethereum Sepolia to bridge Test USDT to the Stable testnet:
    export function addrTo32Bytes(addr: string): Buffer {
      const hex20 = ethers.utils.getAddress(addr).slice(2);
      const padded = hex20.padStart(64, "0");      // 32 bytes ⇒ 64 hex
      return Buffer.from(padded, "hex");           // length === 32
    }
    
    async function main() {
      const [owner] = await ethers.getSigners();
    
      const SEPOLIA_USDT0 = "0xc4DCC311c028e341fd8602D8eB89c5de94625927";
      const SEPOLIA_USDT0_OAPP = "0xc099cD946d5efCC35A99D64E808c1430cEf08126"
      const RECEIVER_EID = 40374;
    
      const usdt0 = await ethers.getContractAt("ERC20", SEPOLIA_USDT0);
      await usdt0.approve(SEPOLIA_USDT0_OAPP, ethers.utils.parseEther("1"));
    
      const options = Options.newOptions().addExecutorLzReceiveOption(0, 0).toBytes();
      const amount = ethers.utils.parseEther("1"); // Change this to your desired amount
      const OFTAdapter = await ethers.getContractAt("OFTAdapter", SEPOLIA_USDT0_OAPP);
    
      const sendParams = {
        dstEid: RECEIVER_EID,
        to: addrTo32Bytes(owner.address),
        amountLD: amount,
        minAmountLD: amount,
        extraOptions: options,
        composeMsg: Buffer.from(""),
        oftCmd: Buffer.from(""),
      };
      const fee = await OFTAdapter.quoteSend(sendParams, false);
      await OFTAdapter.send(
        sendParams,
        fee,
        owner.address,
        {
          value: fee.nativeFee,
        }
      )
    }