Oyster Protocol 筆記
Oyster
-
基於智能合約的系統
-
結合 IOTA Tangle 及以太坊區塊鏈
-
分散式儲存
-
現有架構
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
-
Oyster 架構
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
Oyster 生態系統成員
- 儲存用戶
- 花費 Oyster Pearls,安全、可靠、匿名地儲存檔案
- 網站所有者
- Web 節點
- 經紀人節點
- IOTA Tangle
- 以太坊區塊鏈
Tangle 上資料儲存
-
datamap
datamap-generator
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
-
根據 Oyster Protocol 規定選擇 2 個經紀人節點
-
儲存用戶將 Genesis Hash 交給 2 個經紀人節點
-
儲存用戶支付的珍珠數量是最終嵌入 Data Map 中的數量的一半
-
經紀人節點
- 若不履行義務,透過分散式信譽系統 (Distributed Reputation System) 回報
- 在數據地圖正確安裝後,經紀人節點被允許保留任何剩餘的珍珠
- 做 POW 把 Data Map 上 tangle,address 為 Genesis, …, Hash NX
- 經紀人節點可把 POW 委派給 Web 節點
- 經紀人節點分為 Alpha Node, Beta Node
-
Alpha Node
- 從 Genesis Hash 開始向下,確認 Data Map
- 收到全部 Pearl、Beta Node 的以太坊地址
- 發送一半的 Pearl 給 Beta Node
-
Beta Node
- 從 Hash NX 開始向上,確認 Data Map
由經紀人節點埋藏 Pearls
-
由經紀人節點埋藏的理由:
- 經紀人節點可存取 ETH 餘額,可以支付搬動 Pearls 所需 gas (類似手續費)。 每 X GB 需要一個以太坊區塊鏈的交易。
- 對儲存用戶而言發起交易和智能合約太複雜。
- 減輕紅鯡魚的攻擊
-
紅鯡魚的攻擊
- 儲存用戶假裝將 Pearls 嵌入到數據映射中但實際上並未嵌入 Pearls。
- 如果儲存用戶惡意放入不合法的 Pearls,經紀人節點發現後會回報,降地其信譽。
紅鯡魚 (Red Herring) 在英文中有誤導、混淆群眾的含義。
-
經紀人節點在分散式信譽系統的身份要一致,因為關聯信譽分數;儲存用戶跟 Web 節點的身份則是動態的。
- 儲存用戶、Web 節點很難產生一致加密身分。
- Web 節點每挖到 X 個寶藏,其身分要重設。
- 儲存用戶除了與經紀人節點溝通外沒有可識別身分。
-
大約儲存用戶支付 Pearls 的一半被嵌入 Data Map,一半給經紀人節點。
-
兩個經紀人節點安裝 Data Map 就像兩頭燒的蠟燭。
-
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
-
經紀人節點安裝愈慢或不完全愈有利,因為有權保留剩下沒埋藏的 Pearls。
-
經紀人節點一開始被指派一個信譽分數為 (最小值) 0 的加密身分。
-
儲存用戶、Web 節點尋找分數最高的經紀人節點。
-
分數隨燃燒速度線性增加而指數型增加。
-
儘管前面提到愈慢愈有利,經紀人節點仍會盡可能的增加燃燒速度。短期看來獲利較少;長期卻會指數型的多很多。
-
埋藏寶藏
- 一個區段 (Sector) 代表 1000000 個 hash。
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
- 每個區段至少有一個包含 Pearls 的寶藏。有時候兩個經紀人節點沒完美合作,會包含 2 個寶藏。
- 寶藏的位置由兩個經紀人節點隨機選擇
- 每個區段 Pearls 的數量愈多,可以保存在 Tangle 上時間愈長。 1 PRL 保證 X GB 可在 Tangle 存上 1 年。
- Oyster 合約查看 Pearls 的數量來看儲存持續的時間。這段時間內 Web 節點做 POW 來尋找 Pearls。
-
Oyster Protocol 定義一個 Epoch 為一年。
-
舉例來說,一個 Sector 有 2 PRL (儲存時間 4 年),有 4 個 Epoch:第一年、第二年、第三年、第四年,每個 Epoch 有剛好 0.5 PRL 被聲明擁有。
注意: 白皮書內說明不一致
Oyster Pearls 尋寶
-
Web 節點從經紀人節點或其他 Web 節點取得 Genesis Hash
- 並不是平白無故取得,需做對方定義的 POW 任務才可以拿到 Genesis Hash。
- 做完後回報給對方,對方完驗證後發送 Genesis Hash 給 Web 節點。
-
隨機選 Data Map 的一個區段。 在 Tangle 上找這個區段 POW 在這個 Epoch 是否已經被執行。如果 POW 被執行過,放棄這個區段重做選擇。 如果沒有,瀏覽整個區段內的 Hash。
-
Web 節點果不遵守規定,成為唬人的 Web 節點 (bluffing Web Nodes)。
- 對沒有寶藏的區段做 POW ,導致下個 Epoch 只有自己可以保有這個區段,別的節點不能存取。
-
每次遇到 hash,Web 節點會對 Tangle 上相對應的交易做 POW,並使用 GPU (WebGL2)。 取回 payload 後算 hash (SHA512),並作為解密金鑰。如果解鎖了,代表找到寶藏;如果沒有,再做一次 hash,直到找到寶藏,或到達上限並嘗試下一組。
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
跑完一組 hash chain 要好幾天 (< 5 MB per day)
- 每個區段一定有一個寶藏,如果沒有是不合法的,回報分散式信譽系統並降低發出該 hash 經紀人節點的信譽分數。
- 尋寶 (SHA256、SHA512、解密) 使用 CPU。
- POW、和其他節點協商使用 GPU。
-
寶藏裡是包含 Pearls 的乙太坊 private seed key。但有以下兩個問題。
- Web 節點不能直接存取乙太坊區塊鏈。
- private seed key 內有 Pearls 但沒有 ETH,所以不能付 Gas。
-
於是 Web 節點安全的發送 private seed key 給經紀人節點。 經紀人節點確認 Pearls 存在後,付 ETH 作為 Gas。 然後提交 Oyster 合約的交易到區塊鏈上。 合約中聲明 Pearls 為網站所有人的乙太坊地址所擁有。 但有兩個疑慮:
- Web 節點怕經紀人節點偷取 Pearls,沒有使用正確的乙太坊地址。
- 經紀人節點怕 Web 節點騙 Gas。
Web 節點和經紀人節點的協作
-
技術上來說 Web 節點可以直接存取 Tangle ,但現階段能函式庫、吞吐量、硬體等限制,因此仍需要透過經紀人節點。 Oysrter Protocol 需藉由 SSL 傳輸,Tangle lite client host 現階段無法辦到。
-
經紀人節點允許 Web 節點間 P2P 溝通。
-
Web 節點做 POW,跟經紀人節點交換 Genesis Hash
- Web 節點詢問經紀人節點有無新的 Genesis Hash,或新的鄰居。
- 經紀人節點回應,並指示 POW 任務
- 如果 Web 節點同意,回復接受任務
- 經紀人節點回復 3 筆 Tangle 上的交易,關於儲存資料一筆,要驗證的交易兩筆 (tips)。
- Web 節點執行 replayBundle function,設定經紀人節點指定的 branch、trunk。
- Web 節點完成 POW 並提出交易後,回傳該交易資訊給經紀人節點。
- 經紀人節點驗證交易內容
- 滿足所有條件後,經紀人節點送出 Genesis Hash,或鄰居的身分。 並在分散式信譽系統提交相關資訊。
-
檔案過期後 Genesis Hash 會被忘掉,並不會保證檔案存在 Tangle 上。
Web 節點到 Web 節點的互動
- P2P conection via PeerJS Library
- 在 Oyster Network 上有一個 cryptographic pseudo-persistent 的身分(id)
- id 會維持可信賴和一致,直到尋報到一個階段並重頭開始
- 刷新 id 是為了避免網路過於靜態,不希望維持鄰居關係太久
- 當新 Web 節點首次加入時並沒有鄰居,先取得鄰居列表,這時會面對 "Catch-22(坑人二十二)" 的困境。鄰居由其他 Web 節點共享,但新 Web 節點無法取得,所以必須靠經紀人節點提供。
坑人二十二
e.g. 沒有工作經驗便不能找到一份工作,但沒有工作便不能得到工作經驗
-
做 POW 跟經紀人節點換 id 列表
-
Web 節點做 POW 跟其他節點換有價值的資訊(如:Genesis Hash),流程如下
- Web 節點詢問鄰居是否有可用的新 Genesis Hashes 或鄰居 id
- 鄰居回應,並請求 POW 任務做交換。POW 難度隨 Oyster Network 波動
- 如果 Web 節點同意 POW 負擔則接受
- 鄰居傳送 3 個 Tangle 上的交易,關於儲存資料一筆,要驗證的交易兩筆,他們被指定為 branch and trunk 交易。
- Web 節點在 Tangle 上執行replayBundle函數,因此完全按照鄰居指定的方式設置交易的 branch and trunk
- 完成 POW 並發出交易後,回傳該交易資訊給鄰居
- 鄰居節點驗證內容
- 如果還有其他 POW 負荷量,重複以上流程
- 一旦完成所有負荷量,鄰居節點將新 Genesis Hashes 或鄰居 id 作為交換
-
通常來自經紀人節點的 POW 負擔比來自鄰居 Web 節點的大,因為經紀人節點有較新的 Genesis Hashes,新的 Genesis Hashes 挖到寶藏的期望值較高。
-
Web 節點間連接時會計算連線延遲,並持續優化鄰居列表,以便與較近的節點溝通
-
優化的結果讓 Oyster Network 為一個低延遲的網路,具有高效的節點跳躍路徑 (Node hop pathways),並可在其上構建第三方應用程序。
- e.g. Javascript telephone service
內容消費權利
-
網頁擁有者得到經濟支持是合理的,因此產生了廣告的方式,但卻分散了瀏覽者注意力、侵犯隱私權、打亂網頁設計結構等等,因此廣告在互聯網上被藐視,廣告攔截軟體成了主流,卻打破了互聯網的經濟模式。
-
Oyster Protocol 是個全新的廣告範例,瀏覽者有付出算力且不受廣告干擾,網頁擁有者得到收入並繼續提升網頁品質。
-
網頁擁有者只需加入像下面的程式碼就可啟用 Oyster Protocol 並自動收款(Pearls)
<script id="o.ws" data-payout=“ETH_ADDRESS”src=“https://oyster.ws/webnode.js"></script>
-
如果瀏覽者不願付出算力也可以禁止,而網頁擁有者也可輕易停止提供網頁內容。
-
Web 節點使用 HTML5 localstorage 保存數據,因此在不同網站上仍保有相同 Web 節點身分。
-
情境: 一個人用電腦瀏覽 A 、 B 網站,電腦上運行的 Web 節點身分一樣,在瀏覽 A 網站時挖到的 Pearls 歸 A 網站擁有者,在瀏覽 B 網站時挖到的 Pearls 歸 B 網站擁有者。
Oyster Pearls 代幣功能