0%

EVM_security

调研区块链虚拟机安全

EVM的不同实现

其他VM

  • NEO VM:采用C#实现,Neo链目前的市值排行66,NEO支持多种常用的编程语言,如C#、Java和Python等编写智能合约
  • Solana Virtual Machine:Solana链(市值第7)上的虚拟机,rust实现.
    • 智能合约语言可以是Rust, C, and C++,翻译成BPF字节码执行;支持交易并行
    • Neon用于solana和EVM对齐
  • Cardano:token ADA,目前市值排行8,采用Haskell语言实现,以KEVM,EVM的形式化验证版本为基础
    • 其中Milkomeda C1是Cardano对应的EVM侧链
  • Tezos:目前的市值排行52,项目采用的语言是OCaml,合约采用的编程语言是Archetype, LIGO, 和SmartPy,翻译为底层语言Michelson后在VM上执行

WASM

  • EOSIO, EOS-VM:第一个DpoS的链,C++实现,目前的市值排行57,采用WebAssembly(WASM)作为底层引擎,通过即时编译技术将智能合约字节码转换为本地机器码;同样支持多种编程语言,包括C++、Rust、Python等编写智能合约
  • Near:采用Rust实现,Wasm作为执行引擎,市值排行43
  • 国内的迅雷公司的迅雷链:采用Wasm作为VM,目前提供数字藏品
  • Tron:市值10声称要支持WASM,但是根据官方白皮书的介绍,目前采用的实现是以太坊的fork
  • Hera:Geth采用的Wasm,需要EVMC的支持
  • awesome-wasm-tools:Wasm静态分析、动态分析和相关论文的仓库

学习资料

MOVE VM

以太坊客户端

客户端多样性:https://clientdiversity.org/

  • 执行客户端
  • 共识客户端

根据以太坊主网的统计数据显示,geth是使用最广泛的客户端

image-20231012160435832

  • Geth:占比50.0%,采用go语言实现,最常用的客户端
    • 支持Mainnet, Sepolia, Goerli
  • Nethermind:占比29.3%,采用C#实现
    • 支持Mainnet, Sepolia, Goerli, and more
  • Erigon:占比11.12%,采用go语言实现,作为Openethereum的后继者
    • Mainnet, Sepolia, Goerli, and more
  • besu:占比9%,Java实现,Hyperledger 项目的一部分,是一个企业级以太坊客户端
    • Mainnet, Sepolia, Goerli, and more
  • reth:占比0.5%,Rust实现
    • Mainnet, Sepolia, Goerli, and more
  • Openethereum:采用Rust实现,曾经仅次于geth, August 4, 2021已被弃用

  • Coregeth:Go实现,Geth的下游发行版

EVM兼容的区块链

所有兼容EVM的区块链可见 EVM公链列表CoinCarp

EIP

测试用例

数据集

总结

  • 可能的研究方向
    • 虚拟机:目前学术论文的研究对象主要是EVM的官方实现(geth/aleth/js-evm/openethereum)和EVM兼容的链(FISCO-BCOS-evm),逐渐开始有向其他公有链项目采用的VM进行延伸(Neo)的工作。后续工作可以考虑对其他EVM兼容的区块链上的EVM实现(如SputnikVM)进行差分模糊测试和对其他非EVM的知名公有链的虚拟机(EOS-VM/Solana/Cardano)安全性进行研究
    • 客户端:现有的对以太坊客户端的测试主要以Geth为主。但是从以太坊官方的统计数据来看,除了Geth之外,Nethermind、Eriqon、besu同样占有较大的比例,对以上客户端内的EVM实现进行差分模糊测试也是具有一定研究意义的
  • 目前探索的方向:学习EVMfuzzer和NeoDiff,扩展到EVM compatible的链上

其他资料