Rails + Passenger 解決 Request queue full (configured max. size: 100)
問題透過 Passenger 的相關 HTTP Request 回應 503,出現下面錯誤訊息 1Request queue full (configured max. size: 100) 原因Passenger 使用多個程序 (Process) 來處理 HTTP 請求,預設為 6 個。當大量 Request 進來時,處理不及的會先放在 Queue 等待處理,預設 100 個,當超過 Queue 的上限時會出現這錯誤。 處理請求速度不夠,來不及消化是出現錯誤的原因,然而處理速度不夠的原因就有很多可能,而對應的解決方式也都不同。這邊列出幾個我想得到的原因: 設定問題 程式效能問題 大量 HTTP 請求 程式存在 Bug 底層框架或套件有 Bug 網路上可能會看到有人說去修改 passenger_max_request_queue_size 的設定,來增加 Queue 的大小,但這沒有根本解決問題,還是要找出原因來對做應處理。 設定問題說明比較常見的是 Passenger 使用 ActionCable 時設定沒有正確。ActionCable 使用 Socket 持續連線,所以會常時 ...
Rails ActionCable 效能測試
本篇文章說明連線數上限相關設定,以及實測 ActionCable 預設模式、Standalone 模式和 AnyCable 三種方案的效能比較。 準備首先建立一個 Rails 專案來測試 ActionCable 連線效能,先寫一個簡單的 Channel 12345class MessageChannel < ApplicationCable::Channel def subscribed stream_for 'message_channel' endend 在 config/environments/development.rb 加上 1config.action_cable.disable_request_forgery_protection = true 然後寫一個 Node Client 程式來測試,使用套件 @anycable/web 和 ws 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849imp ...
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 味道濃郁,可以說這幾天比較好吃的食物,而且價格便宜,在台灣大概要兩三百。 淺草寺 吃完飯後我們比預約時間提前前往和服店,我們這次是預定江户和装工房雅這家。走回捷運的路口,又看到晴空塔,比在上野看到的更近了一點。照片中也拍到了這邊另一個在地特色,人力車,可以花錢乘坐。 和服店工作人員會說中文,所以沒什麼問題。這是男生的衣服款式。 女生的樣式比較多種,這是其中一部分。 男生選擇和著裝速度很快,女生比較花時間,這次還包含了化妝的內容,時間更久。 著裝完畢之後,我們就從雷門這裡一路往淺草寺逛,可 ...



