Завдання
Base, мережа від Coinbase, оголосила відкритий бриф: зібрати застосунок поверх їхніх токенізованих акцій і підключити Builder Code, мітку, за якою Base бачить, які транзакції прийшли з твого застосунку. Умова з правил: користувачам зі США торгівлю не показувати, бо акції Coinbase їм недоступні.
Для нас це була ще й перевірка, чи вміємо ми ончейн-продукт цілком: свій смарт-контракт, деплой в основну мережу, справжні гроші, гаманці людей. Тут помилка коштує грошей, а не просто бага на екрані. І робота в портфоліо, яку можна відкрити і перевірити в блокчейні, а не макет.
Навіщо і яка ідея
Подарувати акцію зараз незручно. Потрібен брокерський рахунок у дарувальника, рахунок в отримувача, переказ між ними, а з дитиною чи другом з іншої країни це майже неможливо. Подарункова картка магазину простіша, але це просто гроші в одному магазині.
Токенізована акція живе в гаманці, тож її можна передати як завгодно. Ідея: посилання і є подарунок. Дарувальник кладе частку акції в контракт під хеш секрету, секрет лежить у посиланні після знака #, а цю частину браузер ніколи не надсилає на сервер. Ми її не зберігаємо і переслати повторно не можемо, про що сайт чесно пише. Хто відкрив посилання зі своїм гаманцем, той і забрав. Можна поставити дату, раніше за яку подарунок не відкриє ніхто, навіть сам дарувальник.
Контракт зроблено без власника, паузи, адміна і способу його оновити. Це навмисно: нікому не треба нам довіряти, акції тримає код.
Хід роботи
| Коли | Що відбувалося |
|---|---|
| Вечір дня 1 | Каркас на Next.js, контракт і тести, деплой в основну мережу Base. Перевірка всіх 13 тікерів на живий ринок: працюють 4. Замір спреду на сумах до $20 000 |
| Ранок дня 2 | Подарунок і отримання працюють в основній мережі. Пів дня на розслідування, чому Builder Code не доїжджає до блокчейну на покупках |
| День 2 | Відео: чотири записи екрана, склейка скриптом на ffmpeg, три версії. У третій епізод «відкриється у 2027» перенесено в кінець |
| Через 5 днів | Твіт з відео і тегом @buildonbase, форма подачі заповнена із запасом до дедлайну |
Головна розвилка була наприкінці дня 2. Мітка Builder Code на покупках губилася, і полагодити це можна було тільки своїм контрактом-перехідником для обмінів. Порахували: пів дня роботи, новий контракт, через який підуть чужі гроші, за п’ять днів до дедлайну, заради поля, якого бриф не вимагає. Зупинилися і натомість чесно показуємо користувачеві на екрані, доїхала мітка чи ні.
Чим робили
Контракт StockGift.sol на Solidity 0.8.28, близько 140 рядків. Дарувальник кладе акції під хеш секрету, забрати їх може той, хто знає секрет, і тільки після дати відкриття. Захист від повторного входу, перевірка того, скільки токенів реально прийшло. Якщо подарунок ніхто не забрав, дарувальник може повернути його собі, але не раніше ніж через 30 днів після дати відкриття, щоб не можна було висмикнути подарунок з-під отримувача. 9 тестів на Hardhat: не можна забрати раніше строку, не можна двічі, чужий не поверне собі подарунок, неправильний секрет відхиляється.
Покупка: свій API на Next.js бере маршрут обміну ETH в акцію в агрегатора LI.FI, який сам обирає 1inch, Kyberswap, Aerodrome чи інших. Ми тільки будуємо транзакцію, підписує гаманець людини, наш сервер гроші не тримає. Стеля суми $25 000: це найбільший обсяг, який реально перевірили ($20 000 в Apple пройшли зі спредом 0,31 %).
Builder Code за стандартом ERC-8021 дописується в кінець даних транзакції на сервері, в одному місці, яке можна перевірити звичайним curl. Для розумних гаманців, які загортають виклик у свою операцію, мітка йде окремим полем за EIP-5792. Після покупки сайт сам перечитує транзакцію з блокчейну і пише зеленим «Builder code confirmed in the mined transaction» або червоним, що гаманець пересклав транзакцію і мітку втратив.
Сайт: Next.js 16, React 19, wagmi + viem, хостинг Vercel. Країну визначаємо за заголовком хостингу, відвідувачам зі США показуємо сторінку «Not available where you are». Весь код близько 1 300 рядків разом із контрактом і тестами. Контракт в основній мережі Base: 0x0535…5a88 на Basescan.
Результат
Живий сайт stockgift-pi.vercel.app. Вітрина: 13 компаній, які Coinbase випустила на Base, купити можна 4 (Apple, Nvidia, Alphabet, Meta), решта 9 сірі з підписом «no market yet». Це не здогадка: для кожного тікера запросили справжній маршрут обміну на $5 і $15 з прослизанням 1 % і 3 %, і в дев’яти ринку не виявилося. Коли ринок з’явиться, вони увімкнуться без переробки, список уже в коді.
Усі сценарії прогнано в основній мережі на справжні гроші: покупка $5 Nvidia через Kyberswap зі спредом 0,06 %, подарунок 0,01 акції Nvidia, отримання з іншого браузера та іншого гаманця, другий подарунок з датою відкриття у 2027 році. Усе видно у відео на 1 хв 28 с і на Basescan.
Мітку Builder Code перевіряли по ланках, а не на око:
| Ланка | Як перевірено | Підсумок |
|---|---|---|
| Сервер віддає дані транзакції з міткою | curl живого API | є |
| Сторінка отримала їх з міткою | зелений напис на екрані | є |
| Роутер і мережа мітку зберігають | своя тестова транзакція | є |
| Покупка через гаманець | 5 покупок у блокчейні | мітки немає |
| Подарунок, виклик нашого контракту | 2 рази в блокчейні | є |
Слабке місце, яке ми залишили: на покупках через деякі гаманці мітка губиться. Сайт це не ховає, а пише червоним. Друге слабке місце контракт сам називає в коментарі: при отриманні секрет на мить видно в черзі транзакцій, теоретично його можна перехопити. Збиток обмежений одним подарунком, баланс дарувальника не під загрозою.
Інфраструктура безкоштовна: Vercel і LI.FI API без ключа. Експеримент з Builder Code коштував $0,15 з гаманця-деплоєра, газ на покупку у відео близько $0,01. Чого ми поки не знаємо: підсумків брифу. Base надсилає їх переможцям листом, публічного оголошення не обіцяли.
Помилки і що винесли






