Yish

Hey, I’m Yish, the minimalist and an engineer for solving problems. Working at OwlTing. Feel free to contact me. 👌

[Day21] Quick Sort

分析 由小到大排列 挑出 pivot 元素 與最後一個元素交換,為了之後操作時不會影響到 比較後發現不符合 pivot 規則 -> 停止換邊跑 另一邊執行一樣發現不符合 pivot 規則 -> 與剛不符合進行交換 左右兩邊 index 指到同一元素 -> 回合結束 觀看指向元素是否大於 pivot 元素,大於則進行交換 分支 挑出 pivot 元素 重複 4, 5, 6, 7 步驟 換右邊執行 符合規則: 左邊小於 pivot 右邊大於 pivot 但如果發現左右兩邊都皆小於 pivot -> 不做任何交換 分支...

September 10, 2022 Â· 3 min Â· Yish

[Day20] Same Tree

100. Same Tree 思路 全輪尋檢查每個節點都為一致 如果有一個不同則立即返回 false 實作 public class Solution { // 配置節點 public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { this.val = val; this.left = left; this.right = right; } } //傳入樹節點 public boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == null) return true; //7....

September 9, 2022 Â· 1 min Â· Yish

[Day19] Unsorted Array to binary tree(DFS)

概念 將 unsorted array 轉換為 binary tree,並用深度優先(DFS)遍歷。 left node: (i+1) * 2 right node: (i+1) * 2 + 1 parent node: (i+1) / 2 level: log(i+1) 實作 package com.BT; import java.util.LinkedList; import java.util.Queue; public class BT_Array { private Integer[] nums; // 傳入陣列,用不同視角看陣列 -> 二元樹 public BT_Array(Integer[] nums) { this.nums = nums; } /** DFS left **/ public void traverse_preorder() { if (this.nums.length < 0) return; // 無陣列內容 int i_root = 0; // 預設開頭 if (this....

September 8, 2022 Â· 3 min Â· Yish

What is oracle(預言機)?

定義 由於區塊鏈世界本身無法調用外部API,是封閉世界,需透過預言機才能知道外部服務和API資料並且加以取用。 預言機本身也是一種智能合約,他的資料都是來自於外部世界的數據和整理過的數據並且寫到鏈上,提供給其他使用的智能合約外部資訊與內容。 智能合約在運行時只能運行已經確定的數值跟內容,無法動態從 API 取得資料處理,預言機則是與外部API取回資料後寫入鏈上,讓其他智能合約調用它取得所需的API資料提供使用。 詳細補充知識點: 区块链是一个确定性的、封闭的系统环境,目前区块链只能获取到链内的数据,而不能获取到链外真实世界的数据,区块链与现实世界是割裂的。 区块链是确定性的环境,它不允许不确定的事情或因素,智能合约不管何时何地运行都必须是一致的结果,所以虚拟机(VM)不能让智能合约有 network call(网络调用),不然结果就是不确定的。 因为智能合约无法主动去获取链外的数据,只能被动接受数据。 使用情境 即時獲得當前交易對報價或依賴外部服務即時資訊、預測市場或其他即時內容獲得執行合約、DeFi 項目。 比如金融衍生品交易平台、借贷平台、快递追踪/IoT、稳定币、博彩游戏、保险、预测市场等,目前最主要的场景就是 DeFi。 中心化預言機與去中心化預言機 中心化 provable(oraclize) 去中心化 DOS network Chainlink 目前最流行的預言機,以太社群推薦。提供 LINK TOKEN 作為節點獎勵。成為節點條件是必須先提供一定的 LINK TOKEN 作為抵押獎勵來確保資訊正確性,如果惡意竄改則會沒收抵押。 參考 https://zhuanlan.zhihu.com/p/52369816 https://zombit.info/chainlink/ https://chain.link/education/blockchain-oracles https://youtu.be/Tvw9NghXi6U

September 7, 2022 Â· 1 min Â· Yish

閃電貸原理與範例

原理 透過以太幣交易原子性,要交易全成功否交易全失敗。 調用智能合約也具有原子性,要全調用成功修改數值,否調用全失敗。 不會出現部份成功部分失敗。 保證在同一交易內歸還本金。 全成功還本付息,失敗則當作此交易沒有存在。 理想狀況 閃電貸借入 100000 USDT DEX A(交易所A) 買 2000@50(2000顆$50 token) DEX B(交易所B) 賣 2000@55(2000顆$55 token) 歸還 100000 USDT + 100 USDT(利息) 獲利 9900 USDT 必須要在同筆交易區塊內完成(透過自己撰寫智能合約並調用合約達到一次交易完成) 攻擊步驟 目的: 攻擊有漏洞的智能合約竊取利益 藉由 dydx 借出 10000ETH 5000ETH 抵押到 compound 借出 112 WBTC 1300ETH 轉入 bZx(主要攻擊的漏洞合約) 透過 5 倍槓桿賣出 ETH 買入 WBTC bZx 為了完成此筆交易,透過 kyber network 協議在 uniswap 內大量拋出 ETH 買 WBTC uniswap WBTC/ETH 交易對池不夠深 -> 價格被拉升 38....

September 7, 2022 Â· 1 min Â· Yish

What is ipfs?

困境 目前 web2 都是以中心化服務為基礎設計,舉例為 youtube, google 等網路巨頭所提供之網路服務, 為什麼會要中心化,就是為了體驗的問題,隨時可以拜訪、低延遲等好處,但這也帶來另一個隱憂: 如果中心巨頭服務器斷線或關閉,或遭到監管等問題則完全無法拜訪。 解決方案 ipfs(interplanetary filesystem): 星際檔案系統,有點類似以前的 p2p 跟 BT節點機制,但具備了更多功能。 這邊要特別注意 ipfs 本身與區塊鏈是沒有任何關係的,只是前者又結合了區塊鏈,而後者許多項目為了保持去中心化 思維而大量採用 ipfs 作為檔案儲存媒介。 傳統來說,我們要拜訪一張檔名為 512.png 的檔案,我們會在網址上輸入https://yish.dev/512.png, 這樣我們就能拜訪到這張圖片,而這樣子的行為則被稱為 地址定址(location based addressing) ,一旦服務器失效或網址失聯,則永遠無法拜訪到這張圖片。 但在此之前是不是有其他人拜訪過這張圖片而他電腦不論是緩存或是某地有儲存著備份,但我們卻無法拜訪。 而 ipfs 透過採用 內容定址(content based addressing) 用來解決這樣子的問題。 原本地址定址是需要由你告訴電腦到哪個位置尋找資源,而現在採用內容定址則是告訴它你要什麼資源。 檔案內容都會有一個雜湊值: 例如 hjjsdfh7T124jAAjruuXNnnna14,類似唯一特徵或指紋。 而當你需要下載某個檔案時,只需要詢問網路: 誰有含有這個雜湊值的檔案? 這個雜湊值是每個檔案唯一,也可以進行二次驗證,達到防偽功能。 增加網路可利用性,由於每個檔案都是唯一雜湊,也就是可以刪除重複檔案。 技術細節 實作 每個 ipfs object 含有基礎兩個內容 超過 256kb,切割檔案並且進行連結 也類似檔案系統與資料夾關係 支持檔案版本管理(類似於 git 概念) 當每次提交一個檔案上去時,都會是有一個 commit 動作,告訴 ipfs 你提交哪個檔案版本。 弱勢 當網路提供節點全部失效時則拜訪不到檔案(如同BT種子沒人上傳一樣)...

September 4, 2022 Â· 1 min Â· Yish