Skip to main content
Это базовый способ отправки транзакций — плата взимается за каждую отправку, и он лучше всего подходит для случаев, когда надежность важнее предельно высокой скорости (платежи, кошельки, приложения). Если вы торгуете и вам нужна минимальная задержка, используйте вместо него Helius Sender.
Собственная логика отправки транзакций — лучший способ обеспечить максимальную производительность, управляемость и надежность вашего приложения. Хотя Helius SDK предоставляет удобную обертку для начала работы, для производственных систем настоятельно рекомендуется разобраться в этом ручном процессе и реализовать его самостоятельно. В этом руководстве описаны необходимые шаги для создания собственного решения.

Ручной процесс

Отправка транзакции вручную включает следующие шаги:
1

Build the Initial Transaction

Соберите инструкции и подпишите транзакцию, чтобы ее можно было симулировать.
2

Optimize Compute Units

Симулируйте транзакцию, чтобы определить точное необходимое количество CU, и добавьте небольшой запас.
3

Add Priority Fees

Получите оценку комиссии через Helius Priority Fee API и добавьте ее в транзакцию.
4

Send and Re-broadcast

Отправьте итоговую транзакцию и реализуйте надежную стратегию опроса для обработки подтверждения.
SDK Helius имеют открытый исходный код. Вы можете посмотреть исходный код метода sendSmartTransaction в наших TypeScript SDK и Rust SDK, чтобы ознакомиться с реализацией этого процесса промышленного уровня.

1. Создайте исходную транзакцию

Сначала соберите все инструкции, которые нужно включить в транзакцию. Затем создайте объект Transaction или VersionedTransaction. Также потребуется получить недавний хеш блока. В этом примере подготавливается версионированная транзакция. На этом этапе ее также необходимо подписать, чтобы на следующем шаге можно было выполнить симуляцию.

2. Оптимизируйте использование вычислительных единиц (CU)

Чтобы не переплачивать комиссию и избежать сбоя транзакции, задайте лимит вычислительных единиц (CU) как можно точнее. Для этого симулируйте транзакцию с помощью метода RPC simulateTransaction. Рекомендуется сначала выполнить симуляцию с высоким лимитом CU, чтобы она гарантированно завершилась успешно, а затем использовать значение unitsConsumed из ответа в качестве фактического лимита.
Теперь у вас есть инструкция, которая точно задает лимит вычислений. Добавьте ее в итоговую транзакцию.

3. Задайте подходящую приоритетную комиссию

Затем определите оптимальную приоритетную комиссию для добавления в транзакцию. Helius Priority Fee API — лучший способ получить оценку в реальном времени с учетом текущего состояния сети. Вам потребуется вызвать метод RPC getPriorityFeeEstimate. Чтобы максимально повысить вероятность включения через стейкинговые подключения Helius, используйте параметр recommended: true.

4. Создайте, отправьте и подтвердите транзакцию

Теперь соберите итоговую транзакцию с новыми инструкциями бюджета вычислений, отправьте ее и реализуйте надежный механизм опроса для подтверждения ее включения в блок.
Не полагайтесь на стандартную логику повторных попыток поставщика RPC (maxRetries в sendTransaction). Хотя стейкинговые подключения Helius передают вашу транзакцию непосредственно лидеру, она все равно может быть отброшена. Для надежного подтверждения необходимо реализовать собственную логику повторной отправки.
Распространенный подход — периодически повторно отправлять одну и ту же транзакцию до истечения срока действия хеша блока. Повторно подписывайте транзакцию, только если также получаете новый хеш блока. Повторная подпись с тем же хешем блока может привести к подтверждению дублирующихся транзакций.
В этом примере приведен базовый цикл опроса. Для приложения промышленного уровня потребуется более сложная логика, в том числе обработка разных статусов подтверждения и возможных тайм-аутов.

Защита от сэндвич-атак

Чтобы направлять транзакцию в обход валидаторов, статистически связанных с сэндвич-атаками, добавьте параметр запроса mev-protect=true в URL RPC — изменять логику транзакции не нужно:

MEV Protect

Узнайте, как работает MEV Protect, какие методы он поддерживает и какие у него есть компромиссы.

Получайте вознаграждения за транзакции

Вы можете подключиться к программе и получать долю от MEV, создаваемой вашими транзакциями. Выплаты в SOL выполняются автоматически, а изменять логику транзакций не требуется.

Transaction Rebates

Добавьте один параметр в вызовы sendTransaction, чтобы начать получать вознаграждения в SOL.

Связанные методы

sendTransaction

Отправка подписанной транзакции в сеть

simulateTransaction

Симуляция транзакции для оценки количества вычислительных единиц

getSignatureStatuses

Проверка статуса подтверждения транзакций

getLatestBlockhash

Получение недавнего хеша блока для подписания транзакции

getBlockHeight

Получение текущей высоты блока для проверки срока действия