跳到主要内容

账户与地址

OXN 有两种地址格式:共识层使用的原生 oxn1… bech32 格式,以及执行层使用的标准 EVM 0x… 十六进制格式。两者从同一把底层密钥派生,指向同一个账户——但住在不同层,各自有独立的余额。

绝大多数情况下你不需要考虑这个——钱包会帮你处理。但当它变得重要时——水龙头拒绝你的地址、deposit 走了意料之外的路径、你要构建桥——本页解释背后到底发生了什么。

两种格式​

原生地址(oxn1…)。 Bech32 编码,共 44 个字符,oxn1 开头。示例:

oxn1qz9p73d5eytrrjvc3w0w0cwf7ural96dnsewrhpw

这是共识层使用的格式。原生代币余额、验证人质押、共识层交易都引用 oxn1… 地址。

EVM 地址(0x…)。 标准以太坊十六进制格式,42 个字符,0x 开头。示例:

0x1234567890abcdef1234567890abcdef12345678

这是执行层使用的格式。所有 EVM 合约余额、MetaMask、ethers.js、viem、Hardhat、Foundry、区块浏览器都显示 0x… 地址。

同一把密钥,两个地址​

两种地址格式都从同一对 secp256k1 密钥派生,只是编码方式不同:

  • EVM 地址 是 keccak256(publicKey)[12:]——标准以太坊派生。
  • 原生地址 是从同一公钥派生的 bech32 编码,使用 OXN 的人类可读前缀(HRP)oxn。

也就是说:你的助记词、私钥、mnemonic 在两种地址格式下代表同一个账户。 MetaMask 和 OXN 网页钱包默认在 EVM 侧操作;只有你与共识层操作交互时原生格式才可见。

什么场景用什么地址​

场景格式
MetaMask、OXN 网页钱包0x…(EVM)
区块浏览器地址搜索0x…(EVM)
水龙头输入0x…(EVM)
ethers.js / viem / Hardhat / Foundry0x…(EVM)
Solidity 合约 msg.sender0x…(EVM)
共识层交易oxn1…(原生)
验证人质押(主网)oxn1…(原生)
Deposit / withdraw 操作两种都需要

对 99% 的 dApp 开发,你只碰 0x…。

余额住在不同层​

这里有个微妙的点:oxn1abc…(原生)上的余额,与 0x1234…(EVM)上的余额,即便二者都从你的密钥派生,也是独立的。

一个账户可以有:

  • 只有原生余额。 新创建的账户,或只从共识层来源收款的账户。
  • 只有 EVM 余额。 通过水龙头或其他 EVM 地址得到资金的账户。
  • 两层都有余额。 deposit 或 withdraw 之后。

要在智能合约里花原生侧的钱,必须deposit到 EVM 侧。要把资金移回原生侧(例如做质押),必须withdraw。

Deposit 与 Withdraw​

Deposit(原生 → EVM)​

把 oxn1… 余额移到 0x… 余额。通过一笔带"deposit to EVM"类型的共识层交易执行。Deposit 终结后,资金对 EVM 合约可用。

网页钱包 提供了处理这个流程的充值 UI——当前 UI 中的按钮文案可能仍沿用底层工具链的术语,但底层执行的就是上文描述的"原生 → EVM"转移。程序化上,大多数 SDK 屏蔽了细节。

Withdraw(EVM → 原生)​

反过来。把 0x… 余额移回一个 oxn1… 地址。使用一笔 EVM 层的交易,在 EVM 侧销毁、在原生侧增记。

Gas 成本​

两种操作都是完全的链上状态改动,都消耗 gas。典型金额见 Gas 与手续费。

常见陷阱​

"水龙头说我的地址无效。" OXN 上的水龙头只接受 0x…(EVM)地址。如果你粘贴 oxn1…,水龙头无法用它给 EVM 合约打钱。从钱包复制 EVM 地址。

"钱包里明明有 TBLUAI,可我的合约看到我余额是 0。" 你的余额很可能在错误的层。如果 MetaMask 显示有余额但 EVM 合约看不到,它可能停在原生侧。实际很少发生——水龙头直接资助 EVM 侧——但如果你从共识层来源收到过转账就可能。用网页钱包的 deposit UI 把它移过来。

"我复制的地址在哪儿都用不了。" 检查前缀。oxn1… 不能粘到 MetaMask 里(它要 0x…);0x… 无法签共识层交易。

"我的两笔交易在浏览器上显示在不同地址下。" 共识层交易与 EVM 交易即便属于同一账户也是分开记录的。区块浏览器在你输入任一格式时都会把两边都列出来。

下一步​