博客

TRON 新手教程 05|钱在 TRON,应用在另一条链,怎么过去

钱包里有 USDT,新应用却显示余额为零。从这里讲清跨链在两本账上各做了什么,到手的是哪种资产,谁担保它能兑回,两端费用又该怎么比。

约 15 分钟

朋友发来一个应用链接,你连上钱包,余额显示 0。切回 TRON 钱包,几百 USDT 好好地躺在那里。两边都没坏,一个在查 TRON 的账,另一个在查别的链的账。

很多人这时的第一反应,是把应用给的收款地址复制过来,从 TRON 直接转过去。钱包多半会提示地址格式不对。如果对方是交易平台的充值地址,选错网络还可能让这笔钱卡在平台那边,要靠客服处理,运气不好就找不回来。原因很朴素,每条链各记各的账。TRON 上的 USDT 和另一条链上的 USDT,是两份不同合约里的余额,名字一样,账本不通。

这篇要回答的问题是,钱在 TRON,想在另一条链上用,怎样过去才不吃亏。

先说结论。跨链并没有把钱搬走,它是在两本账上各做一次对应的记录,你在终点拿到的是一份由某个机制担保的余额。这份余额值不值钱,要看谁在担保它能兑回。所以动手之前要按顺序弄清三件事,终点到底收到哪个合约的什么资产,这条路线靠什么让终点链相信你在起点付过钱,扣完两头所有费用后实际到手多少。

切换网络,只是换了一个查账窗口

钱包里的“切换网络”,更像在柜台换一本账去查。查 TRON 时显示 TRON 上的余额,切到别的网络,显示的是你在那条链上的地址里有什么。原来的 USDT 一分没动,只是这本账里没有它。

反过来,看到熟悉的图标也说明不了什么。链上的代币其实是一份合约,名字和图标是部署者自己填的,谁都可以部署一个叫 USDT 的合约。真正把它们区分开的是合约地址。第三篇对过 TRON 上 USDT 的合约地址,到了另一条链,要重新对一次。

跨链前先写清起点、终点和希望收到的资产。
跨链前先写清起点、终点和希望收到的资产。

把需求写成一句话,路线往往就清楚了一半。比如起点是 TRON 上的 USDT,终点是某个应用所在网络上的 USDC。这句话里其实藏着两件事,一件是换链,一件是把 USDT 换成 USDC。界面上可能只有一个按钮,背后却可能是先兑换,再跨链,到了那边再兑换一次。每多一步,就多一份费用,也多一个可能卡住的环节。

所以报价页最该看的是“将收到什么”那一行,按钮叫 Bridge 还是 Swap 反倒其次。目标网络、目标资产的合约地址、接收地址、预计数量,一项项核对。只看美元价值差不多,最容易漏掉的是拿到的到底是发行方自己发的版本,还是某座桥发的凭证。

资产没有飞过去,桥在两本账上各记了一笔

最常见的一种做法叫锁定与铸造。你在 TRON 上把 100 USDT 转进桥的合约,合约把它锁住。桥确认之后,在目标链上给你的地址新发 100 个代表这笔钱的代币。这里的“铸造”,就是目标链上这种代币的总量多出 100。回程时你在目标链交还这 100 个,它们被“销毁”,总量减掉 100,TRON 那边再把锁着的 USDT 放出来。

整个过程里,没有任何东西在两条链之间移动。起点少了一笔能动用的余额,终点多了一笔新余额,两笔账靠桥对上。

可以把它想成寄存。你把一箱货存进甲地仓库,仓库开一张凭证,乙地的商户认这张凭证。凭证值钱,是因为大家相信拿着它随时能回甲地把货取出来。仓库要是被搬空,凭证印得再好看也取不出东西。

这个类比有两处不太准。现实中仓库失窃,通常有保险、警察和一层层追责;链上的锁仓合约如果被人用看起来合法的签名取空,合约本身不会替你喊停。另外,链上凭证在乙地可以随意转手,你手里那张也许是从别人那里换来的,但它背后对应的还是同一个仓库。仓库出事,所有拿着凭证的人一起受影响。

包装资产背后,要有可信的验证与兑回安排。
包装资产背后,要有可信的验证与兑回安排。

这种凭证一般叫包装资产。它可能在名字前后加个前缀或后缀,也可能和原版几乎同名。如果发行方也在目标链上直接发了一个版本,同一个名字底下就会同时存在两种 USDT,一种由发行方负责兑付,一种由桥负责兑回。名字只能当线索,最后要看合约地址和官方列出的合约。

应用支持其中一种,不代表两种都收。好比商场收自家的礼品卡,你拿另一家印得几乎一样的卡去结账,收银员不会因为图案像就放行。桥能把代币送到你的地址,却管不了目标应用认不认这个合约。

不想拿凭证,就得让发行方亲自出面

包装资产的麻烦,在于多了一个仓库要信任。有一种办法能绕开它,让发行方自己参与跨链。以 Circle 给 USDC 做的跨链机制为例,源链上的 USDC 被销毁,相关证明完成后,在支持的目标链上直接发行原生 USDC。这条路线里没有锁着货的仓库,也就不用再多出一种包装 USDC。

Circle 的 CCTP 介绍描述了这类机制。这里只拿它说明先销毁、再发行的思路,不代表所有桥都这么做,TRON 上的 USDT 也不能直接套用这套 USDC 流程。

少了仓库,信任并没有消失,它集中到了发行方身上。发行方愿不愿意继续在某条链上发行,决定了那条链上的原生版本还有没有新的供给。2024 年 2 月就有一个现成的例子。Circle 宣布立即停止在 TRON 上铸造 USDC,分阶段结束对 TRON 版 USDC 的支持。Circle Mint 的机构客户可以在 2025 年 2 月底之前把 TRON 上的 USDC 转到其他链或赎回,普通持有人则被建议通过交易所等服务,转到仍受支持的链上。

这件事和跨链的关系在于,同样叫原生 USDC,它在一条链上还能不能顺畅地用、换回美元要走哪条路,取决于发行方的安排,链本身说了不算。原生资产省掉的是桥那一层风险,发行方、证明服务、合约和前端各自的条件还在。

还有第三类路线,靠两边预先备好的钱。你在 TRON 付款,服务方在目标链从自己的库存里先把资产打给你,之后再自己去结算。它到账往往很快,因为你等的是服务方的一笔转账,不用等跨链消息走完。快的代价藏在报价里,库存紧张或者路线冷门的时候,同样 100 USDT 能换到的数量可能明显变少。

所以看到秒到账,不要推断这座桥的技术更快。有时只是有人先垫了钱。弄清谁先付钱、谁最后结算,才能理解价格差在哪里,也才知道出了问题该找谁。

终点链凭什么相信起点付过钱

前面三种做法,都绕不开同一个问题。TRON 上有人说自己锁了 100 USDT,目标链怎么知道这是真的。如果只要收到一句通知就发币,那桥的生意会好得令人害怕,来的人都不用带本金。

常见的办法有几种。有的桥由一组验证者签名,凑够规定数量才放行;有的在目标链上直接验证源链的状态证明;还有的先留一段挑战期,让别人有机会指出错误消息。具体某座桥用哪一种,要看它自己的文档。

签名人数最容易被拿来做宣传,也最容易看错。2022 年 Ronin 桥被盗,把这一点演示得很清楚。按Halborn 的事件复盘,Ronin 桥有 9 个验证节点,存取款需要其中 5 个签名。听起来攻击者得同时攻破 5 家,可其中 4 个节点都由同一家公司 Sky Mavis 运营。另一个属于 Axie DAO 的节点,在 2021 年 11 月为了分担免费交易的压力,临时允许 Sky Mavis 代它签名。这个安排第二个月就停了,权限却一直没有撤销。

攻击者攻进 Sky Mavis 的系统,又借这个没撤的权限拿到第五个签名。5 票凑齐,桥合约照规则放行,两笔提款取走 173,600 ETH 和 2,550 万 USDC。按同一份复盘,事情过了大约六天才被发现,起因是一位用户提不出约 5,000 ETH。

BlockSec 对这次事件的链上分析记录了这两笔提款和后续资金流。当年的美元估值随币价变动,不必当成固定数字,记住被盗资产数量和出问题的环节就够了。

这件事里,普通用户的助记词一个都没泄露。锁在桥里的资产被取走后,Ronin 链上那些包装凭证背后的仓库就空了一大块。前面寄存的类比在这里成了真,凭证还在每个人的钱包里,能不能兑回却已经不由持有人决定。

所以跨链有两层风险要分开看。一层是自己有没有签错、转错,这靠操作习惯能压得很低。另一层是所用的桥能不能按规则保住并放出资产,这一层你再小心也消除不了,只能靠挑选路线,以及控制放在桥上的金额和时间来限制。

读一座桥的安全说明时,人数之外还要问几件事。这些签名者是否真的相互独立,密钥怎么保管,谁能升级合约,能不能暂停,过去出过什么事、怎么处理的。审计报告有帮助,但它审的是某个版本、某个范围,不是给以后所有升级发一张永久有效的保单。

还得防止同一张收据被用两遍。桥需要认出消息来自哪条链、对应哪一次操作、有没有执行过。我们不必自己写验证代码,只要知道“确认起点真的发生过”和“防止重复放款”都是桥必须做对的事,哪一件做错,都会有人凭空拿走钱。

所以遇到只强调零费用、秒到账,却说不清最终收到哪个合约的页面,我会先停下来。那几秒钟省出来的时间,不值得用未来几个星期研究客服自动回复来交换。

路线越短,不一定总价越低

假设手里有 100 USDT,页面写着桥费 1 USDT,最后到账却不一定是 99。在 TRON 这一端,授权和发送都是合约操作,要消耗能量,能量不够就燃烧 TRX,这是第二篇和第四篇算过的账。中间可能还有跨链服务费和兑换的价差。到了目标链,有的路线还要你自己发一笔领取交易,付那条链的手续费。

有的服务把其中几项打包进报价,有的要另付。比较时别把已经包含的费用再加一遍,也别看到“免桥费”就以为整条路线不花网络费。最稳妥的比法只看两个数,最终到账多少,以及钱包里另外被扣了多少别的币。

举个例子。两条路线都从 100 USDT 出发,目标资产相同。甲到账 98.5 USDT,另外要付折合 0.5 USDT 的网络费;乙到账 98 USDT,没有其他费用。甲的成本是 100 − 98.5 + 0.5 = 2 USDT,乙是 100 − 98 = 2 USDT,一样贵。只看到账数字,甲像是便宜了 0.5,这 0.5 正好被另付的费用吃掉。

中途要换币时,还要多看一个数。报价里的“预计到账”是按下单那一刻的价格估的,真正兜底的是“最低到账”。假设预计到账 98.5,你允许 0.5% 的偏离,最低到账就是 98.5 × (1 − 0.5%) ≈ 98.01。等待期间价格变差,只要结果不低于 98.01,交易照样完成。跌破了,兑换这一步会失败,有的路线退回原来的币,有的会把中间资产留在你手里,要看路线说明;已经消耗的网络费一般拿不回来。

偏离设得太宽,等于提前同意少拿钱;设得太窄,又容易反复失败。这一块到第七篇讲兑换时会细说。

到了新链,先备一点当地的零钱

钱到了目标链,你还得用它。TRON 上的 TRX 和能量管不到别的链。目标网络通常要用自己的原生资产付执行费用,或者有特定的代付安排,具体要查,不能猜。

这一步最常见的尴尬,是账上有 98 USDC,却连一次授权都发不出去,因为钱包里没有一点当地的手续费资产。有点像到了陌生城市,银行卡里有钱,地铁闸机只认当地的交通卡。不过现实里还能找人工窗口,链上没有这个窗口。

资产跨过去之后,目标网络上的下一次操作也需要费用。
资产跨过去之后,目标网络上的下一次操作也需要费用。

有些桥会顺带给一点目标链的手续费资产,有些完全不给。下单前看清到账的构成,比到了那边再找人“帮忙激活”省事。余额暂时动不了的时候,也不要把助记词交给所谓的跨链客服,骗子最喜欢挑这种着急的时刻出现。

接收地址同样要确认。不同网络的地址格式可能不同,钱包对各个网络的支持也不同。起点地址和终点地址不一定一样;就算两条链的地址格式看起来相同,也不代表你用的服务支持这条路线。

小额测试是为了把整条路径走一遍。测试金额要高于平台的最低限额,还要够覆盖费用。拿 1 USDT 去测一条最低 5 USDT 的路线,没到账也说明不了线路有没有问题。测试成功后再转大额,仍要重新看一遍报价和地址,价格和库存随时在变。

源链显示成功,只走完了一半

第三篇讲过链上成功和平台入账是两回事。跨链又多一层。TRON 上那笔交易成功,可能只意味着资产已经锁进合约、已经销毁,或者已经付给了服务方。目标链那边的交付是另一笔交易,要另外完成。

中间的等待也有来由。源链要达到路线要求的确认程度,消息要被验证,目标链再执行。快速模式由服务方先垫付,你少等了时间,垫付和后续结算的规则仍然要看清。页面上的快,不等于底层风险已经消失。

所以要保存三样东西,源链交易编号、桥的订单号、目标链交易编号。有的页面分步骤显示进度,有的需要你自己点领取。等待时别关掉页面靠记忆猜进度,更不要因为目标余额没变,就再下一个同金额的订单。

源链有成功记录、目标链还没有的时候,先查订单卡在哪一步,是在等确认、等证明、等流动性,还是在等你自己领取。官方状态页和订单查询比陌生私信可靠。真正的支持人员查订单只需要交易编号,用不到你的私钥。

失败了也先分清是哪一段。源链交易根本没提交成功,和资产已经锁定、目标端还没完成,处理方法完全不同。前一种可以重来。后一种如果直接再下一单,等原订单稍后完成,你就跨了两次,多付一份费用,还多一笔钱在路上。

动手之前,先问这次是否非跨不可

如果只是给朋友付款,对方本来就能收 TRON 上的 USDT,就没必要为了试一个新页面绕一座桥。每少一次兑换和授权,就少一个要判断的环节,也少一份放在别人合约里的风险。

通过交易平台充值,再提现到另一条网络,有时也能达到目的。前面提到 Circle 停止支持 TRON 版 USDC 时,建议普通持有人走的也是交易所这类渠道。这属于平台托管和提现流程,要看平台是否支持这两条网络,最低额度、账户条件和提现费用各是多少。钱在平台手里的那段时间,你信任的是平台。

回到开头那个余额为零的页面。先查它支持哪条网络、哪个合约,再确认自己在那条链上有收款地址,也备好了当地的手续费。真要桥接,就挑一条说得清终点收到什么、靠什么被信任、到手多少的路线,把源链交易、订单号和目标链交易一起存好。等目标资产真的出现在应用里,这一趟才算走完。

路上弹出的那个授权确认,值得单独讲一篇。下一篇就从它说起。