📜 [專欄新文章] Optimistic Rollup 就這樣用(1)
✍️ Juin Chiu
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
ERC20 的入金、轉帳與出金
TL;DR
本文會跳過 Optimistic Rollup 的介紹而直接實際演示,關於 Optimistic Rollup 的概念與設計原理我將在日後另撰文說明,有興趣的讀者可以先參考下列三篇文章(由淺入深):1. OVM Deep Dive 2. (Almost) Everything you need to know about Optimistic Rollup 3. How does Optimism’s Rollup really work?
本文將演示一個 Optimism Rollup 範例,程式碼在這裡。
本演示大量參考了以下這兩個官方範例:optimism-tutorial、l1-l2-deposit-withdrawal。
環境設置
Git
Node.js
Yarn
Docker
Docker-compose
筆者沒有碰到環境相容問題,但是建議都升到最新版本, Node.js 使用 v16.1.0 或以上版本
Optimism 服務啟動
有關 Optimisim 的所有服務,都包裝在 Optimism 這個超大專案當中了,直接使用原始碼進行組建:
$ git clone git@github.com:ethereum-optimism/optimism.git$ cd optimism$ yarn$ yarn build
組建完成後,就可以在本機啟動服務了:
$ cd ops$ docker-compose build$ docker-compose up
這個指令會啟動數個服務,包括:
L1 Ethereum Node (EVM)
L2 Ethereum Node (OVM)
Batch Submitter
Data Transport Layer
Deployer
Relayer
Verifier
Deployer 服務中的一個參數要特別注意: FRAUD_PROOF_WINDOW_SECONDS,這個就是 Optimistic Rollup 的挑戰期,代表使用者出金(Withdraw)需等候的時長。在本篇演示中預設為 0 秒。
如果有需要重啟,記得把整個 Docker Volume 也清乾淨,例如: docker-compose down -v
Optimism 整合測試
在繼續接下來的演示之前,我們需要先確認 Optimism 是否有順利啟動,特別是 Relayer 是否運作正常,因此我們需要先進行整合測試:
$ cd optimism/integration-tests$ yarn build:integration$ yarn test:integration
確保 L1 <--> L2 Communication 相關測試通過後再繼續執行接下來的演示內容。
啟動服務及部署合約需要花費一些時間,運行一段時間(約 120 秒)之後再執行測試,如果測試結果全部皆為 Fail,可能是 Optimism 尚未啟動完成,再等待一段時間即可。
ERC20 合約部署
Optimism 啟動成功並且完成整合測試後,接下來進行 ERC20 合約的部署。筆者已將合約及部署腳本放在 optimistic-rollup-example-erc20 這個專案中:
$ git clone git@github.com:ethereum-optimism/optimistic-rollup-example-erc20.git$ cd optimistic-rollup-example-erc20$ yarn install$ yarn compile
接下來我們需要部署以下合約:
ERC20,部署於 L1
L2DepositedEERC20,部署於 L2
OVM_L1ERC20Gateway,部署於 L1
其中,ERC20 與 L2DepositedERC20 是由上面的範例專案編譯的,可以直接在範例專案中直接取得 ABI;而 OVM_L1ERC20Gateway 則是由 Optimism 編譯的,屬於 Optimistic Rollup 協定的一部分,無法直接在範例專案中取得 ABI。
因此在部署以上三個合約前,我們需先手動將 OVM_L1ERC20Gateway 編譯後的生成品 (Artifacts)——即 ABI,複製到此專案中:
$ cp -r ~/projects/optimism/packages/contracts/artifacts/contracts/optimistic-ethereum/OVM/bridge/tokens/OVM_L1ERC20Gateway.sol ~/projects/optimistic-rollup-example-erc20/artifacts/contracts/
OVM_L1ERC20Gateway 只部署在 L1 上,顧名思義它就是 L1 <=> L2 的「門戶」,提供 Deposit / Withdraw 兩個基本功能,使用者必須透過這個合約來進出 L2。
雖然 OVM_L1ERC20Gateway 是 Optimistic Rollup 官方提供的合約。但是開發者也可以依需求自行設計自己的「門戶」。
接下來,我們直接用腳本進行部署:
$ node ./deploy.jsDeploying L1 ERC20...Deploying L1 ERC20...L1 ERC20 Contract Address: 0x1429859428C0aBc9C2C47C8Ee9FBaf82cFA0F20fDeploying L2 ERC20...L2 ERC20 Contract Address: 0x67d269191c92Caf3cD7723F116c85e6E9bf55933Deploying L1 ERC20 Gateway...L1 ERC20 Gateway Contract Address: 0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07Initializing L2 ERC20...
ERC20 入金、轉帳與出金
ERC20 入金(L1 => L2)
目前餘額:
在合約部署完成後,Deployer 是目前唯一有資金的帳戶,接下來我們就進行入金(Deposit),將 Deployer 的資金從 L1 搬到 L2。
首先,進入 ETH(L1) 的 Console:
$ npx hardhat console --network ethWelcome to Node.js v16.1.0.Type ".help" for more information.>
取得 Deployer / User 帳戶:
// In Hardhat ETH Console
> let accounts = await ethers.getSigners()> let deployer = accounts[0]> let user = accounts[1]
取得 ERC20 及 OVM_L1ERC20Gateway 合約物件,合約地址可以從部署訊息中取得:
// In Hardhat ETH Console
> let ERC20_abi = await artifacts.readArtifact("ERC20").then(c => c.abi)> let ERC20 = new ethers.Contract("0x1429859428C0aBc9C2C47C8Ee9FBaf82cFA0F20f", ERC20_abi)> let Gateway_abi = await artifacts.readArtifact("OVM_L1ERC20Gateway").then(c => c.abi)> let Gateway = new ethers.Contract("0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07", Gateway_abi)
先授權 OVM_L1ERC20Gateway 花費 ERC20:
// In Hardhat ETH Console
> await ERC20.connect(deployer).approve("0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07", 10000)> await ERC20.connect(user).approve("0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07", 10000)
注意:Deployer 及 User 都需要對 OVM_L1ERC20Gateway 進行授權,否則在接下來的出金步驟時 Relayer 會出錯
接著,在 OVM_L1ERC20Gateway 合約呼叫 Deposit:
// In Hardhat ETH Console
> await Gateway.connect(deployer).deposit(1000)
我們可以到 Optimism (L2) 的 Console 確認入金是否成功:
$ npx hardhat console --network optimismWelcome to Node.js v16.1.0.Type ".help" for more information.>
取得 Deployer / User 帳戶:
// In Hardhat Optimism Console
> let accounts = await ethers.getSigners()> let deployer = accounts[0]> let user = accounts[1]
取得 L2DepositedERC20 合約物件,合約地址可以從部署訊息中取得:
// In Hardhat Optimism Console
> let L2ERC20_abi = await artifacts.readArtifact("L2DepositedERC20").then(c => c.abi)> let L2DepositedERC20 = new ethers.Contract("0x67d269191c92Caf3cD7723F116c85e6E9bf55933", L2ERC20_abi)
確認入金是否成功:
// In Hardhat Optimism Console
> await L2DepositedERC20.connect(deployer).balanceOf(deployer.address)BigNumber { _hex: '0x03E8', _isBigNumber: true } // 1000
ERC20 轉帳(L2 <=> L2)
完成以上步驟後,目前的餘額如下:
接下來,我們在 L2 從 Deployer 轉移一部分資金給 User:
// In Hardhat Optimism Console
> await L2DepositedERC20.connect(user).balanceOf(user.address)BigNumber { _hex: '0x00', _isBigNumber: true } // 0> await L2DepositedERC20.connect(deployer).transfer(user.address, 1000){ hash: "..." ...}> await L2DepositedERC20.connect(wallet_1).balanceOf(user.address)BigNumber { _hex: '0x03E8', _isBigNumber: true } // 1000
ERC20 出金(L2 => L1)
完成以上步驟後,目前的餘額如下:
接下來,我們用 User 帳戶提領資金,在 L2DepositedERC20 合約呼叫 Withdraw:
// In Hardhat Optimism Console
> await L2DepositedERC20.connect(user).withdraw(1000){ hash: "..." ...}> await L2DepositedERC20.connect(user).balanceOf(user.address)BigNumber { _hex: '0x00', _isBigNumber: true }
最後,檢查在 L1 是否提領成功:
// In Hardhat ETH Console
> await ERC20.connect(user).balanceOf(user.address)BigNumber { _hex: '0x03E8', _isBigNumber: true } // 1000
由於挑戰期為 0 秒,因此提領幾乎無需等待時間,頂多只需數秒鐘
做完上述所有操作,餘額應該如下:
總結
本文演示了:
Optimistic Rollup 相關服務的本機部署
ERC20 L1 => L2 的入金(Deposit)
ERC20 L2 帳戶之間轉帳(Transfer)
ERC20 L2 => L1 的出金(Withdraw)
筆者未來將繼續擴充此系列的教學內容,例如 ERC721 / ERC1155 的使用方式,敬請期待。
參考資料
OVM Deep Dive
(Almost) Everything you need to know about Optimistic Rollup
How does Optimism’s Rollup really work?
Optimistic Rollup Official Documentation
Ethers Documentation (v5)
Optimism (Github)
optimism-tutorial (Github)
l1-l2-deposit-withdrawal (Github)
Optimistic Rollup 就這樣用(1) was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
「編譯compile」的推薦目錄:
- 關於編譯compile 在 Taipei Ethereum Meetup Facebook 的精選貼文
- 關於編譯compile 在 Taipei Ethereum Meetup Facebook 的最讚貼文
- 關於編譯compile 在 軟體開發學習資訊分享 Facebook 的精選貼文
- 關於編譯compile 在 [開箱] 45k 程式編譯/build/compile Linux 機- 看板PC_Shopping 的評價
- 關於編譯compile 在 [計概] 編譯器(Compiler)與直譯器(Interpreter) 的評價
- 關於編譯compile 在 从源代码编译 - GitHub 的評價
- 關於編譯compile 在 JAVA OCA 1Z0-808 模擬試題解析-1-編譯Compile 與執行Run 的評價
- 關於編譯compile 在 Compile error... - 程式交易-楊宗儒-元大期貨 的評價
編譯compile 在 Taipei Ethereum Meetup Facebook 的最讚貼文
📜 [專欄新文章] 2021 區塊鏈開發入門
✍️ Johnson Chen
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
在我大學的時候,除了學習網頁前端之外,因為課程報告的需要接觸到以太坊(Ethereum),於是開始學寫智能合約,包括它使用的程式語言 solidity。
工作以後鮮少再碰以太坊的相關技術,直到最近想重新把以太坊學起來,故而決定寫這篇文章,讓初次接觸區塊鏈與智能合約的人更好地進入開發者的世界。這篇文章不只面向開發者,同時也希望能夠給對區塊鏈有興趣的人,指引一條清晰的學習路線。
關於區塊鏈
區塊鏈會被廣為人知,無非是因為虛擬貨幣的出現,而虛擬貨幣的鼻祖就是比特幣。在比特幣出現以前,沒有一個能夠在全球網路上通用的數位貨幣;在比特幣出現之後,才真的實現了數位化的貨幣,能夠在全球網路上流通。
這樣的技術性突破,blockchain 的名字從比特幣白皮書中被萃取出來,而這項技術也被更多人拿去做研發以及創新。
區塊鏈這項技術的特性可以簡單概括為兩點:去中心化(decentralized)與不可竄改(immutable)。去中心化有程度上的差別,在公共網路上由世界各地的節點共同維護的區塊鏈,去中心化程度較高;相較之下,私人企業開發由特定節點來驗證交易的區塊鏈,去中心化程度較低。
為什麼是以太坊?
這年頭區塊鏈三個字大行其道,大部分都是為區塊鏈而區塊鏈的商業炒作。容許我獨斷地說,以太坊才是區塊鏈應用的大門。
以太坊由全球最大的區塊鏈社群組成,提供一個去中心化的虛擬機器(Ethereum Virtual Machine)來處理「智能合約」,它是一個公共的區塊鏈平台,逛逛以太坊的官網吧!
智能合約
在以太坊區塊鏈中有所謂的智能合約,智能合約能夠部屬到以太坊區塊鏈上,合約即程式碼,放到區塊鏈上就不能再更新,只能執行合約上的程式,持有以太幣的人能夠與合約進行交易。把智能合約想像成是一台自動販賣機,把錢(以太幣)投進去,飲料會掉出來(合約上的程式會被執行)。
在現實生活中,簽訂合約的雙方認為合約有效而且可以被信任,是因為有國家法律來保障,違反合約可能會受到法律制裁;而用以太幣與智能合約互動,認為智能合約可以被信任,是因為智能合約的不可竄改性 — 以太坊虛擬機會毫無偏袒、完全中立、冰冷不帶任何感情地執行智能合約上已經寫好的程式碼。
建立在智能合約之上的虛擬貨幣
事實上,以太坊擴大了區塊鏈這項技術的應用層面。回頭想想,比特幣來自區塊鏈技術,某個人若想打造一款同比特幣一樣的虛擬貨幣,就得模仿比特幣去建造一個自己的虛擬貨幣區塊鏈,一個區塊鏈網路要能夠有效運作並非易事,還需要節點、需要靠人挖礦去驗證交易。此時,若使用以太坊的智能合約,撰寫虛擬貨幣需要的程式碼,將合約部屬到以太坊區塊鏈上,叮咚!他就可以發行自己的虛擬貨幣,根本不必再去建造底層的區塊鏈,也不用想挖不挖礦了。
此時會發現以太坊就像是一個區塊鏈平台,你不需要親手打造區塊鏈網路,即可享有區塊鏈去中心化與不可竄改的特性。與其他智能合約的開發者共同使用以太坊虛擬機 EVM(Ethereum Virtual Machine),在 EVM 上部屬無上限個智能合約。
以太坊是一項基礎建設,底層區塊鏈幫你架設好,開發者便有更多時間去發想應用到網頁、手機、或物連網設備上,以下是一段簡單的智能合約,該合約創造了一個虛擬貨幣簡稱 MAT…
直接進入開發領域 — 線上編輯器 Remix
Remix 是開發智能合約的線上編輯器,進入Remix官網,點選 Create New File 以後,把上方程式碼複製貼上。在左側欄位中有 solidity compiler 的選項,確認一下左側欄第一列顯示的版本,調成 0.7.0 (上方程式碼使用的版本),就可以按下下方 compile 的按鈕,將智能合約「編譯」成 bytecode(給機器讀的語言)。
接著我們要部屬合約到區塊鏈上,首先到左側欄位點選 DEPLOY & RUN TRANSACTIONS 的選項,可以看到環境是 javascript VM,這是指現在要部屬到的測試用虛擬機。按下下方的按鈕 Deploy 即可將合約「部屬」到 javascript VM 上。成功部屬後,你會發現 ACCOUNT 所持有的以太幣,從 100 變成 99.9999…,我們得知部屬智能合約需要花費一點點以太幣。
左側下方會有 Deployed Contracts,點開來就會列出合約上可供呼叫的函式,點那些函式就能與剛剛部屬上去的智能合約進行互動了。
有些函式呼叫會引發交易,所以需要以太幣,有些則不用。在 ACCOUNT 的地方可以展開來,它提供許多的地址 (address),也就是錢包,每個錢包裡面預設給你 100 顆以太幣,試著用那些地址去操作智能合約,你就能慢慢體會什麼是建立在以太坊之上的虛擬貨幣了。
真正的開發者世界
實際上開發智能合約只能算是以太坊開發的其中一部分,其他包括以太坊區塊鏈擴容方案、節點驗證等等又是另一個開發領域了,那部份我就沒有研究太多。而智能合約的開發是比較接近應用層面的,透過網頁前端或手機應用程式,與智能合約進行互動,稱作 Dapp(Decentralized App) 的開發,也象徵著網際網路走向 web3.0 的時代。
學習 solidity 語言,除了看硬生生的官方文件之外,我推薦去玩cryptozombies,我本身就是從這款網頁遊戲中學習這門語言,聽說是連小孩子都能輕易學習的教材。
除了學 solidity 之外,網路上還有很多方便的開發工具,開發者主要是運用這些工具做測試、自動化部屬、串接前端等等。許多網路上的教學文章會使用 Truffle + Ganache + web3.js 來建置開發環境。但我在這裡推薦另一款開發環境的架構,如果是新手直接從 hardhat 開始也是非常適合的,hardhat 的教學文章寫得清楚完整,本篇文章使用的程式碼也是從 hardhat-hackathon-boilerplate 這個專案而來。hardhat 使用的開發環境是 Waffle + Hardhat + ethers,它幫你把開發環境處理的簡單又舒服,讓開發者可以專注在開發智能合約上。
OpenZeppelin 是很有名的智能合約套件庫,開發時可以引入它的智能合約。智能合約很講究安全性,稍微沒寫好就可能被駭客鑽漏洞,虛擬貨幣就被盜走了!OpenZeppelin 提供的 SafeMath 很常被引入到專案,對新手來說看 OpenZeppelin 的合約也是很好的學習管道。此外,官方也建了一個學習網站ethernaut,主要在教導如何寫出安全性夠強的智能合約,可惜網站在我寫這篇文章的時間一直處於維修不能用的狀態。
最後再介紹一款實際上線的智能合約專案:Argent。它是一款運用智能合約來做虛擬貨幣錢包的公司,除了使用他們的錢包之外,也可以看看他們的智能合約是怎麼寫的,感受一下專業的程式碼架構與寫法。
小結
這篇文章希望能幫助到想了解區塊鏈這項技術的人,同時也想呈現一個智能合約的開發生態系,你大可以不必花太多力氣去了解密碼學、挖礦、節點、共識機制等等五花八門的專有名詞;反之,你可以專注在智能合約的開發,或回到本質去思考去中心化的用意、以及為什麼不可竄改的特性那麼重要。
智能合約除了做虛擬貨幣之外,也能夠做投票系統,原本以貨幣為起始點的區塊鏈技術,是智能合約的出現擴大了區塊鏈更具彈性的用途,這圈子需要更多的開發者來探勘這片新大陸。
尤其鼓勵人文社會科學的人才,無論是哲學、政治、經濟、法律或社會等各方領域,試著撇開人工智慧將主導未來社會的發展路線,與之截然不同的另一種形式:人類社會能否依靠科技的力量,促成彼此之間的合作,創造更有效率的市場、更公平的治理方式?
延伸閱讀:激進市場(Radical Markets: Uprooting Capitalism and Democracy for a Just Society)
2021 區塊鏈開發入門 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
編譯compile 在 軟體開發學習資訊分享 Facebook 的精選貼文
Deno 1.6 釋出了, 最大的亮點莫過於可以使用 deno compile 將你的 Deno 專案編譯成一個單一的可執行檔
這個版本也實驗性地支援 Apple 最新的 M1 晶片
https://deno.land/posts/v1.6
✍ Deno 相關線上課程 ( https://bit.ly/3oGr4nN )
編譯compile 在 [計概] 編譯器(Compiler)與直譯器(Interpreter) 的推薦與評價
[計概] 編譯器(Compiler)與直譯器(Interpreter). 前言. 目前接觸過C++ 、 Python、JavaScript,雖然知道他們屬於哪種特性的程式語言,但一直沒有好好 ... ... <看更多>
編譯compile 在 从源代码编译 - GitHub 的推薦與評價
TNN/compile.md at master · Tencent/TNN. ... 当前编译出的 tnn.framework 支持iOS设备上跑CPU和GPU,在Mac设备上当前仅支持跑GPU,CPU的支持在后续版本迭代中支持。 ... <看更多>
編譯compile 在 [開箱] 45k 程式編譯/build/compile Linux 機- 看板PC_Shopping 的推薦與評價
本文 Web 版:https://bit.ly/3g6VXjD
# 背景
需求:程式編譯,主要編譯 Yocto(低配版 Build Code Server)
預算:4.5 萬
# 零件挑選
## 中央處理器(CPU)
挑選 CPU 有幾個重點,依優先順序分別為:
售價(預算)、效能、功耗(耗電量、廢熱量)、C/P 值。
OpenBenchmarking 上搜集了各型號 CPU 的 Linux Kernel 編譯時間
https://openbenchmarking.org/test/pts/build-linux-kernel ,
可用以評估各型 CPU 多核心編譯的效能:
伺服器版的 CPU 太貴,直接跳過。
AMD Ryzen™ 9 5950X
AMD Ryzen™ 9 3950X
Intel® Core™ i9-10980XE
這三顆 CPU 是目前家用主機的頂規。
Intel 這顆效能表現與 AMD 這二顆相伯仲,但功耗高很多,所以先剔除。
再來因為 5950X 和 3950X 這二顆都缺貨,也只能放棄。
繼續往下的選擇中,AMD Ryzen™ 9 5900X 效能相差不大,有貨,
且 C/P 值比 5950X、3950X 都高很多,因此沒有什麼懸念,就選它了。
## 主機板
相容 AMD Ryzen™ 9 5900X AM4 規格且有現貨的晶片組有
B450、X470、A520、B550 和 X570。
符合目前需求的最便宜選擇是 B450,但可惜目前 Mini-ITX 的版本缺貨,
只能往更高階看。因為想保留未來插高階顯示卡和 PCIe 4.0 SSD 的空間,
所以從 B550 和 X570 之間選了比較便宜的 B550。
## 記憶體
依照過去編譯 AOSP 的經驗,編譯所需的記憶體大小,
約略是 CPU 執行緒數多少條,記憶體就要多少 GB。
除此之外,我也先在舊的電腦上,參考這個網頁
https://www.linuxatemyram.com/ ,
分別在掛上 Swap 和卸載 Swap 的情形下實際編譯 Yocto 專案,
來比較記憶體的使用狀況。
測試機器:
- Intel® Core™ i7-8700K (6 核、12 緒)
```
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 12
On-line CPU(s) list: 0-11
Thread(s) per core: 2
Core(s) per socket: 6
Socket(s): 1
...
```
- 記憶體 16 GB
```
$ free
total used free shared buff/cache
available
Mem: 16303912 1840356 13280940 873236 1182616
13286976
Swap: 2097148 0 2097148
```
1. 有掛載 Swap:
掛 Swap:
```
swapon -a
```
清記憶體:
```
sync; echo 3 | tee /proc/sys/vm/drop_caches
```
開始搜集記憶體使用狀況:
```
free -s 1 | tee memory-usage-log-swapon.txt
```
進行編譯。
完成後確認,編譯過程中最低可用記憶體剩餘量:
```
grep Mem memory-usage-log-swapon.txt | awk '{print $7}' | sort -n |
head -n 1
```
及最高 Swap 使用量:
```
grep Swap memory-usage-log-swapon.txt | awk '{print $3}' | sort -nr
| head -n 1
```
最低可用記憶體剩餘量為 5.46 GB,最高 Swap 使用量為 321.75 MB。因此在 12 緒
的 CPU 下編譯我的 Yocto 專案,搭配 16 GB 的記憶體是足夠的。本次編譯耗時
1:06:13.27。
2. 無掛載 Swap:
卸 Swap:
```
swapoff -a
```
清記憶體:
```
sync; echo 3 | tee /proc/sys/vm/drop_caches
```
開始搜集記憶體使用狀況:
```
free -s 1 | tee memory-usage-log-swapoff.txt
```
進行編譯。
完成後確認,編譯過程中最低可用記憶體剩餘量:
```
grep Mem memory-usage-log-swapoff.txt | awk '{print $7}' | sort -n
| head -n 1
```
最低可用記憶體剩餘量為 5.24 GB,與開頭的經驗,編譯中 1 條執行緒約需 1 GB
相符。本次編譯耗時 1:06:10.88。
AMD Ryzen™ 9 5900X AM4 是 12 核 24 緒,因此 32 GB 的記憶體應足夠使用。
同樣大小的記憶體也有價差,時脈、CL 值、會不會發光、品牌等都有影響。
我買了 DDR4-3600 CL18,其實應該選 DDR4-3200 CL16 的就好,
因為二者效能差不多,但 DDR4-3600 CL18 的價格高了近 20%。這邊預算沒有控制好。
## 固態硬碟(SSD)
儲存空間大一點比較方便,目前有貨的最大大小為 2 TB,
WD_BLACK™ SN750 太貴,就挑了使用國產控制器(群聯)一樣五年保的
Pioneer APS-SE20Q。
## 顯示卡
基本上這臺電腦除了安裝 OS 以外都不會接螢幕,因此低階的即可。
但仍希望起碼能推動 4K 的螢幕看影片,所以挑了 GeForce GT 1030。
## 機殼
目前使用的 SilverStone SG09 搭配貓頭鷹塔散,機殼尺寸和散熱效果都讓我很滿意。
因為小機殼輕巧的特性,這次鎖定 Mini-ITX 的機殼。
小機殼內部比較擁擠,裝高度發熱的元件要特別注意通風、散熱。
參考了一些在 YouTube 上看到的機殼:
發現符合我期待的散熱方式及電源位置的只有 NZXT H210,所以就選了它。
挑選小型的機殼時,除了要注意 CPU 散熱器的高度外,
還要看散熱器的體積對機殼內通風的影響。
H210 的內部配置有一些亮點:
1. 前進氣風扇的尺寸比後出風風扇的大,因此很容易可以達到機殼內正壓的配置。
2. 風流設計看起來很合理,前方進風後方出風,中間會吹到 CPU、顯示卡和電源。
3. 有附防塵濾網。
4. 電源下置且有獨立空間。
5. 可使用 ATX (PS/2) 標準的電源。
6. 電源直接貼在背板,電源線可以直接接到電源上,不需要透過機殼自帶的電源延長線
像這種小型的機殼,因為顯卡離機殼底部很近,因此還要注意,若機殼下方會裝風扇,
其風向應與顯卡風扇的風向一致。
不是所有顯卡的風扇都是往晶片方向吹的,也有反著吹的:
補充說明,我會避免選擇將電源供應器定位為主要排風元件的機殼(如後上置型的)。
因為電源供應器很怕熱,長期在較熱環境中工作的電源供應器,除了壽命比較短之外,
也很危險
(可參見全漢官網說明 https://www.fsp-group.com/tw/knowledge-prd-4.html )。
機殼內有獨立空間可放置電源供應器是最理想的,這樣電源供應器就不會與 CPU、
顯示卡等高發熱元件混在同一空間內。
## CPU 散熱器
散熱器的選擇實在太多了,所以我直接在以安靜著稱的貓頭鷹裡挑。
因為希望能與機殼設計的水平風流相配合,所以只看塔式散熱器。
5900X 蠻熱的,需要散熱能力好一點的,
同時我又不喜歡記憶體完全被散熱器遮住看不到,所以挑了 Noctua NH-D15S
Mini-ITX 主板 + 記憶體 + NH-D15S 示意圖:
NZXT H210 + NH-D15S 示意圖:
## 電源供應器
電源供應器是耗材,它的供應瓦數是會衰減的。
預算許可的話,就把瓦數買到 CPU + 顯卡功耗的 2 倍,
這樣電源供應器在其他零件壞掉前應該都會是好的。
愛護地球,在能負擔的範圍內選轉換功率高一點的。
如果機殼支援 ATX 規格的電源供應器,那在電源供應器的選擇會比較多,也會比較便宜。
# 組裝
*開車就是要開手排才熱血,電腦就是要自己裝才有靈魂。*
開始前,先說明一個注意事項:
除了一些非通用特殊螺絲之外,一部電腦主機裡的螺絲有 3 種不同的螺絲牙,
這三種螺絲牙通常是,
最粗的(kb5)鎖風扇,
中等的(#6-32 UNC)鎖主機板、機殼、電源,
最細的(M3)鎖硬碟。
除此之外,也要注意螺絲頭,
有些適合用平頭、有些適合用寬頭、有些適合用手擰的等等。
詳請見維基百科 https://en.wikipedia.org/wiki/Computer_case_screws 。
(各種螺絲外觀請見本文第一張圖)
全零件合照(這邊缺了 SSD 和 後置薄扇):
拿出工具盒,正式開始。
## 安裝電源供應器及機殼風扇
1. 把電源供應器裝進機殼後下方
2. 將 2 顆 14" 進風扇裝進機殼前方
**Update**
之後為防落塵,上方出風口用黑色不織布封住:
另購了貓頭鷹 NF-A12x15 薄扇 1 個裝在機殼後方出風。
**Update 2**
實測後發現 NF-A12x15 對降低峰值溫度沒什麼效果,同時產生了低頻的共鳴噪音,所以
後來又把它拆掉了。
## 安裝 CPU
1. 首先核對 CPU 安裝方向的標示
2. 拉起 CPU 固定桿並輕輕放下
3. 放下固定桿,確定 CPU 有被夾緊
## 安裝 NVMe SSD
補拍 SSD 照片
B550 不是所有 NVMe 插槽都是 PCIe 4.0,所以要注意一下。
不過因為買的是 PCIe 3.0 的 SSD,所以也沒差。
1. 從腳位判斷安裝方向
2. 斜斜地插入
3. 用六角套筒卸下主機板上的固定用螺母柱
4. 將 SSD 壓平,並用螺母柱加以固定
5. 撕開 SSD 散熱片的背膠
6. 將 SSD 散熱片放至定位,並鎖上螺絲固定
## 安裝記憶體
1. 扳開記憶體插槽二側的卡榫
2. 確認記憶體插銷缺口位置
3. 垂直壓下記憶體直到二側卡榫卡緊記憶體
## 安裝 CPU 散熱器
1. 卸下原廠散熱器基座
2. 留下散熱器加固背板
3. 比對散熱器方向
4. 安裝散熱器基座
5. 點散熱膏。於 CPU 中心點上一球直徑約 0.5 cm 的量。
6. 鎖上散熱鰭片
7. 鎖緊散熱鰭片後,從與 CPU 的接縫處檢查散熱膏是否適量。
應該要稍微有一點散熱膏被壓出來,但量不要多到會沾到主機板。
8. 調整散熱器風扇方向
9. 接上 CPU 散熱風扇電源
完成。
可以看到 NH-D15s 給記憶體相當大的空間:
散熱鰭片的長、寬沒有超出主機板:
## 安裝主機板
準備放主機板進機殼時,才發現散熱鰭片會卡到這款機殼後面和上面的風扇,
只好把它們拆掉。
1. 接上 CPU 電源
2. 將主機板放至定位,以螺絲固定
左上角的螺絲孔被 CPU 散熱鰭片擋住鎖不到,
要能鎖到的話,就要先裝主機板再裝鰭片。
但因為先鎖主板再裝鰭片會不能檢查散熱膏的量,
加上這張主板背面有金屬框加固應該夠堅固,所以就不重做了。
3. 接上其他各種電源
## 安裝顯示卡
低階顯卡不用額外接電源,直接插到對應的槽並鎖上機殼背板就好。
## 理線
理線是一個耗時也不見得做得好的工作,建議動手前先參考別人的做法。
對外觀講究的話,可以另外購買高顏值的訂製線。
網路上搜尋「機殼型號」 + 「Cable Management」就可以看到很多範例。
## 完成
最後蓋上機殼側板,就完成啦!
# 驗收
## CPU 效能
相同專案在新電腦的編譯時間約為 35 分鐘,
在上面列的 i7-8700K 舊電腦約為 66 分鐘。
CPU 執行緒數加倍,時間約減半,算是符合預期。
## 記憶體用量
編譯過程中,這臺 24 緒的電腦可用記憶體高達 20 GB 左右,也就是說編譯過程中,
有用到的記憶體約 12 GB。但在舊電腦 12 緒的 CPU 上編譯也是只用了 12 GB 左右。
這個結果說明了執行緒數目和記憶體用量成比是錯誤的假設 ^___^"
## CPU 溫度
環境溫度 28 °C、空調
1. 後、上出風風扇都沒裝
待機:約 33 °C
峰值:80.4 °C
2. 後出風風扇沒裝、上方出風口封起
待機:約 33 °C
峰值:81.9 °C
3. 後出風風扇 NF-A12x15 、上方出風口封起
待機:約 33 °C
峰值:81.9 °C
--
可以頂天立地,也可以狡詐陰險,
可以當個誠實小郎君,也可以嘴裡沒有半句實話;
但是一定不能飄,飄起來的人就是自己騙自己。
柳岸花又明《我真沒想重生啊》
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.201.238 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/PC_Shopping/M.1623248815.A.A07.html
已更新謝謝。
沒有 follow 到,請問最近 Nvidia 有什麼驅動問題嗎?
如果是下面這篇的話,我買時候它還沒出現。
另外顯卡大缺貨,沒什麼可挑的,加上我不太需要,所以就只是挑一張低階的而已。
┌─────────────────────────────────────┐
│ 文章代碼(AID): #1WkbddSE (PC_Shopping) [ptt.cc] [閒聊] NV新驅動466.63疑? │
│ 文章網址: https://www.ptt.cc/bbs/PC_Shopping/M.1622825447.A.70E.html │
│ 這一篇文章值 99 Ptt幣 │
└─────────────────────────────────────┘
感謝推薦!請問沒掛 ccache 時慢多少?
另外好奇 5950X 搭多大的記憶體?
... <看更多>