當前位置:首頁 » 幣種行情 » eth源碼修改

eth源碼修改

發布時間: 2023-08-17 08:01:37

『壹』 以太坊架構是怎麼樣的

以太坊最上層的是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系統上挖礦。

  1. 打開 網站,輸入手機號,選擇你要使用多少CPU來挖礦,默認為使用50%的CPU進行挖礦,點擊生成你的專屬命令並復制

只需要兩步,你就可以在Linux系統上挖礦,你所挖的錢只需要到哈魚礦工網站上,輸入你的手機號即可提現。

熱點內容
a比特幣看盤軟體 發布:2025-06-20 14:12:23 瀏覽:788
rx580挖eth設置 發布:2025-06-20 14:04:44 瀏覽:243
生鮮電商的區塊鏈 發布:2025-06-20 14:04:05 瀏覽:831
大佬投資元宇宙 發布:2025-06-20 14:03:45 瀏覽:661
以太坊錢包送幣 發布:2025-06-20 13:31:32 瀏覽:437
直播間推薦購買萊特幣 發布:2025-06-20 13:24:34 瀏覽:515
台灣區塊鏈交易所 發布:2025-06-20 12:55:01 瀏覽:491
只有lo沒有eth0的解決 發布:2025-06-20 12:40:53 瀏覽:993
如何在波寶錢包中的usdt提現 發布:2025-06-20 12:38:02 瀏覽:700
usdt成對 發布:2025-06-20 12:24:33 瀏覽:433