Usage

Contents

Methods

initialize

Init instance of BladeSDK for correct work with Blade API and Hedera network.

initialize (apiKey: String, dAppCode: String, network: String, bladeEnv: BladeEnv = BladeEnv.Prod, context: Context, force: Boolean = false, completion: (InfoData?, BladeJSError?) -> Unit)

Parameters

Returns

InfoData - with information about Blade instance, including visitorId

Example

Blade.initialize(
    Config.apiKey, Config.dAppCode, Config.network, Config.bladeEnv, requireContext(), false
) { infoData, error ->
    println(infoData ?: error)
}

getInfo

Get SDK info and check if SDK initialized

getInfo (completion: (InfoData?, BladeJSError?) -> Unit)

Parameters

Returns

InfoData - with information about Blade instance, including visitorId

Example

Blade.getInfo { infoData, error ->
    println(infoData ?: error)
}

getBalance

Get balances by account id.

getBalance (id: String, completion: (BalanceData?, BladeJSError?) -> Unit)

Parameters

Returns

BalanceData - with information about Hedera account balances (hbar and list of token balances)

Example

Blade.getBalance("0.0.45467464") { result, error ->
    println("${ result ?: error}")
}

getCoinList

Get list of all available coins on CoinGecko.

getCoinList (completion: (CoinListData?, BladeJSError?) -> Unit)

Parameters

Returns

CoinListData - with list of coins described by name, alias, platforms

Example

Blade.getCoinList { result, error ->
    if (result != null) {
        for (coin in result.coins) {
            println(coin)
        }
    } else {
        println(error)
    }
}

getCoinPrice

Get coin price and coin info from CoinGecko. Search can be coin id or address in one of the coin platforms.

  • In addition to the price in USD, the price in the currency you specified is returned

getCoinPrice (search: String, currency: String = "usd", completion: (CoinInfoData?, BladeJSError?) -> Unit)

Parameters

Returns

{CoinInfoData}

Example

Blade.getCoinPrice(
    search = "hbar",
    currency = "uah"
) { result, bladeJSError ->
    println("${result ?: bladeJSError}")
}

transferHbars

Method to execute Hbar transfers from current account to receiver

transferHbars (accountId: String, accountPrivateKey: String, receiverId: String, amount: Double, memo: String, completion: (TransactionReceiptData?, BladeJSError?) -> Unit)

Parameters

Returns

TransactionReceiptData - receipt

Example

val senderId = "0.0.10001"
val senderKey = "302d300706052b8104000a032200029dc73991b0d9cd..."
val receiverId = "0.0.10002"
val amount = 2.5
Blade.transferHbars(
    senderId,
    senderKey,
    receiverId,
    amount,
    "Some memo text"
) { result, error ->
    println(result ?: error)
}

transferTokens

Method to execute token transfers from current account to receiver

transferTokens (tokenId: String, accountId: String, accountPrivateKey: String, receiverId: String, amountOrSerial: Double, memo: String, usePaymaster: Boolean = true, completion: (TransactionReceiptData?, BladeJSError?) -> Unit)

Parameters

Returns

TransactionReceiptData - receipt

Example

val tokenId = "0.0.1337"
val senderId = "0.0.10001"
val senderKey = "302d300706052b8104000a032200029dc73991b0d9cd..."
val receiverId = "0.0.10002"
val amount = 2.5
Blade.transferTokens(
    tokenId,
    senderId,
    senderKey,
    receiverId,
    amount,
    "Token transfer memo"
) { result, error ->
    println(result ?: error)
}

createScheduleTransaction

Create scheduled transaction

createScheduleTransaction ( accountId: String, accountPrivateKey: String, type: ScheduleTransactionType, transfers: List<ScheduleTransactionTransfer>, usePaymaster: Boolean = false, completion: (CreateScheduleData?, BladeJSError?) -> Unit )

Parameters

Returns

CreateScheduleData - scheduleId

Example

val receiverId = "0.0.10002"
val receiverKey = "302d300706052b8104000a032200029dc73991b00002..."
val senderId = "0.0.10001"
val tokenId = "0.0.1337"
var scheduleId = ""
Blade.createScheduleTransaction(
    accountId = receiverId,
    accountPrivateKey = receiverKey,
    type = ScheduleTransactionType.TRANSFER,
    transfers = listOf(
        ScheduleTransactionTransferHbar(sender = senderId, receiver = receiverId, 10000000),
        ScheduleTransactionTransferToken(sender = senderId, receiver = receiverId, tokenId = tokenId, value = 3)
    ),
    usePaymaster = true,
) { result, error ->
    if (result != null) {
        println(result.scheduleId)
    }
}

signScheduleId

Method to sign scheduled transaction

signScheduleId ( scheduleId: String, accountId: String, accountPrivateKey: String, receiverAccountId: String = "", usePaymaster: Boolean = false, completion: (TransactionReceiptData?, BladeJSError?) -> Unit )

Parameters

Returns

TransactionReceiptData - receipt

Example

val senderId = "0.0.10001"
val senderKey = "302d300706052b8104000a032200029dc73991b00001..."
val receiverId = "0.0.10002"
var scheduleId = "0.0...." // result of createScheduleTransaction on receiver side
Blade.signScheduleId(
    scheduleId = scheduleId,
    accountId = senderId,
    accountPrivateKey = senderKey,
    receiverAccountId = receiverId,
    usePaymaster = true
) { result, bladeJSError ->
    println(result ?: bladeJSError)
}

createHederaAccount

Create new Hedera account (ECDSA). Only for configured dApps. Depending on dApp config Blade create account, associate tokens, etc.

  • In case of not using pre-created accounts pool and network high load, this method can return transactionId and no accountId.

  • In that case account creation added to queue, and you should wait some time and call getPendingAccount() method.

createHederaAccount (privateKey: String = "", deviceId: String = "", completion: (CreatedAccountData?, BladeJSError?) -> Unit)

Parameters

Returns

CreatedAccountData - new account data, including private key and account id

Example

Blade.createHederaAccount() { result, error ->
    println(result ?: error)
}

getPendingAccount

Get account from queue (read more at createAccount()).

  • If account already created, return account data.

  • If account not created yet, response will be same as in createAccount() method if account in queue.

getPendingAccount (transactionId: String, seedPhrase: String, completion: (CreatedAccountData?, BladeJSError?) -> Unit)

Parameters

Returns

CreatedAccountData - new account data

deleteHederaAccount

Delete Hedera account. This method requires account private key and operator private key. Operator is the one who paying fees

deleteHederaAccount (deleteAccountId: String, deletePrivateKey: String, transferAccountId: String, operatorAccountId: String, operatorPrivateKey: String, completion: (TransactionReceiptData?, BladeJSError?) -> Unit)

Parameters

Returns

TransactionReceiptData - receipt

Example

val deleteAccountId = "0.0.65468464"
val deletePrivateKey = "3030020100300706052b8104000a04220420ebc..."
val transferAccountId = "0.0.10001"
val operatorAccountId = "0.0.10002"
val operatorPrivateKey = "302d300706052b8104000a032200029dc73991b0d9cd..."
Blade.deleteHederaAccount(
    deleteAccountId,
    deletePrivateKey,
    transferAccountId,
    operatorAccountId,
    operatorPrivateKey,
) { result, error ->
    println(result ?: error)
}

getAccountInfo

Get account info.

  • EvmAddress is address of Hedera account if exists. Else accountId will be converted to solidity address.

  • CalculatedEvmAddress is calculated from account public key. May be different from evmAddress.

getAccountInfo (accountId: String, completion: (AccountInfoData?, BladeJSError?) -> Unit)

Parameters

Returns

{AccountInfoData}

Example

Blade.getAccountInfo("0.0.10002") { accountInfoData, error ->
    println(accountInfoData ?: error)
}

getNodeList

Get Node list and use it for choosing account stacking node

getNodeList (completion: (NodesData?, BladeJSError?) -> Unit)

Parameters

Returns

NodesData - node list

Example

Blade.getNodeList { nodeListData, error ->
    println(nodeListData ?: error)
}

stakeToNode

Stake/unstake account

stakeToNode (accountId: String, accountPrivateKey: String, nodeId: Int, completion: (TransactionReceiptData?, BladeJSError?) -> Unit)

Parameters

Returns

TransactionReceiptData - receipt

Example

Blade.stakeToNode("0.0.10002", "302d300706052b8104000a032200029dc73991b0d9cd...", 5) { result, error ->
    println(result ?: error)
}

getKeysFromMnemonic

Get private key and accountId from mnemonic. Supported standard and legacy key derivation.

  • If account not found, standard ECDSA key will be returned.

  • Keys returned with DER header. EvmAddress computed from Public key.

getKeysFromMnemonic (mnemonic: String, lookupNames: Boolean = false, completion: (PrivateKeyData?, BladeJSError?) -> Unit)

Parameters

Returns

PrivateKeyData - private key derived from mnemonic and account id

Example

Blade.getKeysFromMnemonic("purity slab doctor swamp tackle rebuild summer bean craft toddler blouse switch") { result, error ->
    println(result ?: error)
}

searchAccounts

Get accounts list and keys from private key or mnemonic

  • Supporting standard and legacy key derivation.

  • Every key with account will be returned.

searchAccounts (keyOrMnemonic: String, completion: (AccountPrivateData?, BladeJSError?) -> Unit)

Parameters

Returns

AccountPrivateData - list of found accounts with private keys

Example

Blade.searchAccounts("purity slab doctor swamp tackle rebuild summer bean craft toddler blouse switch") { result, error ->
    println(result ?: error)
}

dropTokens

Bladelink drop to account

dropTokens (accountId: String, accountPrivateKey: String, secretNonce: String, completion: (TokenDropData?, BladeJSError?) -> Unit)

Parameters

Returns

TokenDropData - status

Example

val accountId = "0.0.10002"
val accountPrivateKey = "302d300706052b8104000a032200029dc73991b0d9cd..."
val secretNonce = "[ CENSORED ]"
Blade.dropTokens(
    accountId,
    accountPrivateKey,
    secretNonce,
) { result, error ->
    println(result ?: error)
}

sign

Sign base64-encoded message with private key. Returns hex-encoded signature.

sign (messageString: String, privateKey: String, completion: (SignMessageData?, BladeJSError?) -> Unit)

Parameters

Returns

SignMessageData - signature

Example

import java.util.Base64
// ...
val originalString = "hello"
val encodedString: String = Base64.getEncoder().encodeToString(originalString.toByteArray())
val accountPrivateKey = "302d300706052b8104000a032200029dc73991b0d9cd..."
Blade.sign(
    encodedString,
    accountPrivateKey
) { result, error ->
    println(result ?: error)
}

signVerify

Verify message signature with public key

signVerify (messageString: String, signature: String, publicKey: String, completion: (SignVerifyMessageData?, BladeJSError?) -> Unit)

Parameters

Returns

SignVerifyMessageData - verification result

Example

val originalString = "hello"
val encodedString: String = Base64.getEncoder().encodeToString(originalString.toByteArray())
val signature = "27cb9d51434cf1e76d7ac515b19442c619f641e6fccddbf4a3756b14466becb6992dc1d2a82268018147141fc8d66ff9ade43b7f78c176d070a66372d655f942"
val publicKey = "302d300706052b8104000a032200029dc73991b0d9cdbb59b2cd0a97a0eaff6de801726cb39804ea9461df6be2dd30"
Blade.signVerify(
    encodedString,
    signature,
    publicKey
) { result, error ->
    lifecycleScope.launch {
        println(result ?: error)
    }
}

contractCallFunction

Call contract function. Directly or via BladeAPI using paymaster account (fee will be paid by Paymaster account), depending on your dApp configuration.

contractCallFunction (contractId: String, functionName: String, params: ContractFunctionParameters, accountId: String, accountPrivateKey: String, gas: Int = 100000, usePaymaster: Boolean, completion: (TransactionReceiptData?, BladeJSError?) -> Unit)

Parameters

Returns

TransactionReceiptData - receipt

Example

val contractId = "0.0.123456"
val functionName = "set_message"
val parameters = ContractFunctionParameters().addString("hello")
val accountId = "0.0.10002"
val accountPrivateKey = "302d300706052b8104000a032200029dc73991b0d9cd..."
val gas = 155000
val usePaymaster = false
Blade.contractCallFunction(
    contractId,
    functionName,
    parameters,
    accountId,
    accountPrivateKey,
    gas,
    usePaymaster
) { result, error ->
    println(result ?: error)
}

contractCallQueryFunction

Call query on contract function. Similar to {@link contractCallFunction} can be called directly or via BladeAPI using Paymaster account.

contractCallQueryFunction (contractId: String, functionName: String, params: ContractFunctionParameters, accountId: String, accountPrivateKey: String, gas: Int = 100000, usePaymaster: Boolean, returnTypes: List<String>, completion: (ContractQueryData?, BladeJSError?) -> Unit)

Parameters

Returns

ContractQueryData - contract query call result

Example

val contractId = "0.0.123456"
val functionName = "get_message"
val parameters = ContractFunctionParameters()
val accountId = "0.0.10002"
val accountPrivateKey = "302d300706052b8104000a032200029dc73991b0d9cd..."
val gas = 55000
val usePaymaster = false
val returnTypes = listOf("string", "int32")
Blade.contractCallQueryFunction(
    contractId,
    functionName,
    parameters,
    accountId,
    accountPrivateKey,
    gas,
    usePaymaster,
    returnTypes
) { result, error ->
    lifecycleScope.launch {
        println(result ?: error)
    }
}

ethersSign

Sign base64-encoded message with private key using ethers lib. Returns hex-encoded signature.

ethersSign (messageString: String, privateKey: String, completion: (SignMessageData?, BladeJSError?) -> Unit)

Parameters

Returns

SignMessageData - signature

Example

import java.util.Base64
// ...
val originalString = "hello"
val encodedString: String = Base64.getEncoder().encodeToString(originalString.toByteArray())
val accountPrivateKey = "302d300706052b8104000a032200029dc73991b0d9cd..."
Blade.ethersSign(
    encodedString,
    accountPrivateKey
) { result, error ->
    println(result ?: error)
}

splitSignature

Split signature to v-r-s format.

splitSignature (signature: String, completion: (SplitSignatureData?, BladeJSError?) -> Unit)

Parameters

Returns

SplitSignatureData - v-r-s signature

Example

Blade.splitSignature(
    "0x27cb9d51434cf1e76d7ac515b19442c619f641e6fccddbf4a3756b14466becb6992dc1d2a82268018147141fc8d66ff9ade43b7f78c176d070a66372d655f942",
) { result, error ->
    println(result ?: error)
}

getParamsSignature

Get v-r-s signature of contract function params

getParamsSignature (params: ContractFunctionParameters, accountPrivateKey: String, completion: (SplitSignatureData?, BladeJSError?) -> Unit)

Parameters

Returns

SplitSignatureData - v-r-s signature

Example

val parameters = ContractFunctionParameters().addString("hello")
val accountPrivateKey = "302d300706052b8104000a032200029dc73991b0d9cd..."
Blade.getParamsSignature(
    parameters,
    accountPrivateKey
) { result, error ->
    println(result ?: error)
}

getTransactions

Get transactions history for account. Can be filtered by transaction type.

  • Transaction requested from mirror node. Every transaction requested for child transactions. Result are flattened.

  • If transaction type is not provided, all transactions will be returned.

  • If transaction type is CRYPTOTRANSFERTOKEN records will additionally contain plainData field with decoded data.

getTransactions (accountId: String, transactionType: String, nextPage: String = "", transactionsLimit: Int = 10, completion: (TransactionsHistoryData?, BladeJSError?) -> Unit)

Parameters

Returns

TransactionsHistoryData - transactions list

Example

Blade.getTransactions(
    accountId = "0.0.10002",
    transactionType = "",
    nextPage = "",
    transactionsLimit = 15
) { result, error ->
    println(result ?: error)
}

getC14url

Get configured url for C14 integration (iframe or popup)

getC14url (asset: String, account: String, amount: String = "", completion: (IntegrationUrlData?, BladeJSError?) -> Unit)

Parameters

Returns

IntegrationUrlData - url to open

Example

Blade.getC14url(
    asset = "HBAR",
    account = "0.0.10002",
    amount = "120"
) { result, error ->
    println(result ?: error)
}

exchangeGetQuotes

Get quotes from different services for buy, sell or swap

exchangeGetQuotes (sourceCode: String, sourceAmount: Double, targetCode: String, strategy: CryptoFlowServiceStrategy, completion: (SwapQuotesData?, BladeJSError?) -> Unit)

Parameters

Returns

SwapQuotesData - quotes from different provider

Example

Blade.exchangeGetQuotes(
    sourceCode = "EUR",
    sourceAmount = 50.0,
    targetCode = "HBAR",
    strategy = CryptoFlowServiceStrategy.BUY
) { result, error ->
    println(result ?: error)
}

getTradeUrl

Get configured url to buy or sell tokens or fiat

getTradeUrl (strategy: CryptoFlowServiceStrategy, accountId: String, sourceCode: String, sourceAmount: Double, targetCode: String, slippage: Double, serviceId: String, redirectUrl: String = "", completion: (IntegrationUrlData?, BladeJSError?) -> Unit)

Parameters

Returns

IntegrationUrlData - url to open

Example

Blade.getTradeUrl(
    strategy = CryptoFlowServiceStrategy.BUY,
    accountId = "0.0.10002",
    sourceCode = "EUR",
    sourceAmount = 50.0,
    targetCode = "HBAR",
    slippage = 0.5,
    serviceId = "moonpay"
) { result, error ->
    println(result ?: error)
}

swapTokens

Swap tokens

swapTokens (accountId: String, accountPrivateKey: String, sourceCode: String, sourceAmount: Double, targetCode: String, slippage: Double, serviceId: String, completion: (ResultData?, BladeJSError?) -> Unit)

Parameters

Returns

ResultData - swap result

Example

val accountId = "0.0.10001"
val accountPrivateKey = "302d300706052b8104000a032200029dc73991b0d9cd..."
val sourceCode = "USDC"
val targetCode = "KARATE"
Blade.swapTokens(
    accountId,
    accountPrivateKey,
    sourceCode,
    sourceAmount = 123.4,
    targetCode,
    slippage = 0.5,
    serviceId = "moonpay"
) { result, error ->
    println(result ?: error)
}

createToken

Create token (NFT or Fungible Token)

createToken ( treasuryAccountId: String, supplyPrivateKey: String, tokenName: String, tokenSymbol: String, isNft: Boolean, keys: List<KeyRecord>, decimals: Int, initialSupply: Int, maxSupply: Int, completion: (CreateTokenData?, BladeJSError?) -> Unit )

Parameters

Returns

CreateTokenData - token id

Example

val keys = listOf(
    KeyRecord(Config.adminPrivateKey, KeyType.admin)
)
Blade.createToken(
        treasuryAccountId = Config.accountId,
        supplyPrivateKey = Config.privateKey,
        tokenName = "Blade Demo Token",
        tokenSymbol = "GD",
        isNft = true,
        keys,
        decimals = 0,
        initialSupply = 0,
        maxSupply = 250
) { result, error ->
    println(result ?: error)
}

associateToken

Associate token to account. Association fee will be covered by PayMaster, if tokenId configured in dApp

associateToken ( tokenId: String, accountId: String, accountPrivateKey: String, completion: (TransactionReceiptData?, BladeJSError?) -> Unit )

Parameters

Returns

TransactionReceiptData - receipt

Example

Blade.associateToken(
    tokenId = "0.0.1337",
    accountId = "0.0.10001",
    accountPrivateKey = "302d300706052b8104000a032200029dc73991b0d9cd..."
) { result, error ->
    println(result ?: error)
}

nftMint

Mint one NFT

nftMint ( tokenId: String, supplyAccountId: String, supplyPrivateKey: String, file: String, metadata: Map<String, Any>, storageConfig: NFTStorageConfig, completion: (TransactionReceiptData?, BladeJSError?) -> Unit )

Parameters

Returns

TransactionReceiptData - receipt

Example

val tokenId = "0.0.13377"
val supplyAccountId = "0.0.10001"
val supplyPrivateKey = "302d300706052b8104000a032200029dc73991b0d9cd..."
val base64Image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAARUlEQVR42u3PMREAAAgEIO1fzU5vBlcPGtCVTD3QIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIXCyqyi6fIALs1AAAAAElFTkSuQmCC"
val metaData = mapOf<String, Any>(
    "name" to "NFTitle",
    "score" to 10,
    "power" to 4,
    "intelligence" to 6,
    "speed" to 10
)
val storageConfig = NFTStorageConfig(
    provider = NFTStorageProvider.nftStorage,
    apiKey = "eyJhbGcsfgrgsrgInR5cCI6IkpXVCJ9.eyJzd5235326ZXRocjoweDfsdfsdfFM0ZkZFOEJhNjdCNjc1NDk1Q2NEREFiYjk0NTE4Njdsfc3MiOiJuZnQtc3RvcmFnZSIsImlhdCI6sdfNDQ2NDUxODQ2MiwibmFt4I6IkJsYWRlUcvxcRLLXRlc3RrdffifQ.t1wCiEuiTvcYOwssdZgiYaug4aF8ZrvMBdkTASojWGU"
)
Blade.nftMint(
    tokenId,
    supplyAccountId,
    supplyPrivateKey,
    file = base64Image,
    metaData,
    storageConfig,
) { result, error ->
    println(result ?: error)
}

cleanup

Method to clean-up webView

cleanup ()

postMessage

Method to handle JS responses. By technical reasons, must be public, but you can skip it :)

postMessage (jsonString: String)

Parameters

Last updated