池子里哪个币排前面:代币顺序、报价方向与倒数错觉 图 1
池子里哪个币排前面:代币顺序、报价方向与倒数错觉 · 图 1

同一个交易对,有人看到的价是三点七,有人看到的是零点二七,都没看错,也没人改数据。差别只在于报价的分子分母各站了哪个币。链上池子的世界没有天然的方向,方向是从一串排序规则里长出来的,而多数人从未意识到这条规则存在。

规则本身一句话就能说完:主流实现里,池子创建时比较两种代币合约地址的数值大小,地址数值小的记为第一个代币,大的记为第二个。建池之后,一切价格读数都基于一个比率——第一个代币的储备除以第二个代币的储备。于是同一个池子永远只按这一个方向报价:如果你的习惯方向恰好和它一致,读数是三点七;如果你关心的方向恰好相反,正确的读法就是取倒数,零点二七。链上没有任何地方写着谁是谁的计价单位,这个信息在合约层是被刻意省略的,排序只是为了实现上的确定性:给比率一个固定方向,方便比较与编程,仅此而已。

这条规则造成三种高频误读场景。第一种是拿链上原始比率直接当行情:从池子直接读出的储备比率带精度、带方向,与行情页习惯方向的报价可能互为倒数,也可能差好几个数量级(两种币的小数位配置不同),新手核对链上数据时最常见的惊叫都出自这里——价格被读反或读歪,协议没有问题。第二种是同一个币对在不同来源的方向不一致:一个面板展示正方向报价,另一个展示反方向报价,两边截图放在一起像两件事实互相矛盾,实际上只是各自取了倒数,把两边任何一对数字取倒数对一下就统一了。第三种是把交易返回的路径方向当成价格方向:兑换交易的输入输出顺序由发起人的意图决定,与池子内部的方向无关,同一个人买入和卖出的两笔交易,在事件记录里的输入输出恰好对调,用单笔交易记录核对价格时方向最容易搞混。

核对方向有一套机械动作,不需要任何直觉。第一步取地址:查出交易对两种币的合约地址,按十六进制字符串从前往后比大小,注意地址全部视为小写字母比较,少数面板用大小写混排的检查_sum_格式会让人比错。第二步对字段:打开池子合约的只读函数,token0 与 token1 返回的就是那对地址,各自储备量字段与之对应。第三步做选择:储备比除以精度因子得到比率,若你的习惯方向恰好是 token0 比 token1,直接读;若是反向,取倒数;两边精度位数不同,还要乘除相应的小数校正。整个流程十分钟内人人可做完,做完之后你会对自己的数据源有此前没有的确定性。

理解方向机制之后,更深一层的收获是对数据源的警惕。任何链上价格面板都在原始比率之上做了一层转译:转译环节包括选择计价方向、统一精度、选哪个池子取样、是否加权。一层层下来,页面上的价与池子里的储备比早已不是同一个数,它们通常一致,但在多池并存、方向翻转被错误处理、精度配置异常的边角场合就是不一致。所以核对价格永远从链上原始字段出发,把面板当作需要被验证的一方而不是权威,是 DeFi 数据生活的地基习惯。

还有一个边界情形值得知道:极端储备比例下,倒数读数会变成天文数字或无限趋零——池子被单边抽干时,储备比率本身已不表征有效市场价,此时的倒数处理得再对,也只是把一个坏数据换了一个方向呈现。方向正确性与数据有效性是两件事,任何读数都要先问该池此刻是否还有正常交易流动,再谈方向。

链上数值解读依赖具体合约实现,不同协议字段定义存在差异,核对前请以目标协议文档为准。本文只讲通用机制,不构成投资建议。