如何用 Elixir 上进行 TON 开发?
原文地址 https://www.badykov.com/elixir/blockchain/ton/
新的区块链项目像雨后春笋一样涌现。所以在加密货币领域,你必须要小心,因为很容易被骗。但在这篇文章中,我将分享对一个区块链的一些想法,在我看来,这个行业有一些可能性和潜在的未来。
在我看来,区块链项目可以分为三类:
- I. 诈骗项目和山寨币
如果不算中心化交易所,区块链行业的监管不是很好(也许完全不受监管?)。它有其优势和劣势。最明显的优势是,只要你把你的资产存放在一个非托管钱包里,没有人可以限制你对你的资产的访问。
而最明显的缺点之一是任何人都可以创建一个区块链或一个基于现有区块链的项目,从投资者那里收集资金,然后带着收集的钱消失。这种情况在几年前更为频繁,当时很多项目在做 ICO 的时候没有履行对投资者的承诺。
- II. 对现有区块链进行分叉 / 重塑,做一些调整
有很多项目只是分叉了已经流行的区块链,如以太坊或比特币,添加了一些新的功能或 / 和修复了一些问题。
在最受欢迎的加密货币前 20 名中,有几个例子:
币安智能链是币安交易所对以太坊的一个分叉。它有一个不同的共识算法,费用较低,区块时间较短。 Polygon 是以太坊的另一个分叉。它将自己定位为以太坊的第二层解决方案。 狗狗币是比特币的一个分叉。最初,它纯粹是个笑话。但现在看来,它被认真对待了,甚至 Elon·Mask 也在通过提升其价格来赚钱。
这些项目是次要的。我不确定它们在长期内会发生什么,但有多个以太坊第二层解决方案的例子已经不复存在了。
- III. 创新的新项目
这一类包括从零开始开发的创新项目。在我看来,TON(开放网络)就属于这个类别。
0x01 TON 简介
TON 是一个区块链,最初由 Telegram 团队开发。由于美国证券交易委员会的一些问题,现在的开发是由 TON 基金会完成的。
TON 将自己定位为第三代区块链(比特币是第一代,而以太坊是第二代)。当然,TON 从以太坊区块链中汲取了灵感。在我看来,它是以太坊的改进版。TON 在可扩展性(tps)、区块时间和性能(交易复杂性)方面表现得更好。以下列举了在 TON 的博客中被提及的与以太坊相比之下的优势:
智能合约必须为其存储支付租金
在以太坊,智能合约的存储成本只需支付一次,但为了在未来几年内保留这些数据,矿工 / 验证者将不得不不断支付基础设施费用 ( infrastructure costs )。因为链是永恒的。
在 Ton,一个智能合约将不得不为其存储支付费用。否则,它将被删除。
智能合约之间的调用是异步的,失去了原子性
在以太坊,智能合约之间的所有调用都必须发生在同一个交易中。在 Ton,你可以有成千上万的调用,因为调用是异步的,它们不需要在一个交易中执行。
智能合约不是不可改变的
在以太坊中,智能合约是不可变的,所以 Solidity 的开发者想出了代理合约这样的变通方法来缓解这个问题。
在 TON 区块链的基础上,还推出了几个有趣的项目:
TON 官网和 TON DNS -- 类似于 TOR TON 存储 -- 数据存储解决方案
TON 区块链最明显的卖点是它与 Telegram 的整合。由于该项目最初是由 Telegram 团队建立的,似乎他们与该项目仍有某种联系。Telegram 团队最近在 TON 区块链上推出了一个拍卖平台(Fragment)。
0x02 TON SDK Elixir
由于 TON 区块链相对较新,所以没有使用大多数编程语言的工具。似乎 TON 上主要的 SDK 是用 javascript 编写的 tonweb ,和用 typecript 编写的 ton。
我不得不为 Elixir 创建一个新的库,以便能够在 TON 区块链上工作。我发现的主要问题是,你必须实现相当低级的算法(序列化 / 反序列化),以便能够提交交易。理想情况下,最好能有像比特币的 signrawtransaction 那样的东西,对交易进行签名和序列化。其输出可用于提交交易。
该库提供以下功能:
从一个助记符生成一个密钥对 解析一个地址 序列化一个交易
它没有一个 HTTP 客户端。在我看来,这应该是很容易实现的。
我们来看看一些例子:
2.1 从助记符中创建密钥对 Permalink
助记符是由 24 个单词组成的秘密组合,用于推导出私人和公共密钥。推导出的公钥用于创建地址;私钥则需要用于签署交易。
Ton.mnemonic_to_keypair("rail sound peasant garment bounce trigger true abuse arctic gravity ribbon ocean absurd okay blue remove neck cash reflect sleep hen portion gossip arrow")
%Ton.KeyPair{
secret_key: <<149, 222, 63, 223, 23, 72, 240, 224, 233, 177, 155, 16, 101,229, 182, 172, 23, 131, 54, 43, 195, 139, 217, 194, 100, 19, 252, 105, 68, 30, 96, 95, 73, 245, 11, 185, 76, 95, 180, 99, 83, 74, 157, 13, 240, 216, 227, 155, 203, 147, 16, 149, 137, 218, 246, 81, 151, 233, 21, 28, 55, 119, 64, 47>>,
public_key: <<73, 245, 11, 185, 76, 95, 180, 99, 83, 74, 157, 13, 240, 216, 227, 155, 203, 147, 16, 149, 137, 218, 246, 81, 151, 233, 21, 28, 55, 119, 64, 47>>
}
2.2 解析一个地址
Ton.parse_address("UQCAIBANQeQX6UHmRgxHGR44oUL7VOQE9v4dxmla23KpjKIj")
{:ok, %Ton.Address{test_only: false, bounceable: false, workchain: 0, hash: <<128, 32, 16, 13, 65, 228, 23, 233, 65, 230, 70, 12, 71, 25, 30, 56, 161, 66, 251, 84, 228, 4, 246, 254, 29, 198, 105, 90, 219, 114, 169, 140>>}}
如果 bounceable 为真,携带原始值的剩余部分(减去所有信息传输和运行成本)的信息将被 "弹回"。
bounceable=false 意味着接收方是一个钱包,bounceable=true 是一个自定义的智能合约。
2.3 序列化一个交易
keypair = Ton.mnemonic_to_keypair("rail sound peasant garment bounce trigger true abuse arctic gravity ribbon ocean absurd okay blue remove neck cash reflect sleep hen portion gossip arrow")
wallet = Ton.create_wallet(keypair.public_key)
{:ok, to_address} = Ton.parse_address("EQAHJQ6gs2NYAXsxsfsucpqhpneZaGP0qCdu9lCEzysMGzst")params = [seqno: 5, bounce: true, secret_key: keypair.secret_key, value: 1, to_address: to_address, timeout: 60]
<<181, 238, 156, 114, 65, 1, 2, 1, 0, 167, 0, 1, 225, 136, 0, 5, 230, 220, 65, 102, 30, 28, 201, _tail::binary>> = Ton.create_transfer_boc(wallet, params)
0x03 结论
该项目已在 GitHub 上发布:
https://github.com/ayrat555/ton
TON 项目和 DoraHacks 平台宣布举办一个虚拟黑客马拉松(hackathon),将于 2023 年 1 月 30 日启动,3 月 31 日结束。我认为这可以成为获得一些 TON 经验的有趣方式:
https://dorahacks.io/zh/hackathon/hack-a-tonx/detail
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。
来源链接

