Many people think that working in a cryptocurrency exchange requires knowledge of Web3 and Blockchain. This is partly true and partly not. 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 the exchange. Many exchanges do not necessarily develop and 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 contents of releases 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 to prepare for the update. Some blockchain updates may not be included in the releases and may be published in their blogs or Telegram validators groups, so I need to pay extra attention.
- After checking for updates, I prioritize my development tasks based on tickets in Jira. The main development tasks include routine token listings, integrating new blockchains, developing business logic, and 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 accelerate personal growth. During reviews, I often think about whether there are better ways to write the code or hidden risks and whether the overall architecture is flexible. I can learn from others' coding styles and structures and also have discussions with colleagues.
This is a typical day under normal circumstances, but there are often situations that need to be handled, such as:
- Mainnet/Testnet full node out of sync
- Mainnet/Testnet full node RPC error
- Major emergency full node update
- Blockchain update fee role or shutdown (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, and C++, and port them into Java libraries. We also need to learn how to deploy and interact with 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, when encountering integration issues, we need to ask questions on Discord or Telegram. I have encountered very helpful official engineers who have helped solve problems, and I have also consulted with SDK developers on various 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.