搭建本地 zksync

操作系统:MAC OS 10.14.x
zksync:https://github.com/matter-labs/zksync,master 分支
commit 899ca93052420c33583755cd2162143f461f36b3

需要注意的是,阅读完整源代码需要查看dev分支,master分支是提供编译后的各种执行程序。在以下安装时,请科学上网。

环境准备 zksync/docs/setup-dev.md

1、安装docker

brew cask install docker

2、安装Node & Yarn

brew install nodejs yarn

3、Axel

brew install axel
axel版本有差异,请采用axel 2.17.X,ubuntu、centos7、8环境,axel2.4、2.5版本均有问题,主要体现在执行:cargo install diesel_cli --no-default-features --features postgres无法通过。

4、Rust

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustc --version
rustc 1.46.0 (04488afe3 2020-08-24)

5、postgresql

brew install postgresql

6、Diesel cli

cargo install diesel_cli --no-default-features --features postgres
过程比较慢,耐心等待。。。

7、sqlx cli

cargo install sqlx-cli

8、solc

必须是v0.5.X
brew install solidity@5

9、下载zksync

git clone https://github.com/matter-labs/zksync.git

10、编辑~/. bash_profile:

export ZKSYNC_HOME=/path/to/zksync
export PATH=$ZKSYNC_HOME/bin:$PATH

到这里,环境依赖已经完成了

启动zksync zksync/docs/launch.md

1、设置本地运行环境

cd zksync/bin && ./zk     #installs and builds zk itself
zk init                   #时间会比较久,耐心等待需要下载约8G的电路设置文件

初始化只需要一次即可,查看infrastructure/zk/src/init.ts

export async function init() {
    if (!process.env.CI) {
        await checkEnv();
        await env.gitHooks();
        await up();
    }
    await utils.allowFail(run.yarn());
    await run.plonkSetup();
    await run.verifyKeys.unpack();
    await db.setup();
    await contract.buildDev();
    await run.deployERC20('dev');
    await contract.build();
    await server.genesis();
    await contract.redeploy();
}

2、启动容器

zk up
查看infrastructure/zk/src/up.ts,该命令启动了geth 1,postgres,dev-ticker,tesseracts

export async function up() {
    await utils.spawn('docker-compose up -d postgres geth dev-ticker');
    await utils.spawn('docker-compose up -d tesseracts');
}

退出容器
zk down

3、运行zksync server

$ zk server
    Finished release [optimized] target(s) in 1.28s
     Running `target/release/zksync_server`
[2020-12-07T06:23:10Z INFO  zksync_server] Running the zkSync server
[2020-12-07T06:23:10Z INFO  zksync_server] Starting the Core actors
[2020-12-07T06:23:10Z INFO  zksync_core::state_keeper] Loaded committed state: last block number: 8, unprocessed priority op: 4
[2020-12-07T06:23:10Z INFO  zksync_core::state_keeper] created state keeper, root hash = Fr(0x2e1da2ec83289a3bb50282b56dee671ff815ac520f5a64c2ce89f3e62284a7dc)
[2020-12-07T06:23:10Z INFO  zksync_core::state_keeper] Executed restored proposed block: 0 transactions, 0 priority operations, 0 failed transactions
[2020-12-07T06:23:10Z INFO  zksync_server] Starting the API server actors
[2020-12-07T06:23:10Z INFO  zksync_server] Starting the Ethereum sender actors
[2020-12-07T06:23:10Z INFO  zksync_server] Starting the Prover server actors
[2020-12-07T06:23:10Z INFO  zksync_witness_generator] Starting witness generator (1,2)
[2020-12-07T06:23:10Z INFO  zksync_witness_generator::witness_generator] preparing prover data routine started with start_block(1), block_step(2)
[2020-12-07T06:23:10Z INFO  zksync_witness_generator] Starting witness generator (2,2)
[2020-12-07T06:23:10Z INFO  zksync_witness_generator::witness_generator] preparing prover data routine started with start_block(2), block_step(2)
[2020-12-07T06:23:10Z INFO  zksync_core::mempool] 0 transactions were restored from the persistent mempool storage

第一次运行会编译rust,时间比较久,请耐心等待
查看infrastructure/zk/src/server.ts,用ts来编译、运行了core/bin/server/src/main.rs

export async function server() {
    await utils.spawn('cargo run --bin zksync_server --release');
}
关于etc/env/dev.env

这个文件是在init的时候从dev.env.example复制生成的。可以修改其中的参数,
如端口参数、出块间隔、见证者数量等。在本地的部署测试中,发现zk server的时候端口被占用的错误,首先请排查端口占用情况:lsof -i:8545,如果没有占用情况,那可以修改dev.env的端口在尝试一下。有需要的话,需要同步修改etc/js/env-config.js的端口。

4、运行zksync cli

cd bin && vim zcli      #拷贝zk文件内容,作出相应修改

zcli文件内容:

#!/bin/bash

if [ -z "$1" ]; then
    cd $ZKSYNC_HOME
    yarn && yarn zcli build
else
    # can't start this with yarn since it has quirks with `--` as an argument
    node -- $ZKSYNC_HOME/infrastructure/zcli/build/index.js "$@"
fi
$ ./zcli      #build xcli

$ zcli -h   #查看命令行帮助
Usage: zcli [options] [command]

Options:
  -V, --version                                    output the version number
  -n, --network <network>                          select network (default: "localhost")
  -h, --help                                       display help for command

Commands:
  account [address]                                view account info
  transaction <tx_hash>                            view transaction info
  transfer [options] [amount] [token] [recipient]  make a transfer
  deposit [options] [amount] [token] [recipient]   make a deposit
  await [options] <type> <tx_hash>                 await for transaction commitment/verification
  networks                                         view configured networks
  wallets                                          view saved wallets
  help [command]                                   display help for command

添加账号:

$ zcli wallets add 0x27593fea79697e947890ecbecce7901b0008345e5d7259710d0dd5e500d040be
[WARNING]: private keys are stored unencrypted
"0xde03a0B5963f75f1C8485B355fF6D30f3093BDE7"

$ zcli wallets default 0xde03a0b5963f75f1c8485b355ff6d30f3093bde7
"0xde03a0b5963f75f1c8485b355ff6d30f3093bde7"

$ zcli wallets 
[
    "0xde03a0b5963f75f1c8485b355ff6d30f3093bde7",
    "0xab9fc101e0958669c92d71855f41aa5c949e5d8e",
    "0xdb850fd6dd80f0f689f2f4671a003c99ed73cd49"
]

$ zcli account 0xde03a0b5963f75f1c8485b355ff6d30f3093bde7
{
    "address": "0xde03a0b5963f75f1c8485b355ff6d30f3093bde7",
    "network": "localhost",
    "account_id": 0,
    "nonce": 0,
    "balances": {
        "ETH": "0.0004132"
    }
}

$ zcli deposit 1000 ETH 0x52312AD6f01657413b2eaE9287f6B9ADaD93D5FE --fast
"0x39e8a769a1be699c01afad650f3d5ff3c570bb805a9c7b23177080cff35c8ae5"

$ zcli transaction 0x39e8a769a1be699c01afad650f3d5ff3c570bb805a9c7b23177080cff35c8ae5
{
    "network": "localhost",
    "transaction": {
        "status": "success",
        "from": "0xde03a0b5963f75f1c8485b355ff6d30f3093bde7",
        "to": "0x52312ad6f01657413b2eae9287f6b9adad93d5fe",
        "hash": "0x39e8a769a1be699c01afad650f3d5ff3c570bb805a9c7b23177080cff35c8ae5",
        "operation": "Deposit",
        "nonce": -1,
        "amount": "1000.0",
        "token": "ETH"
    }
}

$ zcli account 0x52312AD6f01657413b2eaE9287f6B9ADaD93D5FE
{
    "address": "0x52312AD6f01657413b2eaE9287f6B9ADaD93D5FE",
    "network": "localhost",
    "account_id": 1,
    "nonce": 5,
    "balances": {
        "ETH": "2994.9995868"
    }
} #原先有抵押过了

$ zcli transfer 2 ETH 0xdB850fD6DD80f0F689F2f4671A003c99ed73cD49

...

0xde03a0B5963f75f1C8485B355fF6D30f3093BDE7为dev.env文件中有L2给 geth1 发交易的地址,私钥也在配置文件中。

大家可以按照提示使用zcli来向zksync发送交易,查询交易等操作。

日拱一卒!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容