您好,欢迎您来到林间号!
官网首页 小额贷款 购车贷款 购房贷款 抵押贷款 贷款平台 贷款知识 手机租机

林间号 > 区块链 > 智能合约开发工具,智能合约开发教程

智能合约开发工具,智能合约开发教程

区块链 岑岑 本站原创

本文是关于Scroll zkEVM的技术介绍,针对的是想尝试这种网络的智能合约开发者。

在本文中,我们将:

1.了解Scroll zkEVM以及如何开始使用其Alpha测试网络。

2.使用Foundry搭建开发环境,编写智能合约,根据伪随机数生成函数在Alpha测试网上分发ETH。

3.调整智能合约,以满足Alpha测试网络所需的确切规格。

4.使用Solidity脚本部署我们的智能合同。

5.直接从Foundry的命令行验证我们在Alpha测试网络上的智能合同。

通过阅读本文,您将了解如何使用Foundry将您的智能合约部署到Scroll的Alpha测试网络。

什么是Scroll zkEVM?

Scroll zkEVM是即将推出的第二层区块链解决方案,专门设计为提高以太坊可伸缩性的工具。

Scroll与同类平台(如Polygon zkEVM)的区别在于,它使用零知识证明(ZK证明),通过将大量交易捆绑在一起,一次性写入以太坊,与在以太坊中单独处理每笔交易相比,交易成本显著降低。

像Scroll一样,zkEVM最棒的一点是,智能合约开发者可以在更便宜、更具扩展性的解决方案上部署EVM兼容的智能合约,而无需了解底层的ZK技术。

先决条件确保你的钱包里有一些现金。是的,我知道格利过时了,但现在你需要它。对区块链有一个基本的了解,有一些扎实的经验。如果您以前没有使用过Foundry,我建议您查看我为一个研讨会创建的Github仓库中的自述文件。不需要看完整个视频;如果您以前从未使用过Foundry,只需快速浏览一下自述文件。第一件事:桥接它!在不涉及太多ZK特有内容的情况下,请了解卷轴网上的ETH对应以太坊主网上的ETH。镜像意味着Scroll团队已经在Scroll网络(目前是Alpha测试网络)和相应的ETH网络(目前是Goerli测试网络)上部署了桥接智能合约。

因此,为了获得一些ETH来支付Alpha测试网络上的天然气,您需要将一些Goerli ETH存入Goerli上的桥梁合同中。

镜像也可以反过来使用。

首先:

1.进入Scroll的UI界面,可以和桥契约进行交互。

2.将Metamask钱包连接到网页。

3.确保你是在向卷轴网络发送ETH,而不是相反。按照UI(真的很直观)确认桥。

确认后,您可能需要等待30-45分钟才能在Alpha测试网络上接收ETH。所以你需要耐心等待一段时间。

一旦你在Alpha测试网络上有了一些ETH,你就可以开始了!

初始化一个Foundry项目Foundry是最新的智能合约开发框架之一,越来越流行。

要安装Foundry,请遵循下面的命令或查看Foundry-book。

运行此命令下载foundryup。

curl-L https://foundry . paradigm . XYZ | bash

然后通过运行以下命令重新启动终端并安装Foundry:

foundryup

安装好一切后,在新目录下打开一个新的终端。您可以使用以下命令初始化新的Foundry项目:

伪造初始化

一些预防措施:

默认情况下,所有智能合同都在目录中创建。这个命令可以将新的包作为git子模块安装在目录中。Forge install lib默认情况下,所有的测试契约都是在目录中定义的,通常都有Test.sol后缀,也就是说一个名为Hello.sol的契约文件会有一个Hello.t.sol文件。您可以使用以下命令执行所有测试文件:forge test。您可以通过配置foundry.toml文件来控制Foundry的行为。我还写了一个要点,列出了默认值。铸造厂.该目录包含Foundry项目的所有部署和可执行脚本。每当脚本对代码进行任何更改时,它都可以通过以下方式编译所有智能合约:

锻造建造

操作码和字节码:在编写智能合约本身之前,让我们先了解一些概念,这对理解全局很有帮助。

对于那些不知道的人,EVM(以太坊虚拟机)不执行Solidity或任何其他智能合约开发语言。EVM甚至不知道这些语言的存在,也不在乎。这同样适用于Scroll zkEVM。

实际发生的是,任何智能合约代码都会被分解成一个EVM的可执行指令集,也就是字节码,这就是EVM实际执行的内容。

好的,但是什么是操作码,为什么我们关心它们?还记得我说过字节码是一个“指令集”吗?

操作码是一条指令,它与其他操作码一起构成任何智能契约的字节码。作为一名区块链开发人员,opcode是您必须处理的最低计算级别。智能契约语言是建立在这些操作码基础上的抽象。

例如,如果你在Solidity中使用它,你调用操作码。EVM支持的完整操作代码可以在以太坊基金会的网站上找到(不要和卷轴的zkEVM混淆)。

让我通过一个例子来清楚地解释这整个概念的含义。看看这个简单直观的智能合同:

只是一个返回两个数之和的函数。对应的操作码指令会是什么样子?你可以看看我做的这个要点。你也可以在Etherscan上查看这个合同,验证字节码和操作码。

这部分可能看起来像是一个不受欢迎的弯路,但是相信我,在下一章会变得更加清晰。

最后,让我们把这件事做完。输入目录并创建一个新文件。

将以下代码粘贴到文件中:

这是一个简单直观的智能合约。让我们快速看一下代码:

1.我们希望每个地址只能提取0.5 ETH一次;此映射用于跟踪所有成功提取ETH的地址。已经撤回

2.这个函数是一个简单的可支付函数,它允许我们的合同接收ETH。存款

3.这个函数是所有事情发生的地方。撤退

让我们更详细地研究一下这个函数:取款。

前两个要求在函数的开头使用语句,以确保每个地址只能被提取一次,并且在契约中有足够的ETH用于交易。这个变量是由一些实时值生成的伪随机数。我们稍后将更详细地研究它们。RandomNumber这个函数接受它接收的所有参数,并将它们连接成一个字节字符串。这个函数将为它接收到的任何输入生成一个Keccak-256散列。我们对该函数输出的任何内容取模2,以检查生成的哈希值是否一致。Keccak256接下来,如果哈希值是偶数,我们将支付ETH并更新映射。要编译智能合约,请在终端中运行以下命令:

锻造

专业提示#1:是比较新的操作码,取代了旧的操作码,只在Solidity 0 . 8 . 18及以上版本支持。确保相应地配置了实度版本。

关于我们准则的问题。哦,有很多要解释的!

这段代码远未用于生产环境,但让我们先讨论一个更基本的问题。

回想一下,我链接了一个EVM支持的操作码列表。遗憾的是,截至目前,Scroll的zkEVM并不支持所有这些操作码。它支持其中的大多数,但是如果您正在为zkEVM(任何zkEVM)开发一个智能契约,您必须理解网络和EVM在操作码支持方面的差异。

请重新检查代码,看看我们用来生成随机数的值。让我们看看智能合同的哪些部分不常用:

因此,实际上,当我们连接三个值来获得我们的随机数时,我们在EVM上具有伪随机行为。然而,它们要么很少工作,要么返回一个固定的值,这使得它们对我们的目的毫无用处。

但说实话,即使Scroll支持所有这些操作码,它仍然不是一个适合生产的契约。没有一个严肃的智能契约依赖于将块值散列在一起来生成随机数。要部署利用随机性的智能合约,请查看Chainlink的VRF服务。

调整智能合同

由于Chainlink不支持滚动,我们将退回到伪随机性。

这一次,我们将在两个方面稍微改变一下函数:

1.现在,当调用提取函数时,我们允许用户传入一个参数。我们将使用此参数作为的哈希的一部分,这样用户就可以对生成的哈希有所控制。随机数

2.我们用前一个块的块散列和当前块的时间戳替换另外两个值。它们不是随机性的好来源,但目前,这是我所知道的最好的解决方案。如果你有更好的解决方法,请随时告诉我。

部署和验证我们的智能合约我们需要向Foundry传递一些值来部署我们的智能合约。我们可以在部署契约时直接在命令行上进行,但是在dotenv文件中进行更方便。在项目目录中创建新文件。

我们需要向env文件传递两个值:

1.RPC _ URL: Foundry需要一个RPC URL来连接到Alpha测试网络。我们可以从Scroll的文档中得到Alpha测试网的公共RPC URL。

2.PRIVATE_KEY:我们需要一个私钥和Alpha测试网络上的一些ETH钱包来签署交易。您的env文件应该如下所示:

RPC _ URL = https://alpha-RPC . scroll . io/L2

PRIVATE _ KEY = 1 DH 12j 1 xxxxxxxxxxxxx h1 qdfjnma 91k

保存您的env文件。运行以下命令将这些变量加载到终端中:

来源。包封/包围(动词envelop的简写)

现在我们已经安全地设置了所有敏感信息,让我们编写一个脚本来部署我们的契约。也可以直接从命令行使用命令进行部署,但我认为脚本更优雅。

在目录中创建一个文件。在该文件中,粘贴以下代码:

让我们看看这里发生了什么:

1.在前两行中,我们从forge标准库和我们的智能契约中导入了脚本工具。

2.forge-std库为我们提供了使用有价值的作弊代码的接口。函数可以用来访问env文件中的私钥。

3.startBroadcast和stopBroadcast之间的任何事务都可以在链上发送。在我们的例子中,我们需要创建一个新的智能契约实例。

保存脚本文件。现在我们准备部署。在终端中运行以下命令:

forgescriptscript/scroll tutorial . s . sol:MyScript & # 8211;RPC-URL $ RPC _ URL & # 8211;广播& # 8211;传统vvvv

专业技巧2: Foundry允许我们通过使用“-v”标志来配置命令行的详细程度。我通常喜欢使用最大冗余。你可以在这里了解更多信息。

专业提示#3:对于像Scroll和zkSync这样的zkEVM,因为它们通常不支持EIP-1559,所以你可能需要通过“& # 8211;遗留问题”签订调遣合同。

Scroll的文档提供了一个Blockscout资源管理器的API URL,可以用来验证我们的合同。在终端中运行以下命令来验证您的合同:

forgeverify-contract & lt;合同地址& gtsrc/scroll tutorial . sol:Dispenser & # 8211;chain-id 534353 & # 8211;verifier-URL https://block scout . scroll . io/API/& # 8211;verifierblockscout

注意:Blockscout API似乎有问题,Scroll文档指出其行为不一致。我无法通过命令行验证我的合同,您可能会遇到同样的问题。不过,你可以通过Blockscout的用户界面进行验证。

一旦您的合同得到验证,您就可以从Blockscout的用户界面与它进行交互。

结论在本文中,我们将讨论Scroll zkEVM,以及作为智能合约开发人员,如何以最少的配置在该网络上部署智能合约。Scroll主网的发布即将到来,现在是开始使用这项激动人心的新技术的最佳时机。

本网站声明:网站内容来源于网络。如有侵权,请联系我们,我们会及时处理。

温馨提示:注:内容来源均采集于互联网,不要轻信任何,后果自负,本站不承担任何责任。若本站收录的信息无意侵犯了贵司版权,请给我们来信,我们会及时处理和回复。

原文地址"智能合约开发工具,智能合约开发教程":http://www.ljycsb.cn/qukuailian/212289.html

微信扫描二维码投放广告
▲长按图片识别二维码