ChainLink的VRF並沒有想象中那麼好

2021-10-08 00:21:50 字數 891 閱讀 4722

很早的時候,chainlink就聲稱自己做出了vrf功能。

我當時也是很興奮,去實操了一把,還專門寫了一篇文章記錄這件事。

先看這篇chainlink官方發的文章:

簡而言之,智慧型合約會向 chainlink 或 chainlink 預言機網路提供乙個 seed 來請求隨機數。這個 seed 是預言機無法**的,會被用來生成乙個隨機數。每個預言機都會使用自己專屬的金鑰生成隨機數。

當智慧型合約請求隨機數時,它會提供乙個 seed。為了確保 vrf 結果無法被**,需要在 seed 中植入無法被**且難以被篡改的值,比如最近一次的區塊雜湊值,或者是經過加密驗證的鏈下資料,比如某項資產最近更新的**。

我總結一下核心過程:

vrf(使用者seed,預言機私鑰) >> 隨機數。
也就是說,chainlink的vrf隨機數需要使用者提供seed,用預言機的私鑰經過確定性演算法才能產生。這就有個很大的bug:只要知道使用者seed和預言機私鑰就一定可以知道隨機數。也就是說,只要這兩方勾結起來就完全可以作弊。比如我提前部署自己的預言機到chainlink預言機網路中,然後我的智慧型合約每次都呼叫我部署的那台預言機去生成隨機數。

chainlink的可驗證隨機數的產生,實際上不是完全由預言機自己生成的,而是依賴於使用者提供的seed。其實這也是把生成隨機數的責任部分轉嫁給了使用者,這簡直是一種耍賴行為,甚至有些可笑。使用者原本只想獲取乙個隨機數數,結果對方卻先叫自己提供乙個隨機數,這不是很荒唐的事情嗎?所以我覺得他根本沒有解決vrf問題,反而把事情弄得更複雜。chainlink根本沒有解決好這個問題!!!

(全文完)

AsyncTask的execute並沒有立即執行

原因不講了,也講不清楚,解決方案就是利用executeonexecutor設定自己的佇列,從而在舊頁面關閉前能及時清理當前頁面發出的資料請求 ps tasks為乙個arraylist,用來儲存當前介面所有產生的task,executeonexecutor能清除等待中的task們,cancle tru...

楓葉並沒有我想像的那麼美

前幾天的乙個中午,吃完飯走在回寢室的路上,無意瞄到了路口樹梢上的那片楓葉。雖然它不是傳說中的紅楓,但是我還是被它那份執著打動,便忍不住的多看了幾眼。今天上午,陽光明媚,但我清楚自己是不會單獨去下面草地上曬太陽的,最多趴在寢室圍牆上享受那一線陽光。不知怎的,從床上一爬起來,就像起了那片楓葉。記得,那是...

git並沒有你想象中的那麼難

1.基礎篇 首先是安裝,安裝很簡單。在linux上只需要乙個命令便可以安裝 初始化乙個專案,建立乙個資料夾,在資料夾下面執行git init,這就相當於你初始化了乙個倉庫。你可以在新建的這個倉庫中,也就是在這個資料夾下新建文字啊,程式啊,資料夾啊,啥都行,然後建立完成之後,或者修改之後,我們需要向倉...