我在做一款传统互联网游戏。游戏本身已经能玩,玩家来自各地,付钱时手里常见的是 USDT,不是某一个国家的银行卡。我要接的是链上支付:充进去能在游戏里花,不想玩了还能提出来。
我当时觉得这件事不复杂:生成地址,玩家转进来,我再转出去。地址能生成,第一笔测试币也能看见。真的有玩家进来之后,棘手的地方才一件一件露出来。后来是 Trustivon 把这些接住了。游戏服没有重写,支付很快接上,接上之后也稳定跑着。下面是我自己先撞上的问题。
## 自己做,卡在四件事上
**账按链拆开。** 以太坊上的 USDT 和 BNB Chain 上的 USDT,在玩家看来是同一种钱,在我的表里却是两本账。有人从一条链充进来,到另一边查余额,以为钱丢了。我解释了半天网络,对方只记住一件事:这游戏里的钱不好找。
**到账不敢信。** 交易还在内存池里,我就给玩家加上了余额,人已经进游戏花钱了。后来那笔交易没能坐实。我只好手工扣回去,再写说明。这种说明写过两次,我就不敢再让客服这么干。
**出金对不上。** 玩家账面有钱,热钱包里那条链的币却不够。提现点下去,链上没有交易。另一头也麻烦:币在充值地址上,转走时每个地址都要先有一点 ETH、BNB 或 SOL 当手续费。地址一多,我每天在给地址补手续费,不是在改玩法。
**局内扣款都在等区块。** 买一次道具、进一次局,就扣一笔。如果每一笔都等链上确认,游戏会停在那里。我试过先扣自己的数据库、晚上再归集,结果数据库和链上又是两套数。对账变成了每晚的额外工作。
## 网上查到的,都差一截
我停下来看别人怎么做,大致是三类。
一类只帮你保管密钥、帮你签名。入账、出金、玩家余额还是要自己写。
一类是银行卡支付。覆盖不了这些拿稳定币的玩家。
还有一类是把玩家送去交易所。不适合嵌在一款游戏里。
我要的不是再接一个钱包。我要充值、在游戏里花、再提现,仍然像游戏里的一笔余额。
## 对上方案之后
后来找到 Trustivon,是因为它描述的麻烦和我清单上几乎同一行。我没有先看架构图,而是拿自己的四件事去对。
**同一套余额。** 充值地址按链的类型给,不是每条链各发一个让玩家挑。以太坊和 BNB Chain 共用一个地址,Solana 单独一个。同名的 USDT、USDC 进同一本余额。从哪条链充进来,在游戏里花的是同一笔;要离开时,再选一条链提出去。
**确认之后才入账。** 转账会先被看到,确认之后才加上余额。玩家不会拿一笔还没坐实的钱进游戏。我少掉的是“先给钱、再道歉”。
**提现先冻结,再出去。** 金额大的时候可以先人工看一眼。那条链上的币暂时不够时,不会装作已经转出,而是告诉玩家眼下提不了,余额留在账上。客服不用再解释一笔“显示成功、链上没有”的提现。
**游戏里的扣款不上链。** 买道具、进一局、抽一次,扣的是这本余额,马上完成。链上只发生在充进来和提出去。我不用再在手感和对账里二选一。
**手续费集中付。** 代币转账不必每个充值地址各备一份 ETH、BNB 或 SOL。费用可以集中付,地址领到就能用。我之前花在补手续费上的时间,现在用来改玩法。
**流水能对上。** 每一笔余额变动都能看到变之前和变之后。玩家来问“我那笔钱呢”,我按人和时间就能指给他看,不用把链上哈希和游戏订单来回翻译。
资金也不是放在一把钥匙上。没有哪一方能单独把钱转走,转出之前还会先核对。我不需要向玩家解释一套密码学,只需要说清楚:不是某个人手里有一把能转走全部资金的钥匙。
## 我现在怎么接
充值和提现让玩家在 Trustivon 的用户中心完成,钱包或邮箱都能登录。游戏里只在该扣钱的时候扣余额,界面还是我的。进出金从游戏服务器里拿了出去,所以接入没有拖成一次重做。
接上之后,账不再按链拆开,未确认的转账不会先入账,提现对不上时余额还在,局内扣款也不再等区块。这四件事不再每天找我,支付就这么稳定跑着。
如果要把充值入口也放进游戏里,可以再嵌。我当时没那么急,先把链上支付接稳。
## 它不管的事
要收银行卡,要做身份审核,还是你自己的事,这里没有这条路。以太坊、BNB Chain、Solana 以外的链,我也不能假设它已经支持。
我当时要的就是玩家用稳定币进出,加上游戏里按余额扣款。对着这个范围,它把我列出来的那些问题接住了。