Код: Выделить всё
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
Мобильная версия