Send Transaction

Once your app is connected to Blocto wallet, it can send transactions on behalf of the user, with the user's permission.

In order to send a transaction, the app must:

  • Create an unsigned transaction or transactions.

  • Have it be signed by the user's Blocto wallet.

  • Send it with Blocto custom JSON-RPC.

For more information about the transactions on Solana, it is recommended to check out the solana-web3.kotlin as well as the official Solana docs.

Plain Transaction

For plain transactions (no dApp-side signing involved), you can just create transaction with solana-web3.kotlin and sign-and-send the transaction with signAndSendTransaction method.

val address = "SOLANA_ADDRESS"
val transaction = Transaction()

... // transaction manipulation

BloctoSDK.solana.signAndSendTransaction(
    context = context,
    fromAddress = address,
    transaction = transaction,
    onSuccess = { txHash ->
        // transaction sent
    },
    onError = { error ->
        // handle error
    }
)

Partial Sign Transaction

For transactions involving dApp-side signing, first you need to convert the transaction to our wallet-compatible format by calling convertToProgramWalletTransaction, and sign the instructions with your keys, then sign-and-send the partial-signed transaction with our signAndSendTransaction method.

suspend fun convertToProgramWalletTransaction(
    address: String,
    transaction: Transaction
): Transaction = withContext(Dispatchers.Default) {
    BloctoSDK.solana.convertToProgramWalletTransaction(address, transaction)
}

lifecycleScope.launch {
    val address = "SOLANA_ADDRESS"
    val signer = KeyPair.generate()
    val transaction = Transaction()

    ... // transaction manipulation

    val convertedTransaction = convertToProgramWalletTransaction(
        address = address, 
        transaction = transaction
    )
    convertedTransaction.partialSign(signer)

    BloctoSDK.solana.signAndSendTransaction(
        context = context,
        fromAddress = address,
        transaction = convertedTransaction,
        onSuccess = { txHash ->
            // transaction sent
        },
        onError = { error ->
            // handle error
        }
    )
}

BloctoSDK.solana.convertToProgramWalletTransaction(...) method need to be executed in the background thread.

Last updated

Was this helpful?

#370: docs: add web sdk v0.5.0 ERC-4337 docs

Change request updated