以太坊開發方案
❶ 浠ュお鍧婄殑DApp鏈夊摢浜
浠ュお鍧婄殑DApp鏈夊摢浜涳紵
浠ュお鍧婃槸鐩鍓嶆渶钁楀悕鐨勫尯鍧楅摼騫沖彴涔嬩竴錛屽畠鎻愪緵浜嗕竴涓鍘諱腑蹇冨寲鐨勭幆澧冿紝璁╁紑鍙戣呭彲浠ュ壋寤哄熀浜庡尯鍧楅摼鐨勫垎甯冨紡搴旂敤紼嬪簭錛圖App錛夛紝榪欎簺DApp鍙浠ュ疄鐜板悇縐嶅悇鏍風殑鍔熻兘銆備笅鏂囧皢浠嬬粛涓浜涗互澶鍧婄殑鐭ュ悕DApp銆
1.CryptoKitties
CryptoKitties鏄浠ュお鍧婁笂鏈钁楀悕鐨凞App涔嬩竴錛屽畠鏄涓涓鍩轟簬鍖哄潡閾劇殑鏀墮泦鍗$墝娓告垙銆傚湪榪欎釜娓告垙涓錛屼綘鍙浠ユ敹闆嗐佺箒孌栧拰浜ゆ槗鉶氭嫙鐚銆傛瘡鍙鐚閮芥湁鍏剁嫭涓鏃犱簩鐨勫熀鍥犲簭鍒楋紝榪欎嬌寰楀畠浠涓庡叾浠栫尗鍦ㄥ栬傚拰鐗瑰緛涓婃湁鎵涓嶅悓銆侰ryptoKitties璁╀漢浠鍦ㄧ幇瀹炰笘鐣屼箣澶栨敹闆嗙弽紼鐨勬暟瀛楄祫浜э紝榪欎嬌瀹冩垚涓轟簡涓涓闈炲父鍙楁㈣繋鐨凞App銆
2.Gnosis
Gnosis鏄涓涓寤虹珛鍦ㄤ互澶鍧婁笂鐨勫幓涓蹇冨寲棰勬祴甯傚満銆傚畠鍏佽哥敤鎴風敤鍔犲瘑璐у竵涓嬫敞鍚勭嶄簨浠剁殑緇撴灉錛屾瘮濡傝皝浼氳耽寰椾竴鍦烘瘮璧涳紝鍝涓鏀垮厷灝嗗湪閫変婦涓鑾瘋儨絳夈傞氳繃璁╁ぇ閲忓弬涓庤呭弬涓庢姇娉錛孏nosis鍙浠ラ勬祴鏈鏉ヤ簨浠剁殑鍙鑳界粨鏋滐紝騫惰╁競鍦哄弬涓庤呭埄鐢ㄨ繖縐嶄俊鎮鏉ュ仛鍑烘洿濂界殑鎶曟敞鍐崇瓥銆
3.MakerDAO
MakerDAO鏄涓涓鍩轟簬鍖哄潡閾劇殑鍊熻捶騫沖彴錛屽畠浣跨敤涓縐嶇ǔ瀹氬竵錛圖AI錛変綔涓鴻捶嬈懼拰榪樻劇殑璐у竵銆侱AI鏄涓涓涓庣編鍏冩寕閽╃殑鍔犲瘑璐у竵錛屽叾浠峰間繚鎸佸湪1緹庡厓宸﹀彸錛屽彲浠ョ敤浜庤繘琛屽熻捶鎴栬呮敮浠樸傚熸句漢闇瑕佹姷鎶間互澶鍧婃垨鍏朵粬鏍囧噯鍔犲瘑璐у竵浣滀負鎶墊娂鍝侊紝浠ヨ幏鍙栧熸撅紝鍊熸劇殑鍒╃巼鐢卞競鍦哄喅瀹氥
4.Augur
Augur鏄涓涓鍘諱腑蹇冨寲鐨勯勬祴甯傚満騫沖彴錛屽彲浠ヨ╃敤鎴蜂笅娉ㄤ換浣曞彲鑳芥т簨浠剁殑緇撴灉銆備笌Gnosis涓嶅悓錛孉ugur灝嗛噸鐐規斁鍦ㄩ勬祴鐪熺浉涓婏紝榪欐剰鍛崇潃甯傚満鍙備笌鑰呭彲浠ヨ幏寰椾笌鐪熺浉鎺ヨ繎鐨勬敹鐩婏紝鑰屼笉鏄鍙鏄綰綺瑰湴鑾峰緱甯傚満鏀剁泭銆
鎬葷粨
榪欎簺DApp鏄浠ュお鍧婁笂鏈钁楀悕鐨勪竴浜涘簲鐢錛屽畠浠鍦ㄦ彁渚涘幓涓蹇冨寲鐨勭幆澧冧笅瑙e喅浜嗚稿氬悇縐嶅悇鏍風殑闂棰橈紝浠庢暟瀛楄祫浜ф敹闆嗭紝鍒伴勬祴甯傚満鍜岃捶嬈俱傞殢鐫浠ュお鍧婂拰鍖哄潡閾炬妧鏈鐨勪笉鏂鍙戝睍錛屾垜浠鍙浠ユ湡寰呯湅鍒版洿澶氱殑搴旂敤紼嬪簭錛屾潵瀹炵幇鏇村氭湁瓚g殑闂棰樼殑瑙e喅鏂規堛
❷ 「官方」搭建Web3:Filecoin與以太坊攜手共進
這是Protocol Labs創始人Juan Benet在EthCC 2021上的演講概要,查看完整內容:
https://www.bilibili.com/video/BV1eb4y1r7E1
Filecoin網路是面向生態的,它與Protocol Labs搭建模塊化解決方案的傾向是一致的。因為它本來就是設計給其他人使用,所以Filecoin在Web3領域的其他棧、應用和生態里如魚得水。自從其在2020年10月的啟動開始,Filecoin已經增長到超過8 exbibytes的可用存儲空間,有超過400個項目進入了這個生態。以太坊就是一個能持續證明其可協作性和共同利益的生態系統。
Filecoin + 以太坊
>>>>Filecoin和以太坊虛擬機(EVM)
Filecoin生態意識到網路支持智能合約的好處。最初,開發者社區相信架設在以太坊和Filecoin之間的橋服務足夠在Filecoin上支持智能合約了。不過,通過橋來使用智能合約是很笨重的方式,相比於直接在以太坊實現智能合約的功能和可組合性更是不足。有一個提議是在Filecoin上加入以太坊虛擬機(EVM),從而在存儲層啟用對智能合約的支持,以及為這兩個生態的結合提供更多機會。
>>>>開發者工具和資源
Fleek:讓用戶能為去中心化網路架設網站、存儲和分發文件及開發dapp。Fleek可以讓每一個人(從專業的開發者到日常的互聯網用戶)更容易以去中心化的方式創建app和存儲文件,從而加速去中心化網路的採用率。Fleek可以在Filecoin上進行自動化存檔,並通過ENS(以太坊域名服務)這樣的應用來利用以太坊的生態系統。
https://fleek.co/
Web3.Storage:是一個讓開發者在Filecoin去中心化存儲網路上存取數據的簡單介面。Web3.Storage為開發者(包括以太坊dapp開發者)提供了搭建應用的簡單方式,這些應用可以帶有冗餘的去中心化的存儲以及安全的內容定址數據。
http://web3.storage/
PowerLoom:以去中心化的方式將鏈上和鏈下數據聚合起來以生成帶有密碼學證明的快照。它旨在通過一個豐富的節點和利益相關者生態系統(他們被激勵參與到協議里)來搭建信任,並按需提供洞見。PowerLoom特別適用於以太坊DeFi這樣的生態,這類系統是非常復雜的,而且需要基於驗證的信任。
https://powerloom.io/
>>>>DeFi應用
SecuredFinance(https://secured-finance.com/)是一個綜合平台,整合了基於智能合約的點對點固定利率貸款、抵押品管理服務、貨幣間交易和其他類型的利率產品。Secured Finance的協議是去中心化的點對點金融協議,提供了由以太坊智能合約賦能的區塊鏈上的中後台銀行業務。Secured Finance可以滿足Filecoin網路內的需求,它提供的解決方案能夠滿足Filecoin存儲提供者對FIL貸款的強烈需求。
>>>>數據市場
OceanProtocol(https://t.co/misApE3ggc?amp=1)是一個在Filecoin上搭建的數據市場。Ocean的數據token(data tokens)是以太坊ERC-20 token,可以輕易地用於發布和消費數據服務。如果你有1個數據token,你可以訪問一個特定的數據服務。Ocean market是一個專門為數據服務的去中心化交易所,它分叉了一個Balancer AMM(自動化做市商)來降低gas成本。在這個市場中,用戶可以對數據進行發布、購買、銷售、消費和stake操作。
通過Filecoin,用戶可以利用Ocean來發起自己的Filecoin數據市場,或創建一個Filecoin dataDAO或指數基金。通過Ocean Protocol的工具和Filecoin的去中心化存儲資料庫,我們正見證新生的開放數據經濟。
>>>>視頻應用
LivePeer:是一個去中心化的在線視頻流媒體基礎設施,由以太坊區塊鏈確保安全性。將Filecoin和IPFS結合提供存儲和內容分發功能後,去中心化視頻應用就成為可能了。
https://livepeer.org/
Voodfy:正為私有的視頻架設服務提供去中心化工具。這是一個多功能的安全流媒體解決方案,讓用戶能完全控制自己的內容,這包括了訪問權的設定以及變現的方式。它利用了Livepeer、Ethereum、Textile Powergate和Filecoin.
https://voodfy.com/
VideoCoin:正搭建一個能可靠地創建、存儲和交易基於視頻的NFT解決方案,它可以繞過在以太坊上存儲實際內容時固有的復雜性和費用。VideoCoin正將其去中心化視頻處理網路與Filecoin整合起來,以搭建首個專門為創建和交易視頻NFT服務的平台。這個平台是新生的全球數字收藏品市場急需的一部分。
https://videocoin.io/
>>>>NFT
nft.storage(http://nft.storage/)是一個由Protocol Labs實驗室和Pinata支持的服務,它專門為存儲NFT數據而設計。
nft.storage讓開發者通過內容定址和去中心化存儲來保護其NFT資產和相關的元數據,確保所有的NFT遵循最佳實踐以實現長期的可訪問性。
未來的使用場景
隨著Filecoin和Ethereum生態系統的成長和重疊,會出現更多的新生用例和開發者機會。一些可以進行創新的用例包括:
>>>>可組合的DeFIL
將存儲和Defi的世界結合可以產生一些機會。人們可以將市場訂單(如要價、出價和交易)帶到一個去中心化交易所上,以觀察市場是如何評判這些訂單的價值的。通過這樣的能力,生態系統可以開始想像硬體期貨(hardware futures)和時空期貨(spacetime futures)等的出現。
>>>>數據豐富的NFT
NFT將會越來越復雜,而Web3社區需要 探索 採用數據豐富(data-rich)的NFT的方式。VideoCoin已經將其視頻處理引擎與Filecoin連接起來,以結合以太坊對NFT的支持能力及Filecoin的存儲能力。像VideoCoin這樣的工具可以用來創建一類新型的NFT,如短電影、視頻片段和完整長度的專題特寫。
>>>>按觀看次數支付的媒體
通過在Filecoin上存儲的信息,我們可以利用以太坊的token支持能力去創建由token保護的頁面和媒體(文章、電影和音樂等)。我們可以復制Web2時代的按觀看次數支付模式,而無需復制數據和廣告模型。
這只是一個開始!Filecoin和以太坊生態有長期的協作 歷史 和機會,未來可期。
❸ 以太坊的使命是成為一台分布式世界級計算機
以太坊的使命是成為一台分布式世界級計算機,取代傳統的伺服器集群。我們可以把它看作是一種可以在全世界使用的計算設備,它不能停止和關閉。這篇文章是以太坊路線圖的初學者指南,解釋了它在技術上是如何工作的
如果以太坊是一台計算機,這些更新中的每一個都可以被視為操作系統(OS)升級,類似於谷歌的安卓系統升級或蘋果的IOS系列,以太坊將分四個階段
在這四個階段發布其版本,以太坊將增加新功能,提高平台的用戶友好性和系統安全性,並提高以太坊的可擴展性
第一階段,frontier(2015年7月):以太坊發布了第一個版本,允許開發者挖掘以太坊,並基於以太坊
第二階段開發DAPP和工具軟體,宅基地(2016年3月):發布了第一個版本的生產環境,優化和改進了許多協議,為後續升級奠定了基礎,並加速了交易速度 第三階段,大都會(2017年10月):第三階段分為兩個版本,命名為拜占庭(2017年10月)和君士坦丁堡(時間待定,預計2018年),這將使以太坊更輕、更快、更安全
第四階段,寧靜(時間待定):此版本將使用期待已久的持有證明(POS),它將使用Casper consensus演算法
所有這些更新將幫助以太坊實現更大的規模,這也意味著更快的事務速度和更低的成本。正如我們所看到的,以太坊團隊在事務擴展方面做得非常好
metropolis的目標是實現更輕、更快和更安全的以太坊版本,這也將為智能合約開發商提供更大的靈活性
大都市將分為兩個核心版本:拜占庭和君士坦丁堡。第一次拜占庭硬分叉發生在10月,第二次君士坦丁堡硬分叉尚未確定日期,但預計將在2018年
每個階段包括一系列以太坊改進建議(EIP)。拜占庭共有九個EIP,用於提高網路的隱私性、可擴展性和安全性。這些更新將使以太坊區塊更快,交易成本更低
以下是對Metropolis的一些主要更新:
隱私-實現
匿名交易(zk SNARK)更易於開發人員編譯
程序更可預測
汽油費提高錢包安全性
帳戶抽象提高挖掘難點
隱私
在metropolis版本中,開發人員將獲得一個新的隱私工具-有效地驗證ZK snarks在鏈上的能力。ZK snarks是「非互動式零知識證明」
簡言之,零知識證明是一種能夠證明陳述真實性的證據,並且不會披露超過證明所需的信息
這是一個簡單的例子。我需要向約翰證明我知道手機的密碼。為了證明這一點,我所需要做的就是解鎖手機,而不是泄露我輸入的密碼
零知識證明是,當驗證人(I)說服驗證人(John)時,他們可以證明自己擁有一定的知識,而不必暴露真實的知識內容。在本例中,我可以在手機中輸入密碼並顯示手機已解鎖,而不顯示我輸入的任何密碼
那麼這將如何影響以太坊的開發?某些連接變數可以是私有的。我們與用戶一起存儲這些信息,而不是將這些秘密信息存儲在區塊鏈中。發送方、接收方、金額和數據等信息可以隱藏在交易中
除了zksnarks(用於zcash)之外,以太坊還將使用環簽名(用於monero的隱私方案)。以太坊將利用這兩個優勢。
#數字貨幣# #比特幣[超話]# #歐易OKEx#
❹ 2022年區塊鏈領域的四大看點|界面預言家⑯
區塊鏈領域有一個關於「不可能三角」的核心命題,分別是安全性、性能和去中心化程度。這個命題是區塊鏈技術演進的根本,不管是比特幣還是以太坊,亦或是大力發展的聯盟鏈,本質上都是在以上三要素之間作出取捨。
隨著以太坊在區塊鏈開發者之間核心地位的確定,性能逐漸成為其發展的瓶頸,所以在可見的2022年,關於性能上和效率的提升將是一個長期且關鍵的問題。
基於以太坊生態,要在「不可能三角」的限定內提升性能,目前的路徑已經明確,第一個是Layer1層面的,也就是其他公鏈來分擔以太坊的數據壓力。
2021年的主要趨勢之一是出現很多Layer 1的使用增加,該領域目前由 Solana、Avalanche、Terra 和 Binance Smart Chain 主導,每個鏈都擁有不斷增長的生態系統,價值已超過100 億美元。
第二種是Layer2,基於以太坊主網,但將結算轉移至第二層網路,從而提升效率。這也是以太坊正在努力的方向,Layer2通常稱為 rollups,因為它們在將更新的交易數據發送回以太坊之前,將交易「匯總」或捆綁在一起並在新環境中執行它們。
而區塊鏈最關鍵的數據驗證環節,Layer2目前有兩種技術方案,一種名為「Optimistic rollups」,一種名為「ZK Rollups」。這兩種技術路線都有團隊正在開發相應的網路,並有生態支持,如選擇「Optimistic rollups」的Arbitrum,選擇「ZK Rollups」的dYdX。
而介於Layer1與Layer2之間,還有一種方案名為「側鏈」,它部分兼容以太坊主網,但又不屬於Layer2,它們專門用於處理以太坊的過剩容量,而不是與整個以太坊競爭,並以互補的方式託管以太坊應用程序。
而從目前用戶最活躍的DeFi說起,根據DeFi Lama的數據統計,以太坊上DeFi的鎖倉量已經超過1000億美元,BSC、Solana、Avalanche等其它公鏈也吸引了近490億美元的資金,成為了一個非常活躍的金融場景。
雖然很多公鏈的數據頗具規模,但不同的鏈間如同數據孤島,不同鏈上的資產無法自由交換,此外,很多新興公鏈發展並不如以太坊,缺失很多基礎設施,比如穩定幣、NFT 游戲 等等。
因此,需要將其它鏈上的資產通過跨鏈引入自身的公鏈,在當前常用的跨鏈方式中,除了中心化機構如交易所錢包中跨鏈提幣之外,最常見的就是各種去中心化跨鏈資產橋。
對於跨鏈橋而言,最重要的問題就是如何達成共識,這在很大程度上關系著投資者託管資產的安全性,就目前來說,中心化交易所的跨鏈橋對用戶而言是最方便使用的一種跨鏈橋,不過中心化交易所跨鏈橋存在著單點故障的問題,另外現在的跨鏈橋還在逐漸向非託管化的方向去發展,為的就是進一步的保障用戶的資產安全。
DAO全稱是「Decentralized Autonomous Organization」,即「去中心化自治組織」,這是一種試圖擺脫傳統科層制的管理模式,以區塊鏈技術來完成自主運行的組織形式。
去中心化自治組織 (DAO) 能夠利用基於區塊鏈的治理實現個人的全球協調。DAO 可以用於許多目的,包括管理區塊鏈項目的運營和資本 (MakerDAO)、管理投資資本 (The LAO)、管理 游戲 資產的使用 (YGG DAO)、協調文化團體 (Friends With Benefits) 或協調購買資產(Constitution DAO)。
deep網站收錄的DAO數量已經達到187個,管理總資產超過120億美元,涵蓋成員超過160萬。雖然在區塊鏈領域,這並不是一個龐大的數據。但包括紅杉資本在內的機構都開始注意到這個新名詞。
加密貨幣市值在2021年正式突破2萬億美元,目前來到2.5萬億美元的規模,較年初上漲 175%。而伴隨著市值的爆炸式增長,加密領域的融資也飛速上揚。據統計,2021 年加密行業公開披露的一級市場融資數1529筆,總額約為326 億美元,同比增長達到誇張的814.2%。
但加密領域的股權融資與其他領域有所不同,在「VIE」架構下傳統VC最主要的資金退出通道是企業登陸二級市場進行IPO。但區塊鏈領域自帶新型融資方式ICO(國內禁止),這種去中心化的融資方式的關鍵不同在於用戶在更早期就可以參與社區的成長,而在傳統的風投模式下,只有登陸二級市場後,普通投資者才有機會去分享企業成長紅利。
而在加密領域,首先「公司」的概念被弱化了,由於「Web3」和「DAO」的存在,社區與組織才是更多被提及的存在,用戶天然對中心化平台有一種不信任感。
近兩周加密社區最火熱的項目名為「OpenDao」,是一個模仿頭部NFT交易平台「OpenSea」的項目,而該項目能夠火熱的原因源自於加密玩家對於「OpenSea」的不滿,「OpenSea」近期傳出消息正在進行新一輪融資,並准備IPO。但NFT愛好者不希望「OpenSea」成為和當前的互聯網巨頭一樣的壟斷平台,所以「OpenDao」打出了去中心化的理念,並給所有「OpenSea」用戶發放空投。
且在2021年末,加密社區關於「Web3」產生了爭論,包括特斯拉董事長埃隆·馬斯克和推特前執行官傑克·多西在爭論時將矛盾指向了加密金融里的風投機構,認為VC們攫取了過多利益。
而在2021年也出現了一種以「DAO」形式出現的投資機構,這種組織里包含了社區中極具影響力又深耕技術領域的投資人,他們所孵化的項目表現甚至超過了部分傳統VC的成績。
❺ ETH開發實踐——批量發送交易
在使用同一個地址連續發送交易時,每筆交易往往不可能立即到賬, 當前交易還未到賬的情況下,下一筆交易無論是通過 eth.getTransactionCount() 獲取nonce值來設置,還是由節點自動從區塊中查詢,都會獲得和前一筆交易同樣的nonce值,這時節點就會報錯 Error: replacement transaction underpriced
在構建一筆新的交易時,在交易數據結構中會產生一個nonce值, nonce是當前區塊鏈下,發送者(from地址)發出的交易(成功記錄進區塊的)總數, 再加上1。例如新構建一筆從A發往B的交易,A地址之前的交易次數為10,那麼這筆交易中的nonce則會設置成11, 節點驗證通過後則會放入交易池(txPool),並向其他節點廣播,該筆交易等待礦工將其打包進新的區塊。
那麼,如果在先構建並發送了一筆從地址A發出的,nonce為11的交易,在該交易未打包進區塊之前, 再次構建一筆從A發出的交易,並將它發送到節點,不管是先通過web3的eth.getTransactionCount(A)獲取到的過往的交易數量,還是由節點自行填寫nonce, 後面的這筆交易的nonce同樣是11, 此時就出現了問題:
實際場景中,會有批量從一個地址發送交易的需求,首先這些操作可能也應該是並行的,我們不會等待一筆交易成功寫入區塊後再發起第二筆交易,那麼此時有什麼好的解決辦法呢?先來看看geth節點中交易池對交易的處理流程
如之前所說,構建一筆交易時如果不手動設置nonce值,geth節點會默認計算發起地址此前最大nonce數(寫入區塊的才算數),然後將其加上1, 然後將這筆交易放入節點交易池中的pending隊列,等到節點將其打包進區塊。
構建交易時,nonce值是可以手動設置的,如果當前的nonce本應該設置成11, 但是我手動設置成了13, 在節點收到這筆交易時, 發現pending隊列中並沒有改地址下nonce為11及12的交易, 就會將這筆nonce為13的交易放入交易池的queued隊列中。只有當前面的nonce補齊(nonce為11及12的交易被發現並放入pending隊列)之後,才會將它放入pending隊列中等待打包。
我們把pending隊列中的交易視為可執行的,因為它們可能被礦工打包進最新的區塊。 而queue隊列因為前面的nonce存在缺失,暫時無法被礦工打包,稱為不可執行交易。
那麼實際開發中,批量從一個地址發送交易時,應該怎麼辦呢?
方案一:那麼在批量從一個地址發送交易時, 可以持久化一個本地的nonce,構建交易時用本地的nonce去累加,逐一填充到後面的交易。(要注意本地的nonce可能會出現偏差,可能需要定期從區塊中重新獲取nonce,更新至本地)。這個方法也有一定的局限性,適合內部地址(即只有這個服務會使用該地址發送交易)。
說到這里還有個坑,許多人認為通過 eth.getTransactionCount(address, "pending") ,第二個參數為 pending , 就能獲得包含本地交易池pending隊列的nonce值,但是實際情況並不是這樣, 這里的 pending 只包含待放入打包區塊的交易, 假設已寫入交易區塊的數量為20, 又發送了nonce為21,22,23的交易, 通過上面方法取得nonce可能是21(前面的21,22,23均未放入待打包區塊), 也可能是22(前面的21放入待打包區塊了,但是22,23還未放入)。
方案二是每次構建交易時,從geth節點的pending隊列取到最後一筆可執行交易的nonce, 在此基礎上加1,再發送給節點。可以通過 txpool.content 或 txpool.inspect 來獲得交易池列表,裡面可以看到pending及queue的交易列表。
啟動節點時,是可以設置交易池中的每個地址的pending隊列的容量上限,queue隊列的上容量上限, 以及整個交易池的pending隊列和queue隊列的容量上限。所以高並發的批量交易中,需要增加節點的交易池容量。
當然,除了擴大交易池,控制發送頻率,更要設置合理的交易手續費,eth上交易寫入區塊的速度取決於手續費及eth網路的擁堵狀況,發送每筆交易時,設置合理的礦工費用,避免大量的交易積壓在交易池。
❻ 011:Ethash演算法|《ETH原理與智能合約開發》筆記
待字閨中開發了一門區塊鏈方面的課程:《深入淺出ETH原理與智能合約開發》,馬良老師講授。此文集記錄我的學習筆記。
課程共8節課。其中,前四課講ETH原理,後四課講智能合約。
第四課分為三部分:
這篇文章是第四課第一部分的學習筆記:Ethash演算法。
這節課介紹的是以太坊非常核心的挖礦演算法。
在介紹Ethash演算法之前,先講一些背景知識。其實區塊鏈技術主要是解決一個共識的問題,而共識是一個層次很豐富的概念,這里把范疇縮小,只討論區塊鏈中的共識。
什麼是共識?
在區塊鏈中,共識是指哪個節點有記賬權。網路中有多個節點,理論上都有記賬權,首先面臨的問題就是,到底誰來記帳。另一個問題,交易一定是有順序的,即誰在前,前在後。這樣可以解決雙花問題。區塊鏈中的共識機制就是解決這兩個問題,誰記帳和交易的順序。
什麼是工作量證明演算法
為了決定眾多節點中誰來記帳,可以有多種方案。其中,工作量證明就讓節點去算一個哈希值,滿足難度目標值的勝出。這個過程只能通過枚舉計算,誰算的快,誰獲勝的概率大。收益跟節點的工作量有關,這就是工作量證明演算法。
為什麼要引入工作量證明演算法?
Hash Cash 由Adam Back 在1997年發表,中本聰首次在比特幣中應用來解決共識問題。
它最初用來解決垃圾郵件問題。
其主要設計思想是通過暴力搜索,找到一種Block頭部組合(通過調整nonce)使得嵌套的SHA256單向散列值輸出小於一個特定的值(Target)。
這個演算法是計算密集型演算法,一開始從CPU挖礦,轉而為GPU,轉而為FPGA,轉而為ASIC,從而使得算力變得非常集中。
算力集中就會帶來一個問題,若有一個礦池的算力達到51%,則它就會有作惡的風險。這是比特幣等使用工作量證明演算法的系統的弊端。而以太坊則吸取了這個教訓,進行了一些改進,誕生了Ethash演算法。
Ethash演算法吸取了比特幣的教訓,專門設計了非常不利用計算的模型,它採用了I/O密集的模型,I/O慢,計算再快也沒用。這樣,對專用集成電路則不是那麼有效。
該演算法對GPU友好。一是考慮如果只支持CPU,擔心易被木馬攻擊;二是現在的顯存都很大。
輕型客戶端的演算法不適於挖礦,易於驗證;快速啟動
演算法中,主要依賴於Keccake256 。
數據源除了傳統的Block頭部,還引入了隨機數陣列DAG(有向非循環圖)(Vitalik提出)
種子值很小。根據種子值生成緩存值,緩存層的初始值為16M,每個世代增加128K。
在緩存層之下是礦工使用的數據值,數據層的初始值是1G,每個世代增加8M。整個數據層的大小是128Bytes的素數倍。
框架主要分為兩個部分,一是DAG的生成,二是用Hashimoto來計算最終的結果。
DAG分為三個層次,種子層,緩存層,數據層。三個層次是逐漸增大的。
種子層很小,依賴上個世代的種子層。
緩存層的第一個數據是根據種子層生成的,後面的根據前面的一個來生成,它是一個串列化的過程。其初始大小是16M,每個世代增加128K。每個元素64位元組。
數據層就是要用到的數據,其初始大小1G,現在約2個G,每個元素128位元組。數據層的元素依賴緩存層的256個元素。
整個流程是內存密集型。
首先是頭部信息和隨機數結合在一起,做一個Keccak運算,獲得初始的單向散列值Mix[0],128位元組。然後,通過另外一個函數,映射到DAG上,獲取一個值,再與Mix[0]混合得到Mix[1],如此循環64次,得到Mix[64],128位元組。
接下來經過後處理過程,得到 mix final 值,32位元組。(這個值在前面兩個小節《 009:GHOST協議 》、《 010:搭建測試網路 》都出現過)
再經過計算,得出結果。把它和目標值相比較,小於則挖礦成功。
難度值大,目標值小,就越難(前面需要的 0 越多)。
這個過程也是挖礦難,驗證容易。
為防止礦機,mix function函數也有更新過。
難度公式見課件截圖。
根據上一個區塊的難度,來推算下一個。
從公式看出,難度由三部分組成,首先是上一區塊的難度,然後是線性部分,最後是非線性部分。
非線性部分也叫難度炸彈,在過了一個特定的時間節點後,難度是指數上升。如此設計,其背後的目的是,在以太坊的項目周期中,在大都會版本後的下一個版本中,要轉換共識,由POW變為POW、POS混合型的協議。基金會的意思可能是使得挖礦變得沒意思。
難度曲線圖顯示,2017年10月,難度有一個大的下降,獎勵也由5個變為3個。
本節主要介紹了Ethash演算法,不足之處,請批評指正。
❼ 浠ュお鍧婂備綍瑙e喅璺ㄩ摼浜ゆ槗鐨勯棶棰
浠ュお鍧婂備綍瑙e喅璺ㄩ摼浜ゆ槗鐨勯棶棰橈紵
闅忕潃鏁扮櫨縐嶅姞瀵嗚揣甯佺殑鍏磋搗錛岃法閾句氦鏄撴垚涓轟簡鍖哄潡閾句笘鐣屼腑鐨勪竴涓鐑闂ㄨ瘽棰樸傝法閾句氦鏄撳厑璁哥敤鎴峰湪涓嶅悓鐨勫尯鍧楅摼涔嬮棿縐誨姩鏁板瓧璧勪駭錛屼負鐢ㄦ埛甯︽潵鏇村氶夋嫨錛屽悓鏃朵篃鏈夊彲鑳芥垚涓烘湭鏉ユ暟瀛楅噾鋙嶄笘鐣岀殑鍩虹煶銆傜劧鑰岋紝璺ㄩ摼浜ゆ槗涔熼潰涓寸潃涓浜涙寫鎴橈紝渚嬪備簰鎿嶄綔鎬с佸畨鍏ㄥ拰鍚堣勭瓑銆備互澶鍧婃槸鐩鍓嶆渶鍏蜂唬琛ㄦх殑鏅鴻兘鍚堢害騫沖彴錛屼篃鍦ㄧН鏋佹帰緔㈣В鍐寵法閾句氦鏄撻棶棰樼殑鏂規堛
浼犵粺涓婏紝璺ㄩ摼浜ゆ槗涓昏侀氳繃絎涓夋柟涓浠嬫潵瀹炵幇銆傝繖縐嶆柟寮忓瓨鍦ㄤ竴浜涢棶棰橈紝渚嬪備腑蹇冨寲椋庨櫓銆佹晥鐜囦綆涓嬨侀珮鏄傜殑鎵嬬畫璐圭瓑銆備互澶鍧婅嚧鍔涗簬瑙e喅榪欎簺闂棰橈紝鍗抽氳繃寮鍙戞洿澶氱殑鎶鏈鍜屾爣鍑嗭紝浠ヤ究瀹炵幇鏇村姞瀹夊叏鍜岄珮鏁堢殑鍘諱腑蹇冨寲璺ㄩ摼浜ゆ槗銆
絎涓涓瑙e喅鏂規堟槸鍘熷瓙浜ゆ崲鍗忚錛圓tomicSwapProtocol錛夈侫tomicSwap鏄涓縐嶆棤淇℃墭鏈哄埗鐨勮法閾句氦鏄撳崗璁錛岃兘澶熺『淇濆弬涓庤呬箣闂寸殑鏁板瓧璧勪駭鍦ㄨ法閾句氦鏄撲腑涓嶄細琚鎮舵剰鏀誨嚮銆備互澶鍧婄敤鎴峰彲浠ヤ嬌鐢ㄨュ崗璁鏉ュ疄鐜頒笌鍏朵粬鍖哄潡閾劇殑浜ゆ槗錛屽湪姝よ繃紼嬩腑錛屼粬浠涓嶅繀渚濊禆絎涓夋柟鍜屼腑浠嬨傜敱浜庤ュ崗璁鏃犻渶淇℃墭鏈哄埗錛屽洜姝ゅ彲浠ユ洿瀹夊叏錛屽苟鍙鍦ㄥ己楠岃瘉鏉′歡涓嬪畬鎴愪氦鏄撱
絎浜屼釜瑙e喅鏂規堟槸涓緇ч摼/渚ч摼錛圧elayChain/Sidechain錛夈備腑緇ч摼鏄涓縐嶈秴綰ч摼錛屽彲浠ヨ繛鎺ュ氫釜鍗曠嫭鐨勫尯鍧楅摼銆傝櫧鐒舵瘡涓鍖哄潡閾句箣闂存病鏈夌洿鎺ヤ氦浜掞紝浣嗘槸瀹冧滑閮芥湁鍙浠ヤ簰閫氱殑涓緇ч摼銆備互澶鍧婂熀閲戜細姝e湪寮鍙戠殑涓緇ч摼鏄疨olkadot錛屽畠浣滀負涓涓鍗曠嫭鐨勫尯鍧楅摼錛屽彲浠ュ勭悊鍏朵粬鍖哄潡閾劇殑淇℃伅錛屽苟灝嗗叾浼犻掑洖鍘熷嬪尯鍧楅摼銆傚湪榪欑嶆灦鏋勪腑錛屼互澶鍧婂彲浠ュ皢浜ゆ槗鍙戦佸埌Polkadot錛岀劧鍚嶱olkadot灝嗕氦鏄撳彂閫佸埌鐩鏍囧尯鍧楅摼錛屽苟鍦ㄨュ尯鍧楅摼涓澶勭悊浜ゆ槗銆
絎涓変釜瑙e喅鏂規堟槸妗ユ帴鍗忚錛圔ridgingProtocol錛夈傛ˉ鎺ュ崗璁鏃ㄥ湪寤虹珛鍖哄潡閾懼拰浼犵粺閲戣瀺甯傚満涔嬮棿鐨勬ˉ姊併備互澶鍧婂凡緇忓紑鍙戝嚭涓縐嶅悕涓篧rappedBitcoin錛圵BTC錛夌殑鍔犲瘑璐у竵錛屽畠鏄浠ュお鍧奅RC-20鏍囧噯浠e竵錛屽叾浠峰間笌姣旂壒甯佺瓑浠楓傞氳繃WBTC錛屾瘮鐗瑰竵鎸佹湁鑰呭彲浠ュ皢鍏惰漿鎹涓哄姞瀵嗚揣甯丒RC-20鏍囧噯浠e竵錛岀劧鍚庡皢鍏朵氦鎹㈠埌浠ュお鍧婁笂錛屼互瀹炵幇姣旂壒甯佸湪浠ュお鍧婁笂鐨勪嬌鐢ㄣ傝繖縐嶆柟娉曚嬌寰楁瘮鐗瑰竵鑳藉熷湪浠ュお鍧婄殑鏅鴻兘鍚堢害涓婅繘琛岋紝浠庤岃幏寰楁洿澶氬簲鐢ㄥ満鏅銆
鎬諱箣錛屼互澶鍧婃e湪鍔鍔涜В鍐寵法閾句氦鏄撻棶棰橈紝騫舵彁渚涗簡澶氱嶈В鍐蟲柟妗堟潵瀹炵幇瀹夊叏銆侀珮鏁堛佷簰鎿嶄綔鐨勮法閾句氦鏄撱傝繖浜涜В鍐蟲柟妗堝皢鎺ㄥ姩鍖哄潡閾懼拰鏁板瓧璧勪駭甯傚満鐨勮繘涓姝ュ彂灞曞拰搴旂敤錛屼負鐢ㄦ埛甯︽潵鏇翠究鎹楓佹洿瀹夊叏銆佹洿澶氭牱鍖栫殑鏁板瓧璧勪駭浣撻獙銆
❽ 【ETH錢包開發03】web3j轉賬ETH
在之前的文章中,講解了創建、導出、導入錢包。
【ETH錢包開發01】創建、導出錢包
【ETH錢包開發02】導入錢包
本文主要講解以太坊轉賬相關的一些知識。交易分為ETH轉賬和ERC-20 Token轉賬,本篇先講一下ETH轉賬。
1、解鎖賬戶發起交易。錢包keyStore文件保存在geth節點上,用戶發起交易需要解鎖賬戶,適用於中心化的交易所。
2、錢包文件離線簽名發起交易。錢包keyStore文件保存在本地,用戶使用密碼+keystore的方式做離線交易簽名來發起交易,適用於dapp,比如錢包。
本文主要講一下第二種方式,也就是錢包離線簽名轉賬的方式。
交易流程
1、通過keystore載入轉賬所需的憑證Credentials
2、創建一筆交易RawTransaction
3、使用Credentials對象對交易簽名
4、發起交易
注意以下幾點:
1、Credentials
這里,我是通過獲取私鑰的方式來載入 Credentials
還有另外一種方式,通過密碼+錢包文件keystore方式來載入 Credentials
2、nonce
nonce是指發起交易的賬戶下的交易筆數,每一個賬戶nonce都是從0開始,當nonce為0的交易處理完之後,才會處理nonce為1的交易,並依次加1的交易才會被處理。
可以通過 eth_gettransactioncount 獲取nonce
3、gasPrice和gasLimit
交易手續費由gasPrice 和gasLimit來決定,實際花費的交易手續費是 gasUsed * gasPrice 。所有這兩個值你可以自定義,也可以使用系統參數獲取當前兩個值
關於 gas ,你可以參考我之前的一篇文章。
以太坊(ETH)GAS詳解
gasPrice和gasLimit影響的是轉賬的速度,如果gas過低,礦工會最後才打包你的交易。在app中,通常給定一個默認值,並且允許用戶自己選擇手續費。
如果不需要自定義的話,還有一種方式來獲取。獲取以太坊網路最新一筆交易的 gasPrice ,轉賬的話, gasLimit 一般設置為21000就可以了。
Web3j還提供另外一種簡單的方式來轉賬以太幣,這種方式的好處是不需要管理nonce,不需要設置gasPrice和gasLimit,會自動獲取最新一筆交易的gasPrice,gasLimit 為21000(轉賬一般設置成這個值就夠用了)。
這個問題,我想是很多朋友所關心的吧。但是到目前為止,我還沒有看到有講解這方面的博客。
之前問過一些朋友,他們說可以通過區塊號、區塊哈希來判斷,也可以通過Receipt日誌來判斷。但是經過我的一番嘗試,只有 BlockHash 是可行的,在web3j中根據 blocknumber 和 transactionReceipt 都會報空指針異常。
原因大致是這樣的:在發起一筆交易之後,會返回 txHash ,然後我們可以根據這個 txHash 去查詢這筆交易相關的信息。但是剛發起交易的時候,由於手續費問題或者乙太網絡擁堵問題,會導致你的這筆交易還沒有被礦工打包進區塊,因此一開始是查不到的,通常需要幾十秒甚至更長的時間才能獲取到結果。我目前的解決方案是輪詢的去刷 BlockHash ,一開始的時候 BlockHash 的值為0x00000000000,等到打包成功的時候就不再是0了。
這里我使用的是rxjava的方式去輪詢刷的,5s刷新一次。
正常情況下,幾十秒內就可以獲取到區塊信息了。
區塊確認數=當前區塊高度-交易被打包時的區塊高度。