在ETH智能合約內驗證過去區塊的Hash值 - 數位貨幣

Quanna avatar
By Quanna
at 2020-08-14T17:39

Table of Contents


在Ropsten測試鏈上放了一個驗證區塊Hash值的合約。


如果我們要在乙太坊的智能合約內取得過去某個區塊的Blockhash,EVM有提供內建函式
blockhash(uint blockNumber),可以取得最近256個區塊的Hash值。若是超過256個區
塊,內建函式就無能為力了。取而代之的,我們可以要求使用者把區塊Hash值及證明傳
入合約函式,由合約驗證傳入的區塊Hash值是否正確。


合約位址及程式碼見Etherscan:
https://ropsten.etherscan.io/address/2c003df99cab1064ed93e273f54275ee8e24393a

另外有個懸賞合約給找出偽陰性(?)案例的板友1個Ropsten ETH,請見文章最後。
(雖然Ropsten ETH到水龍頭拿就有了 XD)


=============================================================================

MMR結構

合約的原理是將區塊Hash值用Merkle Mountain Range結構儲存
Merkle Mountain Range(MMR)結構就是多棵不同高度的Full Merkle Tree

G
/ \
/ \
C F
/ \ / \
A B D E H
/ \ / \ / \ / \ / \
00 01 02 03 04 05 06 07 08 09 10

如圖,11個Blockhash值組成3棵Tree,分別是
Block#00-#07的8個區塊組成高度3的Tree
Block#08-#09的2個區塊組成高度1的Tree
Block#10的1個區塊組成高度0的Tree
合約儲存這3棵Tree的Root(稱為Peak),也就是G、H、10。


當新的Blockhash值加入MMR結構時,會發生合併現象。

G
/ \
/ \
C F J
/ \ / \ / \
A B D E H I
/ \ / \ / \ / \ / \ / \
00 01 02 03 04 05 06 07 08 09 10 11

Block#11加入後,Block#08-#11合併為1棵高度2的Tree,
合約內儲存的內容變成G、J兩個Peak。


MMR的證明和驗證與一般的Merkle Tree證明流程相同,
要證明00,則額外傳入[01,B,F]做為證明,
合約內進行3次hash後,將結果與G比對即可驗證。


基本的原理是這樣,至於技術細節的說明還在寫,若想研究細節請先看程式碼。


做了一個簡單的網頁介面,可以看到MMR結構的現況,產生證明和進行驗證:
https://ayukawayen.github.io/MerkleMountainRange/

(建議開Metamask連,Metamask要連到Ropsten鏈)


=============================================================================

MMR Token

合約需要定期將新區塊的Hash值寫入MMR結構。
傳送Tx至合約位址會呼叫合約的fallback function,觸發更新流程。
這個動作需要花費gas,根據更新者所花費的gas值,給予等量的MMR Token做為回報。

任何人都可以傳送Tx來協助維護合約,Tx不需要任何input data,Gas limit建議設為
330000。

以下是一個範例Tx的ID,總共花了237,682的gas,獲得202,670個MMR Token:
0xff230cc54fe3837a074b99d4056e44b4fd4348b08852728418aba170077ad9f2


MMR Token可以用來支付驗證手續費。
其他合約在鏈上呼叫合約的verifyOnChain()函式時,每次驗證收取6000個MMR Token做
為手續費,鏈下呼叫verify()函式時則不需要手續費。

也可以直接用Ropsten ETH向合約換MMR Token,避免需要驗證卻無法取得Token的情況。


=============================================================================

懸賞合約

合約位址與程式碼同樣見Etherscan:
https://ropsten.etherscan.io/address/a702611a1b4cd6149df1bac72d3462e286d3d918

UI還沒寫好,熟悉Etherscan操作的人可以先使用Etherscan和合約互動。


只要能輸入1個blockNumber、2個blockHash及證明,符合以下條件:
兩個blockHash都不是0
兩個blockHash值不相同
兩個blockHash都通過MMR驗證
就能取得合約裡的所有Ropsten ETH。


兩次驗證需要12000個MMR Token,底下開放推文,留下Ropsten位址,我會轉12000個
Token過去,approve給懸賞合約後,呼叫challengeWithToken()進行挑戰。



=============================================================================

如果有在Ropsten上開發智能合約,有驗證過去區塊的需求的話,也可以試用看看。
不過程式碼是未經審查的,可能有bug。


--
ethereum:0xF78CF7Bb109f7fB55e3Cba2DD87edd5e836Eb0b3

simpleledger:qqjzmy6mjp8sp97c7thhflv9s2j96xk0q5dcppcf4p

--

All Comments

Donna avatar
By Donna
at 2020-08-16T16:12
先推,待會貼地址
Elizabeth avatar
By Elizabeth
at 2020-08-20T09:35
推,試玩了一下收到12萬MMR,when coinbase? (誤
Yuri avatar
By Yuri
at 2020-08-20T14:24
推 回溯驗長鏈老區塊的工具 這個使用時機和應用有哪些呢?
Zenobia avatar
By Zenobia
at 2020-08-20T16:18
這是我想做放置型領獎遊戲碰到的需求,有空要把它接到
Xanthe avatar
By Xanthe
at 2020-08-28T04:59
(然而對ETH來說放置遊戲的市場甚至難以稱為使用時機XD
Ophelia avatar
By Ophelia
at 2020-09-01T12:13
感謝解說 對查金流很有用
Ivy avatar
By Ivy
at 2020-09-03T20:07
0xE5AB5A463c1d9147C49cB09C9f37FA0E21dE433B 來試試看
Ophelia avatar
By Ophelia
at 2020-09-06T00:37
收到了
Hedy avatar
By Hedy
at 2020-09-06T19:18
好玩!!
Rae avatar
By Rae
at 2020-09-10T07:46
用etherscan介面把MMR上架了才發現uniswap網頁只要把
Connor avatar
By Connor
at 2020-09-11T17:13
metamask切到測試鏈就能接到測試鏈上的uniswap環境 XD
Michael avatar
By Michael
at 2020-09-12T18:57
總之現在Ropsten的uniswap上也有MMR/ETH交易對了
Poppy avatar
By Poppy
at 2020-09-13T11:20
強! 鎖定 NMR!
Selena avatar
By Selena
at 2020-09-15T16:26
https://i.imgur.com/76xpcXe.png 剛好32768 紀念一下
Mary avatar
By Mary
at 2020-09-20T09:12
啊 中斷了 20分內出了330塊 超過256塊接不起來

Yam Finance沈痛宣告項目死亡幣暴跌99%,

Sandy avatar
By Sandy
at 2020-08-14T16:14
「對不起,我失敗了」Yam Finance沈痛宣告項目死亡幣暴跌99%,待2.0再出發 昨日清晨,Yam Finance 團隊表示已在智能合約上發現了漏洞,故緊急號召投資人發起投票 ,以解決可能釀成的災難;可惜的是,即便社群團結一致地達成了最初的提案要求,最終 仍因為漏洞太大,災難不可避免地發生,也 ...

以太幣挖礦的黃金時機 ft. GPUMINE 朱昱翰

Olive avatar
By Olive
at 2020-08-14T13:24
以太坊(Ethereum)區塊鏈的交易手續費居高不下。 高手續費雖然會讓一般使用者越來越不敢透過以太坊轉帳,但反過來說,仍然有許多高價 值的交易付得起這些手續費。 例如透過銀行跨國轉帳每筆非得要 1,000 台幣的手續費起跳的話,就會覺得以太坊的 20 0 元轉帳手續費還好而已。 這時候負責處理區塊鏈交 ...

區塊鏈於萬物聯網經濟將扮演關鍵性作用

Elizabeth avatar
By Elizabeth
at 2020-08-14T11:33
區塊鏈於萬物聯網經濟將扮演關鍵性作用 新聞來源連結: https://bit.ly/3kEwqP2 新聞本文: 根據市場研究公司HFS Research的報告,隨著全球正朝著高度互聯的經濟發展,區塊鏈技 術將在建立未來的“超連經濟(Hyperconnected Economy)”中發揮決定性作用。 所謂 ...

《富爸爸》作者:現在是買進黃金、白銀

John avatar
By John
at 2020-08-13T16:08
別當輸家!《富爸爸》作者:現在是買進黃金、白銀及比特幣極佳時刻 〔財經頻道/綜合報導〕知名暢銷書《富爸爸,窮爸爸》作者羅伯特.清崎(Robert Kiyosaki)持續看好黃金、白銀與比特幣後市,近日在其推特頻發文,稱現在是買進更多 黃金、白銀及比特幣的極佳時刻。 綜合媒體報導,黃金、白銀、比特幣今 ...

IOTA下周主網將達到1000TPS ??

Jessica avatar
By Jessica
at 2020-08-11T12:29
1. 原定7月初的IOTA 1.5階段一 經過測試網上多次的壓力測試與審計 終於敲定8月第三周上線啦~ 1000筆/秒、交易10秒的高速確認,真辦得到嗎? 市場「大家」都在等著看這張成績單,讓我們拭目以待 https://twitter.com/iotatoken/status/1292810814 ...