Как отправить спонсорную транзакцию с использованием Aptos Kotlin SDK через Paymaster?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как отправить спонсорную транзакцию с использованием Aptos Kotlin SDK через Paymaster?

Сообщение Anonymous »

Я пытаюсь представить спонсируемую транзакцию на APTO, используя Kotlin SDK через Paymaster. Я могу успешно белый список и получить ответ от API спонсора Gas, но я застрял на строительстве транзакции, которую APTO отправляет API транзакции.

Код: Выделить всё

    private suspend fun sponsorGas(
txnJson: JsonObject
): Pair {
val request = Request.Builder()
.url("$kanaApiBaseUrl/endpoint")
.post(txnJson.toString().toRequestBody("application/json".toMediaType()))
.addHeader("value", kanaProjectKey)
.addHeader("key", "value")
.addHeader("key", "value")
.build()

val sponsorResp = httpClient.newCall(request).execute().use { resp ->
val respBody = resp.body?.string() ?: "empty body"
Log.d("APTOS_SDK_DEBUG", "SponsorGas response: $respBody")
if (!resp.isSuccessful) throw Exception("SponsorGas failed: ${resp.code} $respBody")
respBody
}

val sponsorJson = gson.fromJson(sponsorResp, JsonObject::class.java)

// Fee payer address
val feePayerAddress = AccountAddress(sponsorJson["parameter_name"].asString)

// Extract feePayerAuth as byte array
val feePayerAuthJson = sponsorJson["parameter_name"].asJsonObject
val authBytes = ByteArray(feePayerAuthJson.size()) { idx ->
feePayerAuthJson[idx.toString()]?.asInt?.toByte()
?: throw IllegalArgumentException("Missing byte at index $idx")
}

// Parse authenticator manually
val typeByte = authBytes[0]
require(typeByte.toInt() == 0) { "Unsupported authenticator type: $typeByte" }

val pubKeyBytes = authBytes.sliceArray(1..32)
require(pubKeyBytes.size == 32) { "Fee payer public key must be 32 bytes" }
val feePayerPubKey = Ed25519PublicKey(pubKeyBytes)

val sigBytes = authBytes.sliceArray(33..96)
require(sigBytes.size == 64) { "Fee payer signature must be 64 bytes" }
val feePayerSig = Ed25519Signature(sigBytes)

val feePayerAuthenticator = AccountAuthenticatorEd25519(feePayerPubKey, feePayerSig)

return feePayerAddress to feePayerAuthenticator
}
< /code>
Вот как я пытаюсь отправить транзакцию: < /p>
val (feePayerAddr, feePayerAuth) = sponsorGas(base64Txn)

val anyTxn = SimpleTransaction(
rawTransaction = txn.rawTransaction,
feePayerAddress = feePayerAddr
) as AnyRawTransaction

try {
val pending = aptos.submitTransaction.simple(
transaction = anyTxn,
senderAuthenticator = userAuthenticator,
feePayerAuthenticator = feePayerAuth
)
Log.d("APTOS_SDK_DEBUG", "Transaction submitted: $pending")
} catch (e: Exception) {
Log.e("APTOS_SDK_DEBUG", "Failed to submit transaction", e)
}

< /code>
Проблема /Вопрос:
Я не уверен, как взять ответный ответ спонсора газа и построить полезную нагрузку транзакции в точном формате, требуемый APTO-отправка API. Соответствуйте этому правильно для подачи через Kotlin SDK? Sompletransaction с помощью необработанной транзакции и платежного адреса. AccountAuthenticatored25519 объект. < /P>
Это зависимость, которую я использую < /p>

implementation("xyz.mcxross.kaptos:kaptos-android:0.1.2-beta")
implementation("xyz.mcxross.bcs:bcs-android:0.1.2")
Что я ожидал:
Транзакция для успешного представления в Aptos Blockchain с использованием спонсорства Paymaster.
API отправки Transaction, чтобы принять комбинацию пользовательского аутентика и аутентика платежного платежа без ошибок. /> Я либо получаю ошибки, связанные с сериализацией, типом аутентификатора, либо форматом транзакций, не принимаемый.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... -paymaster
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»