TON幕后:部署智能合约的经验教训,第一部分
在最近的美国证券交易委员会纠纷新闻中,关于几周前的Telegram开放式网络竞赛的消息,可能鲜为人知。这是一项里程碑事件,它使得原本微不足道的使用Fift(TON的通用编程语言,由于其低级别的方法与常用语言大相径庭)编写的TON开发者社区发生了转变。
此次竞赛吸引了新开发者,增强了围绕新平台社区的构建,并通过提供智能合约的示例以及它们在TON平台的部署方式来解决现有的关于智能合约文档缺乏的问题。我的团队,Button Wallet,和我也参与了其中,并对TON竞赛期间及之后发生的一切进行了总结。
缺少文档
FunC —— TON编写智能合约的另一种语言是FunC,这是一种类似于C的高级语言,具有函数和变量,比通用的Fift更容易阅读和编写。类似的比较可以是将C#与CIL进行对比。然而,在竞赛之前,关于FunC的文档几乎不存在。这成了一个难题,因为TON竞赛的大部分任务都需要参赛者编写智能合约。
FunC由于缺少使用FunC在TON上编写的文档,竞赛参与者需要分析和学习现有的示例,这些示例已经被上传到一个小的GitHub存储库和TON测试网站上,还有一些理论细节。尽管就整体而言,这不是一个困难的任务,但仅仅基于示例来理解一种没有其他东西的语言的基本需求可能具有挑战性。然而,大多数参赛者在几天后就能开始自由地用FunC编写代码了。
基础 —— 使用FunC编写智能合约时,我们需要了解如何部署和编译智能合约,以及如何使用参数调用函数。在此语言基本方面几乎没有详细的资料——除了没有展示完整步骤的示例——这在讽刺的成分中几乎可以笑出来。TON的简短指南对参加竞赛的人非常有帮助,但它只介绍了如何使用TON编写智能合约,但却方便地省略了示例或关于在智能合约上部署和运行函数调用的详细信息的例子。最终,每个人都设法了解了所有这些,但这花费了大量时间和精力。
基础竞赛任务
在总共五项任务中,我想强调的是两项:异步支付通道和同步支付通道。但首先,什么是支付通道呢?
支付通道 是在链外(即在区块链之外)发送交易的方式,以使其更快、更便宜、更定制化。用户在区块链上有自己的账户,可以使用扣除的金额之间互相发送交易。为此,一个特殊的智能合约存储着双方在支付通道开启期间的存款。提取资金需要包含特定数据的智能合约,稍后我们将讨论这一点。
支付通道
为了开启支付通道,需要将资金从双方存入智能合约。

甲方向乙方发送一笔交易,将支付通道状态从(a, b)更改为一个新状态
如果支付通道是开启的,双方之间可以以每秒超过10万次交易的速度发送交易。重要的是要理解,这一切都是在链外发生的,并且各方在某一点上需要达成协议,从智能合约中提取资金。

通过A和B的同步支付通道,从A到B的链外交易
假设双方可能会试图不公平地从池中提取所有资金。因此,每一方都需要证明拟提取的金额属于他们。为了证明这一点,每一方都需要发送自己的签名,该签名正确地证明了状态(金额A、金额B和其他一些信息)。
同步支付通道的编号不会改变,除非满足特定条件,例如接收方B的确认和签名。因此,甲方不能连续向乙方发送多笔交易,因为每个新的状态都需要双方签名。
当向乙方发送交易时,甲方需要创建一个将改变A和B的金额的状态,使用自己的私钥对该状态进行签名,然后向B发送新的状态和签名。乙方然后对该状态进行签名,将其签名发送回甲方, thereby confirming the transaction status.甲方必须等待B创建新状态后,才能再次向B发送交易。因此,它被称为同步通道。

通过异步支付通道从甲方到乙方进行的链外交易
在异步支付通道中,每一方都有自己的状态组。每个状态由甲方从乙方收到的金额、甲方发送给乙方的交易数量、乙方发送给甲方的金额以及乙方发送给甲方的交易数量组成。与同步支付通道不同,A和B无需互相等待确认,只需发送签名的状态。
异步支付通道两个通道最困难的部分是提取过程。智能合约需要检查各方是否提供了正确的数据,然后资金才能被提取。我们需要检查状态签名,并确保该状态是最新的。如果各方之间存在冲突,智能合约需要根据最新状态来解决它。
必须防止向不同的支付通道发送相同的数据,以及当一方没有提供任何信息时的解决方案。所有这一切都必须用FunC编写,并在彻底测试后才能确保安全。
解决方案和竞争对手
根据竞赛的官方渠道,共有68个提交。
大多数提交是多签名钱包和域名系统(或DNS)解析器。然而,有几项提交是针对支付通道的。编写支付通道是比赛中最复杂的项目,因此能够提供这类解决方案的几个强队(如363、375、381)比其他队伍更加突出。
接下来是什么?
目前,大约有10到20个团队具备足够的技能和知识来开始构建TON的基础设施,他们可能会将大多数成功的以太坊解决方案转移到TON上。TON竞赛及其20万美元奖金池极大地推动了能够使用该平台工作的团队的规模,为他们提供了亲身体验的机会。现在,参与团队都准备在自己的TON上构建自己的项目或初创企业。
Button Wallet团队的关键收获
作为早期TON采用者和Telegram的爱好者,我的团队和我决定参加TON竞赛。我们有一支由八人组成的大型团队。对于我们的解决方案,我们决定构建同步和异步支付通道。虽然我们在比赛中犯了一些错误,但我们设法创建了一个包含所有包装(允许存款、提取和通过命令行界面进行交易转账)的同步支付通道。因此,我们不仅仅创建了一个智能合约,还为其创建了大量的包装,使工作于TON更加容易。我们在完成同步通道后,利用我们的Plasma开发经验构建了另一个实现异步链外支付的智能合约。然而,我们未能在此之前编写所有的包装。
我们非常喜欢所有的任务,希望有更多的时间来实现所有这些。尽管如此,我们赢得了最佳同步支付通道的第一名,以及在最佳异步支付通道中排名第三。
这里表达的观点、想法和意见仅属于作者,并不一定反映或代表Cointelegraph的观点和意见。
尼克·科兹洛夫 是Button Wallet的CTO,同时也是一位软件开发者和研究人员,也是TON竞赛的获奖者。
尼克·科兹洛夫