Many people think that working in a cryptocurrency exchange requires knowledge of Web3 and Blockchain. This is partly true and partly false. In terms of backend development, there are several teams involved in a cryptocurrency exchange:
- Exchange website API
- Trading engine (matching trades, calculating earnings, etc.)
- Payment API (related to wallets)
- Wallet (related to blockchain systems)
Knowledge of web3 and blockchain is mainly required for the wallet part. Other parts require knowledge of trading in exchanges. Many exchanges do not develop or maintain their own wallets, but instead use third-party services like Cybavo or Fireblocks.
In the exchange where I work, I am a backend engineer for wallets. Our main tasks include:
- Developing wallet-related business logic and asset management features
- Researching and integrating new blockchain networks (including running and maintaining nodes)
- Verifying blockchain network updates and daily token listings
A typical day for me involves:
- In the morning, the Blockchain release checker I developed sends the latest releases of all supported blockchains to a Slack channel. If there are any forks, hard forks, or upgrades, they are marked. When I arrive at the office, I check the release content within the past 24 hours to see if any updates are needed for the testnet or mainnet. If updates are required, I update and test all wallet-related functionalities on the testnet nodes before notifying the infrastructure team for the update. Some blockchain updates may not be mentioned in the releases and may require additional attention, such as checking their blog or Telegram validators group.
- After checking for updates, I prioritize my development tasks based on tickets in Jira. These tasks can include routine token listings, integrating new blockchains, developing business logic, or refactoring the system.
- In the afternoon, I usually continue with the morning's development tasks or help with code reviews. Recently, we started having our colleagues review our code before submitting merge requests. Code reviews help us grow and improve. During reviews, I often think about better ways to write code, hidden risks, and overall system flexibility. I can learn from other people's coding styles and structures and have discussions with my colleagues.
This is a typical day, but there are often situations that require immediate attention, such as:
- Mainnet/Testnet full node out of sync
- Mainnet/Testnet full node RPC error
- Critical and urgent full node updates
- Blockchain updates to fee roles or shutdowns (last year's Solana incident)
Although our system is built with Java, our work requires us to quickly review code in different languages. For example, when integrating a blockchain that does not provide a Java SDK, we need to study their SDKs in other languages such as Golang, Rust, Python, or C++. We then port them into Java libraries and learn how to deploy and interact with smart contracts on the blockchain. For EVM-based blockchains, we have a complete SOP, but for non-EVM blockchains, we need to research how to issue and operate contracts, such as Near, Elrond (now MultiversX), and TON.
This job is constantly changing and presents new challenges. Besides developing systems in Java, we also get to explore the features and technologies of various blockchains. Since many blockchain documentation is outdated or incomplete, we often have to ask questions on Discord or Telegram when encountering integration problems. We have encountered helpful official engineers who assist in problem-solving and have consulted SDK developers on many on-chain issues or submitted issues on GitHub repositories.
Working here has not only improved my software development skills but also helped me in developing Web3 services.