在pi 3b型上安裝並運行以太坊區塊鏈客戶端。
區塊鏈現在是一個令人難以置信的熱門話題,並且已經有一段時間了,這在很大程度上是因為加密貨幣- 主要是比特幣- 似乎為他們的早期採用者在一夜之間產生的財富,以及它們開闢的新的經濟可能性。
然而,區塊鏈不僅僅可以用於加密貨幣,而且正如greig在其最近發布的文章中指出的那樣,其分佈式性質和驗證交易的防篡改記錄能力可用於物聯網應用。以太坊平台令人興奮的是它不僅僅是簡單的加密貨幣和安全交易,還提供分佈式計算平台。
在這篇文章中,我們將簡要介紹一下以太坊體系結構,並嘗試介紹一些主要概念和組件,然後再繼續在raspberry pi上安裝客戶端軟件。需要說明的是,我們不會挖掘任何加密貨幣,因為您確實需要一個強大的gpu,但是可以使用pi創建一個簡單的沙箱進行實驗- 這也表明區塊鏈技術確實是可以運行在嵌入式平台。
以太坊101
contractmortal{ /*definevariableownerofthetypeaddress*/ addressowner; /*thisfunctionisexecutedatinitializationandsetstheownerofthecontract*/ functionmortal(){owner=msg.sender;} /*functiontorecoverthefundsonthecontract*/ functionkill(){if(msg.sender==owner)selfdestruct(owner);}}contractgreeterismortal{ /*definevariablegreetingofthetypestring*/ stringgreeting; /*thisrunswhenthecontractisexecuted*/ functiongreeter(string_greeting)public{ greeting=_greeting; } /*mainfunction*/ functiongreet()constantreturns(string){ returngreeting; }}
以太坊智能合約的示例。資料來源:ethereum.org
區塊鍊是一個分佈式記錄本,通常通過點對點網絡進行管理,並隨著記錄或區塊越來越多,它的大小也會不斷增長。區塊通常包含有交易數據的時間戳,並通過散列算法加密保護,這樣一旦數據被提交,它就不能被修改。
以太坊平台擁有自己的加密貨幣,稱為以太幣ether,但它也進一步構造區塊鏈技術,為智能合約創造分散平台- 包含代碼函數和區塊鏈函數,並能夠與其他合同進行交互,作出決定,存儲數據,並將以太幣發送給其他人。
智能合約通過基於 javascript 的 solidity 語言實現。 solidity編譯器用於將智能合約編譯為字節碼 - 就像使用javascript或python,java和android等代碼執行 - 然後通過以太坊虛擬機(ethereum virtual machine)執行。在智能合約中執行交易產生一定的成本,這是我們將在未來的文章中介紹到。
以太坊提供了許多不同的客戶端應用程序,原始參考實現geth以go編寫。其中一些可以挖掘以太幣。另外還有獨立的挖掘軟件,好像另外還有gui客戶端和分佈式應用程序的ide。
除主要的公共以太坊區塊鍊網絡mainnet 之外,還有用於實驗性質的測試網絡,您也可以創建自己的專用網絡。
安裝geth
假設我們已經安裝了raspbian,我們便可以開始更新已安裝的軟件包到最新版本。
$sudoapt-getupdate $sudoapt-getdist-upgrade
我在第一次編譯以太坊客戶端時用完了內存。為內存密集型任務釋放內存的一個好方法就是減少分配給gpu的數量。實際上,如果您不需要圖形桌面,請將將系統簡單地配置成引導到命令行。
$sudoraspi-config
3 → boot
b1 → desktop / cli
b1 → console
7 → advanced
a3 → memory split
16 (mb)
reboot
接下來,如果我們安裝相關的安裝包。
$sudoapt-getinstallgitgolanglibgmp3-dev
之後,如果我們抓取geth的源代碼,一個以太坊節點的官方語言實現,編譯這些代碼並將可執行文件複製到/usr/local/bin/。
$mkdirsrc $cdsrc $gitclone-brelease/1.7https://github.com/ethereum/go-ethereum.git $cdgo-ethereum $make $sudocpbuild/bin/geth/usr/local/bin/
創建帳戶並進行測試
首先,如果我們使用geth來創建一個新帳戶。
$gethaccountnew
這將生成一組新的加密密鑰並使用密碼保護私鑰。請注意,如果您使用此帳戶來挖掘加密貨幣並進行有意義的交易,您則需要確保備份您的密鑰並防止您的私鑰被訪問。
現在開始啟動節點。
$geth--syncmodelight--cache64--maxpeers12
如果我們在沒有任何參數的情況下運行geth,它會啟動一個節點並嘗試同步整個公共mainnet區塊鏈。其大小超過50gb並且不斷增長,這對嵌入式計算機可能不是一個好主意。所以,我們以輕型同步模式啟動節點。這只會隨著它們的出現以及區塊鏈的其他部分按需提取區塊標題。
要強制節點退出,只需按ctrl-c在啟動時將其作為服務運行:
$sudovi/etc/systemd/system/geth@.service
(用你最喜歡的文本編輯器替換“vi”)
然後輸入:
[unit]description=ethereumdaemon requires=network.target[service]type=simple user=%i execstart=/usr/local/bin/geth--syncmodelight--cache64--maxpeers12restart=on-failure[install]wantedby=multi-user.target
保存文件並將以太坊節點作為“pi”用戶運行:
$sudosystemctlenablegeth@pi.service $sudosystemctlstartgeth@pi.service
當我們的以太坊節點作為服務運行時,我們現在可以使用以下方式連接到它:
$gethattach
例如:這給了我們提供了一個交互式的javascript控制台。從這裡我們可以調用函數功能,例如:
>eth.accounts
列出當前帳戶。
或者獲取關於連接者的信息:
>admin.peers
請注意,輕量級客戶端協議仍處於開發階段,在某種程度上是試驗性應用,並且依靠完整的對等點/節點來支持它。因此,撰寫本文時可能未能完整地運行以太坊主網區塊鏈。也就是說,事情正在快速地發展,而這種情況在不太遙遠的將來也會很容易發生變化。
接下来
到目前為止,我們剛剛安裝了客戶端軟件,創建了帳戶,啟動了節點並觀察了對等連接。在下一篇文章中,我們將看看實際執行的交易。
STM32CubeMX之串口接收不定长数据
联发科发出声明否认与小米结束合作的传闻
FreeRTOS源代码结构与基本目录
企业利益怎样用区块链技术来增加
基于Linux服务器和VLAN实现策略路由的技术方案
用樹莓派探索以太坊 - 第1部分:入門 (繁體)
你怎么看待科大讯飞前员工被判赔1200万?
到底该不该让青少年使用VR设备
基于LTM8042的DC1511三种拓扑的测试结果
瑞萨G2UL工业核心板内存测试,您想了解的内容全都有
基于STC12C5A60S2单片机中的AD采样实时采样用于检测电路是否正常的设计
HONEYWELL霍尼韦尔传感器芯片推出了一种新的自诊断传感器
长安新能源空气净化技术车展吸睛
全新IC产品系列—SENZero
关于FPGA的分析和介绍以及应用
Maxim推出低成本MAXQ613,扩展其MAXQ61x微控
英特尔与AMD开启了CPU的价格战
小米9将是史上最好看的小米手机且拥有超级强悍的硬件性能
“迪文杯”淄博技师学院电气工程系师生技能比武活动成功举办
探秘“光”的奥妙,用创新光学技术释放数字化的力量