之前做过的一些部署移植的工作,基本都是用C++语言写的,在后来我学了一些Rust,并且慢慢熟悉了Rust的工具链,最近也在尝试部署一些Rust的开源项目到OpenEuler RISC-V操作系统上(我们团队叫OERV)。

  REVM是一个用Rust编写的以太坊虚拟机(EVM)项目 ,其设计聚焦于速度与简单易用性。它具备快速且灵活的实现方式,提供简洁接口与嵌入式主机。通过高效执行环境和简洁设计,为开发者打造可靠且易上手的EVM实现。借助其特性,开发者能开展智能合约的开发与测试工作,比如可运用REVM运行以太坊状态测试,以此保障智能合约的准确性。同时,它还能与以太坊官方测试套件配合,验证EVM实现的正确性,也能和Truffle、Hardhat等智能合约开发框架集成,形成完备的开发测试环境 。并且,基于Rust的零成本抽象,REVM在实现高度可定制化的同时没有运行时开销,编译器确保生成的EVM既快速又类型安全,在编译时就能验证定制的有效性,消除了运行时检查,专注于高效的EVM执行 。

  怎么使用?

  以下是一个使用执行API的简单示例:它能让我们创建一个以太坊虚拟机(EVM)并执行交易。此外,该API还能用于借助检查器生成追踪信息,或者处理诸如Foundry作弊码这类更为复杂的示例。

let mut evm = Context::mainnet().with_block(block).build_mainnet();
let out = evm.transact(tx); // or you can use powerful inspection tool to trace it
let mut evm = evm.with_inspector(tracer);
let out = evm.inspect_tx(tx);

  怎么部署?

git clone https://github.com/bluealloy/revm.git
cd revm
cargo build --release

  踩到了一个Rust的小坑,编译的时候出现了一个小错误。

  大概原因就是,这里的OPCODE_INFO是用static声明的,但是static是程序运行期间才分配内存,而const是编译期就能确认其值,所以错误的原因就是const在使用的时候带上了static(一个需要编译期确认的表达式加上了static这种运行期产物)。

    很直接的方法就是直接根据报错去改源码,只需要在crates/bytecode/src/opcode.rs当中找到OPCODE_INFO的声明,原本这里是static声明的,我改成了用const声明。改了之后,编译就成功了,REVM项目总算在OpenEuler RISC-V操作系统上部署成功了~

  

REVM移植小记的更多相关文章

  1. PHP移植小记

    所需文件: Phpnow 1.5.6 文件夹(D盘): SQL Server2005 x86 安装包(D盘‘安装文件文件夹’): 数据库创建命令:   更改sql server 2005的服务器名称 ...

  2. RTT下spi flash+elm fat文件系统移植小记

    背景: MCU:STM32F207 SPI flash: Winbond W25Q16BV OS: RTT V1.1.1 bsp: STM32F20x 1 将spi_core.c,spi_dev.c及 ...

  3. Cocos2d-x项目移植到WinRT/Win8小记

    Cocos2d-x项目移植到WinRT/Win8小记 作者: K.C. 日期: 11/17/2013 Date: 2013-11-17 23:33 Title: Cocos2d-x项目移植到WinRT ...

  4. Cocos2d-x项目移植到WP8小记

    Cocos2d-x项目移植到WP8小记 作者: K.C. 日期: 10/24/2013 Date: 2013-10-24 00:33 Title: Cocos2d-x项目移植到WP8小记 Tags: ...

  5. Java JPA小记

    什么是JPA JPA之于ORM(持久层框架,如MyBatis.Hibernate等)正如JDBC之于数据库驱动. JDBC是Java语言定义的一套标准,规范了客户端程序访问关系数据库(如MySQL.O ...

  6. MVVM框架从WPF移植到UWP遇到的问题和解决方法

    MVVM框架从WPF移植到UWP遇到的问题和解决方法 0x00 起因 这几天开始学习UWP了,之前有WPF经验,所以总体感觉还可以,看了一些基础概念和主题,写了几个测试程序,突然想起来了前一段时间在W ...

  7. IIC驱动移植在linux3.14.78上的实现和在linux2.6.29上实现对比(deep dive)

    首先说明下为什么写这篇文章,网上有许多博客也是介绍I2C驱动在linux上移植的实现,但是笔者认为他们相当一部分没有分清所写的驱动时的驱动模型,是基于device tree, 还是基于传统的Platf ...

  8. [原]Paste.deploy 与 WSGI, keystone 小记

    Paste.deploy 与 WSGI, keystone 小记 名词解释: Paste.deploy 是一个WSGI工具包,用于更方便的管理WSGI应用, 可以通过配置文件,将WSGI应用加载起来. ...

  9. Linux主机上使用交叉编译移植u-boot到树莓派

    0环境 Linux主机OS:Ubuntu14.04 64位,运行在wmware workstation 10虚拟机 树莓派版本:raspberry pi 2 B型. 树莓派OS: Debian Jes ...

  10. STM32F429 LCD程序移植

    STM32F429自带LCD驱动器,这一具有功能给我等纠结于屏幕驱动的程序员带来了很大的福音.有经验的读者一定有过这样的经历,用FSMC驱动带由控制器的屏幕时候,一旦驱动芯片更换,则需要重新针对此驱动 ...

随机推荐

  1. xxe学习笔记

    什么是xxe XXE(XML External Entity Injection)全称为XML外部实体注入,由于程序在解析输入的XML数据时,解析了攻击者伪造的外部实体而产生的.例如PHP中的simp ...

  2. Redmine 中,如何新增一个字段名,比如"模块名称":

    why: 用于编写测试报告时能够直接根据模块名称进行统计,不对excel 表格进行自定义拆分-----规范性 登录到 Redmine 平台,并进入你的项目页面. 在项目页面上方的导航栏中,点击 &qu ...

  3. IvorySQL 升级指南:从 3.x 到 4.0 的平滑过渡

    日前,IvorySQL 4.0 重磅发布,全面支持 PostgreSQL 17,并且增强了对 Oracle 的兼容性.关于 IvorySQL 4.0 的介绍,各位小伙伴可以通过这篇文章回顾:Ivory ...

  4. C# - 获取枚举描述 - 使用增量源生成器

    前言 C# 获取枚举描述的方法有很多, 常用的有通过 DescriptionAttribute 反射获取, 进阶的可以加上缓存机制, 减少反射的开销.今天我们还提供一种更加高效的方法,通过增量源生成器 ...

  5. 微服务架构的守护者:Redisson 分布式锁与看门狗机制实战指南

    1. 分布式锁简介 1.1 什么是分布式锁 在单机应用中,可以使用 Java 内置的锁机制(如 synchronized.ReentrantLock 等)来实现线程间的同步.但在分布式环境下,由于应用 ...

  6. 【C#】Winform监听USB串口设备拔插实现自动断开

    [C#]Winform监听USB串口设备拔插 零.问题 最近在开发串口相关的软件,需要检测串口拔掉后主动关闭串口,因此需要检测到USB的拔插事件. 一.解决 在主窗口From类下覆盖WndProc方法 ...

  7. git库移植

    记一次个人项目移植到组织项目的git应用,留爪. 1. 首先保证你本地有一份完整的库 2. 在 gitee 组织里新建一份裸库 3. 本地库移除所有远程库 git remote //查看所有远程库 g ...

  8. 工具推荐-根据IP地址精确定位经纬度(永久免费)

    今天小张由于业务需求,需要根据用户的访问ip精确定位用户的国家.城市.及经纬度等信息,从网上进行搜索,发现不少的网站,但几乎没有完全符合的,有个别符合的还需要花钱,大家也知道,现在是信息共享的时代,难 ...

  9. 分享 3 款基于 .NET 开源且免费的远程桌面工具

    前言 今天大姚给大家分享 3 款基于 .NET 开源.免费.功能强大的远程桌面工具,希望可以给大家的远程工作和学习带来便利. 1Remote 1Remote是一款基于 .NET 开源(GPL-3.0 ...

  10. 基于Docker+DeepSeek+Dify:搭建企业级本地私有化知识库超详细教程

    在当今信息爆炸的时代,如何高效地管理和利用知识成为了企业竞争力的关键.为了帮助企业构建专属的知识库,本文将详细介绍如何使用Docker.DeepSeek和Dify来搭建一个企业级本地私有化知识库. 1 ...