feat: send TronGrid API key on every request to raise the anonymous rate limit

Complements the retryOn429 fix - having a key means requests are far less likely to hit
the rate limit at all, rather than just retrying transparently after they do. Wired the
same way as INFURA_API_KEY/DWELLIR_API_KEY: buildConfigField read from local.properties or
CI secret, added TRONGRID_API_KEY to android_build.yml's secret passthrough (every caller
already uses secrets: inherit, so no per-workflow changes needed beyond this).
This commit is contained in:
2026-07-12 05:08:22 -07:00
parent 04c0c41a2d
commit 32002db5da
3 changed files with 19 additions and 7 deletions
+4
View File
@@ -62,6 +62,9 @@ on:
# RPC provider - use own nodes or Dwellir
DWELLIR_API_KEY:
required: false
# Tron - raises TronGrid's aggressive anonymous rate limit
TRONGRID_API_KEY:
required: false
# WalletConnect - REQUIRED for dApp connections
WALLET_CONNECT_PROJECT_ID:
required: true
@@ -111,6 +114,7 @@ env:
EHTERSCAN_API_KEY_ETHEREUM: ${{ secrets.EHTERSCAN_API_KEY_ETHEREUM }}
INFURA_API_KEY: ${{ secrets.INFURA_API_KEY }}
DWELLIR_API_KEY: ${{ secrets.DWELLIR_API_KEY }}
TRONGRID_API_KEY: ${{ secrets.TRONGRID_API_KEY }}
WALLET_CONNECT_PROJECT_ID: ${{ secrets.WALLET_CONNECT_PROJECT_ID }}
DEBUG_GOOGLE_OAUTH_ID: ${{ secrets.DEBUG_GOOGLE_OAUTH_ID }}
RELEASE_GOOGLE_OAUTH_ID: ${{ secrets.RELEASE_GOOGLE_OAUTH_ID }}
@@ -11,39 +11,46 @@ import io.novafoundation.nova.feature_wallet_impl.data.network.tron.model.TronCr
import io.novafoundation.nova.feature_wallet_impl.data.network.tron.model.TronTriggerContractRequest
import io.novafoundation.nova.feature_wallet_impl.data.network.tron.model.TronTriggerContractResponse
import io.novafoundation.nova.feature_wallet_impl.data.network.tron.model.TronUnsignedTransactionResponse
import io.novafoundation.nova.runtime.BuildConfig
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.Headers
import retrofit2.http.POST
import retrofit2.http.Url
// TronGrid's anonymous rate limit is aggressive enough to surface under normal, human-paced app usage (see
// RealTronGridApi.retryOn429's doc comment) - a free API key from trongrid.io raises it substantially. Sent on
// every request rather than only when a 429 is hit, since the point is to avoid needing the retry in the first
// place, not just to have a fallback.
private const val TRON_API_KEY_HEADER = "TRON-PRO-API-KEY: " + BuildConfig.TRONGRID_API_KEY
interface RetrofitTronGridApi {
@GET
@Headers(UserAgent.NOVA)
@Headers(UserAgent.NOVA, TRON_API_KEY_HEADER)
suspend fun getAccount(@Url url: String): TronAccountResponse
@POST
@Headers(UserAgent.NOVA)
@Headers(UserAgent.NOVA, TRON_API_KEY_HEADER)
suspend fun createTransaction(@Url url: String, @Body body: TronCreateTransactionRequest): TronUnsignedTransactionResponse
@POST
@Headers(UserAgent.NOVA)
@Headers(UserAgent.NOVA, TRON_API_KEY_HEADER)
suspend fun triggerConstantContract(@Url url: String, @Body body: TronTriggerContractRequest): TronTriggerContractResponse
@POST
@Headers(UserAgent.NOVA)
@Headers(UserAgent.NOVA, TRON_API_KEY_HEADER)
suspend fun triggerSmartContract(@Url url: String, @Body body: TronTriggerContractRequest): TronTriggerContractResponse
@POST
@Headers(UserAgent.NOVA)
@Headers(UserAgent.NOVA, TRON_API_KEY_HEADER)
suspend fun broadcastTransaction(@Url url: String, @Body body: TronBroadcastRequest): TronBroadcastResponse
@GET
@Headers(UserAgent.NOVA)
@Headers(UserAgent.NOVA, TRON_API_KEY_HEADER)
suspend fun getChainParameters(@Url url: String): TronChainParametersResponse
@POST
@Headers(UserAgent.NOVA)
@Headers(UserAgent.NOVA, TRON_API_KEY_HEADER)
suspend fun getAccountResource(@Url url: String, @Body body: TronAddressRequest): TronAccountResourceResponse
}
+1
View File
@@ -21,6 +21,7 @@ android {
buildConfigField "String", "INFURA_API_KEY", readStringSecret("INFURA_API_KEY")
buildConfigField "String", "DWELLIR_API_KEY", readStringSecret("DWELLIR_API_KEY")
buildConfigField "String", "TRONGRID_API_KEY", readStringSecret("TRONGRID_API_KEY")
}
buildTypes {