---
title: "Elysiumでトークンをローンチし、Hyperliquidで取引する方法"
description: "Hyperliquid L2のElysiumでトークンをローンチし、HyperCoreの現物オーダーブックで取引します。FoundryとAlchemyでデプロイし、HyperEVMにミラーしてから上場します。"
datePublished: "2026-11-10"
dateModified: "2026-11-10"
---

# Elysiumでトークンをローンチし、Hyperliquidで取引する方法

<ImageBlock
  src="https://media.alchemy.com/overviews/how-to-launch-a-token-on-elysium-hyperliquid-hero-20261110.png"
  alt="Elysiumでトークンをローンチし、HyperCoreのオーダーブックに載せる"
  width={1920}
  height={900}
  priority
/>

ElysiumはKinetiqによるHyperliquidのレイヤー2で、[メインネットは11月9日に稼働した](https://www.alchemy.com/blog/elysium-mainnet-is-live-on-alchemy)。ブロックタイムが100 msで、ガスにHYPEを使い、HyperEVMを決済先とするEVMチェーンだ。Elysiumのトークンは、Hyperliquid自体のオーダーブックで取引できる。本ガイドでは、その全行程を順に解説する。Foundryと当社のElysium RPCを使ってElysiumにERC-20をデプロイし、それをHyperEVMにミラーしてから、USDC建ての現物オーダーブックに載せるHyperCoreの上場手続きを実行する。

デプロイとミラーは安価でパーミッションレスだが、最初のミラーのミントは約5.5日のチャレンジ期間を待つ必要がある。HyperCoreへの上場は、発行者がHyperliquid上で一度だけ行う手続きで、価格が500 HYPEを下回ることのないティッカーオークションから始まる。この手続きが済めば、その後はすべての保有者に開放され、誰でもブリッジを通じてElysium、HyperEVM、HyperCoreの間でトークンを移動できる。

## ローンチ前にElysiumについて何を知っておくべきか

Elysiumは、HyperEVMを決済先とし、HyperCoreと併設して稼働する、[Kinetiqが構築したArbitrum Orbitチェーン](https://elysium.kinetiq.xyz/docs/what-is-elysium)だ。HyperCoreはHyperliquidの取引所レイヤーで、Hyperliquidの現物と無期限先物のオーダーブックがここにある。HyperEVMは、同じHyperliquid L1上でHyperCoreと並んで動作するEVM環境だ。2つの部分がどう組み合わさるかは、[Hyperliquidへの全面的な取り組み](https://www.alchemy.com/blog/alchemy-going-all-in-on-hyperliquid)に関する当社の投稿で解説している。チェーン自体については、なぜHyperliquidにL2が必要なのかから、Elysiumでローンチするアプリまで、当社の[Elysiumでの取引ガイド](https://www.alchemy.com/overviews/how-to-trade-on-elysium-hyperliquid-l2)で詳しく取り上げている。

[HyperEVM](https://www.alchemy.com/hyperevm)は、自らの処理能力を意図的に制限している。[小ブロックは1秒に1回、3Mガスを運び](https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/dual-block-architecture)、30Mガスを運べるのは1分に1回の大ブロックだけだ。Kinetiqは、[提示価格を1秒に数回更新する](https://elysium.kinetiq.xyz/docs/what-is-elysium)マーケットメーカーのように、それ以上を必要とするワークロード向けにElysiumを構築した。Elysiumが目標とする実行性能は300 Mgas/s(毎秒100万ガス単位)で、HyperEVMのおよそ2桁上だ。それでいて、取引に必要なトークンはHYPEだけで済む。

<EmbeddedTable
  table={{
    columns: [
      { key: "feature", width: 180, title: "", dataType: "object" },
      { key: "elysium", width: 260, title: "Elysium", dataType: "object" },
      { key: "hyperevm", width: 260, title: "HyperEVM", dataType: "object" },
    ],
    data: [
      {
        feature: { title: "ブロックタイム", tooltip: "", icon: "" },
        elysium: { title: "100 msの正規ブロック", tooltip: "", icon: "" },
        hyperevm: {
          title: "小ブロックは1秒、大ブロックは1分",
          tooltip: "",
          icon: "",
        },
        id: 0,
      },
      {
        feature: { title: "ガス処理能力", tooltip: "", icon: "" },
        elysium: { title: "目標300 Mgas/s", tooltip: "", icon: "" },
        hyperevm: { title: "小ブロックあたり3Mガス", tooltip: "", icon: "" },
        id: 1,
      },
      {
        feature: { title: "ガストークン", tooltip: "", icon: "" },
        elysium: {
          title: "HYPE(ネイティブガスとして1:1でブリッジ)",
          tooltip: "",
          icon: "",
        },
        hyperevm: { title: "HYPE", tooltip: "", icon: "" },
        id: 2,
      },
      {
        feature: { title: "スタック", tooltip: "", icon: "" },
        elysium: {
          title: "Arbitrum Orbit(NitroとArbOS)",
          tooltip: "",
          icon: "",
        },
        hyperevm: { title: "Hyperliquid L1", tooltip: "", icon: "" },
        id: 3,
      },
      {
        feature: {
          title: "コントラクトからのHyperCoreアクセス",
          tooltip: "",
          icon: "",
        },
        elysium: {
          title: "読み取りと書き込みのレーンをメインネットの約4週間後に予定",
          tooltip: "",
          icon: "",
        },
        hyperevm: {
          title: "読み取り用プリコンパイルとCoreWriter",
          tooltip: "",
          icon: "",
        },
        id: 4,
      },
    ],
  }}
/>

Elysiumのブロックは本物の正規ブロックであり、その上に[プレコンファメーションのレイヤーはない](https://elysium.kinetiq.xyz/docs/blocks-fees-and-ordering)。そのため、`latest`とトランザクションレシートは通常どおりの意味を持つ。Solidity、Foundry、Hardhat、viemはそのまま動作する。Kinetiqはまた、チェーン上のアクティビティを生み出すアプリの[ビルダーにシーケンサー手数料の25%を還元することを約束している](https://x.com/Kinetiq_xyz/status/2091888509472932145)。

当社はElysiumのプライマリRPCプロバイダーであり、Kinetiqのドキュメントは当社を[Elysiumの推奨インフラプロバイダー](https://elysium.kinetiq.xyz/docs/connecting-to-elysium)に挙げている。メインネットのエンドポイントは、当社の[Elysium RPCページ](https://www.alchemy.com/rpc/elysium)と[Elysium APIクイックスタート](https://www.alchemy.com/docs/reference/elysium-api-quickstart)に掲載している。当社の[Elysium API FAQ](https://www.alchemy.com/docs/reference/elysium-api-faq)にある次の2つの詳細を知っておけば、デバッグの時間を節約できる。

- **`viem/chains`の`elysiumTestnet`エクスポートは別のチェーンだ**。無関係のプロジェクトのチェーンなので、KinetiqのElysiumは`defineChain`を使って自分で定義すること。
- **HYPEの単純な送金には21,000ガスよりわずかに多くかかる**。Arbitrumのチェーンは親チェーンへのデータ投稿分として少量のガスを加算するため、ガスリミットを`21000`にハードコードすると`intrinsic gas too low`で失敗する。

## トークンはどのようにElysiumからHyperCoreのオーダーブックに届くのか

トークンは2回のブリッジホップを経由し、ホップごとに独自のセットアップがある。

<CodeSnippet
  language="text"
  code={`Elysium     your ERC-20
              |  mirror bridge: lock on Elysium, mint a 1:1 mirror on HyperEVM
              v
HyperEVM    the mirror, a plain ERC-20
              |  deposit wallet: escrow on HyperEVM that HyperCore credits and debits
              v
HyperCore   a spot token with an order book against USDC`}
/>

<EmbeddedTable
  table={{
    columns: [
      { key: "hop", width: 200, title: "ホップ", dataType: "object" },
      {
        key: "who",
        width: 200,
        title: "セットアップする人",
        dataType: "object",
      },
      {
        key: "cost",
        width: 200,
        title: "一度きりのコスト",
        dataType: "object",
      },
      {
        key: "after",
        width: 280,
        title: "その後保有者ができること",
        dataType: "object",
      },
    ],
    data: [
      {
        hop: {
          title: "ElysiumからHyperEVM(ミラーブリッジ)",
          tooltip: "",
          icon: "",
        },
        who: { title: "誰でも(トランザクション2件)", tooltip: "", icon: "" },
        cost: {
          title: "ガス代と、クロスチェーンメッセージ用の少額のHYPE手数料",
          tooltip: "",
          icon: "",
        },
        after: {
          title:
            "Elysiumでロックしてミラーをミント(約5.5日)、ミラーをバーンしてElysium上で解放(約1分)",
          tooltip: "",
          icon: "",
        },
        id: 0,
      },
      {
        hop: {
          title: "HyperEVMからHyperCore(デポジットウォレット)",
          tooltip: "",
          icon: "",
        },
        who: {
          title: "ティッカーオークションで落札したアドレス",
          tooltip: "",
          icon: "",
        },
        cost: {
          title: "ティッカーオークション(下限500 HYPE)",
          tooltip: "",
          icon: "",
        },
        after: {
          title: "HyperCoreへの入金とHyperEVMへの出金",
          tooltip: "",
          icon: "",
        },
        id: 1,
      },
    ],
  }}
/>

[ミラーブリッジ](https://elysium.kinetiq.xyz/docs/bridging-elysium-tokens-to-hyperevm)を使うのに、トークン側にコードを追加する必要はない。ミラーブリッジは元のトークンをElysium上のエスクローウォレットにロックし、HyperEVM上に1:1のミラーをミントする。そのため、ミラーの供給量は常にロックされた量と等しい。

HyperCoreは各現物トークンを1つのEVMコントラクトにリンクし、デプロイヤーはそのコントラクトを管理していることを証明しなければならない。ウォレットから直接デプロイしたコントラクトなら、デプロイ時のnonceで証明できる。ミラーはブリッジのファクトリーがデプロイするため、この確認方法は使えない。これを解決するのが[デポジットウォレット](https://elysium.kinetiq.xyz/docs/hypercore-bridging-via-deposit-wallets)で、CircleがUSDCをリンクする際に使うパターンに倣っている。デポジットウォレットはミラーをエスクローとして保有し、ファクトリーがデプロイしたコントラクトについてHyperCoreが読み取るストレージスロットにあなたの署名用アドレスを格納して、HyperCoreのリンク先となるコントラクトになる。

この行程には取り消せない選択が3つあるため、費用をかける前に決めておくこと。トークンのHyperCore上の小数点桁数(ティッカーを落札した時点で固定される)、ジェネシス時の供給量、そしてHyperCoreトークンとデポジットウォレットのリンクだ。

## Elysiumにトークンをデプロイするには

チェーンに何かを送る前に、必要なものは3つある。

- **Elysiumのエンドポイント**。[Alchemyダッシュボード](https://dashboard.alchemy.com/)でアプリを作成し、Elysiumを選択する。
- **Elysium上のHYPE**。HYPEは[Kinetiqのブリッジ](https://elysium.kinetiq.xyz/bridge)を通じてHyperEVMから1:1でブリッジされ、ネイティブガスとして届く。間にラップ版のトークンは挟まない。
- **Foundry**。以下のコマンドはすべて`forge`と`cast`を使い、Elysium、HyperEVM、HyperCoreのいずれでも同じデプロイヤーキーで署名する。

ミラーブリッジは、次の3つの性質を満たす標準的なERC-20であれば何でも受け付ける。まず、`name()`、`symbol()`、`decimals()`を公開していること。ブリッジはこのメタデータでトークンとミラーを対応付けるからだ。次に、そのメタデータを決して変更しないこと。さらに、送金で要求どおりの正確な量が移動すること。これにより、送金時に手数料を取るトークンやリベース型のトークンは対象外になる。OpenZeppelinの素のERC-20は3つすべてを満たす。各関数の役割は、当社の[SolidityにおけるERC-20トークンのガイド](https://www.alchemy.com/overviews/erc20-solidity)で解説している。

供給量は、この時点でHyperCoreの上限に合わせて計画しておく。HyperCoreは残高を64ビット整数で保存し、[weiの小数点桁数は最大8まで](https://hyperliquid.gitbook.io/hyperliquid-docs/hyperliquid-improvement-proposals-hips/frontend-checks)しか認めない。そのため、小数点桁数が8のトークンは、整数単位でおよそ1,840億までに制限される。10億の固定供給量なら十分に収まる。

<CodeSnippet
  language="solidity"
  code={`// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract ExampleToken is ERC20 {
    constructor() ERC20("Example Token", "EXMPL") {
        _mint(msg.sender, 1_000_000_000 * 10 ** decimals());
    }
}`}
/>

OpenZeppelinのERC-20は、名前とシンボルをコンストラクタで一度だけ設定する。ミント関数がないため、供給量はデプロイ時に固定される。このコントラクトを`src/ExampleToken.sol`として保存し、デプロイする。

<CodeSnippet
  language="bash"
  code={`forge init example-token && cd example-token
forge install OpenZeppelin/openzeppelin-contracts
# Save the contract above as src/ExampleToken.sol, then import your deployer key once.
cast wallet import deployer --interactive
export ELYSIUM_RPC="https://elysium-mainnet.g.alchemy.com/v2/$ALCHEMY_API_KEY"
forge create src/ExampleToken.sol:ExampleToken \\
  --rpc-url "$ELYSIUM_RPC" \\
  --account deployer \\
  --broadcast`}
/>

`cast wallet import`はキーを暗号化されたキーストアに保存し、`--account`は署名時にそのキーストアをアンロックする。そのため、生のキーがシェル履歴に残ることはない。当社の[Robinhood Chainのトークンガイド](https://www.alchemy.com/overviews/launch-a-memecoin-on-robinhood-chain)でも、別のArbitrum Orbitチェーン上で同じ流れを使っている。

ブロックの生成速度を自分で確かめるには、WebSocketエンドポイントで新しいブロックを購読する。この速度ではHTTPでのポーリングがポーリングの合間のブロックを取りこぼすため、ここではWebSocketのURLを使う。

<CodeSnippet
  language="typescript"
  code={`import { createPublicClient, defineChain, webSocket } from "viem";
const wssUrl = process.env.ELYSIUM_WSS;
if (!wssUrl) throw new Error("Set ELYSIUM_WSS to your Alchemy Elysium WebSocket URL");
// viem/chains exports an unrelated chain called elysiumTestnet, so define Elysium yourself.
const elysium = defineChain({
  id: 99901, // Elysium mainnet
  name: "Elysium",
  nativeCurrency: { name: "HYPE", symbol: "HYPE", decimals: 18 },
  rpcUrls: { default: { http: [], webSocket: [wssUrl] } },
});
const client = createPublicClient({ chain: elysium, transport: webSocket(wssUrl) });
let previous;
client.watchBlocks({
  onBlock: (block) => {
    const now = Date.now();
    if (previous) console.log(\`block \${block.number} arrived \${now - previous} ms after the last one\`);
    previous = now;
  },
  onError: (error) => console.error(error.message),
});`}
/>

`ELYSIUM_WSS`には、`wss://elysium-mainnet.g.alchemy.com/v2/`にキーを付けたURLを設定する。トークンとそのトランザクションは[Elysiumエクスプローラー](https://elysium.kinetiq.xyz/explorer)で確認できる。

## トークンをHyperEVMにミラーするには

ミラーブリッジは2つの部分からなる。Elysium上のエスクローウォレットがロックされたトークンを保有し、HyperEVM上のミラーERC-20はブリッジだけがミントとバーンを行う。セットアップはパーミッションレスで、各チェーンで1件ずつトランザクションを送るだけでよく、順序は問わない。以下のアドレスはElysiumメインネットのもので、Kinetiqの[コントラクトアドレスのページ](https://elysium.kinetiq.xyz/docs/contract-addresses)から取得した。資金を送る前に、そのページで確認すること。

<CodeSnippet
  language="bash"
  code={`export HYPEREVM_RPC="https://hyperliquid-mainnet.g.alchemy.com/v2/$ALCHEMY_API_KEY"
export TOKEN=<your token's address on Elysium>
export BRIDGE_FACTORY=0x209B0476ec33841c661f41C0C260A3b8aF94164A   # ElysiumBridgeFactory, on Elysium
export MIRROR_FACTORY=0x473D61817Da6ce1a97aDC010FF1e96048504643B   # ElysiumMirrorFactory, on HyperEVM
export ELYSIUM_ROUTER=0x61EbbC3A29f1970aF2Ce862bA9c5364832E14d17   # gateway router, on Elysium
export DEPLOYER=$(cast wallet address --account deployer)
# Elysium: deploy the escrow wallet that will hold locked tokens.
cast send "$BRIDGE_FACTORY" "createL2Wallet(address)" "$TOKEN" \\
  --rpc-url "$ELYSIUM_RPC" --account deployer
# The one mirror address the factory derived from your token's name, symbol, and decimals.
export MIRROR=$(cast call "$BRIDGE_FACTORY" "expectedL1Mirror(address)(address)" "$TOKEN" --rpc-url "$ELYSIUM_RPC")`}
/>

HyperEVM側のトランザクションは、そのアドレスにミラーをデプロイし、両方のチェーンのブリッジにペアを登録する。このトランザクションはElysium宛ての2つのメッセージの配信料をHYPEで支払い、送る額は2つのメッセージ予算の合計と正確に一致しなければならない。Kinetiqは、両方のメッセージが到着時に実行されるよう、Elysiumの現在のガス価格の2倍(最低0.5 gwei)で入札することを推奨している。多めに見積もった分は、Elysium上のあなたのアドレスに返金される。

<CodeSnippet
  language="bash"
  code={`GAS_PRICE_BID=$(( $(cast gas-price --rpc-url "$ELYSIUM_RPC") * 2 ))   # 2x the current Elysium gas price
(( GAS_PRICE_BID < 500000000 )) && GAS_PRICE_BID=500000000            # at least 0.5 gwei
MAX_GAS=300000
MAX_SUBMISSION=400000000000000                                       # 0.0004 HYPE per message
VALUE_EACH=$(( MAX_SUBMISSION + MAX_GAS * GAS_PRICE_BID ))
cast send "$MIRROR_FACTORY" \\
  "createAndRegisterL1Mirror(address,string,string,uint8,(uint256,uint256,uint256,uint256,uint256,uint256,uint256,address))" \\
  "$TOKEN" "Example Token" "EXMPL" 18 \\
  "($MAX_SUBMISSION,$MAX_SUBMISSION,$MAX_GAS,$MAX_GAS,$GAS_PRICE_BID,$VALUE_EACH,$VALUE_EACH,$DEPLOYER)" \\
  --value $(( 2 * VALUE_EACH )) \\
  --rpc-url "$HYPEREVM_RPC" --account deployer`}
/>

トークンの実際の名前、シンボル、小数点桁数を正確に渡すこと。ファクトリーはどんなメタデータでも受け付けるが、供給を受け取れるのはトークンと一致するミラーだけで、一致しないミラーは永遠に空のままになる。2つのメッセージは通常1分以内にElysiumに届く。どちらかの実行に失敗した場合は、同じ引数で同じ登録を再実行すれば両方が再送される。

これで、すべての保有者がブリッジを使えるようになる。トークンを移動するには、Elysium上でエスクローウォレットを承認し、ルーター経由で送る。ルーターは、どちらの方向でも、トークン引数としてミラーのアドレスを受け取る。

<CodeSnippet
  language="bash"
  code={`export WALLET=$(cast call "$BRIDGE_FACTORY" "l2WalletFor(address)(address)" "$TOKEN" --rpc-url "$ELYSIUM_RPC")
AMOUNT=$(cast to-wei 1000000)   # 1,000,000 tokens, converted to 18-decimal base units
cast send "$TOKEN" "approve(address,uint256)" "$WALLET" "$AMOUNT" \\
  --rpc-url "$ELYSIUM_RPC" --account deployer
cast send "$ELYSIUM_ROUTER" "outboundTransfer(address,address,uint256,uint256,uint256,bytes)" \\
  "$MIRROR" "$DEPLOYER" "$AMOUNT" 0 0 0x \\
  --rpc-url "$ELYSIUM_RPC" --account deployer`}
/>

ロックはすぐに行われる。ミラーは、Elysiumのチャレンジ期間が経過するとHyperEVM上で請求可能になる。チャレンジ期間とは、オプティミスティックロールアップから出ていくメッセージの待機期間のことで、[メインネットでは約5.5日](https://elysium.kinetiq.xyz/docs/bridging-elysium-tokens-to-hyperevm)続く。請求は誰でも行え、準備が整うと[Kinetiqのブリッジ](https://elysium.kinetiq.xyz/bridge)にその送金が請求可能として表示される。最初のミラーのミントは、この待ち時間を見込んで計画すること。請求が完了したら、[Alchemy CLI](https://www.alchemy.com/agents)でミラーの供給量を読み取る。

<CodeSnippet
  language="bash"
  code={`alchemy evm contract read "$MIRROR" "totalSupply()(uint256)" -n hyperliquid-mainnet`}
/>

戻りはもっと速い。HyperEVM上でミラーをバーンすると、通常1分以内にElysium上で元のトークンが解放される。

ミラーを掲載するインテグレーターは、アドレスだけを信用せず、ファクトリーを通じてミラーを検証すべきだ。Kinetiqの確認方法は2つの読み取りを組み合わせる。ミラーファクトリーの`elysiumTokenOf(mirror)`が元のトークンを返すこと、そしてミラーの供給量がゼロより大きいことだ。一致しないミラーの供給量がゼロを超えることは決してない。

## トークンをHyperCoreの現物オーダーブックに上場するには

上場は、発行者がHyperCore上で行う5段階の手続きだ。ティッカーを購入し、デポジットウォレットを作成し、ジェネシスを実行し、トークンをウォレットにリンクし、現物ペアを登録する。手続きの全体は[Kinetiqの現物デプロイガイド](https://elysium.kinetiq.xyz/docs/hypercore-spot-deployment)に記載されている。HyperCoreのアクションに署名できるのはティッカーを落札したアドレスだけで、ティッカーの購入から稼働中のオーダーブックまでの間に許可リストや審査はない。実際には、オークションが独自のスケジュールで進むため、手続き全体には数日かかる。

### ティッカーオークションの費用はいくらか

ティッカーは[31時間のダッチオークション](https://hyperliquid.gitbook.io/hyperliquid-docs/hyperliquid-improvement-proposals-hips/hip-1-native-token-standard)で販売される。価格は下限の500 HYPEに向かって直線的に下がり、新しいオークションはそれぞれ前回の落札価格の2倍から始まる。前回のオークションで売れなかった場合は、下限価格から始まる。デプロイが途中で止まってもオークションの支払いは返金されないため、Hyperliquidのドキュメントは、まずテストネットでまったく同じデプロイをリハーサルするようデプロイヤーに求めている。

以下のHyperCoreアクションは[Hyperliquid Python SDK](https://github.com/hyperliquid-dex/hyperliquid-python-sdk)を使い、EVMトランザクションと同じFoundryキーストアで署名する。

<CodeSnippet
  language="python"
  code={`import getpass
import json
import pathlib
import eth_account
from hyperliquid.exchange import Exchange
from hyperliquid.info import Info
from hyperliquid.utils import constants
from hyperliquid.utils.signing import get_timestamp_ms, sign_l1_action
keystore = json.loads(pathlib.Path("~/.foundry/keystores/deployer").expanduser().read_text())
deployer = eth_account.Account.from_key(
    eth_account.Account.decrypt(keystore, getpass.getpass("Keystore password: "))
)
exchange = Exchange(deployer, base_url=constants.MAINNET_API_URL)
info = Info(constants.MAINNET_API_URL, skip_ws=True)
def ok(response):
    if response.get("status") != "ok":
        raise RuntimeError(response)
    return response
auction = info.post("/info", {"type": "spotDeployState", "user": deployer.address})["gasAuction"]
print("Current ticker price in HYPE:", auction["currentGas"])`}
/>

現在早期アクセス中の当社の[HyperCore Data API](https://www.alchemy.com/docs/data/hypercore/rest-api/token-deployment/spot-deployment-state)でも、同じオークションの状態を取得できる。

価格が許容範囲になったら、ティッカーを購入する。この呼び出しで、HyperCore上の小数点桁数の仕様が永久に固定される。この例ではweiの小数点桁数を8、サイズの小数点桁数を2としており、weiの小数点桁数はサイズの小数点桁数に5を足した値以上でなければならないというHyperCoreのルールを満たしている。入札の上限はHyperCoreの単位で指定し、HyperCoreではHYPEの小数点桁数は8だ。

<CodeSnippet
  language="python"
  code={`MAX_GAS = 600 * 10**8   # refuse to pay more than 600 HYPE
result = ok(exchange.spot_deploy_register_token("EXMPL", 2, 8, MAX_GAS, "Example Token"))
TOKEN_INDEX = result["response"]["data"]
print("Ticker index:", TOKEN_INDEX)`}
/>

### デポジットウォレット、ジェネシス、リンクはどう組み合わさるのか

ティッカーがまだリンクされていないうちに、HyperEVM上でデポジットウォレットを作成する。最後の引数はリンクに署名するアドレスで、ウォレットはこれをHyperCoreが確認するストレージスロットに書き込む。

<CodeSnippet
  language="bash"
  code={`export DEPOSIT_WALLET_FACTORY=0x9aD2639eB48FD7dd0f6F310F04aF5A9f7937cf6c   # HyperCoreDepositFactory, on HyperEVM
export TOKEN_INDEX=<ticker index from the purchase>
cast send "$DEPOSIT_WALLET_FACTORY" "createWallet(address,uint64,address)" "$MIRROR" "$TOKEN_INDEX" "$DEPLOYER" \\
  --rpc-url "$HYPEREVM_RPC" --account deployer
cast call "$DEPOSIT_WALLET_FACTORY" "walletFor(address,uint64,address)(address)" "$MIRROR" "$TOKEN_INDEX" "$DEPLOYER" \\
  --rpc-url "$HYPEREVM_RPC"`}
/>

ジェネシスは、HyperCore上のトークンの全供給量を生成する。ブリッジされたトークンの場合、その全量がトークンのシステムアドレスに入る。システムアドレスとは、`0x20`の後にティッカーインデックスが続く、HyperCoreの予約アドレスだ。供給がシステムアドレスから出ていくのは、誰かがミラートークンをエスクローに入金したときだけなので、HyperCore上の流通供給量は常にデポジットウォレットの保有量と一致する。ジェネシスは一度しか実行できない。ブリッジされたトークンでは、Hyperliquidityもオフにする。Hyperliquidityは、プロトコルが運用する注文で新しいオーダーブックに初期流動性を供給するHIP-2の戦略だ。

<CodeSnippet
  language="python"
  code={`MAX_SUPPLY_WEI = str(1_000_000_000 * 10**8)              # one billion tokens at 8 HyperCore decimals
SYSTEM_ADDRESS = "0x20" + format(TOKEN_INDEX, "038x")    # 0x20, then the index in the remaining 19 bytes
ok(exchange.spot_deploy_user_genesis(TOKEN_INDEX, [(SYSTEM_ADDRESS, MAX_SUPPLY_WEI)], []))
ok(exchange.spot_deploy_genesis(TOKEN_INDEX, MAX_SUPPLY_WEI, True))   # True = no Hyperliquidity`}
/>

リンクは2つのHyperCoreアクションで構成される。デポジットウォレットを指定するリクエストと、ウォレットに格納されたアドレスが署名するファイナライズだ。小数点桁数のオフセットは、ERC-20の小数点桁数18とHyperCoreトークンの8の差になる。SDKにはこれらのアクション用のヘルパーがないため、直接署名して送信する。リンクは永続的だ。

<CodeSnippet
  language="python"
  code={`DEPOSIT_WALLET = "<deposit wallet address from walletFor>"
def submit(action):
    nonce = get_timestamp_ms()
    signature = sign_l1_action(deployer, action, None, nonce, None, True)   # True = mainnet
    return ok(exchange.post("/exchange", {
        "action": action, "nonce": nonce, "signature": signature, "vaultAddress": None,
    }))
submit({"type": "spotDeploy", "requestEvmContract": {
    "token": TOKEN_INDEX, "address": DEPOSIT_WALLET.lower(), "evmExtraWeiDecimals": 10,
}})
submit({"type": "finalizeEvmContract", "token": TOKEN_INDEX, "input": "customStorageSlot"})`}
/>

この時点から、トークンにまだオーダーブックがなくても入金は機能する。

### オーダーブックを開設するには

USDC(トークンインデックス`0`)との現物ペアを登録し、続けてHyperliquidityを登録すると、マーケットが作成される。2つ目の呼び出しはHyperliquidityをオフにしていても必須で、その場合は注文を1件も出さず、初値を設定するだけだ。

<CodeSnippet
  language="python"
  code={`pair = ok(exchange.spot_deploy_register_spot(TOKEN_INDEX, 0))   # 0 = USDC
SPOT_INDEX = pair["response"]["data"]
START_PX = 0.01   # opening price in USDC; set it to a real price, not a placeholder
ok(exchange.spot_deploy_register_hyperliquidity(SPOT_INDEX, START_PX, 1, 0, None))   # 0 orders`}
/>

これで、保有者はトークンをHyperCoreに移せるようになる。ミラーについてデポジットウォレットを承認し、HyperCoreの現物を送り先として`deposit`を呼び出す。EVM側の小数点桁数が18、HyperCore側が8なので、金額は基本単位で10^10の倍数でなければならない。トークン単位の整数量なら常にこの条件を満たす。

<CodeSnippet
  language="bash"
  code={`export DEPOSIT_WALLET=<deposit wallet address>
AMOUNT=$(cast to-wei 1000)   # 1,000 tokens
cast send "$MIRROR" "approve(address,uint256)" "$DEPOSIT_WALLET" "$AMOUNT" \\
  --rpc-url "$HYPEREVM_RPC" --account deployer
cast send "$DEPOSIT_WALLET" "deposit(uint256,uint32)" "$AMOUNT" 4294967295 \\
  --rpc-url "$HYPEREVM_RPC" --account deployer   # 4294967295 routes to HyperCore spot`}
/>

HyperCoreは次のブロックで残高を反映する。戻すときは、システムアドレス宛ての`sendAsset`アクションを使う。これにより、HyperEVM上のエスクローからミラーが払い出される。Hyperliquidityがオフの場合、新しいオーダーブックは空の状態で始まる。チームかマーケットメーカーが価格を提示する必要があり、注文には現物アセットID`10000 + SPOT_INDEX`を使う。

## コーディングエージェントにこの作業を任せられるか

EVM側の作業のほとんどはスクリプト化できる。エージェントはFoundryでトークンのデプロイ、ミラーのセットアップ、供給量のブリッジを行い、[Alchemy CLI](https://www.alchemy.com/docs/alchemy-cli)で各ステップを確認できる。CLIのすべてのコマンドが`--json --no-interactive`を受け付けるので、エージェントは出力をパースできる。エージェントがシェルではなくスキルやMCPを通じて動作する場合は、[Agent Skills](https://www.alchemy.com/docs/alchemy-agent-skills)と[Alchemy MCP server](https://www.alchemy.com/docs/alchemy-mcp-server)で同じ読み取りができる。HyperEVMの読み取りには`-n hyperliquid-mainnet`を使い、Elysium上の作業はすべてFoundryの接続先をElysiumのエンドポイントにする。

HyperCoreの上場手続きの署名は人間が行うこと。この手続きではオークションで最低500 HYPEを支払い、小数点桁数、供給量、リンクが永久に固定される。そのため、アクションの準備はエージェントに任せ、署名は人間が行うべきだ。EVM側を任せるためのプロンプトは次のとおり。

<CodeSnippet
  language="text"
  code={`Run \`alchemy --json --no-interactive agent-prompt\` to load the CLI's command contract, then help me launch a token on Elysium mainnet and mirror it to HyperEVM.

Start by asking me for the token name, symbol, and total supply. Do not invent them. Confirm them back before writing any code.

Then:

- Sign everything with my Foundry keystore account \`deployer\`. If it doesn't exist, stop and tell me to run \`cast wallet import\`.
- Get my deployer address with \`cast wallet address --account deployer\`, then check its HYPE balance on Elysium with \`cast balance <deployer-address> --rpc-url <my Alchemy Elysium endpoint>\` before each transaction, and stop if it can't cover gas.
- Write a fixed-supply ERC-20 with no owner and no mint function, and deploy it with \`forge create --rpc-url <my Alchemy Elysium endpoint>\`.
- Run the mirror-bridge setup from Kinetiq's docs, taking every contract address from https://elysium.kinetiq.xyz/docs/contract-addresses. Show me each \`cast send\` command, with the value in HYPE, before running it.
- Verify the mirror with \`alchemy evm contract read <mirror> "totalSupply()(uint256)" -n hyperliquid-mainnet\`.

Ask before every transaction that spends HYPE. Do not buy a HyperCore ticker or run any HyperCore deploy action. Stop after the mirror and hand me the addresses.`}
/>

## Elysiumで構築を始める

[Alchemyダッシュボード](https://dashboard.alchemy.com/)でアプリを作成してElysiumを選択すれば、数分でメインネットのRPCとWebSocketのエンドポイントが手に入る。契約も、ウェイトリストも、最低利用額の縛りもない。Elysiumで構築するチームは、[Alchemy Elysiumクレジットプログラム](https://www.alchemy.com/credits-program/elysium)を通じてクレジットを申請することもできる。ミラーの区間のために、同じアプリに[HyperliquidのHyperEVM](https://www.alchemy.com/rpc/hyperliquid)を追加する。トークンが上場するオーダーブックをストリーミングするには、[HyperCoreの早期アクセスをリクエスト](https://www.alchemy.com/hypercore-early-access)する。
