Solidity 智能合約 - 工廠模式的搶先交易問題 (Front Running)
之前的文章 Solidity 智能合約 - 工廠模式的重組問題 (Reorg) 說明了重組問題和解決方案,但是並不能防止搶先交易 (Front Running)。本篇文章將說明這個安全問題,以及解決方式。 搶先交易 (Front Running)這是區塊鏈常見的一種獲利手法,也可以說是一種攻擊,監控未確認的交易來預知未來將發生的事情,讓自己的交易搶先執行而獲利。例如看到有人要用大單買入 ETH,就搶先買入後抬高價格賣給他。 問題延續上一篇文章的情境: 使用者 A 用 salt 0xabcd... 建立一個多簽錢包 0x9876...。 使用者 A 轉入 ETH 到 0x9876...。 假設使用者 A 先預測了生成的錢包為 0x9876...,並連續送出第二筆交易。這時候在鏈上,存在這兩筆未確認交易,攻擊者看到後搶先送出他的交易: 攻擊者 C 用 salt 0xabcd... 建立一個多簽錢包 0x9876...。 使用者 A 用 salt 0xabcd... 建立一個多簽錢包 0x9876...。已存在,交易失敗。 使用者 A 轉入 ETH 到 0x9876...。 結果 E ...
Solidity 智能合約 - 工廠模式的重組問題 (Reorg)
之前的文章 Solidity 智能合約 - 工廠模式 (Factory Pattern) 和 Solidity 智能合約 - 地址生成規則說明了工廠模式和地址生成的規則。在了解這些之後我們會發現某些情況可能存在重組的問題,本篇文章將說明這個安全問題,以及解決方式。 重組 (Reorg)我們這裡只簡略的說明這個現象,簡單說就是區塊打包的結果有可能發生變動,造成原本執行交易的結果發生變化 問題在工廠模式中採用 create 的地址生成規則的時候,會和執行順序有關。我們考慮以下的模擬情境: 使用者 A 建立一個多簽錢包 0x1234...。 使用者 A 轉入 ETH 到 0x1234...。 使用者 B 建立一個多簽錢包 0x5678...。 由於發生重組,順序改變了: 使用者 B 建立一個多簽錢包 0x1234...。 使用者 A 建立一個多簽錢包 0x5678...。 使用者 A 轉入 ETH 到 0x1234...。 結果使用者 A 的 ETH 跑到使用者 B 建立的 0x1234... 解決方案等待區塊確認如同中心化交易所入金一樣,等待足夠多的區塊確認後再進行下一步,使用者 ...
Solidity 智能合約 - 地址生成規則
之前的文章 Solidity 智能合約 - 工廠模式 (Factory Pattern) 說明了生成智能合約的方法,這篇文章進一步說明智能合約地址生成的規則,包含了 create 和 create2 的差異。 目前產生合約主要有兩種規則: create create2 create我們可以在智能合約中使用這個指令來建立合約,而上一篇文章提到的 new 寫法其實也是使用 create 指令。另外,EOA 錢包部署合約的時候也適用這個規則。這個規則中,影響地址主要是下面兩個參數: 發送者 (sender) nonce 生成的公式如下: 1keccak256(rlp([sender, nonce]))[12:] 後面的 [12:] 表示生成的 hash 取最後 20 bytes。如果是 EOA 錢包部署,sender 為錢包地址,nonce 為錢包發送交易時的 nonce。如果是智能合約中建立其他合約,sender 則為執行建立合約行為的主合約地址,nonce 則為此合約的第幾次執行生成合約,從 1 開始。 例如我在 hardhat 進行測試的時候,預設錢包是:0xf39Fd6e5 ...
Solidity 智能合約 - 工廠模式 (Factory Pattern)
簡介工廠模式 (Factory Pattern) 是一種程式設計的設計模式 (Design Pattern),用來生成物件的一種方式。在智能合約開發中,有些情況會使用到。例如:Uniswap 的交易對或是生成 Token。只需要輸入一些不同的參數,像是名稱、總發行量之類的設定,就可以就快速部署功能相同的合約。我們可以透過智能合約中撰寫一些程式碼來產生新合約,本篇文章會介紹一些方法。 在智能合約中用來建立合約實例的指令有三種寫法: new create create2 而根據實作的方法主要分為兩種: 部署整份合約 使用 Proxy 部署整份合約先假設我們有一個這樣的合約 12345import "@openzeppelin/contracts/token/ERC20/ERC20.sol";contract NormalToken is ERC20 { constructor(string memory name_, string memory symbol_) ERC20(name_, symbol_) {}} ...
新光銀行 OU 數位帳戶任務攻略
最近被 Facebook 廣告台幣活儲最高 6.08% 打到,研究了一下。除了 6.08% 的台幣活存之外,其他同時有些活動覺得還不錯,就記錄一下寫成一篇攻略。前面先整理出目前有的活動進行簡單說明,後面會說明如何操作能拿到各種獎勵。 新光好友邀請函任務 1活動期間:2024 年 1 月 2 日至 2024 年 3 月 31 日。任務獎勵:100 點 LINE POINTS任務內容:透過推薦連結辦理信用卡。其他說明: 申請 OU 數位帳戶的時候會強制要辦一張卡,所以可以考慮先取得推薦辦理信用卡,再去開數位帳戶。 推薦連結似乎要使用 LINE 分享給好友,可以找朋友看有沒有人有,或是使用我從 LINE 裡面抓出來的連結試試:新光 ESG 白金卡 推薦連結。 使用 ESG 白金卡是因為在申請數位帳號的時候可以選這張,這樣似乎就可以只申請一張卡。 任務 2活動期間:2024 年 1 月 2 日至 2024 年 3 月 31 日。任務獎勵:20 點 LINE POINTS任務內容:首次綁定贈 10 點,登入行網銀再贈 10 點。 任務 3活動期間:2024 年 1 月 2 日至 2024 年 ...
在 zkSync 驗證 TransparentUpgradeableProxy 合約
說明zkSync 可以使用 hardhat-zksync-verify 工具,來讓合約在瀏覽器上開源,通常可以使用下面指令進行驗證: 1npx hardhat verify --network zkSync 合約地址 例如使用合約地址 0xdD5AE451A75a654146747235FDB515F06A55D018,為一個 TransparentUpgradeableProxy 的合約,嘗試使用下面指令進行驗證: 1npx hardhat verify --network zkSync 0xdD5AE451A75a654146747235FDB515F06A55D018 結果會出現下面錯誤: 123Error in plugin @matterlabs/hardhat-zksync-verify: The number of constructor arguments you provided (0) does not match the number of constructor arguments the contract has been deployed with (3 ...
新北旅遊景點 - 象鼻岩
拍攝時間:2023 年 12 月 9 日 地圖 內容今天今天氣不錯,就隨意地出去逛逛,先跑到基隆吃了東西,但沒有規劃要去哪,就隨機的來到象鼻岩。 象鼻岩入口往前走 走沒多久就變成這樣的地形 沿著高高低低的岩岸地形往前,不是很好走 走了一段路看到有個上坡,大家都往上走,我們也就跟著往上 上去後上面有很多這種蜂窩岩 這就是今天主角,象鼻岩,有不少人輪流在和他合照 附近的景觀 沿海的景色 蜂窩石和天空 回去的時候從靠海的一邊走,回頭的岩壁景觀。靠海的地面高低差比較低,比較好走。 隔了一週,就看到象鼻岩斷裂的新聞,沒想到我們第一次去就是見他最後一面。
日本旅遊 - 淺草寺
拍攝時間:2023 年 11 月 5 日 行程日本旅遊 - 五天四夜的第四天 早餐 - 飯店 上野恩賜公園 午餐 - 渡邊拉麵 和服 - 江户和装工房雅 淺草寺 晚餐 - 仲見世商店街 秋葉原 渡邊拉麵 下午的行程是穿和服逛淺草寺,中午先來到這附近吃午餐,我們從淺草寺站 3 號出口出來,沿著這條観音通り商店街走 走了一段路找到這家渡邊拉麵,台灣很流行的雞白湯拉麵 他有幾種不同口味可以點,對應不同顏色,有白黑青赤等,這個是青色的青唐辛子,日幣 900 這是白色的雞白湯拉麵,加溫泉蛋,日幣 980 味道濃郁,可以說這幾天比較好吃的食物,而且價格便宜,在台灣大概要兩三百。 淺草寺 吃完飯後我們比預約時間提前前往和服店,我們這次是預定江户和装工房雅這家。走回捷運的路口,又看到晴空塔,比在上野看到的更近了一點。照片中也拍到了這邊另一個在地特色,人力車,可以花錢乘坐。 和服店工作人員會說中文,所以沒什麼問題。這是男生的衣服款式。 女生的樣式比較多種,這是其中一部分。 男生選擇和著裝速度很快,女生比較花時間,這次還包含了化妝的內容,時間更久。 著裝完畢之後,我們就從雷門這裡一路往淺草寺逛,可 ...
日本旅遊 - 上野恩賜公園
拍攝時間:2023 年 11 月 5 日 行程日本旅遊 - 五天四夜的第四天 早餐 - 飯店 上野恩賜公園 午餐 - 渡邊拉麵 和服 - 江户和装工房雅 淺草寺 晚餐 - 仲見世商店街 秋葉原 地圖 內容早上吃飯店提供的早餐 看起來都差不多,一樣有納豆 今天是自由行,我們要自己去搭地鐵,路上的街景 來的時候西瓜卡停售,只好買單程票 不像台北捷運有防護牆圍起來,比較像台鐵火車月台 早上行程是上野恩賜公園,坐車到湯島站,從 2 號出口走過去 進入上野恩賜公園馬上就會看到一大片蓮花池 這個季節沒有蓮花,只剩蓮葉 葉子很多都枯掉了 這景點叫不忍池 在開花的季節來應該會蠻漂亮的 繼續往前走,另一邊也有一個小的池塘 這裡也像台灣的公園一樣,有些人在散步運動 再往前走會來到上野動物園,不過我們沒有進去 不忍池中央有個小島,上面也有建築,通往那邊的道路上在擺攤。我們沒有往那邊走過去 我們往另一邊的樓梯上去,計畫逛一圈到上野站坐車 樓梯一上去看到清水觀音堂,沒有上去<img src=”https://blog.emn178.cc/photo/pw/ADCreHevl9aOlhNUd ...
日本旅遊 - 北口本宮富士淺間神社
拍攝時間:2023 年 11 月 4 日 行程日本旅遊 - 五天四夜的第三天 早餐 - 飯店 西湖療癒之里根場 午餐 - TJC 富士田屋 忍野八海 北口本宮富士淺間神社 免稅店 晚餐 - 鳥貴族居酒屋 地圖 內容接著又來到北口本宮富士淺間神社,咦?剛剛不是才去過淺間神社 原來這裡有很多淺間神社,但前面會有不同的名稱,像是這裡是「北口本宮富士」,大概就像是有很都美而美的概念。通過鳥居可以看到兩旁有很多的石柱 沿路也會路過一些紀念碑之類的東西,不過日文是「記」念碑 一個帶有結界的石頭 旁邊有說明,角行的立行石,其他看不懂 又通過一個鳥居 看不懂上面寫什麼 進到神社裡面,左前方有一顆千年神木,富士太郎衫 神木旁邊有這個把不好的籤綁上去消災解厄的地方 另一邊有洗手參拜的水,上面寫御水錢 在左邊還有一顆很大的銀杏樹 這裡有好幾顆這種神木 因為排隊參拜的人很多,所以先去左邊逛逛, 這邊也有一些不同的造景 回到主殿附近拍一張,排隊的很人還是很多 主殿旁邊有御朱印,不知道是什麼東西 走進主殿參拜的地方,上面有一些匾額和天狗面具 往神社右邊過去逛,有其他的神木,富士夫妻檜 另一顆,不知道叫什麼, ...