# Arthur Galiullin

**Smart Contract & Backend Engineer** · Warsaw, Poland

**Available now — actively seeking**

One of six core engineers on an exotic perps DEX, from testnet through TGE. Four years of Solidity, eight years of production engineering.

[work@arthurka.eu](mailto:work@arthurka.eu) · [GitHub](https://github.com/arthurka-o) · [LinkedIn](https://www.linkedin.com/in/arthur-galiullin/) · [Upwork](https://www.upwork.com/freelancers/~016038237dd7ada953) · [CV (PDF)](https://arthurka.eu/cv.pdf)

## At a glance

- **Overlay Protocol — testnet to TGE** — $2.9M raised. Exotic perps DEX on BSC. Polychain Capital, 1kx and ParaFi backed; audited by Spearbit, Trail of Bits and Nethermind. One of six core engineers.
- **Shiva Router** — 30,000+ on-chain transactions. The upgradeable router in front of Overlay's immutable core contracts. Because the core can't change, the router is also where the protocol decides which systems may call which functions. ([BscScan](https://bscscan.com/address/0xeB497c228F130BD91E7F13f81c312243961d894A))
- **ETHGlobal Prague 2025 · ETHWarsaw 2025** — 2× hackathon prize winner. LayerZero General Prize for StreamBeam, built solo in 36 hours. Prize with the InSure team at ETHWarsaw. ([StreamBeam source](https://github.com/arthurka-o/streambeam))

## Experience

### Independent — Personal Projects

June 2026 – Present · Remote

Actively seeking work, with personal projects on the go alongside it.

### Protocol Engineer — Overlay Protocol

May 2024 – May 2026 · Remote

Exotic perps DEX on BSC. One of six core engineers, from testnet through TGE.

Organisation: <https://overlay.market/>

Stack: Solidity, Foundry, Safe, Zodiac, TypeScript, Node.js, MongoDB, Ethers.js, The Graph

- Contributed to the Shiva Router, the upgradeable proxy in front of Overlay's immutable core contracts. Rewrote the price oracle in the same codebase: TWAP from PancakeSwap V3 pools, made non-upgradeable and then fully immutable. 30,000+ transactions verified on-chain.
- Built the funded-trader program, where sponsored users trade with protocol-provided USDT. Safe multisig wallets with Zodiac modules enforce that funds interact only with Overlay contracts, and call only the allowed functions. Off-chain monitoring detects drawdown past threshold, then programmatically closes all positions and pauses the Safe.
- Integrated an already-audited referral contract and built the verification layer around it: off-chain signed messages checked against on-chain state, with a fallback that rebuilds a missing record from chain. Alias normalisation and migration scripts to move existing records on-chain.
- Built the seasonal leaderboard (Node.js, MongoDB) tracking trader performance across configurable criteria, then extended it into a competition platform with filters for market, minimum collateral, and position lifetime.
- Wrote most of the protocol's indexing: rewrote the config so new factories and networks stopped being hand-edits to YAML, added the router and PowerCard entities, and built the Matchstick test suite over the handlers.

### Solidity Developer — KUMO

March 2022 – January 2024 · Remote

Lending protocol secured by carbon credits. Selected for the ABN AMRO + Techstars Future of Finance Accelerator. One of two Solidity developers.

Organisation: <https://kumo.earth/>

Stack: Solidity, Hardhat, Chainlink, OpenZeppelin, Diamond Pattern, UUPS, Ethers.js

- Joined KUMO on a Liquity fork retargeted at carbon removal, and threaded the asset parameter through the protocol to make it multi-asset: every function that touches a position now takes the asset it is working with, plus a factory that creates a savings pool per asset rather than hand-copying deployed contracts.
- Helped redesign the tokenomics to remove the protocol token while preserving the system's incentives — simpler economics without breaking existing functionality.
- Added Tellor alongside Chainlink as a second price source, so a single oracle outage or manipulation cannot sink the protocol. Upstream contribution, reviewed and merged by the original team.
- The core contract's functions had outgrown the EVM's stack limit, so the upgradeability question had to be settled. Researched the Diamond pattern (EIP-2535) and prototyped the split; the protocol shipped on UUPS instead, because the upgradeable-proxy ecosystem around it was the more mature one at the time.
- Added a per-asset cap on stablecoin creation, and fixed a bug where the "how much room is left" calculation wrapped around to report enormous headroom instead of none.
- Wrote the test suites across the migration, plus custom Hardhat tasks for deployment and monitoring.

### Ruby on Rails Developer — Multiple companies

2016 – 2022 · Remote

Six years of backend and full-stack engineering across three companies and products.

Stack: Ruby on Rails, PostgreSQL, React, TypeScript, RSpec, AWS, Sidekiq

#### Flatstack / Galvanize

2020 – 2022

Enterprise GRC platform, used by Canadian Government. Built the public API, async processing pipelines and performance optimisation (N+1 fixes). Production monitoring with DataDog and Airbrake. AWS Lambda, Terraform, ECS.

#### meyvn

2018 – 2020

HR platform for the US/EU market and a news scoring engine. Led the migration from a monolithic Rails app to a React SPA with a Rails API backend. Integrated Azure Cognitive Services for ML-powered language features.

#### Technokratos

2016 – 2017

Virtual goods marketplace and photo album service. Built REST APIs, PDF generation, and face detection via OpenCV for smart image cropping.

## Work

### Shiva Router

*Protocol contract · Solidity 0.8.10*

The router contract at the centre of Overlay's perps protocol. Every higher-level system — the funded-trader program, the referral system — reaches protocol state through it, which is what lets the core contracts stay immutable once deployed. It also decides which systems may call which functions, so it enforces a permission boundary, not just a proxy.

- Verified on-chain with 30,000+ transactions processed through it.
- Oracle redesign in the same codebase: TWAP from PancakeSwap V3 pools, made non-upgradeable and then fully immutable, resolving to the worst price available so it can never be manipulated in a borrower's favour.
- Invariant testing with Chimera on the staking/notional relationship, plus Foundry mainnet-fork tests for the oracle path.
- Ported the Chainlink feed test suite from Python to Foundry so one toolchain verifies both sides of the interface, then covered the inputs that actually broke things: a zero price, and a macro window equal to the micro window.

Stack: Solidity, Foundry, Ethereum, BNB Chain, OpenZeppelin

Links: [BscScan — 30,000+ txns](https://bscscan.com/address/0xeB497c228F130BD91E7F13f81c312243961d894A), [Source](https://github.com/overlay-market/v1-shiva)

### KUMO lending protocol

*Protocol · Solidity 0.8.11*

KUMO's protocol was a fork of the Liquity lending protocol, retargeted at carbon removal, and the work below was done in my own fork of KUMO's. A certified carbon credit is locked as collateral and stablecoins are drawn against it immediately, instead of waiting for the credit to be sold. My work on it was the multi-asset rework, the upgradeability work and the oracle work below.

*Original repo is private*

- Made it multi-asset: every function that touches a position now takes the asset it is working with, plus a factory that creates a savings pool per asset rather than hand-copying deployed contracts.
- Split the core contract's functions after they outgrew the EVM's stack limit. The Diamond pattern (EIP-2535) was researched and prototyped for this, but the protocol shipped on UUPS instead — the upgradeable-proxy ecosystem around it was the more mature one at the time.
- Added a per-asset cap on stablecoin creation, and fixed a bug where the "how much room is left" calculation wrapped around to report enormous headroom instead of none.
- Thirty-plus commits repairing the existing test suite across the migration. The structural change is the interesting commit; the green suite afterwards is the work.
- Upstream contributor to the original protocol: added Tellor as a second price source alongside Chainlink so a single oracle outage or manipulation cannot sink the protocol.

Stack: Solidity, Hardhat, Foundry, Chainlink, OpenZeppelin, Diamond Pattern, UUPS

Links: [Source (my fork)](https://github.com/arthurka-o/kumo-protocol)

### ABN AMRO pilot

*Pilot contract · BUSL-1.1*

A contract for lending against carbon credits, built for a pilot with ABN AMRO, a Dutch bank. Two of us wrote it — I took most of it — and kept it deliberately plain: explicit allowlists and a strict loan lifecycle, written so a bank's risk team could review and sign it off without reverse-engineering the logic.

*Built for the ABN AMRO + Techstars accelerator.*

- Five-state loan lifecycle — pending, active, repaid, liquidated, closed — where the contract refuses any transition that doesn't follow that path.
- Explicit on-chain allowlists of lenders and borrowers. The protocol is permissioned on purpose: it only moves money between counterparties the bank has approved.
- Liquidation proceeds routed to a designated treasury, not back to the default recipient, because seized collateral often doesn't cover the debt.
- A V2 escape hatch so the pilot can hand off to a successor contract.
- Smaller correctness work: a maxLTV → liquidationLTV rename (the old name implied a borrowing limit, not a liquidation threshold), the correct OpenZeppelin transfer helper on withdrawal paths, a tolerance on duration comparison, and test coverage for the liquidation and treasury paths.

Stack: Solidity, Hardhat, OpenZeppelin

Links: Repository is private

### Funded-trader kill switch

*Risk system*

The safety system that automatically closes a protocol-sponsored trader's positions when they breach a loss limit, and pauses their account until a human looks at it. Sponsored traders risk none of their own money, so the protocol has to act as the risk manager; it cannot leave that to the trader's judgement.

- Two independent limits: value below 50% of initial collateral, or a 25% drop since the first check of the day. The daily rule exists so a slow bleed cannot go unnoticed for a month.
- When Safe's transaction service began rejecting the delegate calls Zodiac automation depends on, switched to the whitelisted call-only MultiSend variant — the one that still executes as the trader's Safe but cannot make arbitrary delegate calls.
- Split into two processes so the public-facing API server holds read-only database credentials. A compromised API server cannot corrupt the baselines the risk system depends on.
- Safe Global API v2 migration, retry-with-backoff client, Telegram alerting on kill-switch events, and a trader-reassignment operations script.

Stack: TypeScript, Node.js, MongoDB, Safe, Zodiac

Links: Repository is private

### Protocol subgraph

*Data layer*

The protocol's on-chain index — the data layer the frontend and the analytics read from. I did most of the indexing for the protocol's main contract and its router, and brought the whole thing onto multiple networks.

- Indexed the router alongside the core contracts, so position and market data flowing through it lands in the subgraph instead of being invisible to the frontend.
- Made the index multichain, including Berachain mainnet.
- Added the PowerCard ERC1155 entities and their transfer handling.
- Made the referral address an indexed entity, so affiliate attribution is answered by the same subgraph, with no second source free to disagree with it.
- Reworked several handlers where the recorded state was wrong — unwind, liquidate, emergency withdraw and build — including a funding-payment formula that was computing the wrong value.
- Migrated the entity IDs to Bytes across the schema, which changed how every entity is keyed.
- Matchstick test suite so a handler change is proven by a test instead of by a careful read.

Stack: TypeScript, The Graph, Ethereum

Links: [Source](https://github.com/overlay-market/v1-subgraph)

### Immutable TWAP oracle

*Price oracle · same repo as Shiva Router*

The protocol's price feed, rebuilt on PancakeSwap V3 pools and then deliberately locked down: non-upgradeable first, then fully immutable, while every other contract in the protocol stays upgradeable.

- Immutability chosen because the risk is asymmetric — a bug in a normal contract is fixable, but a bug in the price means every loan is sized wrong the moment it lands, and the upgrade key becomes the obvious target.
- Resolves to the worst price available across spot and TWAP. Manipulation can therefore only ever hurt whoever performs it.
- Staleness guard rejects an old price outright.

Stack: Solidity, Ethereum, OpenZeppelin, Chainlink

Links: [Source](https://github.com/overlay-market/v1-shiva)

### Leaderboard & competitions

*Product backend*

Seasonal trading leaderboards and competitions. I built this backend from the ground up — schema, rules engine and all — as a configurable system, so launching a new competition is a change to configuration, not a redeploy.

- Configurable rules: minimum USD collateral per market, exempt markets, and an OVL price fallback so ranking still works when the feed is down. The collateral floor stops a dust position from topping a leaderboard on leverage alone.
- All money maths through fixed-point decimals rather than floats.
- Scheduled competition windows driven by the schema.

Stack: Node.js, Express, MongoDB, GraphQL

Links: Repository is private

### Referral system

*On-chain + backend*

Tracks which traders signed up through an affiliate link and pays the affiliate accordingly. The referral contract was already built and audited; I integrated it and wrote the verification layer around it.

- Off-chain signed messages checked against on-chain state, with an on-chain fallback — so a database cleanup can no longer permanently disqualify a real affiliate. The record is recreated from chain when it's missing.
- Minimum trading volume enforced before a referral counts, and aliases are normalised so one person can't claim under several identities.
- Migration scripts to move existing affiliate records from MongoDB on-chain.

Stack: Solidity, Node.js, OpenZeppelin

Links: [Source](https://github.com/overlay-market/Referral)

### Overlay SDK

*Published package*

The published TypeScript package other teams import to read Overlay's on-chain state. Most of my work here was keeping it in step with the protocol: when the contracts changed, this package had to change with them, without breaking callers.

- Real-time portfolio PnL across multiple markets.
- USDT's 6 decimals handled against the 18 most tokens assume — getting this wrong returns values off by 1e12.
- Versioned factories with deprecation, so a caller is never silently moved onto a contract being retired.
- Graceful handling of state the SDK doesn't expect instead of throwing.

Stack: TypeScript

Links: [Source](https://github.com/overlay-market/overlay-sdk)

### Overlay frontend

*Protocol frontend*

The protocol's web app — the surface traders actually use. I was one of its main contributors, working mostly in the portfolio view, the prediction-market screens and the charts.

- Found and fixed a bigint precision bug in the portfolio overview: a 256-bit on-chain price was being coerced to a JavaScript number, silently losing precision in exactly the two figures traders trust — value locked and unrealised PnL.
- Built the prediction-market screens: market groups, routing, data model and multi-line probability charts.
- Referral guardrails: actions disabled for funded and avatar accounts, thresholds and rates correct after a successful claim.

Stack: TypeScript, React, Next.js

Links: [Source](https://github.com/overlay-market/overlay-interface-v2)

### StreamBeam

*ETHGlobal Prague 2025 · Solo*

Cross-chain crypto donations for livestream creators. I built it solo in 36 hours at ETHGlobal Prague, won the LayerZero General Prize, and then kept working on it for another six weeks.

- Won the LayerZero General Prize at ETHGlobal Prague 2025.
- LayerZero cross-chain donations with a real-time OBS alert system — donations surface on stream via browser source while they land.
- Solo build throughout, on my own repository.

Stack: Solidity, TypeScript, Express.js, Next.js, LayerZero

Links: [Source](https://github.com/arthurka-o/streambeam)

### InSure

*ETHWarsaw 2025 · Team*

On-chain insurance with automated claims and verification. Built with a team; prize winner at ETHWarsaw 2025.

- Team project — the repository belongs to a collaborator, not to me.

Stack: Solidity, Foundry

Links: [Source (teammate's repository)](https://github.com/Eugenerio/InSure)

### Blox — Rails backend

*Backend · Ruby on Rails 8*

Quests that walk new users through onboarding to the TON blockchain, built for a TON hackathon. I worked on the Rails 8 backend that runs them, as part of a four-person team.

*Client repository.*

- Rails 8.0 — propshaft, importmap, turbo, stimulus, Tailwind, Solid Cache/Queue/Cable, Kamal deploys, Pundit authorisation.
- Owned the quest and loan domain, plus the budget logic behind it, written with tests.
- Built the redirect-token system, a Telegram integration, and the onboarding flow.
- RSpec and Capybara suite; a repository-wide Rubocop pass.

Stack: Ruby on Rails, PostgreSQL, TON, Pundit, RSpec, Capybara, Kamal, Docker

Links: Repository is private

## Skills

- **Protocol**: Solidity, Foundry, Hardhat, EVM, UUPS, Diamond Pattern, OpenZeppelin, Chainlink, Tellor, Safe, Zodiac, Merkle Trees, LayerZero, Chimera, TypeChain
- **Backend**: TypeScript, Node.js, Ethers.js, Viem, NestJS, Express, Python, GraphQL, PostgreSQL, MongoDB, REST APIs, The Graph, Ruby on Rails, Pundit, Sidekiq, Kamal
- **Frontend**: React, Next.js, Tailwind CSS, wagmi
- **Testing**: Jest, Vitest, Chai, Playwright, Supertest, RSpec, Capybara
- **Infrastructure**: Amazon Web Services, Docker, GitHub Actions, CI/CD, Git

## Education

- **M.Sc. Computer Software Engineering** — KFU, Institute of Information Technology, 2018 – 2020
- **B.Sc. Applied Informatics** — KFU, Institute of Information Technology, 2014 – 2018

## Working setup

- **Availability**: Available now — actively seeking
- **Notice period**: Immediate
- **Based in**: Warsaw, Poland
- **Timezone**: CET/CEST (UTC+1/+2)
- **Work mode**: Remote
- **Engagement**: B2B / contract or employment
- **Relocation**: Not relocating
- **Work rights**: Authorised to work in Poland

## Languages

- **Russian**: Native
- **English**: Professional
- **Polish**: Intermediate
