Solana 是 2017 年由 Anatoly Yakovenko 创立的开源项目,旨在打造高性能、去中心化且低成本的区块链平台2。它采用独特的 Proof of History(PoH)共识机制,结合 Tower BFT 等技术,实现了每秒数千笔交易的高吞吐量,确认时间仅 400 毫秒,每笔交易中位数费用为 0.00064 SOL12。Solana 支持链上程序开发,开发者可用 Rust 等语言编写智能合约,基于 eBPF 虚拟机高效运行1。其生态发展迅速,在 DeFi、NFT、GameFi 等领域扩张迅猛,凭借高性能和低费用吸引了大量开发者和用户,是市值第三的公链,对以太坊等传统公链构成有力挑战。

  结合手头的工作,我做一次在OpenEuler 24.09 RISC-V上部署Solana的实战,并且调研失败的原因。

  此处跳过Rustup以及Cargo、Rustc的下载,直接先从官网克隆Solana的项目下来。

cd solana
./cargo build

  cargo用的是Solana官方提供的,不过出现了以下错误

  我查了一下ring,它是一个加密算法库,主要用Rust实现,不过里面还有不少汇编代码,到这里的时候,我是初步怀疑没有提供RISC-V的汇编导致 build 失败,看了一下还真是。

  有很大篇幅都是用 Assembly 写的,再随便挑了一个源码看看

  就比如这个函数,很显然在OpenEuler RISC-V上,这几个预编译条件都不满足,好在这是 void 类型的函数,最后这个函数变成了空函数。不过有意思的是,cargo build 很顺利,并没有失败。

  cargo build 是顺利的,不过到了这里有一个 build-script,是一个可执行文件,我尝试运行了一下,出现了似曾相识的错误。

  和文章开头的那图一样,也是 thread "main" panic,因此又可以找到一个可以移植的软件包了,那就是 ring,因为这个,我在部署 Solana 的时候受挫,同时我也看了看 build.rs,这大概是它支持的几种架构。

  看起来只支持常见的 x86,arm和wasm。不过这只是我在部署 Solana 遇到的第一个难点,假设 ring 移植成功了,后面可能还会遇到其它同样因为 RISC-V 而失败的包,本来 ring 已经够庞大了,因此移植 Solana 看起来似乎是一个工作量非常大的任务。

  记录下来,如果有一天这些包成功移植完成了,再回头看看是否可以移植 Solana。

Solana编译失败探讨(OpenEuler RISC-V版)的更多相关文章

  1. 保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

    写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...

  2. sass安装:webpack sass编译失败,node-sass安装失败的终极解决方

    文章来源:sass安装:webpack sass编译失败,node-sass安装失败的终极解决方 sass难言之隐-sass安装的坑 之前花了很多时间折腾node-sass,发现sass老是安装不上 ...

  3. 编译opengl编程指南第八版示例代码通过

    最近在编译opengl编程指南第八版的示例代码,如下 #include <iostream> #include "vgl.h" #include "LoadS ...

  4. 因GIT默认忽略.dll文件导致的Visual Studio项目通过Bamboo编译失败

    背景 由GIT管理的Visual Studio项目,使用Stash管理远端代码库,通过与Stash集成的Bamboo生成项目并发布 现象 Visual Studio项目本地生成成功,用SourceTr ...

  5. 格式化代码引发的css编译失败

    之前在做feather项目,处理IE8下的问题时,写 filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='#', sizi ...

  6. Maven多模块项目编译失败:程序包xxx不存在

    项目结构如下: parent(父类工程) | - - - - - common(通用工具类子工程) | - - - - - projectA(springboot子工程,依赖common工程) pom ...

  7. redis make编译失败的原因

    make clean redis编译失败可能是: 1.未安装gcc,gcc-c++ yum install gcc yum install gcc-c++ 2.未安装tcl yum install t ...

  8. 一次gcc编译失败分析

    1. 场景: ​ 在使用gcc编译时,编译器报错:xxx:'xxx'未定义的引用 2. 排查过程: 首先,我很自然的想到是不是自己使用了未定义的函数或者将函数名称写错了,在检查了一边过后,我发现自己使 ...

  9. Android studio 编译失败Error:Could not read entry &#39;:app:processDebugManifest&#39; from cache taskArtifacts.b

    Android studio 编译失败 Error:Could not read entry ':app:processDebugManifest' from cache taskArtifacts. ...

  10. WDA编译失败问题

    1.放假回来,wda编译失败,报错如下 2018-09-25 10:03:09.020964+0800 WebDriverAgentRunner-Runner[335:33309] +[CATrans ...

随机推荐

  1. 深入剖析数据删除操作:DELETE 语句的使用与管理实践

    title: 深入剖析数据删除操作:DELETE 语句的使用与管理实践 date: 2025/1/8 updated: 2025/1/8 author: cmdragon excerpt: 数据删除( ...

  2. 深入理解ASP.NET Core 管道的工作原理

    在 .NET Core 中,管道(Pipeline)是处理 HTTP 请求和响应的中间件组件的有序集合.每个中间件组件都可以对请求进行处理,并将其传递给下一个中间件组件,直到请求到达最终的处理程序.管 ...

  3. 《CUDA编程:基础与实践》读书笔记(4):CUDA流

    1. CUDA流 一个CUDA流指的是由主机发出的在一个设备中执行的CUDA操作序列.除主机端发出的流之外,还有设备端发出的流,但本文不考虑后者.一个CUDA流中的各个操作按照主机发布的次序执行:但来 ...

  4. 让 LLM 来评判 | 基础概念

    基础概念 这是 让 LLM 来评判 系列文章的第一篇,敬请关注系列文章: 基础概念 选择 LLM 评估模型 设计你自己的评估 prompt 评估你的评估结果 奖励模型相关内容 技巧与提示 什么是评估模 ...

  5. WPF刮刮乐

    WPF刮刮乐 <Window x:Class="WpfApp2.MainWindow" xmlns="http://schemas.microsoft.com/wi ...

  6. linux:MariaDB安装

    介绍 链接 安装 查看系统中是否已安装 rpm -qa | grep -i mariadb 返回结果类似如下内容,则表示已有 MariaDB 的包 为避免安装版本不同造成冲突,请执行以下命令移除已安装 ...

  7. PayDay Intermediate

    nmap + dirsearch 发现web站点 扫目录 ┌──(root㉿kali)-[/home/ftpuserr] └─# nmap -p- -A 192.168.167.39 Starting ...

  8. 一个 .NET 开源、免费、功能强大的Windows应用卸载神器

    前言 今天大姚给大家分享一个基于 .NET 开源(Apache License).免费.功能强大的Windows应用卸载神器:Bulk Crap Uninstaller. 项目介绍 Bulk Crap ...

  9. redis 过期监听配置

    package org.jeecg.config; import java.lang.reflect.Method; import java.time.Duration; import java.ut ...

  10. SCCPC2024 游记

    打了一堆板子,一个都没用上. 队友:zhicheng,nityacke 开场发现 H 是签到,NIT 签了.然后盯 F(圆向某个方向运动,问存不存在一个时刻使得全在长方形之内),发现不外乎一堆二次方程 ...