Updated on 2026-08-14
This commit is contained in:
parent
d68ad52a45
commit
13b1bbc486
10 changed files with 154 additions and 23 deletions
|
|
@ -2,11 +2,20 @@ package com.tangem.datasource.api.gasless
|
|||
|
||||
import com.tangem.datasource.api.common.response.ApiResponse
|
||||
import com.tangem.datasource.api.gasless.models.GaslessServiceResponse
|
||||
import com.tangem.datasource.api.gasless.models.GaslessSignedTransactionResult
|
||||
import com.tangem.datasource.api.gasless.models.GaslessSupportedTokens
|
||||
import com.tangem.datasource.api.gasless.models.GaslessTransactionRequest
|
||||
import retrofit2.http.Body
|
||||
import retrofit2.http.GET
|
||||
import retrofit2.http.POST
|
||||
|
||||
interface GaslessTxServiceApi {
|
||||
|
||||
@GET("api/v1/tokens")
|
||||
suspend fun getSupportedTokens(): ApiResponse<GaslessServiceResponse<GaslessSupportedTokens>>
|
||||
|
||||
@POST("api/v1/sign")
|
||||
suspend fun signGaslessTransaction(
|
||||
@Body transaction: GaslessTransactionRequest,
|
||||
): ApiResponse<GaslessServiceResponse<GaslessSignedTransactionResult>>
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
package com.tangem.datasource.api.gasless.models
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
import com.squareup.moshi.JsonClass
|
||||
|
||||
/**
|
||||
* Result of gasless transaction signing.
|
||||
* Contains the signed transaction data and gas parameters.
|
||||
*/
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class GaslessSignedTransactionResult(
|
||||
@Json(name = "signedTransaction")
|
||||
val signedTransaction: String,
|
||||
|
||||
@Json(name = "gasLimit")
|
||||
val gasLimit: String,
|
||||
|
||||
@Json(name = "maxFeePerGas")
|
||||
val maxFeePerGas: String,
|
||||
|
||||
@Json(name = "maxPriorityFeePerGas")
|
||||
val maxPriorityFeePerGas: String,
|
||||
)
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
package com.tangem.datasource.api.gasless.models
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
import com.squareup.moshi.JsonClass
|
||||
|
||||
/**
|
||||
* Request body for gasless transaction submission.
|
||||
* Represents complete transaction with fee delegation metadata.
|
||||
*/
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class GaslessTransactionRequest(
|
||||
@Json(name = "gaslessTransaction")
|
||||
val gaslessTransaction: GaslessTransactionData,
|
||||
|
||||
@Json(name = "signature")
|
||||
val signature: String,
|
||||
|
||||
@Json(name = "userAddress")
|
||||
val userAddress: String,
|
||||
|
||||
@Json(name = "chainId")
|
||||
val chainId: Int,
|
||||
|
||||
@Json(name = "eip7702auth")
|
||||
val eip7702Auth: Eip7702Authorization? = null,
|
||||
)
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class GaslessTransactionData(
|
||||
@Json(name = "transaction")
|
||||
val transaction: TransactionData,
|
||||
|
||||
@Json(name = "fee")
|
||||
val fee: FeeData,
|
||||
|
||||
@Json(name = "nonce")
|
||||
val nonce: String,
|
||||
)
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class TransactionData(
|
||||
@Json(name = "to")
|
||||
val to: String,
|
||||
|
||||
@Json(name = "value")
|
||||
val value: String,
|
||||
|
||||
@Json(name = "data")
|
||||
val data: String,
|
||||
)
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class FeeData(
|
||||
@Json(name = "feeToken")
|
||||
val feeToken: String,
|
||||
|
||||
@Json(name = "maxTokenFee")
|
||||
val maxTokenFee: String,
|
||||
|
||||
@Json(name = "coinPriceInToken")
|
||||
val coinPriceInToken: String,
|
||||
|
||||
@Json(name = "feeTransferGasLimit")
|
||||
val feeTransferGasLimit: String,
|
||||
|
||||
@Json(name = "baseGas")
|
||||
val baseGas: String,
|
||||
)
|
||||
|
||||
/**
|
||||
* EIP-7702 authorization for account abstraction.
|
||||
* Optional field, used only when EOA delegation is required.
|
||||
*/
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class Eip7702Authorization(
|
||||
@Json(name = "chainId")
|
||||
val chainId: Int,
|
||||
|
||||
@Json(name = "address")
|
||||
val address: String,
|
||||
|
||||
@Json(name = "nonce")
|
||||
val nonce: String,
|
||||
|
||||
@Json(name = "yParity")
|
||||
val yParity: Int,
|
||||
|
||||
@Json(name = "r")
|
||||
val r: String,
|
||||
|
||||
@Json(name = "s")
|
||||
val s: String,
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue