Skip to content

Instantly share code, notes, and snippets.

@oneleo
Last active January 9, 2026 04:27
Show Gist options
  • Select an option

  • Save oneleo/191c854f7c3bd4d76223e968efc623b7 to your computer and use it in GitHub Desktop.

Select an option

Save oneleo/191c854f7c3bd4d76223e968efc623b7 to your computer and use it in GitHub Desktop.
ENS 流程圖

在 Mainnet 設置反向 Addr 解析(L1 addr → name)

sequenceDiagram
    actor A as Aruun
    box White Mainnet
        participant E as ENS Registry
        participant V as L1 Reverse Registrar
    end

    A->>+V: setName("aruun.eth"))
    V->>-V: node = node(lower(msg.sender[2:]) + "addr.reverse")<br>versionable_names[recordVersions[node]][node] = "aruun.eth"
Loading

在 L2 設置反向 Addr 解析(L2 addr → name)

sequenceDiagram
    actor A as Aruun
    box White Mainnet
        participant E as ENS Registry
        participant V as L1 Reverse Registrar
        participant R as Chain Reverse Resolver
    end
    box White Optimism
        participant L as L2 Reverse Registrar
    end

    A->>+E: resolver(node("8000000a.reverse"))
    E->>-A: Chain Reverse Resolver address

    A->>+R: l2Registrar()
    R->>-A: L2 Reverse Registrar address

    A->>+L: setName("aruun.eth")
    L->>-L: _names[msg.sender] = "aruun.eth"
Loading

至 Mainnet 反向 Addr 查詢(L1 addr → name)

sequenceDiagram
    actor A as Alice
    box White Mainnet
        participant E as ENS Registry
        participant R as Resolver
    end

    A->>+E: resolver(node("262...ef6.addr.reverse"))
    E->>-A: Resolver address

    A->>+R: supportsInterface(hash("resolve(bytes,bytes)"))
    R->>-A: false

    A->>+R: name(node("262...ef6.addr.reverse"))
    R->>-A: "aruun.eth"
Loading

至 L2 反向 Addr 查詢(L2 addr → name)

sequenceDiagram
    actor A as Alice
    box White Mainnet
        participant E as ENS Registry
        participant R as Chain Reverse Resolver
    end
    participant G as Gateway
    box White Optimism
        participant L as L2 Reverse Registrar
    end

    A->>+E: resolver(node("262...ef6.8000000a.reverse"))
    E->>-A: null

    A->>+E: resolver(node("8000000a.reverse"))
    E->>-A: Chain Reverse Resolver address

    alt Usually
        A->>+R: supportsInterface(hash("resolve(bytes,bytes)"))
        R->>-A: true

        A->>+R: resolve(dns("262...ef6.8000000a.reverse"), `name(node("262...ef6.8000000a.reverse"))`)
        R->>-A: OffchainLookup() revert + gateway URL + callback function ID

        A->>+G: HTTP request {data, sender}
        G->>-A: HTTP response (encoded result)

        A->>+R: callback(result)
        R->>-A: Optimism primary name "aruun.eth"
    else ERC-7828 situation
        A->>+R: l2Registrar()
        R->>-A: L2 Reverse Registrar address

        A->>+L: nameForAddr("0x262...Ef6")
        L->>-A: "aruun.eth"
    end
Loading

至 L2 正向 Chain 查詢(chain name → chain id)

sequenceDiagram
    actor A as ERC-7828 Client
    box White Mainnet
        participant E as ENS Registry
        participant R as Chain Resolver
    end

    A->>+E: resolver(node("optimism.on.eth"))
    E->>-A: Chain Resolver address

    A->>+R: chainId(node("optimism.on.eth"))
    R->>-A: Chain ID 10
Loading

至 L2 反向 Chain 查詢(chain name → chain id)

sequenceDiagram
    actor A as ERC-7828 Client
    box White Mainnet
        participant E as ENS Registry
        participant R as Chain Reverse Resolver
    end

    A->>+E: resolver(0x0001 0000 01 0a 00)
    E->>-A: Chain Reverse Resolver address

    A->>+R: chainName(0x0001 0000 01 0a 00)
    R->>-A: "optimism.on.eth"
Loading

在 Mainnet 設置正向 Name 解析(name → L1/L2 addr)

sequenceDiagram
    actor A as Aruun
    box White Mainnet
        participant E as ENS Registry
        participant R as Resolver
    end

    A->>+E: resolver(node("aruun.eth"))
    E->>-A: Resolver address

alt CoinType = 60
    A->>R: setAddr(node("aruun.eth"), 60, "0x262…Ef6")

else CoinType != 60
    A->>R: setAddr(node("aruun.eth"), 0x80000000 + 10, "0x262…Ef6")
end
Loading

至 Mainnet 正向 Name 查詢(name → L1/L2 addr)

sequenceDiagram
    actor A as Alice
    box White Mainnet
        participant E as ENS Registry
        participant R as Resolver
    end

    A->>+E: resolver(node("aruun.eth"))
    E->>-A: Resolver address

    A->>+R: supportsInterface(hash("resolve(bytes,bytes)"))
    R->>-A: false

    alt CoinType = 60
        A->>+R: addr(node("aruun.eth"), 60)
        R->>-A: Mainnet address "0x262...Ef6"
    else CoinType != 60
        A->>+R: addr("aruun.eth", 0x80000000 + 10)
        R->>-A: Optimism address "0x262...Ef6"
    end
Loading

至鏈下 Gateway 正向 Name 查詢(name → L1/L2 addr)

sequenceDiagram
    actor A as Ethers.js
    box White Mainnet
        participant E as ENS Registry
        participant R as Offchain Resolver
    end
    participant G as Gateway

    A->>+E: resolver(node("busjob.uni.eth"))
    E->>-A: null

    A->>+E: resolver(node("uni.eth"))
    E->>-A: Offchain Resolver address

    A->>+R: supportsInterface(hash("resolve(bytes,bytes)"))
    R->>-A: true

    A->>+R: resolve(dns("busjob.uni.eth"), `addr(node("busjob.uni.eth"), 60)`)
    R->>-A: OffchainLookup() revert + gateway URL + callback function ID

    A->>+G: HTTP request {data, sender}
    G->>-A: HTTP response (encoded result)

    A->>+R: callback(result)
    R->>-A: Mainnet address "0x08a...7bb"
Loading

至 Mainnet 正向 Name 查詢(name → L1/L2 addr)

sequenceDiagram
    actor A as Viem
    box White Mainnet
        participant U as Universal Resolver
    end

    alt CoinType = 60
        A->>+U: resolve(dns("aruun.eth"), `addr(node("aruun.eth"))`)
        U->>-A: Mainnet address "0x262...Ef6", Resolver address

    else CoinType != 60
        A->>+U: resolve(dns("aruun.eth"), `addr(node("aruun.eth"), 0x80000000 + 10)`)
        U->>-A: Optimism address "0x262...Ef6", Resolver address
    end
Loading

至 Mainnet 反向 Addr 查詢(L1 addr → name)

sequenceDiagram
    actor A as Viem
    box White Mainnet
        participant U as Universal Resolver
    end

    A->>+U: reverse("0x262...Ef6", 60)
    U->>-A: "aruun.eth", Reverse Resolver address
Loading

至 Mainnet 反向 Addr 查詢(L2 addr → name)

sequenceDiagram
    actor A as Viem
    box White Mainnet
        participant U as Universal Resolver
    end
    participant G as Gateway

    A->>+U: reverse("0x262...Ef6", 0x80000000 + 10)
    U->>-A: OffchainLookup() revert + gateway URL + callback function ID

    A->>+G: HTTP request {data, sender}
    G->>-A: HTTP response (encoded result)

    A->>+U: callback(result)
    U->>-A: "aruun.eth", Resolver address, Reverse Resolver address
Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment