跳到主要内容

Auroran Bridge 合约接口

EVM 充提桥接合约 · 可升级(TransparentUpgradeableProxy)

ABI 文件AuroranBridge.abi.json

用户交互入口为 Proxy 地址(非 implementation)。


1. 数据结构

DepositEntry

充值记录(仅成功落账)。

字段类型说明
owneraddress充值人地址
recordedAtBlockuint64deposit() 成功时的区块号
amountuint256代币数量(原生精度)
recordedAtTsuint64deposit() 成功时的区块时间戳(秒)

WithdrawEntry

提款记录(仅成功放款)。

字段类型说明
recipientaddress收款 EVM 地址
zeptoRequestIduint64Auroran 链提现请求 ID(去重键;合约字段名)
amountuint256代币数量(原生精度)
settledAtBlockuint64放款成功时的区块号
settledAtTsuint64放款成功时的区块时间戳(秒)

序号约定

名称规则
seq(充值)1-based,deposits 数组下标 + 1;0 表示不存在
withdrawId(提款)1-based,withdrawals 数组下标 + 1;0 表示不存在
zeptoRequestIdAuroran 链 request_id,映射表 withdrawRequestIdToId 去重

2. 写入函数

2.1 deposit

用户充值代币到 Auroran 链。

function deposit(uint256 amount) external returns (uint64 seq);
参数类型说明
amountuint256充值数量(代币原生精度,须 > 0)
返回说明
seq分配的充值序号(1-based)

行为

  • 代币从 msg.sendersafeTransferFrom 转入 projectAddress
  • 成功后 push deposits 并发出 DepositRecorded
  • 调用方须先对 Bridge 地址 approve
  • 修饰符:nonReentrantwhenDepositsNotPaused

2.2 settleWithdraw

结算一笔 Auroran 链提款,向收款人放款。

function settleWithdraw(
uint64 zeptoRequestId,
uint256 amount,
address recipient
) external returns (uint64 withdrawId);
参数类型说明
zeptoRequestIduint64Auroran 链提现请求 ID(去重键)
amountuint256放款数量(须 > 0)
recipientaddress收款 EVM 地址(非零)
返回说明
withdrawId分配的自增提款 ID(1-based)

行为

  • 无权限限制;代币从 msg.sender 转入 recipient,调用方须先 approve
  • zeptoRequestId 重复提交 revert ZeptoRequestIdAlreadyUsed
  • 修饰符:nonReentrantwhenWithdrawalsNotPaused

2.3 管理函数

函数权限说明
setProjectAddress(address)onlyOwner设置充值收款地址
setOperator(address)onlyOwner设置操作员
setBlockConfirmations(uint64)onlyOwner设置充值区块确认数
pauseDeposits()owneroperator暂停充值
unpauseDeposits()onlyOwner恢复充值
pauseWithdrawals()onlyOwner暂停提款
unpauseWithdrawals()onlyOwner恢复提款
transferOwnership(address)onlyOwner转移所有权
renounceOwnership()onlyOwner放弃所有权

2.4 initialize

Proxy 部署时调用一次(非对接方日常使用)。

function initialize(
address token_,
address projectAddress_,
address operator_,
address owner_,
string calldata chainTag_,
uint256 chainId_,
uint64 blockConfirmations_
) external;
参数说明
token_桥接 ERC20 地址
projectAddress_充值收款地址
operator_可暂停充值的操作员
owner_合约 owner
chainTag_外部链标识(小写,如 "bsc"
chainId_须等于 block.chainid
blockConfirmations_充值事件确认区块数

3. 读取函数

3.1 元数据

函数返回说明
token()address桥接 ERC20 地址
projectAddress()address充值收款地址
operator()address操作员地址
owner()address合约 owner
chainTag()string外部链标识
chainId()uint256EVM chain ID
blockConfirmations()uint64充值确认区块数
depositsPaused()bool充值是否暂停
withdrawalsPaused()bool提款是否暂停

3.2 bridgeChainInfo

一次性返回桥接实例元数据(链下程序启动时调用)。

function bridgeChainInfo() external view returns (
string memory tag,
uint256 id,
address tokenAddr,
uint8 tokenDecimals,
address upgradeAdmin,
address operatorAddr,
uint64 confirmations
);
返回字段说明
tagchainTag
idchainId
tokenAddr桥接代币地址
tokenDecimals代币 decimals()
upgradeAdminProxyAdmin owner(非 proxy 部署时为 address(0)
operatorAddr操作员地址
confirmationsblockConfirmations

3.3 账本查询

函数说明
depositCount()已成功充值笔数
withdrawCount()已成功提款笔数
getDeposit(uint64 seq)按 seq 查充值(1-based),不存在 revert
getWithdraw(uint64 withdrawId)按 withdrawId 查提款(1-based),不存在 revert
getDeposits(uint64 offset, uint64 limit)分页查充值(offset 0-based,limit > 0)
getWithdrawals(uint64 offset, uint64 limit)分页查提款
isZeptoRequestIdUsed(uint64 requestId)Auroran 链请求 ID 是否已结算
deposits(uint256 index)公开映射,按 0-based 下标读充值
withdrawals(uint256 index)公开映射,按 0-based 下标读提款
withdrawRequestIdToId(uint64)zeptoRequestIdwithdrawId

4. 状态变量

变量类型说明
tokenIERC20桥接代币
projectAddressaddress充值收款地址
operatoraddress操作员
depositsDepositEntry[]充值账本
withdrawalsWithdrawEntry[]提款账本
withdrawRequestIdToIdmapping(uint64 => uint64)去重索引
depositsPausedbool充值暂停开关
withdrawalsPausedbool提款暂停开关
chainTagstring外部链标识
chainIduint256EVM chain ID
blockConfirmationsuint64充值确认区块数

5. 事件

DepositRecorded

用户充值成功。

event DepositRecorded(
uint64 indexed seq,
address indexed owner,
uint256 amount,
uint64 blockNumber,
uint64 timestamp
);
字段索引说明
seqindexed充值序号,对应 external_ref.seq
ownerindexed充值人
amount代币原生精度
blockNumber落账区块号
timestamp落账时间戳(秒)

WithdrawSettled

提款放款成功。

event WithdrawSettled(
uint64 indexed withdrawId,
uint64 indexed zeptoRequestId,
address indexed recipient,
uint256 amount,
uint64 blockNumber,
uint64 timestamp
);
字段索引说明
withdrawIdindexed自增提款 ID
zeptoRequestIdindexedAuroran 链 request_id
recipientindexed收款地址
amount代币原生精度
blockNumber放款区块号
timestamp放款时间戳(秒)

管理事件

事件参数说明
OwnershipTransferredpreviousOwner, newOwner所有权变更
ProjectAddressChangednewAddress充值收款地址变更
OperatorChangednewOperator操作员变更
BlockConfirmationsChangednewBlockConfirmations确认区块数变更
DepositsPaused充值已暂停
DepositsUnpaused充值已恢复
WithdrawalsPaused提款已暂停
WithdrawalsUnpaused提款已恢复
InitializedversionProxy 初始化(OpenZeppelin)

6. 错误

错误参数场景
ZeroAddress地址参数为零
ZeroAmount金额为 0
DepositsPausedError充值已暂停
WithdrawalsPausedError提款已暂停
DepositNotFoundseq充值序号不存在
WithdrawNotFoundwithdrawId提款 ID 不存在
ZeptoRequestIdAlreadyUsedrequestId重复结算
TransferAmountMismatchbalanceBefore, balanceAfter, expectedDelta转账金额不符(fee-on-transfer 代币等)
NotOperator非 owner/operator 调用 pauseDeposits
OwnableUnauthorizedAccountaccount非 owner
ReentrancyGuardReentrantCall重入
EmptyChainTag初始化时 chainTag 为空
ChainIdMismatchexpected, actual初始化 chainId 与链不符
InvalidPaginationlimit == 0
AlreadyInitialized重复初始化
SafeERC20FailedOperationtokenERC20 操作失败

7. 设计约束

约束说明
不托管资金充值直达 projectAddress,提款由调用方出资
仅记录成功转账失败整笔 revert,不写入账本
去重充值靠 Auroran 链 external_ref;提款靠 zeptoRequestId
可升级通过 TransparentUpgradeableProxy + ProxyAdmin
重入保护deposit / settleWithdraw 使用 nonReentrant