Scroll Alpha 测试网开发者指南
2023-03-01 02:28
Scroll CN
2023-03-01 02:28
订阅此专栏
收藏此文章


在 Scroll 上开发

    欢迎

    入门

    为什么要在 Scroll 上开发?

    感谢你与我们一起构建开发

开发者快速上手

    获取测试网 ETH

    网络配置

    配置工具

合约部署教程

    使用 Hardhat 部署合约

    使用 Foundry 部署合约

    问题和反馈

Alpha 测试网合约

    Scroll 合约

    协议

生态集成

以太坊和 Alpha 测试网的区别

    EVM 操作码

    State Account

    Block Time

    未来的 EIPs


在 Scroll 上开发


欢迎

欢迎使用 Scroll 开发者文档!

Scroll 是建立在以太坊上的 Layer 2 网络(更准确地说是“zkRollup”)。

如果你有以太坊上开发的经验,那么你的代码、依赖项和工具,可以在 Scroll 上开箱即用。这是因为我们的网络与 EVM 在字节码层面兼容,设计初衷就是让开发者拥有以太坊一样的开发体验。

!刚接触 zkRollup

Scroll 通过链下执行交易获得安全性和速度,并生成交易正确执行的加密证明。此加密证明在 Layer 1 的智能合约中得到验证,确保在 Scroll Layer 2 上执行的所有代码同在以太坊 Layer 1 上执行的一样。更多关于 Scroll 架构的信息

在我们最新的 Alpha 测试网中,Scroll 构建在 Goerli 测试网上。

入门
希望在 Scroll 的 Pre-Alpha 测试网上开发?
  • 关于要点:查看开发者快速上手
  • 在 Scroll 上部署你的第一个智能合约,请阅读我们的合约部署教程
  • 我们还有许多生态项目集成已经部署的合约地址

为什么要在 Scroll 上开发?

> 吞吐量 — Scroll 为以太坊创造了更多的安全区块空间。

ZK Rollups 允许网络容纳更多交易,从而最大限度地减少链上拥堵。Scroll 通过使用零知识证明验证网络状态转换,继承了以太坊的安全性,可以在不影响去中心化的情况下处理更多交易。

> 成本 — Scroll 为用户节省 gas 费用。
在以太坊上,对区块空间的竞争导致每笔交易的成本更高,因为每笔交易都会竞价以包含在下一个区块中。Scroll 利用最近在零知识证明和硬件加速方面取得的突破,极大地增加了安全区块空间并最大限度地降低了用户的交易成本。
> 速度 — Scroll 更快地向用户提供反馈。
合并后,以太坊每 12 秒确认一个区块。Scroll 的区块每 3 秒生成一个,并且为了降低风险操作,交易一旦包含在块中就可以被认为是最终确认的。这为社交和游戏应用程序中的链上交互打开了新的可能性。
> 联盟 — Scroll 建立在以太坊的愿景之上。
Scroll 构建在以太坊的愿景之上。我们的宗旨是共建以太坊,而不是分裂它。去中心化、无需许可、抗审查和归属社区是我们工作和正在构建的路线图的核心。我们秉承开源精神,与以太坊基金会的隐私和扩容探索团队(PSE)密切合作,以支持他们在 zkEVM 上的工作,而 zkEVM 有朝一日可能会成为以太坊的核心。我们还与治理 DAOs 和其他开源协议合作,以确保在部署应用程序的同时,我们也在努力扩大它们的影响——无论是在公共产品、核心基础设施还是下一代零知识用例中.
> 社区 — Scroll 将用户和开发者聚集在一起。
我们知道在主网发布之前开源开发和吸引用户参与的难度所在!但 Scroll 拥有着蓬勃发展的用户和开发者社区,有过 100,000 名渴望在我们的测试网上测试的用户的 Discord 社区,我们很高兴将开发者与提供真实反馈的用户联系在一起。

感谢你与我们一起构建开发
我们正在努力为网络带来更多的集成和支持更多的基础设施,并为我们未来的主网版本感到兴奋。

加入我们不断壮大的开发者社区。您可以在 Discord (https://discord.com/invite/scroll) 上找到我们,加入我们的论坛或在 Twitter (@Scroll_ZKP) 上关注我们的进展。


开发者快速上手


在 Scroll 上,你最喜欢的智能合约开发测试工具都可以正常使用。

由于 Scroll 是字节码层面的 EVM 等效,你只需将你的开发工具指向 Scroll Alpha Testnet RPC Provider。
如果你遇到任何问题,请联系我们的 Discord (https://discord.com/invite/scroll)

获取测试网 ETH
在 Scroll 上构建之前,您需要一些测试代币。查看我们的水龙头页面,在 Goerli 上获得 ETH 测试代币。然后,使用我们的跨链桥将 ETH 测试代币桥接到 Scroll Alpha 测试网(Layer 2)。

如需详细指引,可以从用户指南的设置页面开始。

网络配置
使用下表将您的以太坊工具配置到 Scroll Alpha 测试网。

网络名字
Goerli 测试网
Scroll Alpha 测试网
RPC URL
https://endpoints.omniatech.io/v1/eth/goerli/public
https://alpha-rpc.scroll.io/l2
Chain ID 
5
534353
代币符号
ETH
ETH
区块链浏览器
https://goerli.etherscan.io/
https://blockscout.scroll.io/

配置工具
Hardhat
修改你的 Hardhat 配置文件hardhat.config.ts以指向 Scroll Alpha 测试网公开 RPC。

...


const config: HardhatUserConfig = {
...
networks: {
scrollAlpha: {
url: "https://alpha-rpc.scroll.io/l2" || "",
accounts:
process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [],
},
},
};


...

Foundary
要使用 Scroll Alpha 测试网公共 RPC 进行部署,请运行:
forge create ... --rpc-url=https://alpha-rpc.scroll.io/l2
Remix Web IDE
编译合约后,使用 Remix 进行部署的最简单方法是设置 Metamask,然后选择“Scroll Alpha Testnet”网络。

在 MetaMask 中选择 Scroll AlphaTestnet 作为网络
现在,在“Deploy and Run Transactions”选项卡中,点击“Environment”下拉菜单并选择“Injected Provider - MetaMask”。

在 Remix 中,使用 MetaMask 作为 Network Provider 以访问 Scroll Alpha 测试网
连接你的钱包并选择 Scroll Alpha Testnet。在 Remix 中应该会自动选择帐户,然后你单击“部署”即可。

Truffle
假设你已经设置了 truffle 环境,请到 Truffle 配置文件truffle.js,并确保已经安装了 HDWalletProvider:npm install @truffle/hdwallet-provider@1.4.0

const HDWalletProvider = require("@truffle/hdwallet-provider")
...
module.exports = {
networks: {
scrollAlpha: {
provider: () =>
new HDWalletProvider(process.env.PRIVATE_KEY, "https://alpha-rpc.scroll.io/l2"),
network_id: '*',
},
}
}
Brownie
要添加 Scroll Alpha 测试网,请运行以下命令:
brownie networks add Ethereum scrollAlpha host=https://alpha-rpc.scroll.io/l2 chainid=534353
要将其设置为默认网络,请在项目配置文件中添加以下内容:
networks:
default: scrollAlpha
ether.js
ethers脚本中设置 Scroll Alpha Testnet Provider。
import { ethers } from 'ethers';

const provider = new ethers.providers.JsonRpcProvider(

'https://alpha-rpc.scroll.io/l2'

);
scaffold-eth
要使用 Scaffold-eth 进行部署,你需要将 Hardhat 和 React 设置指向 Scroll Alpha 测试网。

配置 Hardhat
packages/hardhat/hardhat.config.js文件中,你需要添加网络并选择其为默认网络。

...
//
// Select the network you want to deploy to here:
//
const defaultNetwork = "scrollAlpha";
...
module.exports = {
...
networks: {
...
scrollAlpha: {
url: "https://alpha-rpc.scroll.io/l2",
accounts: {
mnemonic: mnemonic(),
},
},
}
...
}
确保为部署的钱包充值了资金!

配置前端
要配置你的前端,你需要添加 Scroll Alpha Testnet 作为网络,然后选择它为默认设置。

添加网络,请修改packages/react-app/src/constants.js.
...
export const NETWORKS = {
...
scrollAlpha: {
name: "scrollAlpha",
color: "#e9d0b8",
chainId: 534353,
rpcUrl: "https://alpha-rpc.scroll.io/l2",
blockExplorer: "https://blockscout.scroll.io",
},
...
}
接下来,修改packages/react-app/src/App.jsx
...
/// 📡 What chain are your contracts deployed to?
const initialNetwork = NETWORKS.scrollAlpha;
...

合约部署教程


我们的 Alpha 测试网允许社区在 Scroll 上部署智能合约。在本教程中,我们将说明如何在 Scroll 测试网上部署合约。这个演示程序仓库说明了如何使用 Hardhat 和Foundry进行合约部署。
注意:在开始部署合约之前,你需要从 Goerli 的水龙头请求测试代币,并使用跨链桥将一些 ETH 从 Goerli 充值到 Scroll Alpha 。

使用 Hardhat 部署合约

1. 如果你还没有安装 nodejs 和 yarn。

2. 克隆仓库并安装依赖项

git clone https://github.com/scroll-tech/scroll-contract-deploy-demo.git
cd scroll-contract-deploy-demo
yarn install

3. 在根目录下,按照示例 .env.example 创建文件.env更改 .env 中的 PRIVATE_KEY 为你自己的帐户私钥

4. 运行 yarn compile 编译合约。

5. 运行 yarn deploy:scrollTestnet 以在 Scroll Alpha Testnet 上部署合约。

6. 运行 yarn test 进行 hardhat 测试。

使用 Foundry 部署合约
1. 克隆仓库

git clone https://github.com/scroll-tech/scroll-contract-deploy-demo.git
cd scroll-contract-deploy-demo
2. 安装 Foundry
curl -L https://foundry.paradigm.xyz | bash
foundryup
3. 运行 forge build 构建项目
4. 使用 Foundry 部署你的合约
forge create --rpc-url https://alpha-rpc.scroll.io/l2 \
--value <lock_amount> \
--constructor-args <unlock_time> \
--private-key <your_private_key> \
--legacy \
contracts/Lock.sol:Lock

- <lock_amount>是合约中要锁定的ETH的金额。尝试将其设置为少量,例如0.0000001ether.

- <unlock_time>是 Unix 时间戳,在这之后锁定在合约中的资金将可以提取。尝试将其设置为将来的某个 Unix 时间戳,例如1696118400(此 Unix 时间戳对应于 2023 年 10 月 1 日)。

例如:
forge create --rpc-url https://alpha-rpc.scroll.io/l2 \
--value 0.00000000002ether \
--constructor-args 1696118400 \
--private-key 0xabc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc1 \
--legacy contracts/Lock.sol:Lock

问题和反馈
感谢参与和开发 Scroll Alpha 测试网。如果遇到任何问题,可以加入我们的 Discord 并在 developers 频道中询问我们。

开发人员说明
1. SELFDESTRUCT 操作码已被禁用,Scroll 中将不支持,因为它计划在之后从 EVM 中删除
2. 目前,我们将 Layer 2 的 Gas 价格设置为与以太坊 Layer1 相同。但是,这些 Gas 价格未来可能会发生变化,根据证明成本进行匹配。我们将尽量努力减少这些更改,主要将在有安全需要的情况,对 ZK 不友好的预编译进行变更。

Alpha 测试网合约


Scroll 合约

Rollup

  • L1 Rollup:

  • 0x3C584eC7f0f2764CC715ac3180Ae9828465E9833

跨链桥
  • L1 Messenger:
  • 0x5260e38080BFe97e6C4925d9209eCc5f964373b6
  • L1 Gateway Router:
  • 0xe5E30E7c24e4dFcb281A682562E53154C15D3332
  • L2 Messenger:


  • 0xb75d7e84517e1504C151B270255B087Fd746D34C
  • L2 Gateway Router:

  • 0x6d79Aa2e4Fbf80CF8543Ad97e294861853fb0649

L2 预部署合约
  • Message Queue:
  • 0x5300000000000000000000000000000000000000

  • Block Container:
0x5300000000000000000000000000000000000001

  • Gas Price Oracle:


  • 0x5300000000000000000000000000000000000002
  • Whitelist:
  • 0x5300000000000000000000000000000000000003
  • WETH L2:
  • 0x5300000000000000000000000000000000000004
  • Transaction Fee Vault:

  • 0x5300000000000000000000000000000000000005

协议
Uniswap V3
  • 前端网页: https://uniswap-v3.scroll.io/
  • 核心合约: 


  • https://guide.scroll.io/developers/alpha-testnet-contracts


生态集成

许多项目已经部署在 Scroll 的 Alpha 测试网上。如果你正在寻找可构建的基础设施或可与之合作的项目,如下这些项目已经上线!
注意:有一些项目可能还没有从我们的 Pre-Alpha 测试网更新至 Alpha 测试网

RPC Providers

  • Unifra(https://unifra.io/)

  • BlockPI(https://blockpi.io/)

Indexers

  • Covalent(https://www.covalenthq.com/)

  • Transpose(https://www.transpose.io/)

Wallets

  • Keystone(https://keyst.one/)

  • BlockWallet(https://blockwallet.io/)

  • Ledger(https://www.ledger.com/)

  • MPC Vault(https://mpcvault.com/)

  • SoulWallet(https://www.soulwallets.me/)

  • Open Block(https://openblock.com/)

  • Unipass(https://unipass.id/)

Identity

  • zCloak(https://zcloak.network/)   

Ecosystem

  • Questbook(https://www.questbook.app/)

Infra

  • Empiric(https://empiric.network/)   

  • Unifra(https://unifra.io/)

Social

  • Lens(https://www.lens.xyz/)

  • Atem(https://www.atem.io/)

Defi

  • Loanshark(https://loanshark.tech/)

Oracle

  • Redstone(https://redstone.finance/)


以太坊和 Alpha 测试网的区别


以太坊主网的 EVM 和 Scroll 修改设计的 zkEVM 之间存在许多技术细节差异。你可以在如下看到现在存在的这些差异。

对于开源贡献者和基础设施建设者,请联系我们的团队以获得更多支持。

对于一般的 Solidity 开发者来说,这些细节不会影响你的开发体验。

EVM 操作码

操作码
Solidity Equivalent

Ethereum

Scroll
BLOCKHASHblock.blockhash输入: 从栈顶开始的blocknumber,有效范围[NUMBER -256, NUMBER-1] 输出: 给定区块的哈希,如果不在有效范围内,返回 0匹配以太坊,但限制输入范围的blocknumberNUMBER -1
COINBASE

block.coinbase

在以太坊 Clique 中,是签名者的以太坊地址返回一个预部署的费用池合约,查看 Alpha 测试网合约
DIFFICULTY/ PREVRANDAOblock.difficultyPoS 后,为前一个区块的 random返回 0
SELFDESTRUCTselfdestruct计划作废,并用 SENDALL 替换在排序器中禁用,未来会采用以太坊的方案

State Account

Additional Fields

我们将在当前StateAccount对象中添加两个字段:PoseidonCodehashCodeSize。‍

type StateAccount struct {
Nonce uint64
Balance *big.Int
Root common.Hash // merkle root of the storage trie
KeccakCodeHash []byte // still the Keccak codehash
// added fields
PoseidonCodeHash []byte // the Poseidon codehash
CodeSize uint64
}

Codehash

与此相关,我们为每个合约字节码维护两种类型的代码哈希:Keccak 哈希和 Poseidon 哈希。

保留 KeccakCodeHash 是为了保持EXTCODEHASH 的兼容性,PoseidonCodeHash用于验证 zkEVM 中加载的字节码的正确性,因为 Poseiden 哈希效率更高。

Code Size
验证时 EXTCODESIZE,将整个合约数据加载到 zkEVM 中是代价很大。相反,我们在合约创建期间将合约大小存储在存储中。这样,我们就不需要加载代码——存储证明足以验证这个操作码。
Block Time

Alpha 测试网的目标是恒定的 3 秒出块时间。这比理想情况下以太坊的 12 秒更短且更一致。

选择 3 秒的出块时间有两个原因
  • 更快、更稳定的出块时间可以带来更快的反馈和更好的用户体验
  • 当我们优化测试网中的 zkEVM 电路时,即使我们保持每个区块或 batch 的较小的 Gas 上限时,我们仍然可以达到比以太坊更高的吞吐量。
未来的 EIPs

我们密切关注所有以太坊采用的新 EIP,并将在合适的时候采用它们。如果你对更多细节感兴趣,请访问我们的社区论坛或 Discord


    添加 Scroller 社区管理员微信进入 Scroll 中文社区

    👇点击阅读原文进入中文看板,查看最新 ETHDenver 活动,体验 Alpha 测试网,阅读往期文章以及最新文档更新!

相关Wiki

【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

Scroll CN
数据请求中
查看更多

推荐专栏

数据请求中
在 App 打开