Ubuntu安装solc编译环境步骤

2023-10-29

cmake装过程

solc编译器需要的cmake版本要大于3.9.0,所以要安装高于这个版本的cmake,安装步骤如下:

  1. 首先下载cmake安装包
wget https://cmake.org/files/v3.9/cmake-3.9.1-Linux-x86_64.tar.gz
  1. 解压安装包
tar -zxvf cmake-3.9.1-Linux-x86_64.tar.gz 
  1. 添加链接
# 解压出来的包,将其放在 /opt 目录下,其他目录也可以,主要别以后不小心删了
sudo mv cmake-3.13.0-Linux-x86_64 /opt/cmake-3.13.0
# 建立软链接
sudo ln -sf /opt/cmake-3.13.0/bin/*  /usr/bin/
# 查看 cmake 版本
cmake --version

安装Z3

编译solc需要依赖z3,所以需要提前安装一下,安装步骤如下:

git clone https://github.com/Z3Prover/z3.git
cd z3
python scripts/mk_make.py
cd build
make
sudo make install

安装Boost

  1. 下载boost安装包
https://sourceforge.net/projects/boost/files/boost/1.74.0/
  1. 运行脚本
    cd 到该目录
    里面有个bootstrap.sh的脚本文件,运行这个脚本
./bootstrap.sh
  1. 开始编译boost
./b2
  1. 开始安装
sudo ./b2 --prefix=/usr/local/boost install
  1. 添加环境变量
vim /etc/environment

向文件中增加如下路径:

CPLUS_INCLUDE_PATH=/usr/local/boost/include
LIBRARY_PATH=/usr/local/boost/lib

Solidity安装

  1. 安装sloc
sudo npm install -g solc
  1. 安装依赖
sudo apt install -y build-essential cmake libboost-all-dev
  1. 下载和安装
git clone --recursive https://github.com/ethereum/solidity.git
cd solidity
//external resources
./scripts/install_deps.sh
mkdir build
cd build
cmake .. && make

期间可能还需要安装:

sudo apt-get install ruby-dev
sudo gem install jekyll

Ethereum使用

  1. 搭建ethe私有链
    创建私链需要定义创世块文件,这个文件用来创建区块链的创世区块。下面先新建genesis.json如下:
{
  "config": {
        "chainId": 3,
        "homesteadBlock": 0,
        "eip150Block": 0,
        "eip155Block": 0,
        "eip158Block": 0,
        "byzantiumBlock": 0
    },
  "alloc"      : {},
  "coinbase"   : "0x0000000000000000000000000000000000000000",
  "difficulty" : "0x20000",
  "extraData"  : "",
  "gasLimit"   : "0x2fefd8",
  "nonce"      : "0x0000000000000042",
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp"  : "0x00"
}
  1. 创建创世块
    执行下面命令初始化创世块:
geth --datadir "./myblockchain" init genesis.json 

如下:
在这里插入图片描述
初始化结束后,当前目录会新建目录myblockchain,myblockchain目录下多了geth和keystore两个文件夹:

1) geth保存的该链上的区块数据
2)keystore保存该链上的用户信息
目录结构如下:
在这里插入图片描述
3. 启动私有链
启动私链:

geth --identity "myethereum" --rpc --rpcaddr "10.10.71.22" --rpcport "8545" --rpccorsdomain "*" --datadir ./myblockchain --rpcapi "db,eth,net,web3,admin,personal" --networkid 666 console --allow-insecure-unlock

这里先介绍一下一些参数:

参数名 描述
identity 区块链的标识,用于标识目前网络的名字
init 指定创世块文件的位置,并创建创世块
datadir 当前区块链数据存放的位置
port 网络监听端口,默认30303
rpc 启动rpc通信
rpcapi 设置允许rpc的客户端,一般为db,eth,net,web3
rpccorsdomain 指定什么url能连接到你的节点执行rpc定制端任务,如果输入是“*”,则任何url都可以连接到你的rpc实例。
rpcaddr 连接rpc的地址,默认为localhost,为了方便访问建议使用本机IP地址
rpcport 连接rpc的端口,默认为8545
networkid 设置当前区块链的网络ID,用于区分不同的网络,是一个数字,公链为1;这个和创世块文件的chainid没有直接关联
console 启动命令行模式,可以再geth中执行命令

屏幕输出:
在这里插入图片描述
4. 连接第二个geth终端
为了方便使用,经常要打开多个终端连接到同一个私链节点,可以采用如下命令,其中ipc就是启动私链是输出的“ipc endpoint opened”

geth attach ipc:/home/ss/F/myChain/myblockchain/geth.ipc

在这里插入图片描述
5. geth创建账号、启动挖矿、停止挖矿
初始化后系统无账号,需要创建新账号,才能启动挖矿:

 eth.accounts

在这里插入图片描述

personal.newAccount("12345678");

在这里插入图片描述

eth.getBalance("0xe76c73baf75a67dd9637ad2da33d13288d73ee16");

在这里插入图片描述

miner.start()

其中start的参数表示挖矿使用的线程数。第一次启动挖矿会先生成挖矿所需的DAG文件,这个过程有点慢,等进度达到100%后,就会开始挖矿,此时屏幕会被挖矿信息刷屏

miner.stop()
  1. geth常用操作
    解锁账户
personal.unlockAccount("0xe76c73baf75a67dd9637ad2da33d13288d73ee16");

交易池状态:

txpool.status

区块总数:

eth.blockNumber

获取交易:

eth.getTransaction("0x5cff7cd36fe841a7eb35ba30f99c8851a4e57715e4b648aeb341c3c2619879cd");

获取第421个区块的信息:

eth.getBlock(421);

连接到其他节点

admin.addPeer();

设置挖矿账户:

miner.setEtherbase(eth.coinbase)

转账交易,要先检索账号:

eth.sendTransaction({from:"0xe76c73baf75a67dd9637ad2da33d13288d73ee16",to:"0x62232534fda9ffe0c5f32cf6d48568a861065fea",value:web3.toWei(100,"ether")})
  1. 创建多节点私链
    为了在本地网络运行多个以太坊节点的实例,必须确保以下几点:
    1)每个实例都有独立的数据目录,即–datadir不一样;
    2)每个实例的eth和rpc都运行在独立的端口,即–port和–rpcport参数不一样;
    3)在集群的情况下,各个实例之间都必须要知道对方;
    4)ipc的端点必须唯一,或者禁用ipc(–ipcpath、–ipcdisable)
var _msg = "helloworld" ;
var helloworldContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"say","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_msg","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]);
var helloworld = helloworldContract.new(
   _msg,
   {
     from: web3.eth.accounts[0], 
     data: '0x608060405234801561001057600080fd5b506040516102a83803806102a8833981018060405281019080805182019291905050508060009080519060200190610049929190610050565b50506100f5565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061009157805160ff19168380011785556100bf565b828001600101855582156100bf579182015b828111156100be5782518255916020019190600101906100a3565b5b5090506100cc91906100d0565b5090565b6100f291905b808211156100ee5760008160009055506001016100d6565b5090565b90565b6101a4806101046000396000f300608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063954ab4b214610046575b600080fd5b34801561005257600080fd5b5061005b6100d6565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561009b578082015181840152602081019050610080565b50505050905090810190601f1680156100c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b606060008054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561016e5780601f106101435761010080835404028352916020019161016e565b820191906000526020600020905b81548152906001019060200180831161015157829003601f168201915b50505050509050905600a165627a7a7230582025df814d9752d3868447b99930736a0ca4659b89c7a3bbc54b278cb1a62162490029', 
     gas: '4700000'
   }, function (e, contract){
    console.log(e, contract);
    if (typeof contract.address !== 'undefined') {
         console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
    }
 })

在这里插入图片描述

在线编译器:
http://remix.ethereum.org/

更进一步的开发

安装truffle。
Truffle是一个世界级的开发环境、测试框架,以太坊的资源管理通道,致力于让以太坊上的开发变得简单。简单来说,它让区块链测试变得简单。

  1. 首先安装nodejs
sudo apt-get install -y nodejs
  1. 安装truffle
sudo apt install npm
sudo npm install -g truffle
truffle version

在这里插入图片描述
3. truffle使用

truffle init
%初始化一个空项目,会生成三个文件夹 contracts(包含Migrations.sol,之后得将要部署的合约放在里面)migrations(包含1_initial_migration.js,truffle migrate会执行该js)test(空文件夹),以及两个js配置文件(一个win,一个mac/linux,与truffle部署网络相关)

truffle develop
%开启truffle自带的一个以太坊环境。并创建10个账户,带有余额,console里面调用web3接口。web3.js是以太坊去中心化应用DApp必备的JavaScript库,提供了与Geth通信的JavaScript API(https://github.com/ethereum/wiki/wiki/javascript-API),使用JSON-RPC协议与Geth通信。以太坊只提供了JSON-RPC接口,而web.js是一个封装了JSON-RPC的API库(https://github.com/ethereum/wiki/wiki/json-rpc 直接调用不方便)

truffle compile
#编译合约
truffle migrate
#部署合约

使用Solidity编译智能合约的方法:

solc --optimize --combined-json abi,bin,interface store.sol

在这里插入图片描述

部署合约的方法:

var storeContractCompiled = {"contracts":{"store.sol:SimpleStorage":{"abi":"[{\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"say\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"set\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]","bin":"608060405234801561001057600080fd5b5061015e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806360fe47b1146100465780636d4ce63c14610065578063954ab4b21461007f575b600080fd5b6100636004803603602081101561005c57600080fd5b50356100fc565b005b61006d610101565b60408051918252519081900360200190f35b610087610107565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100c15781810151838201526020016100a9565b50505050905090810190601f1680156100ee5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600055565b60005490565b60408051808201909152600781526668656c6c6f737360c81b60208201529056fea2646970667358221220bf247fbce9bac40c27360665d88d29b148d3d808beb0d1e4693de623bad26df864736f6c63430007040033"}},"version":"0.7.4+commit.3f05b770.Linux.g++"}

typeof storeContractCompiled.contracts["store.sol:SimpleStorage"].abi
"string"

var storeContract = eth.contract(JSON.parse(storeContractCompiled.contracts["store.sol:SimpleStorage"].abi))

> eth.mining
true    <--   make sure you are mining or miner.start(1)

> eth.coinbase
"0x6be8a6cad397746efc5033e27e82477e27c9afec"   <--   you will have your own address
> var deployTransactionObject = { from: eth.coinbase, data: "0x" + storeContractCompiled.contracts["store.sol:SimpleStorage"].bin, gas: 1000000 }

> personal.unlockAccount(eth.coinbase)
Unlock account 0x6be8a6cad397746efc5033e27e82477e27c9afec
Passphrase:
true

var storeContractInstance = storeContract.new(deployTransactionObject)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu安装solc编译环境步骤 的相关文章

随机推荐

  • matlab函数 在线说明,matlab函数说明

    如果你刚接触matlab 可以看这篇Matlab自定义函数详解 MATLAB自定义函数形式function a b c funname x1 x2 x3 输入变量 对于输入变量 MATLAB可以识别输入变量的个数 通过nargin来记录当前
  • VC/MFC如何设置对话框背景颜色

    方法一 调用CWinApp类的成员函数SetDialogBkColor来实现 这个函数已经废弃 1 void SetDialogBkColor COLORREF clrCtlBk RGB 192 192 192 COLORREF clrCt
  • 二、OSPFv2 LSA详解

    OSPFv2 LSA 什么是LSA LSA头格式 LSA的类型 Router LSA Type 1 路由器LSA 类型1 Network LSA Type2 网络LSA 类型2 Network Summary LSA Type3 网络汇总L
  • 考研OR工作----计算机操作系统简答题及疑难知识点总结(第二章 进程的描述与控制)

    计算机操作系统从第二章开始内容会变得异常多 还是希望能够帮助到大家 在这一章阿婆主还会把书上的典型的PV操作题给打上来 给大家用作参考 如果有问题的地方 还请大家在文章下方留言 我好更正 或者你们有更好的PV操作的解法 也欢迎大家在文章下方
  • 从入门到渐入佳境——记我的第六届字节青训营经历

    文章目录 为什么参加 开营前 开营后 做项目 准备答辩 为什么参加 参加第六届字节青训营之前 我也参加了今年5 6月的第五届青训营 最初是在我们学校一个工作室群里看到的 是一个学长发出来的 当时看到了非常感兴趣 想着是学点新知识 因为当时我
  • C++中sort函数详解

    原文链接点这 0 简介 sort函数用于C 中 对给定区间所有元素进行排序 默认为升序 也可进行降序排序 sort函数进行排序的时间复杂度为n log2n 比冒泡之类的排序算法效率要高 sort函数包含在头文件为 include的c 标准库
  • 性能测试基础概念和分类

    什么是性能测试 gt 在给定环境和场景中进行的测试活动 gt 根据测试结果评判是否存在性能问题 gt 如果存在性能问题 编辑定位性能瓶颈 并提出改进建议 性能不仅仅包括响应时间 还包括资源的占用 性能测试基本流程 1 性能测试需求分析 项目
  • vue项目中使用pdf.js预览pdf文件

    项目要求需要预览pdf文件 网上找了很久 大多数都是推荐pdf js 自己先了解了一下 最后决定用pdf js 但是发现 在vue中使用这个很少 所以我就写这一篇帮助一下vue使用pdfjs的朋友 其实 这和前端框架无关的 直接使用pdf
  • C++ 多态类型

    多态 C 在面向对象中 多态就是不同对象收到相同消息 执行不同的操作 在程序设计中 多态性是名字相同的函数 这些函数执行不同或相似的操作 这样就可以用同一个函数名调用不同内容的函数 简而言之 一个接口 多种方法 多态是以封装和继承为基础的
  • android 注册页面实现

    自己动手做的第一个demo 简单的注册页面的实现 并且注册成功后返回注册信息 适用于android新手基本控件的使用 注册页面的实现 import android os Bundle import android app Activity
  • 如果确定游戏服务器位置,如果确定游戏服务器位置

    如果确定游戏服务器位置 内容精选 换一换 远程登录服务器出现蓝屏或黑屏 可能是由于explorer exe进程异常导致的桌面无法显示 这是由于Windows服务器的explorer exe进程异常导致的 explorer exe是Windo
  • 腾讯混元大模型:新一代人机环境系统智能的发展趋势

    近日 腾讯混元大模型亮相 该通用大语言模型具备强大的中文创作能力 复杂语境下的逻辑推理能力 以及可靠的任务执行能力 同时也可以作为基底模型 为不同产业场景构建专属应用 从可靠 成熟 自研和实用的底层逻辑来看 腾讯混元大模型其实是建立在人机环
  • 算法设计学习记录(一):G-S算法实现稳定匹配

    最近这几周在复习微机原理 不可避免地重燃了对硬件的兴趣 一度想要拿下一张树莓派玩玩 好在这东西不便宜 思来想去还是决定暂时放放 一直有在考虑自己未来的发展方向 自动驾驶还是交通运输 这对我来说是一个很难决定的事情 回过头来想 其实现在确实想
  • 解决 if you already hava 64-bit JDK installed,define a JAVA_HOME variable in Computer>System....

    启动Android studio 弹窗 提示如图 一般是修改studio64 exe vmoptions文件出差 例如我的studio64 exe vmoptions位于C Users 24359 AppData Roaming Googl
  • vue3+scss开启写轮眼

    vue3 scss开启写轮眼 一 相关技术 二 使用步骤 1 安装依赖 2 眼球 3 勾玉 4 旋转动画 5 综合 一 相关技术 采用vue3 vite scss的技术内容进行开发 二 使用步骤 1 安装依赖 代码如下 npm instal
  • vue3+ts+webpack 搭建+环境配置+路由

    一 搭建 vue js webpack的项目 1 vite vue cli 版本在 4 5 0 以上 我用的5 0 4 npm install g vue cli vue V 创建项目 vue create 项目名字 安装依赖运行项目 cd
  • CentOS7 Install nodejs & npm

    1 安装nodejs npm yum install y nodejs npm 2 n Interactively Manage Your Node js Versions npm install g n 安装提示 root localho
  • 如何让 git 使用我选择的编辑器来编辑提交消息?

    问 如何全局配置 git 以使用特定编辑器 例如 vim 来提交消息 答1 一个优秀的自由职业者 应该有对需求敏感和精准需求捕获的能力 而huntsbot com提供了这个机会 设置 Git 的默认编辑器 选一个 在你的 Git 配置中设置
  • msvcp140.dll缺失解决办法

    出现dll缺失 可以考虑如下情况 推荐使用修复功能 能解决大部分情况 如果是开发者 有可能是发布的debug版本 在其它电脑没环境 下面的是各版本对应版本号 推荐使用release版本 可以解决大部分情况 msvcp msvcr vcomp
  • Ubuntu安装solc编译环境步骤

    Ubuntu安装solc编译环境步骤 cmake装过程 安装Z3 安装Boost Solidity安装 Ethereum使用 更进一步的开发 cmake装过程 solc编译器需要的cmake版本要大于3 9 0 所以要安装高于这个版本的cm