eth源码修改
『壹』 以太坊架构是怎么样的
以太坊最上层的是DApp。它通过Web3.js和智能合约层进行交换。所有的智能合约都运行在EVM(以太坊虚拟机)上,并会用到RPC的调用。在EVM和RPC下面是以太坊的四大核心内容,包括:blockChain, 共识算法,挖矿以及网络层。除了DApp外,其他的所有部分都在以太坊的客户端里,目前最流行的以太坊客户端就是Geth(Go-Ethereum)
『贰』 以太坊是什么以太坊与区块链有什么关系
以太坊是一个全新开放的区块链平台,它允许任何人在平台中建立和使用通过区块链技术运行的去中心化应用。就像比特币一样,以太坊不受任何人控制,也不归任何人所有——它是一个开放源代码项目,由全球范围内的很多人共同创建。
和比特币协议有所不同的是,以太坊的设计十分灵活,极具适应性。在以太坊平台上创立新的应用十分简便,任何人都可以安全地使用该平台上的应用。
以太坊是可编程的区块链。它并不是给用户一系列预先设定好的操作(例如比特币交易),而是允许用户按照自己的意愿创建复杂的操作。这样一来,它就可以作为多种类型去中心化区块链应用的平台,包括加密货币在内但并不仅限于此。
以太坊狭义上是指一系列定义去中心化应用平台的协议,它的核心是以太坊虚拟机(“EVM”),可以执行任意复杂算法的编码。在计算机科学术语中,以太坊是“图灵完备的”。开发者能够使用现有的JavaScript和Python等语言为模型的其他友好的编程语言,创建出在以太坊模拟机上运行的应用。
和其他区块链一样,以太坊也有一个点对点网络协议。以太坊区块链数据库由众多连接到网络的节点来维护和更新。每个网络节点都运行着以太坊模拟机并执行相同的指令。因此,人们有时形象地称以太坊为“世界电脑”。
这个贯穿整个以太坊网络的大规模并行运算并不是为了使运算更高效。实际上,这个过程使得在以太坊上的运算比在传统“电脑”上更慢更昂贵。然而,每个以太坊节点都运行着以太坊虚拟机是为了保持整个区块链的一致性。去中心化的一致使以太坊有极高的故障容错性,保证零停机,而且可以使存储在区块链上的数据保持永远不变且抗审查。
以太坊平台本身没有特点,没有价值性。和编程语言相似,它由企业家和开发者决定其用途。不过很明显,某些应用类型较之其他更能从以太坊的功能中获益。以太坊尤其适合那些在点与点之间自动进行直接交互或者跨网络促进小组协调活动的应用。
例如,协调点对点市场的应用,或是复杂财务合同的自动化。比特币使个体能够不借助金融机构、银行或政府等其他中介来进行货币交换。以太坊的影响可能更为深远。
理论上,任何复杂的金融活动或交易都能在以太坊上用编码自动且可靠地进行。除金融类应用外,任何对信任、安全和持久性要求较高的应用场景——比如资产注册、投票、管理和物联网——都会大规模地受到以太坊平台影响。
『叁』 [以太坊源码分析][p2p网络07]:同步区块和交易
同步,也就是区块链的数据的同步。这里分为两种同步方式,一是本地区块链与远程节点的区块链进行同步,二是将交易均匀的同步给相邻的节点。
01.同步区块链
02.同步交易
03.总结
ProtocolManager 协议管理中的 go pm.syncer() 协程。
先启动了 fetcher ,辅助同步区块用的。然后等待不同的事件触发不同的同步方式。
同步的过程调用 pm.synchronise 方法来进行。
ProtocolManager 协议管理中的 go pm.txsyncLoop() 协程。
同步交易循环 txsyncLoop 分为三个部分的内容:
发送交易的函数。
挑选函数。
三个监听协程的 case 。
『肆』 怎么在windows下启动以太坊java客户端ethereumj
以太坊源码go-ethereum怎么运行
安装基于MIPS的linux头文件
$ cd $PRJROOT/kernel
$ tar -xjvf linux-2.6.38.tar.bz2
$ cd linux-2.6.38
在指定路径下创建include文件夹,用来存放相关头文件。
$ mkdir -p $TARGET_PREFIX/include
保证linux源码是干净的。
$ make mrproper
生成需要的头文件。
$ make ARCH=mips headers_check
$ make ARCH=mips INSTALL_HDR_PATH=dest headers_install
将dest文件夹下的所有文件复制到指定的include文件夹内。
$ cp -rv dest/include/* $TARGET_PREFIX/include
最后删除dest文件夹
$ rm -rf dest
$ ls -l $TARGET_PREFIX/include
『伍』 orangepi5玩法
本文的软路由作为家中的二级路由,用一根网线连接主路由的LAN口和二级路由的WAN口(当主路由使用配置类似)
如果你想要作为旁路由或中继路由使用,在本文末尾会有相应文章的链接,但是Docker以及网卡的配置有一些坑建议参考本文。
准备
在开始安装之前,你需要准备好一些设备。
OrangePi5(其他版本或者树莓派都可以)
刷有系统的TF卡(以香橙派官方提供的Ubuntu镜像)
电源
一个USB的网卡(我这里用的是绿联的千兆网口,型号是AX88179。如果你的设备有多个网口的话就可以不用这个了)
双绞线若干
首先将香橙派组装好,插上USB网卡并在设备自带的网口上插上网线(网线另一端为主路由器的LAN),通电,进入系统(刷系统以及SSH配置等环节不是本文重点,详细看我以前文章或自行网络,本文默认基本环境已经配置完成并且读者能在终端简单使用vim等)
如果你要拿本设备当作主路由使用,但是身边没有其他路由器可用来帮助配置,可以将PC的网口与设备的网口用一根网线对等连接,只不过PC的默认网关必须手动设置为设备的IP地址。对等配置的方法可参考文章双网口主机通过 docker 安装 openwrt 实现软路由功能-CSDN
连接设备
使用你的PC通过SSH连接香橙派,或者直接在香橙派上接屏幕和键盘在终端中执行
网卡配置
获取信息
在终端中执行以下命令检验USB网卡是否挂载
lsusb
1
1
如果出现对应的设备信息,应纤迅该就是成功了(这里的AX88179就是我的USB网卡)
Bus 001 Device 002: ID 0b95:1790 ASIX Electronics Corp. AX88179 Gigabit Ethernet
1
1
再执行以下命令
ifconfig
1
1
一般设备自带的名称为eth0,记录它被分配的IPv4地址及子网掩码。
而USB的网卡名称与品牌和型号有关,我的名称是enx后面跟上mac地址,这需要根据你自己的情况做判断,本文以enx名称为例。(如果设备是双网口而不是用的USB网卡的话,此处应该是eth1,若果是无线网卡的话应该是wlan0。不绝对,仅供拆帆参考)
除此之外我们还要拿到默认网关的地址(默认网关一般是所连接的路由器的地址)
route -n
1
1
找到Destination字段为0.0.0.0的那一行的Gateway字段对应的地址即为默认网关
例如我拿到的ip为192.168.1.24,子网掩码为255.255.255.0,默认网关为192.168.1.1,下文将以此地址为例进行配置(你的可能跟我不一样,在配置的时毁御此候以你为准)。
另外补充一点,我们会在接下来将eth0对应的网口作为WAN口,env对应的外接USB网口作为LAN口。
开启网卡的混杂模式
执行以下命令,将上述网卡设置成混杂模式
ip link set eth0 promisc on
ip link set env promisc on
1
2
1
2
要取消的话将上述命令的on改为off即可
开启ipv4转发
修改配置文件
vim /etc/sysctl.conf
1
1
添加一行配置
net.ipv4.ip_forward = 1
1
1
或者将原文件中的net.ipv4.ip_forward = 1注释给取消
按esc+:,并输入wq保存文件后执行命令重新添加配置
sysctl -p /etc/sysctl.conf
1
1
Docker配置
安装Docker
执行以下命令
sudo apt update
sudo apt install docker
1
2
1
2
配置Docker服务开机启动
在我的设备上(OrangePi 5)总是存在设备重启,但是OpenWRT不启动的现象,即使我已经将Docker容器设为了开机自启。最后发现是Docker本身的服务没有设为开机自启。
目前对于树莓派是否会有这种情况暂不明确,读者可自行使用下放命令进行验证。
systemctl list-unit-files | grep docker
1
1
找到输出结果的docker.service一行
docker.service disabled enabled
docker.socket enabled enabled
1
2
1
2
如果如上所示,是disabled,那么说明Docker本身的服务并不是开机自启动
通过以下命令可进行修改
systemctl enable docker.service
1
1
再执行systemctl list-unit-files | grep docker输出结果变成了enabled即修改成功
docker.service enabled enabled
docker.socket enabled enabled
1
2
1
2
获取Docker镜像
由于OrangePi5是arm架构的,所以使用的镜像必须是兼容arm的
我用的是suling大佬制作的Docker镜像,这里附上Docker Hub链接
Docker Hub: https://hub.docker.com/r/sulinggg/openwrt
注意,这里与你的设备有关,本文只给出树莓派和armv8/aarch64的镜像获取操作。为方便参考,此处附上一张镜像对应设备的表格(不代表最新),但仍建议访问上述链接查看适配你设备的镜像
支持设备/平台 DockerHub 阿里云镜像仓库 (上海)
树莓派 1B sulinggg/openwrt:rpi1 registry.cn-shanghai.aliyuncs.com/suling/openwrt:rpi1
树莓派 2B sulinggg/openwrt:rpi2 registry.cn-shanghai.aliyuncs.com/suling/openwrt:rpi2
树莓派 3B / 3B+ sulinggg/openwrt:rpi3 registry.cn-shanghai.aliyuncs.com/suling/openwrt:rpi3
树莓派 4B sulinggg/openwrt:rpi4 registry.cn-shanghai.aliyuncs.com/suling/openwrt:rpi4
armv7 sulinggg/openwrt:armv7 registry.cn-shanghai.aliyuncs.com/suling/openwrt:armv7
arm8/aarch64 sulinggg/openwrt:armv8 registry.cn-shanghai.aliyuncs.com/suling/openwrt:armv8
i386_pentium4/386 sulinggg/openwrt:386 registry.cn-shanghai.aliyuncs.com/suling/openwrt:386
x86_64/amd64 sulinggg/openwrt:x86_64 registry.cn-shanghai.aliyuncs.com/suling/openwrt:x86_64
如果你的设备为OrangePi5或者其他armv8/aarch64的设备,请在终端中执行下方命令
docker pull sulinggg/openwrt:armv8
1
1
如果你的设备为树莓派2B/3B/3B+/4B,请在终端执行下方命令
docker pull sulinggg/openwrt:latest
1
1
创建WAN端口的macvlan
macvlan是linux的一种虚拟化网卡技术,可将一块物理网卡虚拟成多块虚拟网卡,并且每个虚拟网卡都可以将其虚拟mac并且指定相应的IP地址。
使用以下命令可查看系统是否支持macvlan。
modprobe macvlan
1
1
如果不支持,则需要升级Linux内核。(像OrangePi5、树莓派等官方提供的最新镜像一般都是支持的)
创建WAN端口的macvlan,名称为macnet0
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 macnet0
1
1
注意,这里需要根据上述获取到的地址来配置(根据你的实际情况来填)。subnet字段对应端口所处的网络地址192.168.1.0/24,其中的/24为子网掩码对应255.255.255.0;gateway字段对应默认网关192.168.1.1;parent对应网卡。
可执行下方命令,验证是否创建成功
docker network ls
1
1
如果输出结果的NAME字段那一列有macnet0即成功。
LAN端口的macvlan暂不创建。
启动容器
此处请先阅读参数说明再执行命令!
docker run -d --restart always --network macnet0 --ip 192.168.1.100 --privileged --name openwrt sulinggg/openwrt:armv8 /sbin/init
1
1
简单说明下几个参数:
--restart always为开机自启
--network macnet0为我们刚才创建的WAN端口的macvlan
--ip 192.168.1.100是为容器分配的ip地址,这里需要注意网段与eth0获取的一致,并且不能够冲突(也就是说当前网络下不能有其他设备的地址为192.168.1.100)。需根据自己的实际情况来配置。
--privileged为特权模式
--name openwrt容器名称为openwrt
sulinggg/openwrt:armv8对应刚才获取的镜像。如果你的设备是树莓派,并且是按照我文章上方的命令获取的,则此处为sulinggg/openwrt:latest。其他设备则须根据你获取的镜像来写。
进入容器
端口配置
输入命令即可进入容器
docker exec -it openwrt bash
1
1
Ps: 输入exit可退出容器终端
配置文件
vim /etc/config/network
1
1
将字段(不要在意这个名称,之后我们会改)
config interface 'lan'
option type 'bridge'
option ifname 'eth0'
option proto 'static'
option ipaddr '192.168.123.100'
option netmask '255.255.255.0'
option ip6assign '60'
option gateway '192.168.123.1'
option broadcast '192.168.123.255'
option dns '192.168.123.1'
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
修改为(还是根据上文和你的实际情况来)
config interface 'lan'
option type 'bridge'
option ifname 'eth0'
option proto 'static'
option ipaddr '192.168.1.100'
option netmask '255.255.255.0'
option ip6assign '60'
option gateway '192.168.1.1'
option broadcast '192.168.1.255'
option dns '192.168.1.1'
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
其中
ipaddr后的地址与Docker容器分配的地址一致
netmask后为之前获取的子网掩码
gateway后为之前获取的默认网关
broadcast后为广播地址,改成同一网段
dns后为dns地址,此处保持与默认网关一致
按esc+:,并输入wq保存文件
重启容器网络
/etc/init.d/network restart
1
1
创建LAN端口的macvlan
LAN端口的macvlan的网段可以根据你的需要人为规划,我这里以网卡env和网段192.168.2.x/24为例
创建LAN端口macvlan,名称为macnet1
docker network create -d macvlan --subnet=192.168.2.0/24 --gateway=192.168.2.1 -o parent=env macnet1
1
1
参数的含义同上文
然后,我们将容器加入到这个网络来。
docker networkc connect macnet1 openwrt
1
1
OpenWRT管理页面配置
进入管理页面
将你的PC连接到与软路由的WAN端口同一网络下,并在浏览器地址栏中输入192.168.1.100
这里的地址与上文中容器分配的地址一致,同样根据你的实际情况来。
用户名是root,默认密码为password
LAN接口配置
在默认配置中,名称为lan的接口实际上是WAN接口,这里我们再另外创建接口。
打开网络->接口,点击页面中的添加新接口,名称为LANS,协议为静态地址,以太网适配器选eth1(这里的eth1不是宿主机的,而是对应macnet1)
提交后,我们对此接口进行修改。配置如下图所示(IP地址与macnet1网段一致)
然后防火墙设置为lan区域
页面底部,取消下图中的勾选,在此端口开启DHCP服务器
然后在高级设置里,开启动态DHCP和强制DHCP
最后,点击保存&应用按钮。
防火墙设置
为了让PC能从WAN侧去访问OpenWRT,将网络->防火墙 WAN区域的入站从拒绝改为接受
点击应用&保存。
WAN接口配置
wan接口配置建议将PC连接到USB网口,然后通过地址192.168.2.1进入管理界面,因为接下来会将原有的名称为lan的接口删掉,操作不慎可能会导致当前页面无法访问。
如果连接到USB网口,PC无法通过DHCP服务获取IP,并且在PC控制台中尝试Ping命令
ping 192.168.2.1
1
1
若无法访问网关,则可以在PC上将获取IP地址的获取方式改为静态,并将设置本机IP为192.168.2.2(只要在同网段且不冲突即可),默认网关为192.168.2.1,子网掩码为255.255.255.0。
首先还是创建接口,协议推荐选择静态,以太网适配器选择eth0。
(如果你要将这个设备之后作为主路由的话,光猫模式为桥接模式,这里要改成PPPoE;如果光猫为PPPoE的话,这里就要设成DHCP)
创建完成后,点击修改,配置如下图。
防火墙与DHCP配置如下
点击保存&应用按钮。
删除原有接口
最后我们要回到网络->接口页面,删除原有的名称为lan的接口
添加静态路由
完成上述步骤你会发现LAN一侧可能无法上网,这时候添加一条静态路由规则
打开网络->静态路由,在静态IPv4路由那里点击添加
接口选择LANS,对象为192.168.2.0,子网掩码为255.255.255.0,IPv4网关为WAN口地址192.168.1.100
这时候我们回到Docker容器内终端中(注意是容器内),重启下网络
/etc/init.d/network restart
1
1
问题
LAN侧无法上网
上述配置完成后,LAN侧接入PC无法仍旧无法上网
步骤一
重启宿主机
步骤二
如果步骤一没解决问题,并且LAN侧PC访问网页显示找不到DNS服务器,可以尝试以下配置
进入到Docker容器
docker exec -it openwrt bash
1
1
打开文件
vim /etc/resolv.conf
1
1
最下方添加
nameserver 8.8.8.8
1
1
保存并重启容器网络
/etc/init.d/network restart
1
1
按理来讲是不用配置这一步的,即使修改了文件也会被管理页面的配置覆盖。但是非常邪门,在我的设备上不进行这一步会出一些上不去网的现象。请读者根据自己的情况来判断吧。(如果你不懂这些东西,建议照做)
容器网络无法访问宿主机
Docker为了保证安全性,是不允许容器去访问宿主机的,但是并不绝对可以通过配置去绕过限制
可以参考 https://www.treesir.pub/post/n1-docker/
网卡混杂重启失效问题
我在OrangePi 5 上进行配置的时候并未遇到过这种情况,但网上许多文章都提到了这种现象,所以我就写了这部分内容。
此部分参考了https://www.cnblogs.com/mokou/p/16173553.html
写个开机启动的脚本就好了
vim /etc/init.d/iplinkset.sh
1
1
写入内容
#!/bin/sh
ip link set eth0 promisc on
ip link set env promisc on
1
2
3
1
2
3
增加可执行权限
chmod +x /etc/init.d/iplinkset.sh
1
1
设置开机启动权限
update-rc.d iplinkset.sh defaults
1
1
如果要禁用开机启动,则可执行下方命令
update-rc.d -f iplinkset.sh remove
1
1
对OpenWRT容器停止或删除导致宿主机卡顿或重启
这点在Docker镜像作者的文章中提到过,原文如下:在对容器进行停止或删除操作时,树莓派可能会发生卡顿现象,SSH 可能会断开,1~2 分钟后会恢复正常,目前原因不明
OpenWRT插件问题
同样源于镜像作者文章:经测试,发现 Adblock 不工作,UnblockNeteaseMusic 需要自行设置代理,除此之外容器中的 OpenWrt 多数应用工作正常
其他配置
有些人的需求不一定跟我一样,可能会把设备拿来做旁路由等,可部分参考下方文章
旁路由(这是本文使用的Docker镜像作者的文章,比较详细):https://mlapp.cn/376.html
主路由:https://www.cnblogs.com/mokou/p/16173553.html
结束
由于作者写这篇教程的时候已经搭建完成了,加上时间仓促,上述部分操作是根据回忆来写的,甚至有些步骤没有经过二次验证,可能存在些许错误,如有发现请及时反馈。
文章知识点与官方知识档案匹配
云原生入门技能树首页概览
8792 人正在系统学习中
点击阅读全文
打开CSDN APP,看更多技术内容
树莓派4B跑 OpenWrt 根目录扩容 及 docker 配置_sean908的博客...
首先需要ssh到路由器 # 把软件包列表更新 opkg update # 安装分区软件 opkg install cfdisk # 使用cfdisk进行空间划分 cfdisk /dev/mmcblk0 我用的是16G的存储卡, 把空闲空间全拿来划给根目录和docker 其中docker分区的直接在cfdisk里...
继续访问
...树莓派_教你用树莓派安装集成docker版openwrt、homeassistant等及一...
集成DOCKER版本OPENWRT,还有HOME ASSISTANT以及N1 智能家居镜像出炉,ARMBIAN系统全DOCKER形式包含OPENWRT这两篇帖子以来,一时心痒痒,重新拿出吃灰多年的树莓派3B+以及春节入手的N1折腾了起来。
继续访问
openwrt-orangepi-zero-ext4-sdcard.img.gz
OpenWrt-Lede_18.06.02 OrangePi Zero wifi-xr819 and soc-audio enabled! OrangePi Zero 安装OpenWrt 能够实现wifi和播放音乐。 详细安装和操作步骤: First Run boot-config: http://192.168.10.1/cgi-bin/moles/boot-config/index.cgi Click Create a backup of uboot (dtb-file) Configure items to boot (wifi-xr819, Sunxi-IR, 1Wire (PA06 GPIO-6), i2c0, i2c1, pwm0, usb2-3 ..). Click Save changes. Click Apply changes, and reboot. Orange-pi reboots and a new AP appears "orangepi-zero".
热门推荐 在Docker 中运行 OpenWrt 旁路网关
步骤开始 成功登陆到树莓派的 SSH 后,在拉取镜像之前,我们还需要进行一些额外的工作: 1.打开网卡混杂模式 sudo ip link set eth0 promisc on 2.创建网络 (须结合实际网络情况,不能照抄命令) docker network create -d macvlan --subnet=192.168.123.0/24 --ga...
继续访问
openwrtx86安装docker_群晖Docker安装openwrt简易流程_weixin_3995137...
在docker安装openwrt前要准备三个前提: 一、开启ssh并启用root,这个就不赘述了,网络一下或者张大妈都有很多教程的。 二、docker安装Portainer可视化面板; 三、开启设置以太网卡开启混杂模式,docker搭建macvlan网络。
继续访问
贝壳如何docker安装openwrt_基于Docker编译openwrt_简甜XIU09161027的...
Docker确实是个好东西,当我用MAC OSX下载编译openwrt过程中遇到不少问题时,想到openwrt官网wiki建议使用的Ubuntu,于是我想到了Docker。 至于Docker怎样好,在MAC OSX里怎么安装,在这里不作细说,可参考这篇文章。
继续访问
斐讯盒子N1-docker入门二(制作openwrt)
一、准备工作 1、下载源码 git clone https://github.com/openwrt/openwrt.git 2、安装依赖包 apt-get install gcc binutils bzip2 flex python perl make find grep diff unzip gawk getopt subversion libz-dev libc 3、安装源码包 ./scripts/feeds install -a ./scripts/feeds install -a 二
继续访问
Auto_Build_OpenWrt:自动构建ARMv8设备的OpenWrt
行动OpenWrt 使用GitHub Actions构建OpenWrt并发布Docker映像 感谢P3TERX , bin20088和flippy ,这只是他们工作的结合。 发行的固件适用于S9xxx设备,Newifi_D2,G-Dock,amd64和带有rtl8125以太网设备的J4125。 随意或拉以节省时间,它将每天更新。 如何使用 您需要添加4个(至少第一个)机密,才能使Actions正常工作。 RELEASES_TOKEN ,应该是您的Github个人访问令牌,并且至少已检查public_repo 。 DOCKER_USERNAME (可选,如果不需要aarch64 docker img)是您的dockerhub用户名。 DOCKER_PASSWORD (可选,如果您不需要aarch64 docker img),它实际上不是您的dockerhub帐户的密码,而是从do
orangepi安装PHP5,OrangePi Zero 制作NAS服务器
系统选择我选择的系统是dietpi,当然你也可以尝试使用基于debian的其他系统(比如:armbian)dietpi首先添加openmediavault软件源:编辑/etc/apt/sources.list.d/openmediavault.list(没有则自行创建)vi /etc/apt/sources.list.d/openmediavault.list在openmediavault.lis...
继续访问
最新发布 Orangepi 5 Unixbench基准测试结果
OPI 5的Unixbench基准测试结果
继续访问
树莓派中利用docker搭建openwrt旁路由
树莓派中利用docker搭建openwrt旁路由 注意需要先查看内核信息(需要是aarch64) uname -m 1.查询当前网卡名称(以下均以网卡名eth0为例,请注意替换) ifconfig 2.打开网卡混杂模式 ip link set eth0 promisc on 3.创建虚拟网络 docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=eth0 macnet 4.拉取
继续访问
Docker和Docker 网卡的创建及其使用openWRT
Docker使用及其应用
继续访问
orangepi zero2 安装openwrt的docker方法
orangepi zero2 docker安装openwrt docker安装 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 或 curl -sSL https://get.cloud.io/docker | sh openwrt安装 查看网络信息 ifconfig 网卡混杂模式 ip link set eth0 promisc on 创建macvlan,ip替换自己的网络ip docker network
继续访问
使用香橙派zero2及其他单网口开发板搭建UU加速盒
使用香橙派zero2及其他单网口开发板搭建UU加速盒
继续访问
Linux 5.1移植到orange pi (五)--USB摄像头
1:mjpg-streamer在orange pi ubuntu上测试UVC camera sudo apt-get install libjpeg8-dev sudo apt-get install imagemagick sudo apt-get install libv4l-dev sudo apt-get install cmake git clone https:/...
继续访问
【云原生之Docker实战】使用Docker部署openwrt软路由
【云原生之Dokcer实战】使用Docker部署openwrt软路由
继续访问
OrangePi Zero 安装OpenWrt 实现wifi和播放音乐
OrangePi Zero 安装OpenWrt 实现wifi和播放音乐 官方Orange Pi Zero硬件规格: CPU H2 Quad-core Cortex-A7 H.265/HEVC 1080P. GPU Mali400MP2 GPU @600MHz Memory 512MB DDR3 TF card (Max. 64GB)/ NOR Flash(2MB Default not posted) 10/100M Ethernet WIFI XR819, IEEE 802.11 b/g/n 1.
继续访问
树莓派Raspberry Pi 3B+ 安装OpenWrt及配置(有线、无线联网,AP)
OpenWrt官方介绍 OpenWrt项目是一个针对嵌入式设备的Linux操作系统。OpenWrt不是一个单一且不可更改的固件,而是提供了具有软件包管理功能的完全可写的文件系统。这使您可以不使用供应商提供的应用程序选择和配置,而是通过使用软件包来定制设备以适应任何应用程序。对于开发人员来说,OpenWrt是一个无需围绕它构建完整固件就能开发应用程序的框架; 对于普通用户来说,这意味着拥有了完全定...
继续访问
ARMv8的两种执行状态: AArch64/AArch32
Copied from ARM® Compiler User Guide When compiling code, you must first decide which target the executable is to run on. An ARMv8-A target can run in different states: • AArch64 state targets execu...
继续访问
香橙派R1 Plus开发板使用OpenWRT镜像的操作说明
香橙派R1 Plus电脑开发板采用瑞芯微RK3328 四核64位处理器,拥有1GB DDR4内存、双千兆网口、TF卡插槽、散热风扇接口等功能接口,支持openWRT等操作系统,板子其中一个千兆网口是 USB3.0 转接的,实测转发速率能达到900MB以上,适合作为家庭路由器使用,其中,r1plus的openwrt系统已经配置好,可以直接用作路由器。 openwrt镜像的安装和烧写 Linux 镜像的方法是一样的,大家可以参考下香橙派官方的使用手册。下文对系统的使用做简单的说明: 1、OpenWRT
继续访问
树莓派4B跑 OpenWrt 根目录扩容 及 docker 配置
本文主要 对树莓派使用存储卡运行OpenWrt时根目录空间紧缺 及docker初始化 做简要介绍
继续访问
刷软路由系统openwrt并基础配置网络
首先常见路由线路有 光猫拨号 => 路由器ap 光猫拨号 => 路由器ap => 软路由(单臂路由) 光猫拨号 => 软路由 => 路由器ap (隔一层nat转发) 光猫桥接 => 软路由 => 路由器ap (软路由拨号) ...
继续访问
双千兆网口开发板香橙派R1 Plus 运行OpenWRT系统使用Samba网络共享
香橙派Zero2开发板采用全志H616 四核 64位处理器,512MB/1GB 内存可选,集成千兆以太网、蓝牙5.0+双频WiFi、USB2.0、Micro-HDMI等端口,适配了OpenWRT系统,可做路由器方案。 下文将介绍安装OpenWRT后如何使用Samba 网络共享: 1) 点击“服务”->“网络”进入Samba 网络共享管理页面 2) 点击底部“新增”需要共享的目录,这里以设置共享/mnt 目录为例,设置好共享 目录的名称、路径和权限后,点击“保存并应用” 3) 在 w.
继续访问
orangepi zero2部署网心云docker版
orangepi zero2部署网心云docker版
继续访问
树莓派docker安装openwrt
docker
linux
写评论
评论
收藏
点赞
踩
分享
前往
×
『陆』 【深度知识】以太坊数据序列化RLP编码/解码原理
RLP(Recursive Length Prefix),中文翻译过来叫递归长度前缀编码,它是以太坊序列化所采用的编码方式。RLP主要用于以太坊中数据的网络传输和持久化存储。
对象序列化方法有很多种,常见的像JSON编码,但是JSON有个明显的缺点:编码结果比较大。例如有如下的结构:
变量s序列化的结果是{"name":"icattlecoder","sex":"male"},字符串长度35,实际有效数据是icattlecoder 和male,共计16个字节,我们可以看到JSON的序列化时引入了太多的冗余信息。假设以太坊采用JSON来序列化,那么本来50GB的区块链可能现在就要100GB,当然实际没这么简单。
所以,以太坊需要设计一种结果更小的编码方法。
RLP编码的定义只处理两类数据:一类是字符串(例如字节数组),一类是列表。字符串指的是一串二进制数据,列表是一个嵌套递归的结构,里面可以包含字符串和列表,例如["cat",["puppy","cow"],"horse",[[]],"pig",[""],"sheep"]就是一个复杂的列表。其他类型的数据需要转成以上的两类,转换的规则不是RLP编码定义的,可以根据自己的规则转换,例如struct可以转成列表,int可以转成二进制(属于字符串一类),以太坊中整数都以大端形式存储。
从RLP编码的名字可以看出它的特点:一个是递归,被编码的数据是递归的结构,编码算法也是递归进行处理的;二是长度前缀,也就是RLP编码都带有一个前缀,这个前缀是跟被编码数据的长度相关的,从下面的编码规则中可以看出这一点。
对于值在[0, 127]之间的单个字节,其编码是其本身。
例1:a的编码是97。
如果byte数组长度l <= 55,编码的结果是数组本身,再加上128+l作为前缀。
例2:空字符串编码是128,即128 = 128 + 0。
例3:abc编码结果是131 97 98 99,其中131=128+len("abc"),97 98 99依次是a b c。
如果数组长度大于55, 编码结果第一个是183加数组长度的编码的长度,然后是数组长度的本身的编码,最后是byte数组的编码。
请把上面的规则多读几篇,特别是数组长度的编码的长度。
例4:编码下面这段字符串:
The length of this sentence is more than 55 bytes, I know it because I pre-designed it
这段字符串共86个字节,而86的编码只需要一个字节,那就是它自己,因此,编码的结果如下:
184 86 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
其中前三个字节的计算方式如下:
184 = 183 + 1,因为数组长度86编码后仅占用一个字节。
86即数组长度86
84是T的编码
例5:编码一个重复1024次"a"的字符串,其结果为:185 4 0 97 97 97 97 97 97 ...。
1024按 big endian编码为004 0,省略掉前面的零,长度为2,因此185 = 183 + 2。
规则1~3定义了byte数组的编码方案,下面介绍列表的编码规则。在此之前,我们先定义列表长度是指子列表编码后的长度之和。
如果列表长度小于55,编码结果第一位是192加列表长度的编码的长度,然后依次连接各子列表的编码。
注意规则4本身是递归定义的。
例6:["abc", "def"]的编码结果是200 131 97 98 99 131 100 101 102。
其中abc的编码为131 97 98 99,def的编码为131 100 101 102。两个子字符串的编码后总长度是8,因此编码结果第一位计算得出:192 + 8 = 200。
如果列表长度超过55,编码结果第一位是247加列表长度的编码长度,然后是列表长度本身的编码,最后依次连接各子列表的编码。
规则5本身也是递归定义的,和规则3相似。
例7:
["The length of this sentence is more than 55 bytes, ", "I know it because I pre-designed it"]
的编码结果是:
248 88 179 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 163 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
其中前两个字节的计算方式如下:
248 = 247 +1
88 = 86 + 2,在规则3的示例中,长度为86,而在此例中,由于有两个子字符串,每个子字符串本身的长度的编码各占1字节,因此总共占2字节。
第3个字节179依据规则2得出179 = 128 + 51
第55个字节163同样依据规则2得出163 = 128 + 35
例8:最后我们再来看个稍复杂点的例子以加深理解递归长度前缀,
["abc",["The length of this sentence is more than 55 bytes, ", "I know it because I pre-designed it"]]
编码结果是:
248 94 131 97 98 99 248 88 179 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 163 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
列表第一项字符串abc根据规则2,编码结果为131 97 98 99,长度为4。
列表第二项也是一个列表项:
["The length of this sentence is more than 55 bytes, ", "I know it because I pre-designed it"]
根据规则5,结果为
248 88 179 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 163 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
长度为90,因此,整个列表的编码结果第二位是90 + 4 = 94, 占用1个字节,第一位247 + 1 = 248
以上5条就是RPL的全部编码规则。
各语言在具体实现RLP编码时,首先需要将对像映射成byte数组或列表两种形式。以go语言编码struct为例,会将其映射为列表,例如Student这个对象处理成列表["icattlecoder","male"]
如果编码map类型,可以采用以下列表形式:
[["",""],["",""],["",""]]
解码时,首先根据编码结果第一个字节f的大小,执行以下的规则判断:
1.如果f∈ [0,128),那么它是一个字节本身。
2.如果f∈[128,184),那么它是一个长度不超过55的byte数组,数组的长度为 l=f-128
3.如果f∈[184,192),那么它是一个长度超过55的数组,长度本身的编码长度ll=f-183,然后从第二个字节开始读取长度为ll的bytes,按照BigEndian编码成整数l,l即为数组的长度。
4.如果f∈(192,247],那么它是一个编码后总长度不超过55的列表,列表长度为l=f-192。递归使用规则1~4进行解码。
5.如果f∈(247,256],那么它是编码后长度大于55的列表,其长度本身的编码长度ll=f-247,然后从第二个字节读取长度为ll的bytes,按BigEndian编码成整数l,l即为子列表长度。然后递归根据解码规则进行解码。
以上解释了什么叫递归长度前缀编码,这个名字本身很好的解释了编码规则。
(1) 以太坊源码学习—RLP编码( https://segmentfault.com/a/1190000011763339 )
(2)简单分析RLP编码原理
( https://blog.csdn.net/itchosen/article/details/78183991 )
『柒』 以太坊源码go-ethereum怎么运行
以太币(ETH)是以太坊(Ethereum)的一种数字代币,开发者们需要支付以太币(ETH)来支撑应用的运行。以太币和其他数字货币一样,可以在交易平台上进行买卖。 通俗一点说,以太坊是开源平台数字货币和区块链平台,它为开发者提供在区块链上搭建...
『捌』 以太网数据帧的监听与分析
楼上说的对,这不是一句两句话能说玩的,问题也不是一分钟两分钟能解决的了的,编写代码不是一天两天能搞定的。。。楼主,我劝你还是不要对这里报希望了
『玖』 linux系统怎么挖以太坊
如何使用Linux系统挖矿,要使用到哈鱼矿工的服务,只需要两步,就可以在Linux系统上挖矿。
打开 网站,输入手机号,选择你要使用多少CPU来挖矿,默认为使用50%的CPU进行挖矿,点击生成你的专属命令并复制
只需要两步,你就可以在Linux系统上挖矿,你所挖的钱只需要到哈鱼矿工网站上,输入你的手机号即可提现。