本帖最后由 riyad 于 2025-3-8 23:49 编辑 , l5 m% f1 u3 c
, q d) G, D5 A! L" j( U
现在,我们已经将合约部署到了主网上,可以开始验证合约代码了。正如我们在上一课中提到的,确保合约用户清楚地知道他们的资金在发送到合约地址后会发生什么,这一点非常重要。
, o$ ?. L& F# f- b1 i
因此,在将合约发送到主网后,你可以在浏览器中看到,代码没有经过验证。但在经过验证的合约中,任何想了解合约逻辑的人都可以轻松读取。我们该怎么做呢?
: E' b! X* c3 C9 _+ p6 S1 Z 上传到 TON 校验机最近,TON 收到了一份非常重要的工具, TON Verifier. 在这里,您可以上传源代码,然后对其进行编译,对代码Cell进行格式化,其哈希值就成了代码未被更改的证明。 8 Y5 c y6 Z' \" o1 Y ^
随后,这些代码和哈希Cell将以去中心化的方式存储,因此任何浏览器都可以检索源代码,并确保代码在此之前没有更改。这样,就不需要以某种方式保证代码的一致性。它没有集中机构--它是一个由许多人控制的注册表,他们可以确认你的代码没有改变。 现在,我们要连接我们的钱包,在这里上传我们的代码,然后部署交易,将其去中心化存储在 IPFS 或其他底层使用的服务中。在接下来的几节课中,我们将使用 Tonkeeper 钱包,这样你就可以熟悉更多的钱包。 目前 TON Verifier 正在主网上运行,因此我们将在实际中对其进行测试。通常只在部署最终合约时进行一次测试。您不必担心为此花钱,因为这与购买 SSL 证书类似。实际上,您花钱是为了向链提供您的合约数据,以便浏览器可以检索您的代码。 让我们开始吧。我用主网 Tonkeeper 钱包扫描二维码,授权 TON Verifier 请求我进行交易。现在,让我们复制已部署到主网的合约地址,并将其粘贴到 TON Verifier 的搜索框中。 & n2 `1 n: p7 c e6 i3 p
正如我们所看到的,很明显,合约没有通过验证。现在,我们需要向 TON Verifier 提供合约的源代码(在我们的例子中为.func)。为此,我们打开项目文件夹,找到 "contracts "子文件夹并选择 main.fc 文件。然后从 "imports "子文件夹上传 stdlib.fc,否则编译时会出错。最后,在网页上的 stdlib.fc 行中指定目录(本例中为 "imports"),然后按 "编译 "键。
7 m! | d' d0 E. Y6 k$ B
如果成功,您将收到一条信息: "太好了!编译输出哈希值与此链上合约匹配"。点击发布。然后,Tonkeeper 会要求确认交易。正如我所说,这将花费我一点钱,0.5 吨。确认后,交易需要一段时间才能上链。最后,当我们的验证发布后,我们可以点击查看验证合同,查看我们的验证源代码。现在,任何想与我们的合约互动的人都可以看到源代码了。在这里,TON Verifier 还允许我们运行 getter 方法并获取余额。 现在,在浏览器中,我们的源代码被标记为已验证。将代码分发到我之前提到的去中心化注册表需要几分钟时间。然后,任何用户都可以通过浏览器阅读我们的代码。我们可以用另一个浏览器重新检查,例如 TON API. - L% Y+ D9 }2 h1 V! y! A3 P
太好了!我们现在已经验证了合约,可以创建一个与合约交互的前端部分了。我们将合约部署到主网,只是为了展示它在实际项目中是如何工作的。在下一章中,我们还应该将合约部署到测试网,因为我们将进行大量测试,并为合约创建一个前端。
8 z6 S1 \& A2 [( I! _ 部署到测试网络正如上一课所述,部署到测试网络非常简单。这条命令会有所帮助: - yarn blueprint run
8 u4 R5 q, W: D3 F
复制代码它会询问我想部署到哪个网络。我选择了测试网。然后选择钱包类型 - TON Connect compatible mobile wallet, 因为我们要与 TonConnect 协同工作,用钱包中的交易授权前端操作。 9 H0 L: S+ [* M+ R
在这次部署中,我也将使用 Tonkeeper。通过二维码,我授权 Tonkeeper 与我的本地项目协同工作。确认交易。然后,合约部署的交易被发送,我确认,然后......太棒了!合约部署完成。 ; M- ]4 q" }5 }" ]3 Y- K
我们还需要做一件事。在接下来的章节中,我们将为合约创建一个前端。我们不希望花费真正的主网资金来测试我们将要使用的所有交互。因此,我们需要我们的合约在测试网地址下运行。
+ b' R |8 W% M) \" M: v: ^0 q1 H
现在,让我们更改连接到 Tonkeeper 应用程序的测试钱包的最新地址和所有者地址: - const myContract = MainContract. createFromConfig(% T8 |7 J6 ^8 R b! J
- {
% X7 b2 c9 d+ f. ^# S& e9 A6 \ - number: 0, //initial value of the counter
3 S& C. t% D9 C3 M# v# \& k- ~ - address: address ("KQBMjM3cGuQ315MLsdqw/wEat26aG1a2b0DFHMIschNfp5R-K"),3 [/ {3 ?1 u5 S
- owner address: address
; B7 P6 v; A" t - "KQBM;M3cGuQ31SMLsdqwwEat26aG1a2b0DFHMIScnNfp5R-K"+ e7 o- K% j2 q# Q* I
- )," @7 A- Q* j8 o9 {* h
- },
复制代码基本上,我要改变初始状态,因此部署地址必须不同。当然,它也会在测试网上。现在,我将使用这些新地址把合约部署到 testnet 上。把这看作是为下一章创建前端做准备。 5 e% \6 c, f) m& } e4 A9 j8 d2 k
我们重复上面的命令: - yarn blueprint run( U/ j( \7 F" Z( r2 A! C) r9 l/ w
复制代码我选择 "testnet",然后选择 "Tonhub wallet",就像其他部署一样。现在,我扫描二维码,打开 TonHub 的测试网。在那里,我确认交易,等待我的合约部署到测试网上。是的,已经部署好了,我们可以在浏览器中找到它的地址。
: e* S6 y8 z5 a8 k6 w9 z1 o: L
我们不需要在这里验证它;我们将主要用它来进行测试。保存你在浏览器中看到的合约地址--在下一课构建前端时会用到它。 我对接下来要做的事情感到非常兴奋。再见!
" p) v4 `3 F$ a0 K5 @; {, q
9 ~0 j# \- _4 Q8 C |