BCSkill (Block chain skill )
区块链中文技术社区

只讨论区块链底层技术
遵守一切相关法律政策!

cdk-data-availability之TrackSequence参数分析

https://github.com/0xPolygon/cdk-data-availability/blob/e17fe08a81dee451636cadce04e568563d992d38/sequencer/tracker.go#L84-L113

// Start starts the SequencerTracker
func (st *Tracker) Start(parentCtx context.Context) {
    st.startOnce.Do(func() {
        ctx, cancel := context.WithTimeout(parentCtx, st.timeout)
        defer cancel()

        addr, err := st.em.TrustedSequencer(ctx)
        if err != nil {
            log.Fatalf("failed to get sequencer addr: %v", err)
            return
        }

        log.Infof("current sequencer addr: %s", addr.Hex())
        st.setAddr(addr)

        url, err := st.em.TrustedSequencerURL(ctx)
        if err != nil {
            log.Fatalf("failed to get sequencer addr: %v", err)
            return
        }

        log.Infof("current sequencer url: %s", url)
        st.setUrl(url)

        if st.trackChanges {
            log.Info("sequencer tracking enabled")

            go st.trackAddrChanges(parentCtx)
            go st.trackUrlChanges(parentCtx)
        }
    })
}

分析

当TrackSequence设置为true时,会在TrackSequencerPollInterval间隔内,检查L1合约内的TrustedSequencer地址和URL是否有变更,并更新本地

场景

因为TrustedSequencer地址和URL变更频率很低,默认情况下TrackSequence可以设置为false,对比变更比较频繁的场景,可以将TrackSequence改为true
注:当cdk-data-availability服务重启时,会自动对齐配置

使用Kurtosis快速验证Polygon CDK新版本

前置介绍

官方部署:https://docs.polygon.technology/cdk/getting-started/local-deployment/
Polygon CDK Kurtosis 包允许您轻松自定义和实例化 CDK 链的所有组件。它使用Kurtosis工具来协调 Docker 容器中链组件的设置,并使用Starlark脚本(一种 Python 方言)中定义的逻辑来定义设置链的分步过程。

Polygon CDK Kurtosis Package

https://github.com/0xPolygon/kurtosis-cdk
通过kurtosis{用于打包和启动临时后端堆栈的平台},通过Docker和k8s 部署私有、可移植、模块化的Polygon CDK开发网络

软件包将部署:

  1. 本地 L1 链,使用ethereum-package ,完全可定制并支持多客户端。
  2. 本地 L2 链,使用Polygon Chain 开发套件(CDK),具有可定制的组件,例如序列器、序列发送器、聚合器、rpc、证明器、dac 等。它将首先在 L1 链上部署Polygon zkEVM 智能合约,然后再部署不同的组件。
  3. zkEVM桥接基础设施,促进 L1 和 L2 链之间的资产桥接,反之亦然。
  4. Agglayer一种正在开发中的互操作性协议,它允许进行无需信任的跨链代币传输和消息传递,以及 L2 链之间的更复杂操作,并由 zk 证明保护。
  5. 附加服务,如交易垃圾邮件发送者、监控工具、无需权限的节点等。

模块版本对应关系

Fork ID CDK Erigon ZkEVM Prover ZkEVM Contracts Data Availability Bridge
13 v2.60.0-beta4 v9.0.0-RC1-fork.13 v8.1.0-rc.1-fork.13 0.0.10 v0.6.0-RC1
12 v2.1.2 v8.0.0-RC14-fork.12 v8.0.0-rc.4-fork.12 0.0.10 v0.6.0-RC1
11 v2.1.2 v7.0.4-fork.11 v7.0.0-rc.2-fork.11 0.0.10 v0.6.0-RC1
9 v2.1.2 v6.0.8 v6.0.0-rc.1-fork.9 0.0.10 v0.6.0-RC1

当前测试时,默认测试 fork12

部署测试

Kurtosis部署

环境准备

  • Docker
  • Kurtosis
    • echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list
      sudo apt update
      sudo apt install kurtosis-cli
  • jq
  • yq (v3)
  • cast
    • curl -L https://foundry.paradigm.xyz | bash
      source ~/.bashrc
      foundryup
  • polycli
    • git clone https://github.com/0xPolygon/polygon-cli.git
      make install
      export PATH="$HOME/go/bin:$PATH"

部署

git clone https://github.com/0xPolygon/kurtosis-cdk.git
sudo su
kurtosis clean --all
ulimit -n 1000000
kurtosis run --enclave cdk .

默认部署包括cdk-erigon作为序列器,以及cdk-node作为序列发送器和聚合器。您可以通过查看 input_parser.star 来验证这些组件的默认版本和默认 fork ID。您可以通过查看input_parser.star来检查已部署组件的默认版本和默认 fork ID
当前cdk-erigon为v2.1.2版本,对应fork ID 12

查看网络布局

kurtosis enclave inspect cdk

L2 RPC 测试调用

export ETH_RPC_URL="$(kurtosis port print cdk cdk-erigon-rpc-001 rpc)"
cast block-number

默认情况下,CDK 处于test模式配置,这意味着地址为 的管理员账户中有一些预先存入的价值

cast balance --ether 0xE34aaF64b29273B7D567FCFc40544c014EEe9970

测试交易

private_key="0x12d7de8621a77640c9241b2595ba78ce443d05e94090365ab3bb5e19df82c625"
cast send --legacy --private-key "$private_key" --value 0.01ether 0x0000000000000000000000000000000000000000
blockHash               0xec514afabfa829f1b4e9339fd72e31fb2a1888a18046fe21743fe38b55bd24c3
blockNumber             45
contractAddress         
cumulativeGasUsed       21000
effectiveGasPrice       1000000000
from                    0xE34aaF64b29273B7D567FCFc40544c014EEe9970
gasUsed                 21000
logs                    []
logsBloom               0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
root                    
status                  1 (success)
transactionHash         0xa58b3383c1b1f53369723fdc537c88daa03585cb6a89aa49ebd493953d519fdf
transactionIndex        0
type                    0
blobGasPrice            
blobGasUsed             
authorizationList       
to                      0x0000000000000000000000000000000000000000

批量交易,需要安装polygon-cli

polycli loadtest --rpc-url "$ETH_RPC_URL" --legacy --private-key "$private_key" --verbosity 700 --requests 50000 --rate-limit 50 --concurrency 5 --mode t
polycli loadtest --rpc-url "$ETH_RPC_URL" --legacy --private-key "$private_key" --verbosity 700 --requests 500 --rate-limit 10 --mode 2
polycli loadtest --rpc-url "$ETH_RPC_URL" --legacy --private-key "$private_key" --verbosity 700 --requests 500 --rate-limit 3  --mode uniswapv3

获取输出日志

kurtosis service logs cdk agglayer --follow

排查错误

kurtosis service shell cdk contracts-001
jq . /opt/zkevm/combined.json

检查系统状态

cast rpc zkevm_batchNumber
cast rpc zkevm_virtualBatchNumber
cast rpc zkevm_verifiedBatchNumber

如果验证批次的数量不断增加,则表明系统运行正常

访问zkevm-bridge用户界面

open "$(kurtosis port print cdk zkevm-bridge-proxy-001 web-ui)"

查看cdk-erigon-rpc-001日志

kurtosis service logs cdk cdk-erigon-rpc-001 --follow

停止本地开发网络并将其删除

kurtosis clean --all

shadowsocks-libev如何支持多账户

结论

shadowsocks-libev服务本身不支持多账户,需要创建多个单独配置,分别起对应进程

细节自行查看
https://github.com/shadowsocks/shadowsocks-libev/issues/5
https://www.itfanr.cc/2016/10/02/use-shadowsocks-to-have-better-internet-experience/
限制:https://freevpn-x.com/index-160.htm

fingerprintjs- 浏览器指纹库

介绍

FingerprintJS 是一个源代码可用的客户端浏览器指纹识别库,可查询浏览器属性并根据这些属性计算哈希访客标识符。与 Cookie 和本地存储不同,指纹在隐身/隐私模式下保持不变,即使浏览器数据被清除也是如此。

github: https://github.com/fingerprintjs/fingerprintjs

测试用例

https://stackblitz.com/edit/fpjs-4-cdn?devtoolsheight=100&file=index.html

<script>
  // Initialize the agent at application startup.
  const fpPromise = import('https://openfpcdn.io/fingerprintjs/v4')
    .then(FingerprintJS => FingerprintJS.load())

  // Get the visitor identifier when you need it.
  fpPromise
    .then(fp => fp.get())
    .then(result => {
      // This is the visitor identifier:
      const visitorId = result.visitorId
      console.log(visitorId)
    })
    .catch(error => console.error(error))
</script>

返回当前浏览器指纹。类似

e625d944e21fd5885657b367c3b2952e

redka 使用 SQLite 重新实现 Redis

Redka 旨在使用 SQLite 重新实现 Redis 的核心部分,同时保持与 Redis API 的兼容。

显著特点:

  • 数据不必装入 RAM 中。
  • ACID 事务。
  • SQL 视图用于更好的自省和报告。
  • 进程内(Go API)和独立(RESP)服务器。
  • 与 Redis 兼容的命令和有线协议。

https://github.com/nalgeon/redka