Безопасность
Модель безопасности
Все продукты Portuna следуют одним правилам: ключи остаются у вас, деньги идут только на ваши адреса, а код, который их двигает, — маленький, проверяемый и неизменяемый. Ниже — как эти правила соблюдает Portuna Sweep.
Три правила
- 01
Ключи остаются у вас
Мы не создаём и не храним ключи ваших адресов. Вы подписываете в своём HSM, KMS или MPC — ключей мы не видим.
- 02
Деньги идут только туда, куда разрешили вы
На адрес, записанный в неизменяемый контракт, или по вашей подписи на конкретную операцию. Код может проверить любой, и админ-ключей в нём нет.
- 03
Оплата за успех — и дешевле, чем сейчас
Вы платите только за успешные операции, по опубликованному эталону, который можно проверить. Наша комиссия никогда не делает операцию дороже, чем она обходится вам сейчас.
Продукты
Portuna Sweep
Первый продукт. Ваши ключи, ваш горячий кошелёк, ваш газ-кошелёк: три маленьких контракта, которые умеют одно и не меняются.
Некастодиально
Ключи депозитных адресов не покидают ваше хранилище. Депозитный адрес подписывает только одно: разрешение EIP-7702, которое ставит на него код вашего делегата в одной сети. Вы подписываете его в своём HSM, KMS или MPC — ключ мы не видим.
Средства идут с депозитного адреса прямо в ваш горячий кошелёк внутри транзакции батча и никогда не проходят через наши адреса.
Ключ продолжает работать: вы можете отправлять транзакции с депозитного адреса, как раньше, и в любой момент снять делегацию, чтобы адрес снова стал обычным.
Три маленьких контракта
Неизменяемые, без владельца, без апгрейдов и админ-ролей. У каждого партнёра свои батчер и делегаты, так что ни один наш контракт не касается двух партнёров.
-
SweepFactory
Общая и без владельца, с одним адресом во всех сетях. Разворачивает батчер и делегаты партнёра — всегда для газ-кошелька того, кто её вызвал.
-
SweepBatcher
Ваш. Принимает батчи только от вашего газ-кошелька и обходит депозиты по одному: адрес, который не прошёл, пропускается с отчётом, а батч проходит.
-
SweepDelegate
Код на ваших депозитных адресах, по одному на горячий кошелёк. Умеет одно: по запросу вашего батчера отправить токен или нативную монету в горячий кошелёк, записанный в его байткод.
Кто что может
| Кто | Может | Не может |
|---|---|---|
| Вы | Всё, что и раньше: ключи депозитов у вас. Снять делегацию — в любой момент. | — |
| Наш релейер | Отправлять батчи вашего sweep с вашего газ-кошелька. | Отправить средства куда-либо, кроме вашего горячего кошелька. |
| Мы как компания | Решать, когда уходит батч. | Поменять ваш горячий кошелёк: он часть кода делегата. |
| Тот, у кого ключ вашего газ-кошелька | Собрать ваши депозиты раньше времени — в ваш же горячий кошелёк — и потратить баланс газ-кошелька. | Забрать средства с депозитных адресов или из горячего кошелька. |
| Кто угодно ещё, включая других партнёров | Ничего: делегат слушается только вашего батчера. | Запустить, перенаправить или заблокировать ваш sweep. |
Проверьте до подписи
Все контракты создаются через CREATE2, поэтому адрес — это хэш от создателя, соли и полного кода создания: байткода и аргументов конструктора. Изменится один байт — изменится адрес. Если адрес, посчитанный из открытого кода, совпадает с адресом в сети и там есть код, значит, развёрнут именно этот код — именно с вашим горячим кошельком и газ-кошельком.
verify-delegate из SDK на Go и TypeScript делает это одной командой, до того как депозиты что-либо подпишут: считает адреса фабрики, вашего батчера и делегата, проверяет их код в сети и сравнивает делегат с тем, что вернул API.
Фабрика в тестнетах
- Sepolia 0x66f63A7246dF0eD76098dD95ad0F53d8e7bed456
- BSC testnet 0x66f63A7246dF0eD76098dD95ad0F53d8e7bed456
Адрес меняется с любым изменением кода; адрес в мейннете опубликуем при запуске.
Ключи газ-кошельков
Ключи газ-кошельков хранятся в отдельном сервисе подписи — единственном компоненте, который умеет подписывать. Серверы API их не видят.
Подписант подписывает только транзакции к общей фабрике, к вашему батчеру и на единственный адрес, куда уходят ваши комиссии. Он не выходит за потолки газа по сетям и дневной бюджет газ-кошелька и ведёт журнал каждой подписи и каждого отказа. Даже полный взлом серверов API позволил бы лишь сжечь газ в пределах этого бюджета, но не увести средства с депозитов или из горячего кошелька.
До мейннета
Исходный код контрактов будет опубликован, а каждое развёртывание в мейннете — верифицировано в Etherscan и Sourcify.
Сообщить об уязвимости
Нашли уязвимость? Напишите нам, прежде чем рассказывать о ней публично. Мы отвечаем на каждое сообщение.
security@portuna.ioПопробуйте на тестнете уже сегодня
Самостоятельно, в Sepolia и BSC testnet. Доступ к мейннету откроется скоро — расскажите о своих объёмах, и мы подготовим подключение.