加密貨幣交易所後端工程師的一天

有很多人覺得在加密貨幣交易所工作就需要知道 Web3 和 Blockchain 的知識，這個算是對也是不對，以後端來說在加密貨幣交易所中分為很多團隊

交易所網站 API

交易引擎 (交易搓合、Earn 計算等)

Payment API (錢包相關的 API)

Wallet (區塊鏈相關的系統)

會需要知道 web3, blockchain 知識的會是 Wallet 部分，其他部分則是需要知道交易所交易的知識等，滿多交易所不一定會自己開發與維護 Wallet，而是使用第三方的服務像是Cybavo, Fireblocks等。

而我在交易所是擔任 Wallet 的後端工程師，我們主要的工作是

開發 wallet 相關業務邏輯與資產管理功能

研究與整合新的 blockchain network（包含節點運行與維護）

blockchain network 更新驗證和日常的 token listing

我的一天基本上是

早上，我開發的 Blockchain release checker 會將所有公司支援的 Blockchain 最新 release 發送到 slack channel，如果有 fork, hardfork 或是 upgrade 會標記出來，進公司後會檢查 release 時間在 24 小時內的 release 內容，是否有需要更新 testnet or mainnet，如果有的話需要在 testnet 節點上更新並測試所有 wallet 相關功能後在通知 infa 為更新做準備；有的 blockchain 的更新資訊不會放在 release 中，可能會發佈在他們的 blog 或是 telegram validators group 中，要額外去注意。

結束檢查更新後會開始根據Jira上的 ticket 優先度來做開發，主要的開發內容上面有提到，可能是 routine 的 token listing、新的 blockchain 整合、業務邏輯開發、refactor 系統等。

下午我通常接續上午的開發工作或者幫忙 Code review，最近我們開始在提交 MR 時會先給同事 review 後再提交上去，Code review 會加快自身成長，在 review 時常常會思考這樣的寫法有沒有更好的方式或是有沒有隱藏的風險以及整體架構具不具有彈性，可以學習到其他人的寫法架構，也可以和同事交流。

這個基本上是正常情況下的一天，實際上會有許多狀況需要處理

Mainnet / Testnet Fullnode out of sync

Mainnet / Testnet Fullnode RPC error

重大緊急 fullnode 更新

Blockchain 更新 fee role or 停機 (去年的Solana(誤)

雖然我們的系統是使用 JAVA 建構的，但我們的工作需要快速查看不同語言的程式碼，例如我們在整合 blockchain 時，如果該 blockchain 沒有提供 JAVA SDK 時需要研究他們其他語言的 SDK，例如 Golang、Rust、Python、C++ 等，在 porting 成 JAVA Lib，以及如何在 blockchain 上部署合約，以 EVM 來說我們有完整的 SOP，但非 EVM 時就需要去研究如何發行合約與操作合約，例如Near, Elrond (現在是 MultiversX)和TON。

這是一個有著不斷變化和新挑戰的工作，除了以 JAVA 開發系統之外，還可以接觸許多 blockchain 的特性或是技術，加上 blockchain 有很多 doc 是舊的或是不完整，在整合時遇到問題時需要到 Discord 或是 telegram 中發問，有遇過很熱心的官方工程師幫忙解決問題，也有跟 SDK 開發者請教許多鏈上的問題或是在 github repo 上提交 issue。

在這邊工作的經驗不只對我的 Software development 有所精進也對於開發 Web3 service 有所幫助。