Currently I'm a blockchain developer, doing different things trying to find out what I like the most
The most interesting so far is designing the systems making sure that they can interact with every other part of the system, and developing automations/internal tools that will solve some problem that exists either for the whole team or just for me
This page is the second version of the page where I collect information on what I've done so far
Until recently most of the projects that I was a part of required learning a lot of new technologies, that I didn't know how to deal with
This lead to creating a lot of micro learning projects that helped me to get a grasp of what is going on and how i can use it at my work, most of those projects are not published and are unavailable for the public
This way I've being learning Go, NestJS, React, Svelte, Huff, Redis, RabbitMQ, Svelte, React, NextJS, Kubernetes, ...
This one is cool one, because it allowed me to get better with EVM assembly and try to make something without any guardrails
I've being interested in EVM assembly for quite some time, and this was a perfect opportunity for a deeper dive
Fun fact: the hackathon was hosted using Optimism network, which did not include all the new opcodes, to be exact it didn't have PUSH0 opcode, which adds zero to the stack. How do i know this? I've spent 3 hours trying to understand why my code isn't working, before finding out that the problem was with this opcode. Hackathon was hosted in 24 non-stop format, but after this one I was not ready to continue unfortunately.
When I started using NeoVim (I use Vim btw, just joking, I use Jetbrains IDEs and very happy with it), one of the problems was that I didn't know amount of references to a class/constant
After a quick search I found an extension that was able to solve the problem, but it didn't work correctly.
So I've forked it, modified it in a way I wanted and now it's useful for me from time to time
What can you build to learn some new language? Snake game
I decided to start learning Go, the first idea for a backend service was to create event gathering service, so here it is
The idea was to create a generic solution for monitoring http endpoints with notifications that will be delivered to me via convenient medium for me (in Telegram), so here's a http service monitor with Telegram notifications :)
2018-12 - 2022-06
As we don't know where the system will be in one year, two years or in five years, it's required to make base architecture as flexible and extensible as possible
While thinking about extensibility it's also very important to remember that if everything is stolen and broken, perfect and extensible architecture doesn't really matter
As the target amount of users lies somewhere in thousands, it's crucial to make sure that all of the operations are either atomic, or they try to be as close to atomic as possible. One operation must only interact with user data, shared data and temporary data. In other case operation in most cases (where we've got more than 10 users) cannot be completed.
We need smart-contracts to get something done, so we need to know in advance how the system components will interact with each other, making sure that the system is extensible and we can support it in the future
A lot of work was spent trying to come up with a solution for providing system security and making sure that we can handle user operations in different ways - if the operations are performed only by the users (they spend their money paying for the operations) or combined approach, where we can perform some operations for users (they pay nothing for the transactions)
Another problem was that this project is 2.5web game - it has web2 backend services for the game part and web3 elements, so we needed a way to allow backend part to make decisions if the action is allowed for user, or not, e.g. is it okay for user to withdraw 200 in-game tokens to blockchain or not
One of the solutions that I've come up to was to use EIP-712 signatures that provide us required security for user operations, so most of the time was spent developing smart-contracts and backend services that will grant users approval for performing actions
As usual - it's required to make sure that smart-contracts can interact with each other in extensible manner, securely and other parts of the system - backend and frontend can get all the required information and perform all the actions required
While developing backend services I've encountered problem - we don't know pod load, when it crashed and what endpoints got hit the most
While working at HodlTree I had to work a little bit with Balancer protocol and was interested in how it works and the idea of making different liquidity pools to work together was very fascinating, so i started deconstructing the protocol and thinking how can i implement it in a different way.
With this idea to create a solution that will unite different liquidity pools in one system we entered the TRON hackathon 2022 and took 4th place in DeFi category.
I was a single solidity dev responsible for all the smart-contracts and helped a little with our backend services for gathering events (TheGraph-like solution for TRON is still non-existent)
Everyone did it, but not everyone wants to tell you about it
The most interesting part was optimizing open-source Python image generator by adding multiprocessing (not multithreading) to it, thus making it run 6-7 times faster than original single-threaded version
Not a lot of interesting stuff, just making a service that glues together AML service and custom smart-contracts
Not really a lot to tell, this was the place where I was introduced to stand ups, sprint planning and discovered a lot of web3 projects
In this company we worked with an asynchronous blockchain, called Everscale
Asynchronous in this case means that there is no single point of fail, anything may fail and you wouldn't even know about it, as calls to smart-contracts are spread across different blocks.
Almost no tools were available for developers, we had only compiler for the smart-contracts and NodeJS bindings for basic operations, so everything from smart-contracts deploy system to debuggers had to be written from scratch
We had only official documentation, which was not very clear for some topics and a chat in Telegram that hosted (I think) all of the developers for Everscale (or at least most of them)
Create our own developer tools from scratch, report bugs back to the developers of Everscale and be active in Telegram chat :)
It was a bit tough, but I've managed to create some tools that helped us on the way to building stuff
Yup, I was a part of jury for the hackathons for Everscale as one of developers that had at least some idea of what is going on. I've managed to find the proposal that was required for becoming a jury :)
This project was developed for the hackathon that was hosted by the community of the chain, it consisted of three stages - initial development, improvement and user incentives
At this stage we just tried to copy the UniswapV2 architecture to the asynchronous blockchain and learnt how it works and what quirks Everscale blockchain had, it was very painful to be honest
After the initial stage, the smart-contracts looked like a mess, so I've decided to step back and rewrite the original smart-contracts so that they would fit the developing patterns that started to pop up
Full rewrite of the smart-contracts, so they would work and could interact with new token standard (TIP-3)
At this stage base smart-contracts were finished and the only thing that we needed to do was create some user incentives like staking
So, I've developed
Long story short: we received a task for creating lending solution
What was done in order to try and make it work:
I don't know anything about NodeJS and asynchronous operations
This was the first time working at a place where I had to interact with a lot of people working with the same code base
Just sit down and learn everything required, while trying to be useful for the team and making contributions that I can handle or that relate to my previous experience
The blocks that were requested recently are the ones that will be requested more frequently than others, as most of the time it's either a fresh block and we need to distribute it/perform some reads or requesting some historical information for a specific block
Loading data from storage is slower than loading it from memory, so a timeout-based cache was added
We needed a pipeline that will automate building Windows and Linux executables for every release, so that we wouldn't need to do it manually
DevOps engineer, 2018-12 - 2022-06,
It was a bit painful, but fun and here I found out that Polish notation exists and GIMP is not a meme, but a useful piece of software
A lot of Bash and pain
syzkaller one love, making custom core work with it is pain
Ansible + Bash magic + Zabbix + help us gods