让比特币 DeFi 变简单,底下要做多少事
你贴上代币 ID,点一下买入。底下是同区块打包、按实际到手排序的路由,以及让两条流程抢不到同一枚币的锁。
在比特币 L1 上交易,和在有账户模型的链上完全不是一回事。这里没有一个余额栏位等着被扣减,也没有 nonce 帮你排序交易。这里只有 UTXO。每一笔交易,在成为"交易问题"之前,先是一个 UTXO 问题。
Alkanex 是一个 Telegram 机器人。你贴上代币 ID,点一下买入,代币到账。你看到的全部就是这些。
而在这层界面之下,是一台专门按比特币的真实运作方式造出来的机器。下面是它的内部。

1. 一笔买入是两条交易,而它们在同一个区块里确认
用 BTC 买 Alkanes 代币,你的 BTC 要先变成 frBTC,然后这笔 frBTC 才去做 swap。这就是两条交易,而且第二条要花掉第一条的输出。
最直觉的做法是:先广播第一条,等它确认,再广播第二条。那意味着你原地站两到五个区块,而价格不会陪你等。
我们不等。
我们把两条交易一次性构造好,父交易绝不单独广播,而是把两条作为一个整体交给网络,由子交易替两条一起付手续费。矿工把它们当作一个单位处理,父子在同一个区块确认。
这不是示意图。它跑在主网上,用的是真金白银,买入和卖出双向都跑通了。

2. 最优路径不等于最短路径
看起来最直接的那条路,往往是错的。经过一个浅池的单跳,可能比经过深池的多跳贵得多,因为浅流动性上的冲击,远远超过你少走一跳省下的那点。
所以我们的路由不按跳数排序,而是按你最终真正拿到手的数量排序,并且在 frBTC 这一腿上加了深度规则:深池永远优先于浅池。
这个差别不是纸上谈兵。我们亲眼见过本来会在浅池上被实打实吃掉一块的交易,落在深池上,冲击几乎为零。
跳数少只是习惯。实际到手才是答案。

3. 你的滑点保护由比特币执行,不是由我们执行
我们构造的每一笔 swap,都会把一个最低成交量写进交易本身,这个值来自你自己的滑点设置。
如果池子在报价和上链之间对你不利,合约直接回滚,资金原路退回。这不是我们的服务器跑一个检查然后祈祷,而是比特币替你执行的条件。
就算我们在你交易进行到一半时掉线,这个保证依然成立。

4. 并发靠锁,不靠运气
比特币交易机器人真正亏钱的方式,是两个操作同时去抢同一枚 UTXO。一笔交易拿去付手续费的那个输出,恰好是一笔提现已经锁定要花的。一个 wrap 和一个 unwrap 选中了同一枚币。在钱少掉之前,一切看起来都很正常。
所以我们建了一张全局的锁表。任何会动到币的流程,交易手续费、wrap、unwrap、提现、自动拆分,都必须在写自己状态的同一个数据库事务里把这枚币锁上,而索引保证同一枚币同时只允许一个有效锁。两条流程相撞时,其中一条会在任何东西被签名之前干净地退出。
而且,一旦交易已经签名,除非有链上证据证明它已失效,否则这个锁永远不会被释放。这不是一条靠开发者自觉遵守的规矩,而是直接写进查询本身的,任何代码路径都绕不过去,包括我们还没写的那些。

5. UTXO 清理,在你交易的过程中就做完
Alkanes 的 swap 有时会把你新买的代币和剩余的 frBTC 一起交还到同一个输出上。看起来没问题。然后你的下一笔交易就失败了,因为已经没有一个干净的单资产输入可以花。
我们会检测到这一点,并且在你交易还在进行时就把这个输出拆开。没有按钮,没有维护页面,也不需要找客服。拆分本身是一条纯粹的 protorune edict 交易,每个资产被钉到自己的输出上,所以不可能烧掉任何东西。
围绕它的规则很硬:手续费只能由已确认的普通 BTC 出,带资产的输出永远不会被当作手续费输入花掉。如果找不到安全的出资方式,我们在签名之前就停下来。
在资金路径上,唯一可以接受的失败方式,是失败得干干净净。

6. 我们发版,不会吃掉你的交易
发版时,正在跑的实例会平滑排空并交接,新实例启动时从数据库里把每一笔进行中的交易、unwrap、跨链和提现,接着原来的位置往下推。在这之上还有一个自愈循环持续运行,重新推进任何卡住的流程。
我们发版很频繁。你的交易从来不会知道。

7. 读取失败就是错误,绝不是 0
如果余额读取失败,你看到的是一个错误和一个重试。我们绝不显示 0。
这听起来像个细节。它不是。读取失败时显示的那个 0,正是让一个人以为自己的钱没了的原因,也是让下游代码以为没有余额可花的原因。这两件事都很贵。
所以规则是绝对的:一次读取要么成功要么失败,我们必须说清楚是哪一种。

8. 你的密钥,以及包在它外面的每一层
Alkanex 替你签名,因为一键成交本身就是这个产品的全部意义。这让"我们怎么保管你的密钥"成为整个系统里最重要的一个工程决定,我们也确实是这么对待它的。
你的助记词,在我们保存数据的任何地方都不以明文存在。数据库里没有,日志里没有,备份里也没有。它用一把专属于你钱包的密钥加密,而这把密钥本身又被托管密钥服务里的主密钥封起来,用的是云端静态数据加密的同一套信封模式。备份写入一次性写入的存储,事后无法修改,我们自己也改不了。
在这之上,你还可以给自己的钱加一道 PIN 和 2FA。两个都是可选的,两个都值得打开。一旦打开,把资金转出就需要一件只在你身上、不在别处的东西,光是拿到一个会话,一聪也动不了。
而且你的钱包是真正属于你的。你随时可以导出助记词,导入到任何地方,把一切都带走。不用开工单,不用等待期,不需要任何人批准。

9. 买入的同时,顺手挖 DIESEL
DIESEL 不是买出来的,是交易铸出来的。也就是说,你本来就要付钱发出去的每一条比特币交易,都是一次被你白白放掉的铸造机会。
所以我们替你拿。你通过 Alkanex 买入时,DIESEL 的铸造就搭在承载你 swap 的那同一条交易上。同一条交易,还是你本来就要付的那笔手续费,没有额外步骤,没有第二个按钮,什么都不用勾选。
而且它铸给你的钱包。不是我们的。
你是来买代币的,走的时候手里除了代币,还多了 DIESEL。

10. 顺带附上的东西
卖出时自选出金形式,原生 BTC 或 frBTC。手续费档位设一次就不用再管。实时代币卡片,含价格、流动性、持有人、路径和图表。带真实成本基准和盈亏的持仓。提现到任意比特币地址。机器人和文档全部中英双语。
接下来,就从这周开始
挡在大多数人和 Alkanes 之间的,从来不是交易本身,而是"怎么先把钱弄到比特币上"。如果你的资金在别的链上,这条路长到足以让很多人干脆没走完。
这周我们要做的就是把这条路拿掉:从任意链直接跨到 Alkanex,你拿着手上现有的资产直接进来开始交易。周一正式公布。
紧跟其后:pizza.fun 集成。直接在机器人里交易 pizza.fun 的新盘,两下点击,上面讲的这一整套已经在底下跑着了。新盘正是最讲速度的场合,而这台机器就是为那一刻造的。
为什么这些重要
上面这些工作,全都是看不见的。没有人打开一个 Telegram 机器人是为了欣赏一张锁表。
但它们决定了一笔交易是成交还是悄无声息地死掉,决定了一笔手续费是花出去了还是浪费掉了,决定了"这次能用"和"每次都能用"之间的差别。比特币在 UTXO 这一层不原谅任何粗糙,而每一条捷径,最后都是用某个人的真钱买的单。
我们不想把比特币伪装成它不是的东西。我们只是把 UTXO 的活干完了,这样你永远不必再干。
文档:alkanex.app/docs
Read this article in English: What it takes to make Bitcoin DeFi feel simple