1. 测试用例及代码库
  2. 机器配置
  3. 测试结果

    3.1 EVM

    3.2 AElf

    3.2.1 LoopDivAdd10M

    3.2.2 LoopExpNop1M
  4. 测试结论

近期对标以太坊做了一系列针对测试,在此次测试过程中,我们发现在同一机型上,运行同样的测试用例,aelf的合约执行效率远高于以太坊EVM的合约执行效率。

以太坊的合约执行效率低,一方面因为虚拟机机制和gas费规则带来的一定开销导致效率降低,另一方面因为EVM的256位设计导致合约执行效率更低。

而aelf使用C#的发射机制来调用合约,并且没有多余设计,合约执行效率自然远高于以太坊的合约执行效率

1.测试用例及代码库

以下是对标以太坊 loop-DivAdd-10M.json 和 loop-exp-nop-1M.json的测试情况

ETH: 基于官网go实现版本

https://github.com/ethereum/go-ethereum 

AELF: 基于官方C#实现版本

https://github.com/AElfProject/AElf

测试用例,对标ETH的标准测试:

https://github.com/ethereum/tests/tree/develop/src/VMTestsFiller

对应aelf测试用例:

https://github.com/AElfProject/AElf/blob/dev/bench/AElf.Benchmark

2.机器配置

Test Enviornment:
OS=ubuntu 16.04
QEMU Virtual CPU, 2 CPU, 2 logical and 2 physical cores
CPU MHz: 2194.916; cache size : 16384 KB AElf Test Environment: BenchmarkDotNet=v0.11.5
.NET Core SDK=2.2.203
[Host] : .NET Core 2.2.4 (CoreCLR 4.6.27521.02, CoreFX 4.6.27521.01), 64bit RyuJIT DEBUG

3.测试结果

LoopDivAdd10M:EVM耗时为aelf的169倍,差两个数量级

LoopExpNop1M:EVM耗时为aelf的1223倍,差三个数量级

3.1 EVM

官方go实现版本的自带测试程序执行结果

LoopDivAdd10M:14.236813572s

LoopExpNop1M: 639.16568ms

3.2 AElf

LoopDivAdd10M:84.01ms

LoopExpNop1M: 522.5us

3.2.1 LoopDivAdd10M

除法加法循环一千万次

方法

public override DoubleValue LoopDivAdd(DivAddTestInput input)
{
var r = input.X;
for (uint i = 0; i < input.N; i++)
{
r /= input.Y;
r += input.K;
}
return new DoubleValue {Value = r};
}

输入

new DivAddTestInput()
{
X = 100,
Y = 300,
K = 500,
N = 10000000
}

执行结果:

3.2.2 LoopExpNop1M

方法

public override Int32Value LoopExpNop(PerformanceTesteInput input)
{
for (uint i = 0; i < input.N; i++)
{
}
return new Int32Value {Value = input.Seed};
}

输入

new PerformanceTesteInput()
{
Exponent = 0,
Seed = _executeResult,
N = 1000000
}

执行结果:

4.测试结论

在试验机配置相同的情况下:

循环运行1000万次加法、除法测试后:

以太坊EVM约需要14236.81毫秒

而在aelf的节点测试中仅需84.01毫秒,高于EVM 169倍。

空循环运行100万次后:

以太坊EVM需要639.16毫秒

而在aelf的节点测试中仅需0.5225毫秒,高于EVM 1223倍。

性能对比:aelf智能合约运行环境性能是evm的1000倍的更多相关文章

  1. 智能合约开发环境搭建及Hello World合约

    如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇. 就先学习任何编程语言一样,入门的第一个程序都是Hello World.今天我们来一步一步从搭建以太坊智能合约 ...

  2. 搭建智能合约开发环境Remix IDE及使用

    目前开发智能的IDE, 首推还是Remix, 而Remix官网, 总是由于各种各样的(网络)原因无法使用,本文就来介绍一下如何在本地搭建智能合约开发环境remix-ide并介绍Remix的使用. 写在 ...

  3. [转] 智能合约开发环境搭建及Hello World合约

    [From] http://www.cnblogs.com/tinyxiong/p/7898599.html 如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇. ...

  4. Mac下基于testrpc和truffle的以太坊智能合约开发环境搭建

    原文地址:石匠的blog truffle是一个基于Javascript开发的一套智能合约开发框架,使用Solidity语言编写合约.truffle有一套自动的项目构建机制,集成了开发,测试和部署的各个 ...

  5. Tomcat 7优化前及优化后的性能对比

    Tomcat 7在我们日常开发.测试.生产环境都会使用到,但对于大部分开发人员来说,对其性能还是没有多大了解.本文就对它做一次性能测试,对比优化前后的性能区别. 一.运行环境 CPU: Intel(R ...

  6. 区块链学习5:智能合约Smart contract原理及发展历程科普知识

    ☞ ░ 前往老猿Python博文目录 ░ 一.智能合约的定义 通俗来说,智能合约就是一种在计算机系统上,当一定条件满足的情况下可被自动执行的合约,智能合约体现为一段代码及其运行环境.例如银行信用卡的自 ...

  7. Web3与智能合约交互实战

    写在前面 在最初学习以太坊的时候,很多人都是自己创建以太坊节点后,使用geth与之交互.这种使用命令行交互的方法虽然让很多程序员感到兴奋(黑客帝国的既视感?),但不可能指望普通用户通过命令行使用Dap ...

  8. 如何使用Web3在浏览器中与智能合约进行交互

    2018-4-20 技术文章 Web3.js是以太坊官方的Javascript API,可以帮助智能合约开发者使用HTTP或者IPC与本地的或者远程的以太坊节点交互.实际上就是一个库的集合,主要包括下 ...

  9. EOS基础全家桶(十二)智能合约IDE-VSCode

    简介 上一篇我们介绍了EOS的专用IDE工具EOS Studio,该工具的优势是简单,易上手,但是灵活性低,且对系统资源开销大,依赖多,容易出现功能异常.那么我们开发人员最容易使用的,可能还是深度定制 ...

随机推荐

  1. 使用Vuejs 开发chrome 插件的注意事项

    chrome 插件的开发其实并不难,web开发者可以使用 html, css, javascript 轻松的开发实用的 chrome 插件. 一个好的 chrome 插件可以提高我们的开发效率,甚至方 ...

  2. SQL Server内部如何管理对象的数据Page?

    一个表或Index使用的数据页空间是由IAM Page Chain来管理的.SQL Server 使用一个IAM(Index Allocation Map)Page来管理数据库文件中最多4GB的空间, ...

  3. Python【day 14-4】sorted filter map+递归文件夹+二分法查找

    def func(x): #普通函数 return x*x ret1 = func(10) #匿名函数 f = lambda x:x*x # 匿名函数写法: 匿名函数名=lambda 参数:返回值 ' ...

  4. JAVA 设置模块间的依赖关系

    项目目录概况 Demo01项目 Test01.java package com.sam.demo01; public class Test01 { public void ShowTest01() { ...

  5. CAD画三维图怎么渲染?一分钟教你快速操作

    从事过CAD相关工作的都知道,CAD绘制的方式有二维平面图以及三维图形,三维图形,画三维图方式也是比较简单的.那当然三维图画完后一般还需要进行渲染操作,步骤也是比较简洁的.下面就来给大家操作一下CAD ...

  6. FileProvider的使用

    还望支持个人博客站:http://www.enjoytoday.cn 概述 Android 7.0的新特性规定,对于android 7.0应用(仅仅对于android 7.0版本的sdk而言,若是编译 ...

  7. 概要设计文档(final)

    1. 引言部分 引言部分主要说明编写目的.系统的范围和参考资料等. 1.1目的 该文档的目的是描述“自习吧”微信小程序的概要设计,主要内容包括系统功能简介.系统结构设计.模块设计和界面设计等. 本文档 ...

  8. SRDC - ORA-30013: Checklist of Evidence to Supply (Doc ID 1682701.1)

    Action Plan 1. Execute srdc_db_undo_ora-30013.sql as sysdba and provide the spool output --srdc_db_u ...

  9. Mysql—日志文件系统

    MySQL中的日志包括:错误日志.通用查询日志.二进制日志.慢查询日志等等.这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志. 错误日志:记录启动.运行或停止mysqld时出现的问题.通用日 ...

  10. Plugin org.apache.maven.plugins:maven-resources-plugin:2.6

    创建maven project时工程报错Plugin org.apache.maven.plugins:maven-resources-plugin:2.6 or one of its depende ...